<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>233756</bug_id>
          
          <creation_ts>2021-12-02 02:29:31 -0800</creation_ts>
          <short_desc>WC variant RemoteGraphicsContextGL::platformLayer() should be removed</short_desc>
          <delta_ts>2021-12-20 16:34:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>231009</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>annulen</cc>
    
    <cc>dino</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1819633</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-12-02 02:29:31 -0800</bug_when>
    <thetext>WC variant RemoteGraphicsContextGL::platformLayer() should be removed

It causes problems because:
 - Increases ifdefs
 - RemoteGraphicsContextGL is not intended to have a &quot;layer&quot;


Currently the WC compositing logic appears to be:
In Web Process:
 a1. Figure out the id of the graphics context
 a2. Put this id in the platform layer, put the platform layer in webcore side layer tree and then to the compositor tree update
 a3. Send tree update to GPU process
In GPU Process:
 b1. Get the graphics context id from tree update
 b2. Find the graphics context by the id
 b3. Get the platform layer from the graphics context
 b4. Put the platform layer to the layer tree
 b5. Composite the layer tree

I think good approach would be to change:
a1. Return the platform layer id from the GraphicsContextGL::prepareForDisplay
a2. Put the platform layer id to webcore side layer tree, and ultimately to the compositor tree update

b2. Find the platform layer by the platform layer id


Alternative approach could be to:
a1. Make a GPU Process side mapping from RemoteGraphicsContextIdentifier to platform layer
b2. Find the platform layer by the RemoteGraphicsContextIdentifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819832</commentid>
    <comment_count>1</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-02 12:37:46 -0800</bug_when>
    <thetext>RemoteGraphicsContextGLProxy::platformLayer() returns an opaque PlatformLayer object.
It&apos;s set to canvas element&apos;s GraphicsLayer by using GraphicsLayer::setContentsToPlatformLayer.
This is the way binding RemoteGraphicsContextGLProxy and GraphicsLayer.

In Cocoa: https://github.com/WebKit/WebKit/blob/2115fd2a9d2e015ddebeef62ce148af0c6e80782/Source/WebKit/WebProcess/GPU/graphics/cocoa/RemoteGraphicsContextGLProxyCocoa.mm#L52
In GraphicsLayerWC: https://github.com/WebKit/WebKit/blob/2115fd2a9d2e015ddebeef62ce148af0c6e80782/Source/WebKit/WebProcess/GPU/graphics/wc/RemoteGraphicsContextGLProxyWC.cpp#L46

PlatformLayer isn&apos;t a good name for the opaque object.
platformLayer() should be renamed to layerContentsDisplayDelegate().
setContentsToPlatformLayer() should be renamed to setContentsToDisplayDelegate().
That&apos;s exactly you are doing in Bug 231009 Comment 30.

(In reply to Kimmo Kinnunen from comment #0)
&gt; a1. Return the platform layer id from the
&gt; GraphicsContextGL::prepareForDisplay

The return type of GraphicsContextGL::prepareForDisplay void.
How can I return the platform layer id?

&gt; a2. Put the platform layer id to webcore side layer tree, and ultimately to
&gt; the compositor tree update

How does it set to canvas element&apos;s GraphicsLayer?

&gt; Alternative approach could be to:
&gt; a1. Make a GPU Process side mapping from RemoteGraphicsContextIdentifier to
&gt; platform layer

How can I know which platform layer is bound to the RemoteGraphicsContextIdentifier?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820048</commentid>
    <comment_count>2</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-12-03 00:35:01 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #1)
&gt; RemoteGraphicsContextGLProxy::platformLayer() returns an opaque
&gt; PlatformLayer object.

No, here we are talking about the GPUP side code having problem, e.g.

WC variant RemoteGraphicsContextGL::platformLayer() should be removed

 
&gt; (In reply to Kimmo Kinnunen from comment #0)
&gt; &gt; a1. Return the platform layer id from the
&gt; &gt; GraphicsContextGL::prepareForDisplay
&gt; 
&gt; The return type of GraphicsContextGL::prepareForDisplay void.
&gt; How can I return the platform layer id?

WebCore calls GraphicsContextGL::prepareForDisplay.
In that, your RemoteGraphicsContextGLProxy::prepareForDisplay will call GPUP RemoteGraphicsContextGL::prepareForDisplay(). This should return the &apos;id&apos; for the new display buffer.
This id should be set to the &apos;current display buffer&apos; property of the RemoteGraphicsContextGLProxy.

Ideally, in your case, this should go to the &quot;platform layer&quot; that stores the id.

When GraphicsLayer::setContentsToPlatformLayer() / GraphicsLayer::setContentsDisplayDelegate() gets called, you associate the &quot;platform layer&quot; to the GraphicsLayer.

When your WebCore side compositor commits, you go and fetch the id from the platform layer and store it in the tree update.


&gt; 
&gt; &gt; a2. Put the platform layer id to webcore side layer tree, and ultimately to
&gt; &gt; the compositor tree update
&gt; 
&gt; How does it set to canvas element&apos;s GraphicsLayer?
&gt; 
&gt; &gt; Alternative approach could be to:
&gt; &gt; a1. Make a GPU Process side mapping from RemoteGraphicsContextIdentifier to
&gt; &gt; platform layer
&gt; 
&gt; How can I know which platform layer is bound to the
&gt; RemoteGraphicsContextIdentifier?

You can use a hash map. E.g. when the platform layer is created, you add its id to a global hash map (in thread-safe manner).

The reason this is a bad idea is that your compositor frames should contain references to the pictures rendered by the context (e.g. the id of the display buffer), not references to the rendering context. Currently your compositor is not capable of doing that, but anyway you should emulate the correct approach by storing the ids of GPUP side platform layers, not rendering context id.


After UI-side compositing commit is landed, it is easier to do:

Result of RemoteGraphicsContextGL::prepareForDisplay() is:
Mac:  IOSurface mach port (id)
WC: RGPUP PlatformLayer id (it&apos;s in HashMap&lt;id,PlatformLayer&gt; in gpup) 

When WebCore-side layer tree does display for GraphicsLayer representing the canvas:
Mac: DisplayDelegate puts the Mach port to PlatformCALayer contents property
WC: DisplayDelegate puts the id to &lt;somewhere&gt;

When Webcore-side layer tree commits:
Mac: the IOSurface mach port is put to the tree update.
WC: the id is put to the tree update (WCLayerUpateInfo, [sic]) WCLayerUpateInfo::contentsLayerId instead of WCLayerUpateInfo::graphicsContextGLIdentifier)

When the GPUP-side layer tree is applied in RemoteWCLayerTreeHost::update:
WCLayerUpateInfo::contentsLayerId will tell which platform layer to use.

To store the platform layers to a map and share the platform layers between processes, you need some sort of refcount scheme. E.g. when you share a layer from GPUP to WP, you need to increment the refcount (e.g. WP owns one ref). 
At WP side, every thing that uses the id will need to hold a ref, and then when WP drops the last ref, you need to let the GPUP know this.

Maybe there&apos;s some alternatives, but I think this should be consistent at least..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820294</commentid>
    <comment_count>3</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-03 13:29:28 -0800</bug_when>
    <thetext>Oh, I misunderstood. Thank you very much for the explanation. Will try it the next week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820536</commentid>
    <comment_count>4</comment_count>
      <attachid>446003</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-05 23:24:39 -0800</bug_when>
    <thetext>Created attachment 446003
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821404</commentid>
    <comment_count>5</comment_count>
      <attachid>446303</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-07 22:36:57 -0800</bug_when>
    <thetext>Created attachment 446303
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821430</commentid>
    <comment_count>6</comment_count>
      <attachid>446315</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-07 23:36:16 -0800</bug_when>
    <thetext>Created attachment 446315
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821458</commentid>
    <comment_count>7</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-12-08 00:33:38 -0800</bug_when>
    <thetext>Looks like a good start. I know it&apos;s a WIP, just some ideas.

I think you still need some sort of ref-counted object that represents the display buffer contents.
Because the compositor thread and the RemoteGraphicsContextGL thread are different, the graphics context might be destroyed already when the compositor will still show the contents of the last displayed buffer.

&gt; Source/WebKit/GPUProcess/graphics/wc/RemoteWCLayerTreeHost.cpp:87
&gt; +    remoteGraphicsContextGLStreamWorkQueue().dispatch([this, weakThis = WeakPtr(*this), scene = m_scene.get(), update = WTFMove(update)]() mutable {

Submitting non-webgl related tasks to remoteGraphicsContextGLStreamWorkQueue is a bit of a problem since they do not  really belong there.
It is also a problem since the work queue might contain massive amount of drawing calls, so your compositor would jank without need.  
It&apos;s better to have the WCDisplayBufferManager use a lock internally.

&gt; Source/WebKit/GPUProcess/graphics/wc/WCDisplayBufferManager.h:50
&gt; +    HashMap&lt;WebCore::ProcessIdentifier, HashSet&lt;RefPtr&lt;WebCore::GraphicsLayerContentsDisplayDelegate&gt;&gt;&gt; m_displayBufferMap;

It&apos;s not a good idea to hold the GraphicsLayerContentsDisplayDelegate, as that is not intended to be used this way.
It, again, will make changing GraphicsLayerContentsDisplayDelegate harder if it&apos;s used in a way that&apos;s not what it&apos;s used for.

Instead, you could use the layer type, as you already then navigate to the platform type via GraphicsLayerContentsDisplayDelegate::platformLayer().

This class also could be threadsafe using a lock, so you would not need to submit non-webgl tasks to remotegraphicscontextgl work queue.

&gt; Source/WebKit/GPUProcess/graphics/wc/WCScene.cpp:73
&gt; +void WCScene::update(WCUpateInfo&amp;&amp; update, Vector&lt;RefPtr&lt;WebCore::GraphicsLayerContentsDisplayDelegate&gt;&gt;&amp;&amp; displayDelegates)

Maybe it&apos;s not super-useful to pass the display delegates, nor that they would be passed here. 
Instead, below..

&gt; Source/WebKit/GPUProcess/graphics/wc/WCScene.cpp:169
&gt; +                auto platformLayer = (*displayDelegatesIterator)-&gt;platformLayer();

..this could be instead

PlatformLayer* platformLayer = nullptr;
if (layerUpdate.displayBufferIdentifier)
  platformLayer = WCDisplayBufferManager::singleton().getPlatformLayer(layerUpdate.displayBufferIdentifier);

&gt; Source/WebKit/Shared/wc/WCDisplayBufferIdentifier.h:42
&gt; +class WCDisplayBufferIdentifier {

The identifier most likely should be a similar construct as other cross-process identifiers, e.g. take a look how GraphicsContextGLIdentifier is done:

using GraphicsContextGLIdentifier = ObjectIdentifier&lt;GraphicsContextGLIdentifierType&gt;;

It&apos;s not a good idea to store a ptr value, as that has the potential to be used in insecure manner.

&gt; Source/WebKit/WebProcess/GPU/graphics/wc/WCPlatformLayerGCGL.h:40
&gt;      GraphicsContextGLIdentifier&amp; graphicsContextGLIdentifier() { return m_graphicsContextGLIdentifier; }

I think in general there should not be a reason to store the context identifier?

&gt; Source/WebKit/WebProcess/GPU/graphics/wc/WCPlatformLayerGCGL.h:42
&gt; +    WCDisplayBufferIdentifier takeDisplayBufferIdentifier()

The assertions could be the other way around.
E.g. it&apos;s error to take out the identifier if there is nothing to be taken.

&gt; Source/WebKit/WebProcess/GPU/graphics/wc/WCPlatformLayerGCGL.h:48
&gt; +    {

In general it should be ok to overwrite a display buffer, probably also with WC compositor.

This would mean that graphics context has submitted a display buffer for the compositor, but the compositor did not have time to composite. So when the frame is overwritten, it means that we skip a frame.

&gt; Source/WebKit/WebProcess/WebPage/wc/WCUpateInfo.h:78
&gt; +    bool platformLayer;

probably this could be called hasContentsLayer?
(platformLayer would indicate a property that stores the  platform layer)
It&apos;s unclear if you ever have a valid case where &quot;hasContentsLayer == true&quot; but then &quot;contentsLayerIdentifier&quot; is empty.. So it might be that this bool is not needed.

&gt; Source/WebKit/WebProcess/WebPage/wc/WCUpateInfo.h:93
&gt; +    WCDisplayBufferIdentifier displayBufferIdentifier;

This could be called &quot;contentsLayerIdentifier&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821755</commentid>
    <comment_count>8</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-08 13:22:08 -0800</bug_when>
    <thetext>Thank you very much for the review.

(In reply to Kimmo Kinnunen from comment #7)
&gt; Looks like a good start. I know it&apos;s a WIP, just some ideas.
&gt; 
&gt; I think you still need some sort of ref-counted object that represents the
&gt; display buffer contents.
&gt; Because the compositor thread and the RemoteGraphicsContextGL thread are
&gt; different, the graphics context might be destroyed already when the
&gt; compositor will still show the contents of the last displayed buffer.
&gt;
&gt; &gt; Source/WebKit/GPUProcess/graphics/wc/RemoteWCLayerTreeHost.cpp:87
&gt; &gt; +    remoteGraphicsContextGLStreamWorkQueue().dispatch([this, weakThis = WeakPtr(*this), scene = m_scene.get(), update = WTFMove(update)]() mutable {
&gt; 
&gt; Submitting non-webgl related tasks to remoteGraphicsContextGLStreamWorkQueue
&gt; is a bit of a problem since they do not  really belong there.
&gt; It is also a problem since the work queue might contain massive amount of
&gt; drawing calls, so your compositor would jank without need.  
&gt; It&apos;s better to have the WCDisplayBufferManager use a lock internally.

WinCairo is using ANGLE for the compositor and WebGL.
Because ANGLE D3D backend isn&apos;t thread-safe, the compositor should be run in the WebGL thread of GPU process.

However, this patch is crashing due to a lifetime issue.
That&apos;s because PlatformLayerDisplayDelegate doesn&apos;t hold the lifetime of m_platformLayer.

&gt; &gt; Source/WebKit/GPUProcess/graphics/wc/WCDisplayBufferManager.h:50
&gt; &gt; +    HashMap&lt;WebCore::ProcessIdentifier, HashSet&lt;RefPtr&lt;WebCore::GraphicsLayerContentsDisplayDelegate&gt;&gt;&gt; m_displayBufferMap;
&gt; 
&gt; It&apos;s not a good idea to hold the GraphicsLayerContentsDisplayDelegate, as
&gt; that is not intended to be used this way.
&gt; It, again, will make changing GraphicsLayerContentsDisplayDelegate harder if
&gt; it&apos;s used in a way that&apos;s not what it&apos;s used for.
&gt; 
&gt; Instead, you could use the layer type, as you already then navigate to the
&gt; platform type via GraphicsLayerContentsDisplayDelegate::platformLayer().

Because WinCairo&apos;s PlatformLayer isn&apos;t ref-counted, I use GraphicsLayerContentsDisplayDelegate.
I will try to make WinCairo&apos;s PlatformLayer ref-counted.

&gt; This class also could be threadsafe using a lock, so you would not need to
&gt; submit non-webgl tasks to remotegraphicscontextgl work queue.

ANGLE D3D backend isn&apos;t thread-safe.

&gt; &gt; Source/WebKit/GPUProcess/graphics/wc/WCScene.cpp:73
&gt; &gt; +void WCScene::update(WCUpateInfo&amp;&amp; update, Vector&lt;RefPtr&lt;WebCore::GraphicsLayerContentsDisplayDelegate&gt;&gt;&amp;&amp; displayDelegates)
&gt; 
&gt; Maybe it&apos;s not super-useful to pass the display delegates, nor that they
&gt; would be passed here. 
&gt; Instead, below..

You are right. Will fix.
The reason I did so is I had a plan to reuse WCScene when I will create a threaded-compositor mode of WC.

&gt; &gt; Source/WebKit/GPUProcess/graphics/wc/WCScene.cpp:169
&gt; &gt; +                auto platformLayer = (*displayDelegatesIterator)-&gt;platformLayer();
&gt; 
&gt; ..this could be instead
&gt; 
&gt; PlatformLayer* platformLayer = nullptr;
&gt; if (layerUpdate.displayBufferIdentifier)
&gt;   platformLayer =
&gt; WCDisplayBufferManager::singleton().getPlatformLayer(layerUpdate.
&gt; displayBufferIdentifier);

I think &quot;get&quot; isn&apos;t allowed for the method. https://webkit.org/code-style-guidelines/#names-if-exists

getPlatformLayer should take m_webProcessIdentifier as an argument for a security reason.

The current WinCairo&apos;s WebGL implementation is using a single output texture for WebGL.
A WebGL PlatformLayer has a texture.
This is the reason why WinCairo isn&apos;t using &quot;buffer ID&quot; for WebGL as of now.
But, I have a plan to do double-buffering for async-compositing (Bug 228308 comment 24).
I will need &quot;buffer ID&quot;.
That&apos;s the reason I don&apos;t name this method like &quot;getPlatformLayer&quot;.

&gt; &gt; Source/WebKit/Shared/wc/WCDisplayBufferIdentifier.h:42
&gt; &gt; +class WCDisplayBufferIdentifier {
&gt; 
&gt; The identifier most likely should be a similar construct as other
&gt; cross-process identifiers, e.g. take a look how GraphicsContextGLIdentifier
&gt; is done:
&gt; 
&gt; using GraphicsContextGLIdentifier =
&gt; ObjectIdentifier&lt;GraphicsContextGLIdentifierType&gt;;
&gt; 
&gt; It&apos;s not a good idea to store a ptr value, as that has the potential to be
&gt; used in insecure manner.

Using pointer is the most efficient way to generate valid identifier because all objects already has own address.
ObjectIdentifier assumes it never overflow, it doesn&apos;t check unused identifier.
This is less problematic for web process becuase it is re-spawned frequently for Process Swap On Navigation.
However, I think it&apos;s problematic for GPU process.
For the security concern, I use HashSet for validate the identifier.

&gt; &gt; Source/WebKit/WebProcess/GPU/graphics/wc/WCPlatformLayerGCGL.h:40
&gt; &gt;      GraphicsContextGLIdentifier&amp; graphicsContextGLIdentifier() { return m_graphicsContextGLIdentifier; }
&gt; 
&gt; I think in general there should not be a reason to store the context
&gt; identifier?

Will fix.

&gt; &gt; Source/WebKit/WebProcess/GPU/graphics/wc/WCPlatformLayerGCGL.h:42
&gt; &gt; +    WCDisplayBufferIdentifier takeDisplayBufferIdentifier()
&gt; 
&gt; The assertions could be the other way around.
&gt; E.g. it&apos;s error to take out the identifier if there is nothing to be taken.

The current WinCairo&apos;s WebGL implementation is using a single output texture for WebGL.
That&apos;s the reason takeDisplayBufferIdentifier() returns a single WCDisplayBufferIdentifier .
If WinCairo will use more buffer for WebGL, the return type should be Vector&lt;WCDisplayBufferIdentifier&gt;.

And, I think it&apos;s a valid case that takeDisplayBufferIdentifier returns no WCDisplayBufferIdentifier if no buffer is available yet.

&gt; &gt; Source/WebKit/WebProcess/GPU/graphics/wc/WCPlatformLayerGCGL.h:48
&gt; &gt; +    {
&gt; 
&gt; In general it should be ok to overwrite a display buffer, probably also with
&gt; WC compositor.
&gt; 
&gt; This would mean that graphics context has submitted a display buffer for the
&gt; compositor, but the compositor did not have time to composite. So when the
&gt; frame is overwritten, it means that we skip a frame.

All WCDisplayBufferIdentifier should be passed back to GPU process to release.
Otherwise, WCDisplayBufferIdentifier will leak.

&gt; &gt; Source/WebKit/WebProcess/WebPage/wc/WCUpateInfo.h:78
&gt; &gt; +    bool platformLayer;
&gt; 
&gt; probably this could be called hasContentsLayer?
&gt; (platformLayer would indicate a property that stores the  platform layer)
&gt; It&apos;s unclear if you ever have a valid case where &quot;hasContentsLayer == true&quot;
&gt; but then &quot;contentsLayerIdentifier&quot; is empty.. So it might be that this bool
&gt; is not needed.
&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebPage/wc/WCUpateInfo.h:93
&gt; &gt; +    WCDisplayBufferIdentifier displayBufferIdentifier;
&gt; 
&gt; This could be called &quot;contentsLayerIdentifier&quot;.

I don&apos;t want to call it &quot;layer&quot; because I have a plan to use more buffers for WebGL.
If it&apos;s just a &quot;layer identifier&quot;, I don&apos;t need this complex architecture change.
I want to call it &quot;buffer&quot; or &quot;surface&quot;.
How about &quot;contentBufferIdentifier&quot;?
I will change the type WCDisplayBufferIdentifier to Vector&lt;WCDisplayBufferIdentifier&gt; to release all buffers in the future.
Then, it will be renamed to &quot;contentBufferIdentifiers&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821977</commentid>
    <comment_count>9</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-08 20:35:02 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebKit/WebProcess/WebPage/wc/WCUpateInfo.h:78
&gt; &gt; +    bool platformLayer;
&gt; 
&gt; probably this could be called hasContentsLayer?
&gt; (platformLayer would indicate a property that stores the  platform layer)

Will fix.

&gt; It&apos;s unclear if you ever have a valid case where &quot;hasContentsLayer == true&quot;
&gt; but then &quot;contentsLayerIdentifier&quot; is empty.. So it might be that this bool
&gt; is not needed.

In this patch, the maxnum number of buffer identifier is one for a single WebGL context.
If prepareForDisplay is called twice, the second buffer identifier will be empty.
That&apos;s the case &quot;hasContentsLayer == true&quot; and &quot;contentsLayerIdentifier&quot; is empty.
In this case, WebGL platfrom layer should keep displaying the previous buffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822040</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-09 02:30:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/86261919&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824111</commentid>
    <comment_count>11</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-14 13:58:49 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #9)
&gt; &gt; &gt; Source/WebKit/WebProcess/WebPage/wc/WCUpateInfo.h:78
&gt; &gt; &gt; +    bool platformLayer;
&gt; &gt; 
&gt; &gt; probably this could be called hasContentsLayer?
&gt; &gt; (platformLayer would indicate a property that stores the  platform layer)
&gt; 
&gt; Will fix.

No. We shouldn&apos;t call it &quot;contents layer&quot;.
GraphicsLayer has usesContentsLayer() method which should return true if setContentsTo* or setContentsDisplayDelegate is used.
So, for example, if setContentsToImage is used, the GraphicsLayer has a &quot;contents layer&quot;.
However, this bool parameter is used only for &quot;platform layer&quot; that is set by setContentsToPlatformLayer.
&quot;hasPlatformLayer&quot; seemd a good name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824264</commentid>
    <comment_count>12</comment_count>
      <attachid>447206</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-14 23:38:17 -0800</bug_when>
    <thetext>Created attachment 447206
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824688</commentid>
    <comment_count>13</comment_count>
      <attachid>447326</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-15 22:06:52 -0800</bug_when>
    <thetext>Created attachment 447326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824691</commentid>
    <comment_count>14</comment_count>
      <attachid>447329</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-15 22:47:17 -0800</bug_when>
    <thetext>Created attachment 447329
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825551</commentid>
    <comment_count>15</comment_count>
      <attachid>447329</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-12-20 00:45:37 -0800</bug_when>
    <thetext>Comment on attachment 447329
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=447329&amp;action=review

Great, I think this paves the way for having the correct drawing buffer, display buffer management for WC port!

&gt; Source/WebKit/GPUProcess/graphics/wc/WCContentBuffer.h:74
&gt; +    void platformLayerWillBeDestroyed() override

FWIW: So this signifies an discrepancy or a slight error:
It does not make sense that the &quot;image&quot; referenced by the wccontentbuffer can be &quot;destroyed&quot;. WCContentBuffer *is* the image.
In future work, if you spend time on this, you can change it so that instead of storing the platform layer into the wccontentbuffer, you store ANGLE texture id.
This way your compositor works correctly in the case about the display buffer and drawing buffer.

&gt; Source/WebKit/Shared/wc/WCContentBufferIdentifier.h:38
&gt; +class WCContentBufferIdentifier {

I still think this is a bit bad to have structure like:
- Everything in WebKit uses ObjectIdentifier
- Except WCContentBufferIdentifier
There&apos;s very much a mental overhead of looking at the code and undestanding &quot;this should be an identifier, why is it not a normal identifier&quot;.
Also, you implement custom code for the &quot;process qualified identifier&quot; that we also have.

Also, the security idea is that it is good to avoid exposing addresses of controllable allocations.


So if there&apos;s a real concern about overflowing 64-bit integers: 
If my calculations are correct, you can animate 60fps webgl for 584942417355 years until an overflow.
That is 584942 years showing million canvas elements simultaneously 60fps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825736</commentid>
    <comment_count>16</comment_count>
      <attachid>447329</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-20 14:08:57 -0800</bug_when>
    <thetext>Comment on attachment 447329
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=447329&amp;action=review

Thank you very much for the review.

&gt;&gt; Source/WebKit/GPUProcess/graphics/wc/WCContentBuffer.h:74
&gt;&gt; +    void platformLayerWillBeDestroyed() override
&gt; 
&gt; FWIW: So this signifies an discrepancy or a slight error:
&gt; It does not make sense that the &quot;image&quot; referenced by the wccontentbuffer can be &quot;destroyed&quot;. WCContentBuffer *is* the image.
&gt; In future work, if you spend time on this, you can change it so that instead of storing the platform layer into the wccontentbuffer, you store ANGLE texture id.
&gt; This way your compositor works correctly in the case about the display buffer and drawing buffer.

Yes. That&apos;s what I&apos;m planning to do in the future.

&gt;&gt; Source/WebKit/Shared/wc/WCContentBufferIdentifier.h:38
&gt;&gt; +class WCContentBufferIdentifier {
&gt; 
&gt; I still think this is a bit bad to have structure like:
&gt; - Everything in WebKit uses ObjectIdentifier
&gt; - Except WCContentBufferIdentifier
&gt; There&apos;s very much a mental overhead of looking at the code and undestanding &quot;this should be an identifier, why is it not a normal identifier&quot;.
&gt; Also, you implement custom code for the &quot;process qualified identifier&quot; that we also have.
&gt; 
&gt; Also, the security idea is that it is good to avoid exposing addresses of controllable allocations.
&gt; 
&gt; 
&gt; So if there&apos;s a real concern about overflowing 64-bit integers: 
&gt; If my calculations are correct, you can animate 60fps webgl for 584942417355 years until an overflow.
&gt; That is 584942 years showing million canvas elements simultaneously 60fps.

OK. Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825801</commentid>
    <comment_count>17</comment_count>
      <attachid>447660</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-20 16:18:33 -0800</bug_when>
    <thetext>Created attachment 447660
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825809</commentid>
    <comment_count>18</comment_count>
      <attachid>447660</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-20 16:34:14 -0800</bug_when>
    <thetext>Comment on attachment 447660
Patch for landing

Clearing flags on attachment: 447660

Committed r287288 (245440@trunk): &lt;https://commits.webkit.org/245440@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825810</commentid>
    <comment_count>19</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-20 16:34:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446003</attachid>
            <date>2021-12-05 23:24:39 -0800</date>
            <delta_ts>2021-12-07 22:37:14 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>26048</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcAppbmRleCA1ZDY0ZGVjZjQxY2MuLjBjMWE5NjMyNmEyZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cApAQCAtMzU1LDEyICszNTUsNiBAQCB2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJl
bGVhc2VXQ0xheWVyVHJlZUhvc3QoV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZAogewogICAgIG1f
cmVtb3RlV0NMYXllclRyZWVIb3N0TWFwLnJlbW92ZShpZGVudGlmaWVyKTsKIH0KLQotUmVmUHRy
PFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpmaW5k
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0woR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIGlkZW50
aWZpZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICByZXR1cm4gbV9y
ZW1vdGVHcmFwaGljc0NvbnRleHRHTE1hcC5nZXQoaWRlbnRpZmllcik7Ci19CiAjZW5kaWYKIAog
Ym9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjphbGxvd3NFeGl0VW5kZXJNZW1vcnlQcmVz
c3VyZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBmYWI2NzBmYjkwOWMuLmRiZTFmNGVlYTc0OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5oCkBAIC0xNzEsMTAgKzE3MSw2IEBAIHB1YmxpYzoKICAgICBSZW1vdGVJbWFnZURlY29k
ZXJBVkZQcm94eSYgaW1hZ2VEZWNvZGVyQVZGUHJveHkoKTsKICNlbmRpZgogCi0jaWYgVVNFKEdS
QVBISUNTX0xBWUVSX1dDKQotICAgIFJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4gZmlu
ZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7Ci0j
ZW5kaWYKLQogICAgIHZvaWQgdXBkYXRlU3VwcG9ydGVkUmVtb3RlQ29tbWFuZHMoKTsKIAogICAg
IGJvb2wgYWxsb3dzRXhpdFVuZGVyTWVtb3J5UHJlc3N1cmUoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMLmgKaW5kZXggMTU5ZTUwNTY3NzA0Li5kZGU5YTQ2ZWZkMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTC5oCkBAIC01OCw2ICs1OCwxMSBAQCBjbGFzcyBNYWNoU2VuZFJpZ2h0OwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKK2NsYXNzIFdDRGlz
cGxheUJ1ZmZlcklkZW50aWZpZXI7CitjbGFzcyBXQ0Rpc3BsYXlCdWZmZXJNYW5hZ2VyOworI2Vu
ZGlmCisKIC8vIEdQVSBwcm9jZXNzIHNpZGUgaW1wbGVtZW50YXRpb24gb2YgdGhhdCByZWNlaXZl
cyBtZXNzYWdlcyBhYm91dCBHcmFwaGljc0NvbnRleHRHTCBjYWxscwogLy8gYW5kIGlzc3VlcyBy
ZWFsIEdyYXBoaWNzQ29udGV4dEdMIGNhbGxzIGJhc2VkIG9uIHRoZSByZWNlaXZlZCBtZXNzYWdl
cy4KIC8vIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBsYXJnZWx5IGdlbmVyYXRlZCBieSBydW5uaW5n
IFRvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtZ3B1cC13ZWJnbC4KQEAgLTczLDExICs3OCw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKICNlbmRpZgogCi0jaWYg
VVNFKEdSQVBISUNTX0xBWUVSX1dDKQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGxheWVyaW5nIHZp
b2xhdGlvbiBhbmQgc2hvdWxkIGJlIHJlbW92ZWQuCi0gICAgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0OwotI2VuZGlmCi0KIHByb3RlY3RlZDoKICAgICBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgR3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiwgSVBDOjpTdHJlYW1Db25uZWN0aW9u
QnVmZmVyJiYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMmJik7CkBAIC0xMDAsOCArMTAwLDEwIEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IG5vdGlmeU1hcmtDb250ZXh0Q2hhbmdlZCgpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZp
cnR1YWwgdm9pZCBwcmVwYXJlRm9yRGlzcGxheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdURjo6
TWFjaFNlbmRSaWdodCYmKT4mJikgPSAwOworI2VsaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQor
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGlzcGxheShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIpPiYmKSA9IDA7CiAjZWxzZQotICAgIHZvaWQgcHJl
cGFyZUZvckRpc3BsYXkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSA9IDA7
CiAjZW5kaWYKICAgICB2b2lkIGdldEVycm9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMy
X3QpPiYmKTsKICAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKHVpbnQzMl90IGVycm9yKTsKQEAg
LTEzNiw2ICsxMzgsMTAgQEAgcHJvdGVjdGVkOgogCiBJUEM6OlN0cmVhbUNvbm5lY3Rpb25Xb3Jr
UXVldWUmIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCk7CiAKKyNpZiBV
U0UoR1JBUEhJQ1NfTEFZRVJfV0MpCitXQ0Rpc3BsYXlCdWZmZXJNYW5hZ2VyJiB3Y0Rpc3BsYXlC
dWZmZXJNYW5hZ2VyKCk7CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCmluZGV4IDE2YjNlOWU4
MjZlYS4uMDYyYjZlMTg4NjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3Nh
Z2VzLmluCkBAIC0yOSw3ICsyOSwxMCBAQCBtZXNzYWdlcyAtPiBSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTCBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCBQcmVwYXJlRm9yRGlzcGxheSgpIC0+IChNYWNoU2VuZFJpZ2h0IGRpc3BsYXlCdWZmZXIpIFN5
bmNocm9ub3VzIE5vdFN0cmVhbUVuY29kYWJsZVJlcGx5CiAjZW5kaWYKLSNpZiAhUExBVEZPUk0o
Q09DT0EpCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIHZvaWQgUHJlcGFyZUZvckRp
c3BsYXkoKSAtPiAoV2ViS2l0OjpXQ0Rpc3BsYXlCdWZmZXJJZGVudGlmaWVyIGRpc3BsYXlCdWZm
ZXIpIFN5bmNocm9ub3VzCisjZW5kaWYKKyNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoR1JB
UEhJQ1NfTEFZRVJfV0MpCiAgICAgdm9pZCBQcmVwYXJlRm9yRGlzcGxheSgpIC0+ICgpIFN5bmNo
cm9ub3VzCiAjZW5kaWYKICAgICB2b2lkIEVuc3VyZUV4dGVuc2lvbkVuYWJsZWQoU3RyaW5nIGV4
dGVuc2lvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwCmluZGV4IDlkZjgzZjQ2MDdj
Yy4uMzJkNDUxNWQ3NzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHAKQEAgLTI5
LDYgKzI5LDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykgJiYgRU5BQkxFKFdFQkdMKSAm
JiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgor
I2luY2x1ZGUgIldDRGlzcGxheUJ1ZmZlck1hbmFnZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAg
LTQwLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgLy8gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wg
b3ZlcnJpZGVzLgogICAgIHZvaWQgcGxhdGZvcm1Xb3JrUXVldWVJbml0aWFsaXplKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKSBmaW5hbDsKKyAgICB2b2lkIHByZXBhcmVG
b3JEaXNwbGF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV0NEaXNwbGF5QnVmZmVySWRlbnRpZmll
cik+JiYpIGZpbmFsOwogfTsKIAogUmVmPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMPiBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyYmIGF0dHJpYnV0ZXMsIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciBncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIHJlbmRlcmluZ0JhY2tlbmQs
IElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmIHN0cmVhbSkKQEAgLTU5LDE2ICs2MSwxOCBA
QCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luOjpwbGF0Zm9ybVdvcmtRdWV1ZUluaXRp
YWxpemUoV2ViQ29yZTo6R3JhcGhpY3NDbwogICAgIG1fY29udGV4dCA9IFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFdURk1vdmUoYXR0cmlidXRlcykpOwog
fQogCi12b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwcmVwYXJlRm9yRGlzcGxheShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMV2luOjpwcmVwYXJlRm9yRGlzcGxheShDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIG1fY29udGV4dC0+cHJlcGFyZUZvckRpc3BsYXkoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxl
cigpOworICAgIGF1dG8gaWRlbnRpZmllciA9IHdjRGlzcGxheUJ1ZmZlck1hbmFnZXIoKS5hZGRE
aXNwbGF5QnVmZmVyKG1fd2ViUHJvY2Vzc0lkZW50aWZpZXIsIG1fY29udGV4dC0+bGF5ZXJDb250
ZW50c0Rpc3BsYXlEZWxlZ2F0ZSgpKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihpZGVudGlmaWVy
KTsKIH0KIAogI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKLVBsYXRmb3JtTGF5ZXIqIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1dDRGlzcGxheUJ1ZmZl
ck1hbmFnZXImIHdjRGlzcGxheUJ1ZmZlck1hbmFnZXIoKQogewotICAgIHJldHVybiBtX2NvbnRl
eHQtPmxheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUoKS0+cGxhdGZvcm1MYXllcigpOworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXQ0Rpc3BsYXlCdWZmZXJNYW5hZ2VyPiBkaXNwbGF5QnVm
ZmVyTWFuYWdlcjsKKyAgICByZXR1cm4gZGlzcGxheUJ1ZmZlck1hbmFnZXI7CiB9CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90
ZVdDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
d2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBmZDNkMjlmYzRlMDAuLjFiMjk2YjQ3
NDljNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1Jl
bW90ZVdDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlJlbW90
ZVdDTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdHJlYW1Db25uZWN0
aW9uV29ya1F1ZXVlLmgiCisjaW5jbHVkZSAiV0NEaXNwbGF5QnVmZmVyTWFuYWdlci5oIgogI2lu
Y2x1ZGUgIldDU2NlbmUuaCIKICNpbmNsdWRlICJXQ1VwYXRlSW5mby5oIgogCkBAIC00Niw2ICs0
Nyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVXQ0xheWVyVHJlZUhvc3Q+IFJlbW90ZVdDTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlKEdQVUNvbm5lY3RpCiAKIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6
UmVtb3RlV0NMYXllclRyZWVIb3N0KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MsIFdlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBpZGVudGlm
aWVyLCB1aW50NjRfdCBuYXRpdmVXaW5kb3cpCiAgICAgOiBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MoY29ubmVjdGlvblRvV2ViUHJvY2VzcykKKyAgICAsIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXIo
Y29ubmVjdGlvblRvV2ViUHJvY2Vzcy53ZWJQcm9jZXNzSWRlbnRpZmllcigpKQogICAgICwgbV9p
ZGVudGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX3NoYXJlZFNjZW5lQ29udGV4dEhvbGRlcihj
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmdwdVByb2Nlc3MoKS5zaGFyZWRTY2VuZUNvbnRleHQoKS5l
bnN1cmVIb2xkZXJGb3JXaW5kb3cobmF0aXZlV2luZG93KSkKIHsKQEAgLTgyLDE2ICs4NCwxNSBA
QCB1aW50NjRfdCBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkgY29uc3QKIAogdm9pZCBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZShXQ1VwYXRl
SW5mbyYmIHVwZGF0ZSkKIHsKLSAgICAvLyBmaW5kUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wgc2hv
dWxkIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQKLSAgICBhdXRvIHJlbW90ZUdDR0wgPSBX
VEY6Om1hcCh1cGRhdGUuY2hhbmdlZExheWVycywgW3RoaXNdKGF1dG8mIGxheWVyVXBkYXRlKSAt
PiBSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+IHsKLSAgICAgICAgaWYgKGxheWVyVXBk
YXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9ybUxheWVyKSB7Ci0gICAgICAgICAg
ICBpZiAobGF5ZXJVcGRhdGUuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKQotICAgICAgICAg
ICAgICAgIHJldHVybiBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmZpbmRSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTChtYWtlT2JqZWN0SWRlbnRpZmllcjxHcmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXJUeXBlPihsYXllclVwZGF0ZS5ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9KTsKKyAgICByZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdl
YWtQdHIoKnRoaXMpLCBzY2VuZSA9IG1fc2NlbmUuZ2V0KCksIHVwZGF0ZSA9IFdURk1vdmUodXBk
YXRlKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byByZW1vdGVHQ0dMID0gV1RGOjptYXAodXBk
YXRlLmNoYW5nZWRMYXllcnMsIFt0aGlzXShhdXRvJiBsYXllclVwZGF0ZSkgLT4gUmVmUHRyPFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4geworICAgICAgICAg
ICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9ybUxheWVy
KSB7CisgICAgICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmRpc3BsYXlCdWZmZXJJZGVudGlm
aWVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2NEaXNwbGF5QnVmZmVyTWFuYWdlcigp
LnJlbW92ZURpc3BsYXlCdWZmZXIobV93ZWJQcm9jZXNzSWRlbnRpZmllciwgbGF5ZXJVcGRhdGUu
ZGlzcGxheUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0pOwogCi0gICAgcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xT
dHJlYW1Xb3JrUXVldWUoKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyKCp0aGlz
KSwgc2NlbmUgPSBtX3NjZW5lLmdldCgpLCB1cGRhdGUgPSBXVEZNb3ZlKHVwZGF0ZSksIHJlbW90
ZUdDR0wgPSBXVEZNb3ZlKHJlbW90ZUdDR0wpXSgpIG11dGFibGUgewogICAgICAgICBzY2VuZS0+
dXBkYXRlKFdURk1vdmUodXBkYXRlKSwgV1RGTW92ZShyZW1vdGVHQ0dMKSk7CiAgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlz
KV0gewogICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaApp
bmRleCBlZGM0ZmJiNDEwYTYuLmIxYmIyYWFmNTdlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3Qu
aApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRl
ICJXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiV0NTaGFyZWRTY2VuZUNv
bnRleHRIb2xkZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKQEAg
LTU1LDYgKzU2LDcgQEAgcHJpdmF0ZToKICAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGlu
YXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzPiBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgV2ViQ29yZTo6UHJvY2Vz
c0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsKICAgICBXQ0xheWVyVHJlZUhvc3RJ
ZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAgICBSZWZQdHI8V0NTaGFyZWRTY2VuZUNvbnRleHRI
b2xkZXI6OkhvbGRlcj4gbV9zaGFyZWRTY2VuZUNvbnRleHRIb2xkZXI7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFdDU2NlbmU+IG1fc2NlbmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvV0NEaXNwbGF5QnVmZmVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NEaXNwbGF5QnVmZmVyTWFuYWdlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iNzNlYzQ3MmZiMmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NEaXNw
bGF5QnVmZmVyTWFuYWdlci5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0NEaXNwbGF5QnVmZmVyTWFuYWdlci5oIgor
CisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiV0NEaXNwbGF5QnVmZmVy
SWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNvbnRlbnRzRGlz
cGxheURlbGVnYXRlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXQ0Rpc3BsYXlCdWZmZXJJ
ZGVudGlmaWVyIFdDRGlzcGxheUJ1ZmZlck1hbmFnZXI6OmFkZERpc3BsYXlCdWZmZXIoV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcywgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4gZGlzcGxheUJ1ZmZlcikKK3sKKyAgICBhdXRvIHBy
b2Nlc3NBZGRSZXN1bHQgPSBtX2Rpc3BsYXlCdWZmZXJNYXAuYWRkKHByb2Nlc3MsIEhhc2hTZXQ8
UmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4+IHsg
fSk7CisgICAgYXV0byBkaXNwbGF5QnVmZmVyQWRkUmVzdWx0ID0gcHJvY2Vzc0FkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuYWRkKGRpc3BsYXlCdWZmZXIpOworICAgIC8vQVNTRVJUKGRpc3BsYXlC
dWZmZXJBZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgcmV0dXJuIGRpc3BsYXlCdWZmZXIuZ2V0
KCk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVs
ZWdhdGU+IFdDRGlzcGxheUJ1ZmZlck1hbmFnZXI6OnJlbW92ZURpc3BsYXlCdWZmZXIoV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcywgV0NEaXNwbGF5QnVmZmVySWRlbnRpZmllciBk
aXNwbGF5QnVmZmVyKQoreworICAgIGF1dG8gZGlzcGxheUJ1ZmZlclNldCA9IG1fZGlzcGxheUJ1
ZmZlck1hcC5maW5kKHByb2Nlc3MpOworICAgIEFTU0VSVChkaXNwbGF5QnVmZmVyU2V0ICE9IG1f
ZGlzcGxheUJ1ZmZlck1hcC5lbmQoKSk7CisgICAgcmV0dXJuIGRpc3BsYXlCdWZmZXJTZXQtPnZh
bHVlLnRha2UoZGlzcGxheUJ1ZmZlcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDRGlzcGxheUJ1ZmZlck1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ0Rpc3BsYXlCdWZmZXJNYW5hZ2VyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42N2NkMmNlMmIyODgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NE
aXNwbGF5QnVmZmVyTWFuYWdlci5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNsdWRlICJX
Q0Rpc3BsYXlCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRl
bnRpZmllci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NMYXllckNvbnRlbnRz
RGlzcGxheURlbGVnYXRlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV0NEaXNw
bGF5QnVmZmVyTWFuYWdlciB7CitwdWJsaWM6CisgICAgV0NEaXNwbGF5QnVmZmVySWRlbnRpZmll
ciBhZGREaXNwbGF5QnVmZmVyKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBSZWZQdHI8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlPik7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4gcmVtb3ZlRGlz
cGxheUJ1ZmZlcihXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgV0NEaXNwbGF5QnVmZmVySWRl
bnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxXZWJDb3JlOjpQcm9jZXNzSWRlbnRp
ZmllciwgSGFzaFNldDxSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxh
eURlbGVnYXRlPj4+IG1fZGlzcGxheUJ1ZmZlck1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCmluZGV4IGIzNTc0NWNkNWVh
Yy4uNjU5OTgzM2VkZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3Mvd2MvV0NTY2VuZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL3djL1dDU2NlbmUuY3BwCkBAIC03MCw3ICs3MCw3IEBAIFdDU2NlbmU6On5XQ1NjZW5lKCkK
ICAgICBtX3RleHR1cmVNYXBwZXIgPSBudWxscHRyOwogfQogCi12b2lkIFdDU2NlbmU6OnVwZGF0
ZShXQ1VwYXRlSW5mbyYmIHVwZGF0ZSwgVmVjdG9yPFJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTD4+JiYgcmVtb3RlR0NHTCkKK3ZvaWQgV0NTY2VuZTo6dXBkYXRlKFdDVXBhdGVJbmZvJiYg
dXBkYXRlLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3Bs
YXlEZWxlZ2F0ZT4+JiYgcmVtb3RlR0NHTCkKIHsKICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5oCmluZGV4IDYzZWQwM2YzZWU4Ni4uY2JmMjM2Yjc4
MzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NT
Y2VuZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5l
LmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU7
CiBjbGFzcyBUZXh0dXJlTWFwcGVyOwogY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyOwogY2xhc3Mg
VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOwpAQCAtMzksNyArNDAsNiBAQCBjbGFzcyBU
ZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1j
bGFzcyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDsKIGNsYXNzIFdDU2NlbmVDb250ZXh0Owogc3Ry
dWN0IFdDVXBhdGVJbmZvOwogCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICBXQ1NjZW5l
KCk7CiAgICAgfldDU2NlbmUoKTsKICAgICB2b2lkIGluaXRpYWxpemUoV0NTY2VuZUNvbnRleHQm
KTsKLSAgICB2b2lkIHVwZGF0ZShXQ1VwYXRlSW5mbyYmLCBWZWN0b3I8UmVmUHRyPFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMPj4mJik7CisgICAgdm9pZCB1cGRhdGUoV0NVcGF0ZUluZm8mJiwgVmVj
dG9yPFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU+
PiYmKTsKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgTGF5ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFr
ZQppbmRleCAzNTBmZGQ0OTdlYWEuLjU3MDBhYTg4MjE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNt
YWtlCkBAIC0xMiw2ICsxMiw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHAKIAogICAgIEdQ
VVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcAorICAgIEdQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvV0NEaXNwbGF5QnVmZmVyTWFuYWdlci5jcHAKICAgICBHUFVQcm9j
ZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCiAgICAgR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9X
Q1NjZW5lQ29udGV4dC5jcHAKIApAQCAtMTIwLDYgKzEyMSw3IEBAIGxpc3QoQVBQRU5EIFdlYktp
dF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MiCiAgICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvdGhyZWFkZWRjb21wb3NpdG9yIgogICAgICIke1dFQktJVF9ESVJ9L1NoYXJlZC9QbHVnaW5z
L3dpbiIKKyAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvd2MiCiAgICAgIiR7V0VCS0lUX0RJUn0v
U2hhcmVkL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL0MvY2Fpcm8iCiAg
ICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2N1cmwiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3Jp
cHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCAyYzgzOWE5ZTliY2QuLmZkZWViMWJlZTVkOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0zNjAsNiArMzYw
LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAg
ICAgJ1dlYktpdDo6VHJhbnNhY3Rpb25JRCcsCiAgICAgICAgICdXZWJLaXQ6OlVzZXJDb250ZW50
Q29udHJvbGxlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJ
ZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6V0NEaXNwbGF5QnVmZmVySWRlbnRpZmllcics
CiAgICAgICAgICdXZWJLaXQ6OldlYkdQVUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpX
ZWJQYWdlUHJveHlJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6V2ViVVJMU2NoZW1lSGFu
ZGxlcklkZW50aWZpZXInLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2MvV0NE
aXNwbGF5QnVmZmVySWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2MvV0NEaXNw
bGF5QnVmZmVySWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uN2Q3ZjQ0MzAzM2RhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvd2MvV0NEaXNwbGF5QnVmZmVySWRlbnRpZmllci5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2lu
Y2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3Mg
VGV4dFN0cmVhbTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NMYXll
ckNvbnRlbnRzRGlzcGxheURlbGVnYXRlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV0NEaXNwbGF5QnVmZmVySWRlbnRpZmllciB7CitwdWJsaWM6CisgICAgV0NEaXNwbGF5QnVm
ZmVySWRlbnRpZmllcigpIHsgfQorCisgICAgV0NEaXNwbGF5QnVmZmVySWRlbnRpZmllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUqIGRlbGVnYXRlKQorICAg
ICAgICA6IG1faWRlbnRpZmllcihkZWxlZ2F0ZSkKKyAgICB7CisgICAgfQorCisgICAgb3BlcmF0
b3IgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVyOworICAgIH0KKworICAgIHZvaWQg
b3BlcmF0b3I9KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSog
ZGVsZWdhdGUpCisgICAgeworICAgICAgICBtX2lkZW50aWZpZXIgPSBkZWxlZ2F0ZTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCByZWludGVycHJldF9jYXN0
PGludHB0cl90PihtX2lkZW50aWZpZXIpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXI+
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorICAgIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxp
bnRwdHJfdD4gaWRlbnRpZmllcjsKKyAgICAgICAgZGVjb2RlciA+PiBpZGVudGlmaWVyOworICAg
ICAgICBpZiAoIWlkZW50aWZpZXIpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpHcmFwaGljc0xheWVyQ29u
dGVudHNEaXNwbGF5RGVsZWdhdGUqPigqaWRlbnRpZmllcik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSogbV9pZGVu
dGlmaWVyIHsgbnVsbHB0ciB9OworfTsKKworaW5saW5lIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgV0NEaXNwbGF5QnVmZmVySWRlbnRp
ZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ29udGVudHNE
aXNwbGF5RGVsZWdhdGUqIGRlbGVnYXRlID0gaWRlbnRpZmllcjsKKyAgICByZXR1cm4gc3RyZWFt
IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihkZWxlZ2F0ZSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5V0MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy93Yy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5V0MuY3BwCmluZGV4IDgxNDg1
MDZjODM4OC4uMWUyNzFiYjgxMDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlXQy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5V0MuY3BwCkBAIC04NCwxMSArODQsMTMgQEAgdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5V0M6OnByZXBhcmVGb3JEaXNwbGF5KCkKIHsKICAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2Vu
ZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQcmVwYXJlRm9yRGlzcGxh
eSgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlByZXBhcmVGb3JEaXNwbGF5
OjpSZXBseSgpKTsKKyAgICBXQ0Rpc3BsYXlCdWZmZXJJZGVudGlmaWVyIGRpc3BsYXlCdWZmZXI7
CisgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpQcmVwYXJlRm9yRGlzcGxheSgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OlByZXBhcmVGb3JEaXNwbGF5OjpSZXBseShkaXNwbGF5QnVmZmVyKSk7CiAgICAg
aWYgKCFzZW5kUmVzdWx0KSB7CiAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQorICAgIHN0YXRpY19jYXN0PFdDUGxhdGZvcm1MYXllckdDR0wqPihtX2xh
eWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUtPnBsYXRmb3JtTGF5ZXIoKSktPnNldERpc3BsYXlC
dWZmZXJJZGVudGlmaWVyKGRpc3BsYXlCdWZmZXIpOwogICAgIG1hcmtMYXllckNvbXBvc2l0ZWQo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL3djL1dDUGxhdGZvcm1MYXllckdDR0wuaAppbmRleCBhODdlMDhlODJlMTkuLjcy
NjU5MDY3N2I2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmgKQEAgLTI2LDYgKzI2LDcg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
LmgiCisjaW5jbHVkZSAiV0NEaXNwbGF5QnVmZmVySWRlbnRpZmllci5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvV0NQbGF0Zm9ybUxheWVyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMzgsOCAr
MzksMTkgQEAgcHVibGljOgogICAgIH0KICAgICBHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIm
IGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyOyB9CiAKKyAgICBXQ0Rpc3BsYXlCdWZmZXJJZGVudGlmaWVyIGRpc3BsYXlC
dWZmZXJJZGVudGlmaWVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Rpc3BsYXlCdWZmZXJJ
ZGVudGlmaWVyOworICAgIH0KKworICAgIHZvaWQgc2V0RGlzcGxheUJ1ZmZlcklkZW50aWZpZXIo
V0NEaXNwbGF5QnVmZmVySWRlbnRpZmllciBkaXNwbGF5QnVmZmVyKQorICAgIHsKKyAgICAgICAg
bV9kaXNwbGF5QnVmZmVySWRlbnRpZmllciA9IGRpc3BsYXlCdWZmZXI7CisgICAgfQorCiBwcml2
YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciBtX2dyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllcjsKKyAgICBXQ0Rpc3BsYXlCdWZmZXJJZGVudGlmaWVyIG1fZGlzcGxheUJ1ZmZl
cklkZW50aWZpZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwCmlu
ZGV4IGJkOWFjYmU5MzMzZi4uODQwZWZkNDlkNDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAKQEAgLTQ3Niw5
ICs0NzYsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSgpCiAgICAgfQogICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKICAgICAgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKLSAg
ICAgICAgICAgIHVwZGF0ZS5ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgPSBzdGF0aWNfY2Fz
dDxXQ1BsYXRmb3JtTGF5ZXJHQ0dMKj4obV9wbGF0Zm9ybUxheWVyKS0+Z3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyKCkudG9VSW50NjQoKTsKKyAgICAgICAgICAgIHVwZGF0ZS5kaXNwbGF5QnVm
ZmVySWRlbnRpZmllciA9IHN0YXRpY19jYXN0PFdDUGxhdGZvcm1MYXllckdDR0wqPihtX3BsYXRm
b3JtTGF5ZXIpLT5kaXNwbGF5QnVmZmVySWRlbnRpZmllcigpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB1cGRhdGUuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyID0gMDsKKyAgICAgICAg
ICAgIHVwZGF0ZS5kaXNwbGF5QnVmZmVySWRlbnRpZmllciA9IG51bGxwdHI7CiAgICAgfQogICAg
IG1fb2JzZXJ2ZXItPmNvbW1pdExheWVyVXBhdGVJbmZvKFdURk1vdmUodXBkYXRlKSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5m
by5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaApp
bmRleCBjN2I0ZGQ4MWI3ZTEuLjgxM2M5NGNjZTM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oCkBAIC0yNiw2ICsyNiw3IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIldDQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiV0NE
aXNwbGF5QnVmZmVySWRlbnRpZmllci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgogI2luY2x1ZGUgPG9wdGlv
bmFsPgpAQCAtODgsNyArODksNyBAQCBzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7CiAgICAgV2Vi
Q29yZTo6RmlsdGVyT3BlcmF0aW9ucyBiYWNrZHJvcEZpbHRlcnM7CiAgICAgV2ViQ29yZTo6Rmxv
YXRSb3VuZGVkUmVjdCBiYWNrZHJvcEZpbHRlcnNSZWN0OwogICAgIFdlYkNvcmU6OkZsb2F0Um91
bmRlZFJlY3QgY29udGVudHNDbGlwcGluZ1JlY3Q7Ci0gICAgdWludDY0X3QgZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyOworICAgIFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIgZGlzcGxheUJ1
ZmZlcklkZW50aWZpZXI7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CkBAIC0xMzYsNyArMTM3LDcgQEAgc3RydWN0
IFdDTGF5ZXJVcGF0ZUluZm8gewogICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
OkJhY2tkcm9wRmlsdGVycykKICAgICAgICAgICAgIGVuY29kZXIgPDwgYmFja2Ryb3BGaWx0ZXJz
IDw8IGJhY2tkcm9wRmlsdGVyc1JlY3Q7CiAgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6UGxhdGZvcm1MYXllcikKLSAgICAgICAgICAgIGVuY29kZXIgPDwgZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyOworICAgICAgICAgICAgZW5jb2RlciA8PCBkaXNwbGF5QnVmZmVySWRl
bnRpZmllcjsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4KQEAgLTI0MSw3
ICsyNDIsNyBAQCBzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcikpCisgICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5kaXNwbGF5QnVmZmVySWRlbnRpZmllcikpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446303</attachid>
            <date>2021-12-07 22:36:57 -0800</date>
            <delta_ts>2021-12-07 23:36:16 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>28888</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcAppbmRleCA1ZDY0ZGVjZjQxY2MuLjBhZTI2NDdlN2Q3MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cApAQCAtMTQ2LDYgKzE0Niw3IEBACiAKICNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCiAjaW5j
bHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiV0NEaXNwbGF5QnVmZmVy
TWFuYWdlci5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMjk5LDYgKzMwMCwx
MSBAQCB2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZENsb3NlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbikKICAgICAvLyBSZW1vdGVHcmFwaGljc0NvbnRleHRzR0wgb2JqZWN0
cyBhcmUgdW5uZWVkZWQgYWZ0ZXIgY29ubmVjdGlvbiBjbG9zZXMuCiAgICAgbV9yZW1vdGVHcmFw
aGljc0NvbnRleHRHTE1hcC5jbGVhcigpOwogI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX0xBWUVS
X1dDKQorICAgIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0
Y2goW3dlYlByb2Nlc3NJZGVudGlmaWVyID0gbV93ZWJQcm9jZXNzSWRlbnRpZmllcl0geworICAg
ICAgICBXQ0Rpc3BsYXlCdWZmZXJNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZW1vdmVBbGxEaXNwbGF5
QnVmZmVyc0ZvclByb2Nlc3Mod2ViUHJvY2Vzc0lkZW50aWZpZXIpOworICAgIH0pOworI2VuZGlm
CiAKICAgICBncHVQcm9jZXNzKCkuY29ubmVjdGlvblRvV2ViUHJvY2Vzc0Nsb3NlZChjb25uZWN0
aW9uKTsKICAgICBncHVQcm9jZXNzKCkucmVtb3ZlR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcygq
dGhpcyk7IC8vIE1heSBkZXN0cm95IHx0aGlzfC4KQEAgLTM1NSwxMiArMzYxLDYgQEAgdm9pZCBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlV0NMYXllclRyZWVIb3N0KFdlYktpdDo6
V0NMYXllclRyZWVIb3N0SWQKIHsKICAgICBtX3JlbW90ZVdDTGF5ZXJUcmVlSG9zdE1hcC5yZW1v
dmUoaWRlbnRpZmllcik7CiB9Ci0KLVJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4gR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKEdyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllciBpZGVudGlmaWVyKQotewotICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgcmV0dXJuIG1fcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xNYXAuZ2V0
KGlkZW50aWZpZXIpOwotfQogI2VuZGlmCiAKIGJvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6YWxsb3dzRXhpdFVuZGVyTWVtb3J5UHJlc3N1cmUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggZmFi
NjcwZmI5MDljLi5kYmUxZjRlZWE3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMTcxLDEwICsxNzEsNiBAQCBw
dWJsaWM6CiAgICAgUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkmIGltYWdlRGVjb2RlckFWRlBy
b3h5KCk7CiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKLSAgICBSZWZQdHI8
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+IGZpbmRSZW1vdGVHcmFwaGljc0NvbnRleHRHTChHcmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIpOwotI2VuZGlmCi0KICAgICB2b2lkIHVwZGF0ZVN1cHBv
cnRlZFJlbW90ZUNvbW1hbmRzKCk7CiAKICAgICBib29sIGFsbG93c0V4aXRVbmRlck1lbW9yeVBy
ZXNzdXJlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oCmluZGV4IDE1OWU1MDU2NzcwNC4u
M2NjZjE5YzAyMTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaApAQCAtNTgsNiArNTgsMTEgQEAg
Y2xhc3MgTWFjaFNlbmRSaWdodDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKKyNpZiBVU0UoR1JB
UEhJQ1NfTEFZRVJfV0MpCitjbGFzcyBXQ0Rpc3BsYXlCdWZmZXJJZGVudGlmaWVyOworY2xhc3Mg
V0NEaXNwbGF5QnVmZmVyTWFuYWdlcjsKKyNlbmRpZgorCiAvLyBHUFUgcHJvY2VzcyBzaWRlIGlt
cGxlbWVudGF0aW9uIG9mIHRoYXQgcmVjZWl2ZXMgbWVzc2FnZXMgYWJvdXQgR3JhcGhpY3NDb250
ZXh0R0wgY2FsbHMKIC8vIGFuZCBpc3N1ZXMgcmVhbCBHcmFwaGljc0NvbnRleHRHTCBjYWxscyBi
YXNlZCBvbiB0aGUgcmVjZWl2ZWQgbWVzc2FnZXMuCiAvLyBUaGUgaW1wbGVtZW50YXRpb24gaXMg
bGFyZ2VseSBnZW5lcmF0ZWQgYnkgcnVubmluZyBUb29scy9TY3JpcHRzL2dlbmVyYXRlLWdwdXAt
d2ViZ2wuCkBAIC03MywxMSArNzgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNwbGF5V2FzUmVj
b25maWd1cmVkKCk7CiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKLSAgICAv
LyBGSVhNRTogVGhpcyBpcyBsYXllcmluZyB2aW9sYXRpb24gYW5kIHNob3VsZCBiZSByZW1vdmVk
LgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKLSNlbmRpZgotCiBw
cm90ZWN0ZWQ6CiAgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0woR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyYsIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCYsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmKTsKICAgICB2b2lkIGluaXRpYWxp
emUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwpAQCAtMTAwLDYgKzEw
MCw4IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIG5vdGlmeU1hcmtDb250ZXh0Q2hhbmdlZCgpOwog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGlzcGxheShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFdURjo6TWFjaFNlbmRSaWdodCYmKT4mJikgPSAwOworI2Vs
aWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGlz
cGxheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIpPiYm
KSA9IDA7CiAjZWxzZQogICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3Nh
Z2VzLmluCmluZGV4IDE2YjNlOWU4MjZlYS4uMDYyYjZlMTg4NjFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVz
c2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCkBAIC0yOSw3ICsyOSwxMCBAQCBtZXNzYWdlcyAt
PiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTCBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgdm9pZCBQcmVwYXJlRm9yRGlzcGxheSgpIC0+IChNYWNoU2VuZFJp
Z2h0IGRpc3BsYXlCdWZmZXIpIFN5bmNocm9ub3VzIE5vdFN0cmVhbUVuY29kYWJsZVJlcGx5CiAj
ZW5kaWYKLSNpZiAhUExBVEZPUk0oQ09DT0EpCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQor
ICAgIHZvaWQgUHJlcGFyZUZvckRpc3BsYXkoKSAtPiAoV2ViS2l0OjpXQ0Rpc3BsYXlCdWZmZXJJ
ZGVudGlmaWVyIGRpc3BsYXlCdWZmZXIpIFN5bmNocm9ub3VzCisjZW5kaWYKKyNpZiAhUExBVEZP
Uk0oQ09DT0EpICYmICFVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCiAgICAgdm9pZCBQcmVwYXJlRm9y
RGlzcGxheSgpIC0+ICgpIFN5bmNocm9ub3VzCiAjZW5kaWYKICAgICB2b2lkIEVuc3VyZUV4dGVu
c2lvbkVuYWJsZWQoU3RyaW5nIGV4dGVuc2lvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4u
Y3BwCmluZGV4IDlkZjgzZjQ2MDdjYy4uOGI4NGQwMGJhODUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFdpbi5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykgJiYgRU5BQkxFKFdFQkdMKSAmJiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSAiR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIldDRGlzcGxheUJ1ZmZlck1hbmFnZXIuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQwLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgLy8gUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0wgb3ZlcnJpZGVzLgogICAgIHZvaWQgcGxhdGZvcm1Xb3JrUXVl
dWVJbml0aWFsaXplKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKSBmaW5h
bDsKKyAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV0NE
aXNwbGF5QnVmZmVySWRlbnRpZmllcik+JiYpIGZpbmFsOwogfTsKIAogUmVmPFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMPiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Y3JlYXRlKEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMsIEdyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllciBncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQmIHJlbmRlcmluZ0JhY2tlbmQsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmIHN0cmVh
bSkKQEAgLTU5LDE5ICs2MSwxMyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luOjpw
bGF0Zm9ybVdvcmtRdWV1ZUluaXRpYWxpemUoV2ViQ29yZTo6R3JhcGhpY3NDbwogICAgIG1fY29u
dGV4dCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFdU
Rk1vdmUoYXR0cmlidXRlcykpOwogfQogCi12b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpw
cmVwYXJlRm9yRGlzcGxheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luOjpwcmVwYXJlRm9yRGlzcGxh
eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fY29udGV4dC0+cHJlcGFyZUZvckRpc3BsYXkoKTsK
LSAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIGF1dG8gaWRlbnRpZmllciA9IFdDRGlzcGxh
eUJ1ZmZlck1hbmFnZXI6OnNpbmdsZXRvbigpLmFkZERpc3BsYXlCdWZmZXIobV93ZWJQcm9jZXNz
SWRlbnRpZmllciwgbV9jb250ZXh0LT5sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKCkpOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGlkZW50aWZpZXIpOwogfQogCi0jaWYgVVNFKEdSQVBISUNT
X0xBWUVSX1dDKQotUGxhdGZvcm1MYXllciogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBsYXRm
b3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRleHQtPmxheWVyQ29udGVudHNE
aXNwbGF5RGVsZWdhdGUoKS0+cGxhdGZvcm1MYXllcigpOwotfQotI2VuZGlmCi0KIH0KIAogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVt
b3RlV0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGZkM2QyOWZjNGUwMC4uMDAzMmZh
YjFlMTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2Mv
UmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcApAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVt
b3RlV0NMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0cmVhbUNvbm5l
Y3Rpb25Xb3JrUXVldWUuaCIKKyNpbmNsdWRlICJXQ0Rpc3BsYXlCdWZmZXJNYW5hZ2VyLmgiCiAj
aW5jbHVkZSAiV0NTY2VuZS5oIgogI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgiCiAKQEAgLTQ2LDYg
KzQ3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdD4gUmVtb3RlV0NM
YXllclRyZWVIb3N0OjpjcmVhdGUoR1BVQ29ubmVjdGkKIAogUmVtb3RlV0NMYXllclRyZWVIb3N0
OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3QoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgY29ubmVj
dGlvblRvV2ViUHJvY2VzcywgV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGlkZW50
aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKICAgICA6IG1fY29ubmVjdGlvblRvV2ViUHJv
Y2Vzcyhjb25uZWN0aW9uVG9XZWJQcm9jZXNzKQorICAgICwgbV93ZWJQcm9jZXNzSWRlbnRpZmll
cihjb25uZWN0aW9uVG9XZWJQcm9jZXNzLndlYlByb2Nlc3NJZGVudGlmaWVyKCkpCiAgICAgLCBt
X2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fc2hhcmVkU2NlbmVDb250ZXh0SG9sZGVy
KGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ3B1UHJvY2VzcygpLnNoYXJlZFNjZW5lQ29udGV4dCgp
LmVuc3VyZUhvbGRlckZvcldpbmRvdyhuYXRpdmVXaW5kb3cpKQogewpAQCAtODIsMTcgKzg0LDE2
IEBAIHVpbnQ2NF90IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0
aW9uSUQoKSBjb25zdAogCiB2b2lkIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlKFdDVXBh
dGVJbmZvJiYgdXBkYXRlKQogewotICAgIC8vIGZpbmRSZW1vdGVHcmFwaGljc0NvbnRleHRHTCBz
aG91bGQgYmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZAotICAgIGF1dG8gcmVtb3RlR0NHTCA9
IFdURjo6bWFwKHVwZGF0ZS5jaGFuZ2VkTGF5ZXJzLCBbdGhpc10oYXV0byYgbGF5ZXJVcGRhdGUp
IC0+IFJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4gewotICAgICAgICBpZiAobGF5ZXJV
cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKLSAgICAgICAg
ICAgIGlmIChsYXllclVwZGF0ZS5ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1fY29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+ZmluZFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMKG1ha2VPYmplY3RJZGVudGlmaWVyPEdyYXBoaWNzQ29udGV4dEdMSWRlbnRp
ZmllclR5cGU+KGxheWVyVXBkYXRlLmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcikpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0pOworICAgIHJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0g
V2Vha1B0cigqdGhpcyksIHNjZW5lID0gbV9zY2VuZS5nZXQoKSwgdXBkYXRlID0gV1RGTW92ZSh1
cGRhdGUpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvIGRpc3BsYXlEZWxlZ2F0ZXMgPSBXVEY6
Om1hcCh1cGRhdGUuY2hhbmdlZExheWVycywgW3RoaXNdKGF1dG8mIGxheWVyVXBkYXRlKSAtPiBS
ZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlPiB7Cisg
ICAgICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRm
b3JtTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAobGF5ZXJVcGRhdGUuZGlzcGxheUJ1ZmZl
cklkZW50aWZpZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXQ0Rpc3BsYXlCdWZmZXJN
YW5hZ2VyOjpzaW5nbGV0b24oKS5yZW1vdmVEaXNwbGF5QnVmZmVyKG1fd2ViUHJvY2Vzc0lkZW50
aWZpZXIsIGxheWVyVXBkYXRlLmRpc3BsYXlCdWZmZXJJZGVudGlmaWVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9KTsKIAotICAgIHJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtU
aGlzID0gV2Vha1B0cigqdGhpcyksIHNjZW5lID0gbV9zY2VuZS5nZXQoKSwgdXBkYXRlID0gV1RG
TW92ZSh1cGRhdGUpLCByZW1vdGVHQ0dMID0gV1RGTW92ZShyZW1vdGVHQ0dMKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgc2NlbmUtPnVwZGF0ZShXVEZNb3ZlKHVwZGF0ZSksIFdURk1vdmUocmVtb3Rl
R0NHTCkpOworICAgICAgICBzY2VuZS0+dXBkYXRlKFdURk1vdmUodXBkYXRlKSwgV1RGTW92ZShk
aXNwbGF5RGVsZWdhdGVzKSk7CiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhp
cywgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKV0gewogICAgICAgICAgICAgaWYgKCF3ZWFr
VGhpcykKICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmgKaW5k
ZXggZWRjNGZiYjQxMGE2Li5iMWJiMmFhZjU3ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmgK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAi
V0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oIgogI2luY2x1ZGUgIldDU2hhcmVkU2NlbmVDb250
ZXh0SG9sZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CkBAIC01
NSw2ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0
aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcz4gbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFdlYkNvcmU6OlByb2Nlc3NJ
ZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7CiAgICAgV0NMYXllclRyZWVIb3N0SWRl
bnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgUmVmUHRyPFdDU2hhcmVkU2NlbmVDb250ZXh0SG9s
ZGVyOjpIb2xkZXI+IG1fc2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxXQ1NjZW5lPiBtX3NjZW5lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL3djL1dDRGlzcGxheUJ1ZmZlck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDRGlzcGxheUJ1ZmZlck1hbmFnZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2VkZjI5NzQ3YTUzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDRGlzcGxh
eUJ1ZmZlck1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldDRGlzcGxheUJ1ZmZlck1hbmFnZXIuaCIKKwor
I2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgIldDRGlzcGxheUJ1ZmZlcklk
ZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3Bs
YXlEZWxlZ2F0ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV0NEaXNwbGF5QnVmZmVyTWFu
YWdlciYgV0NEaXNwbGF5QnVmZmVyTWFuYWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8V0NEaXNwbGF5QnVmZmVyTWFuYWdlcj4gZGlzcGxheUJ1ZmZlck1hbmFn
ZXI7CisgICAgcmV0dXJuIGRpc3BsYXlCdWZmZXJNYW5hZ2VyOworfQorCitXQ0Rpc3BsYXlCdWZm
ZXJJZGVudGlmaWVyIFdDRGlzcGxheUJ1ZmZlck1hbmFnZXI6OmFkZERpc3BsYXlCdWZmZXIoV2Vi
Q29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcywgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4gZGlzcGxheUJ1ZmZlcikKK3sKKyAgICBhdXRv
IHByb2Nlc3NBZGRSZXN1bHQgPSBtX2Rpc3BsYXlCdWZmZXJNYXAuYWRkKHByb2Nlc3MsIEhhc2hT
ZXQ8UmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4+
IHsgfSk7CisgICAgYXV0byBkaXNwbGF5QnVmZmVyQWRkUmVzdWx0ID0gcHJvY2Vzc0FkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuYWRkKGRpc3BsYXlCdWZmZXIpOworICAgIGlmICghZGlzcGxheUJ1
ZmZlckFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gZGlzcGxheUJ1ZmZlci5nZXQoKTsKK30KKworUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4gV0NEaXNwbGF5QnVmZmVyTWFuYWdlcjo6cmVt
b3ZlRGlzcGxheUJ1ZmZlcihXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzLCBXQ0Rp
c3BsYXlCdWZmZXJJZGVudGlmaWVyIGRpc3BsYXlCdWZmZXIpCit7CisgICAgQVNTRVJUKG1fZGlz
cGxheUJ1ZmZlck1hcC5jb250YWlucyhwcm9jZXNzKSk7CisgICAgQVNTRVJUKG1fZGlzcGxheUJ1
ZmZlck1hcC5nZXQocHJvY2VzcykuY29udGFpbnMoZGlzcGxheUJ1ZmZlcikpOworICAgIHJldHVy
biBtX2Rpc3BsYXlCdWZmZXJNYXAuZ2V0KHByb2Nlc3MpLnRha2UoZGlzcGxheUJ1ZmZlcik7Cit9
CisKK3ZvaWQgV0NEaXNwbGF5QnVmZmVyTWFuYWdlcjo6cmVtb3ZlQWxsRGlzcGxheUJ1ZmZlcnNG
b3JQcm9jZXNzKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MpCit7CisgICAgbV9k
aXNwbGF5QnVmZmVyTWFwLnJlbW92ZShwcm9jZXNzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NEaXNwbGF5QnVmZmVyTWFuYWdlci5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDRGlzcGxheUJ1ZmZlck1h
bmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjg4ZTI3M2Zj
NTZjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy93Yy9XQ0Rpc3BsYXlCdWZmZXJNYW5hZ2VyLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2lu
Y2x1ZGUgIldDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1By
b2Nlc3NJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0xheWVy
Q29udGVudHNEaXNwbGF5RGVsZWdhdGU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXQ0Rpc3BsYXlCdWZmZXJNYW5hZ2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV0NEaXNwbGF5
QnVmZmVyTWFuYWdlciYgc2luZ2xldG9uKCk7CisKKyAgICBXQ0Rpc3BsYXlCdWZmZXJJZGVudGlm
aWVyIGFkZERpc3BsYXlCdWZmZXIoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIFJlZlB0cjxX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU+KTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlPiByZW1vdmVE
aXNwbGF5QnVmZmVyKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBXQ0Rpc3BsYXlCdWZmZXJJ
ZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbERpc3BsYXlCdWZmZXJzRm9yUHJvY2VzcyhX
ZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxXZWJD
b3JlOjpQcm9jZXNzSWRlbnRpZmllciwgSGFzaFNldDxSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NM
YXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlPj4+IG1fZGlzcGxheUJ1ZmZlck1hcDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2Nl
bmUuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3Bw
CmluZGV4IGIzNTc0NWNkNWVhYy4uMzU4YWZlZTVkN2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCkBAIC03MCw3ICs3MCw3IEBAIFdD
U2NlbmU6On5XQ1NjZW5lKCkKICAgICBtX3RleHR1cmVNYXBwZXIgPSBudWxscHRyOwogfQogCi12
b2lkIFdDU2NlbmU6OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVwZGF0ZSwgVmVjdG9yPFJlZlB0cjxS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTD4+JiYgcmVtb3RlR0NHTCkKK3ZvaWQgV0NTY2VuZTo6dXBk
YXRlKFdDVXBhdGVJbmZvJiYgdXBkYXRlLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4+JiYgZGlzcGxheURlbGVnYXRlcykKIHsKICAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBXQ1NjZW5lOjp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRh
dGUsIFZlY3RvcjxSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0wKICAgICAgICAgbV9sYXll
cnMuYWRkKGlkLCBXVEZNb3ZlKGxheWVyKSk7CiAgICAgfQogCi0gICAgYXV0byByZW1vdGVHQ0dM
SXRlcmF0b3IgPSByZW1vdGVHQ0dMLmJlZ2luKCk7CisgICAgYXV0byBkaXNwbGF5RGVsZWdhdGVz
SXRlcmF0b3IgPSBkaXNwbGF5RGVsZWdhdGVzLmJlZ2luKCk7CiAKICAgICBmb3IgKGF1dG8mIGxh
eWVyVXBkYXRlIDogdXBkYXRlLmNoYW5nZWRMYXllcnMpIHsKICAgICAgICAgYXV0byBsYXllciA9
IG1fbGF5ZXJzLmdldChsYXllclVwZGF0ZS5pZCk7CkBAIC0xNjUsMTYgKzE2NSwxNiBAQCB2b2lk
IFdDU2NlbmU6OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVwZGF0ZSwgVmVjdG9yPFJlZlB0cjxSZW1v
dGVHcmFwaGljc0NvbnRleHRHTAogICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJh
Y2tkcm9wRmlsdGVyc1JlY3QobGF5ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzUmVjdCk7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQ
bGF0Zm9ybUxheWVyKSB7Ci0gICAgICAgICAgICBpZiAoKnJlbW90ZUdDR0xJdGVyYXRvcikgewot
ICAgICAgICAgICAgICAgIGF1dG8gcGxhdGZvcm1MYXllciA9ICgqcmVtb3RlR0NHTEl0ZXJhdG9y
KS0+cGxhdGZvcm1MYXllcigpOworICAgICAgICAgICAgaWYgKCpkaXNwbGF5RGVsZWdhdGVzSXRl
cmF0b3IpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHBsYXRmb3JtTGF5ZXIgPSAoKmRpc3BsYXlE
ZWxlZ2F0ZXNJdGVyYXRvciktPnBsYXRmb3JtTGF5ZXIoKTsKICAgICAgICAgICAgICAgICBwbGF0
Zm9ybUxheWVyLT5zZXRDbGllbnQobGF5ZXIpOwogICAgICAgICAgICAgICAgIGxheWVyLT50ZXht
YXBMYXllci5zZXRDb250ZW50c0xheWVyKHBsYXRmb3JtTGF5ZXIpOwotICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICB9IGVsc2UgaWYgKCFsYXllclVwZGF0ZS5wbGF0Zm9ybUxheWVyKQog
ICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c0xheWVyKG51bGxw
dHIpOwogICAgICAgICB9Ci0gICAgICAgIHJlbW90ZUdDR0xJdGVyYXRvcisrOworICAgICAgICBk
aXNwbGF5RGVsZWdhdGVzSXRlcmF0b3IrKzsKICAgICB9Ci0gICAgQVNTRVJUKHJlbW90ZUdDR0xJ
dGVyYXRvciA9PSByZW1vdGVHQ0dMLmVuZCgpKTsKKyAgICBBU1NFUlQoZGlzcGxheURlbGVnYXRl
c0l0ZXJhdG9yID09IGRpc3BsYXlEZWxlZ2F0ZXMuZW5kKCkpOwogCiAgICAgZm9yIChhdXRvIGlk
IDogdXBkYXRlLnJlbW92ZWRMYXllcnMpCiAgICAgICAgIG1fbGF5ZXJzLnJlbW92ZShpZCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuaAppbmRleCA2
M2VkMDNmM2VlODYuLmNiZjIzNmI3ODMxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NMYXllckNv
bnRlbnRzRGlzcGxheURlbGVnYXRlOwogY2xhc3MgVGV4dHVyZU1hcHBlcjsKIGNsYXNzIFRleHR1
cmVNYXBwZXJMYXllcjsKIGNsYXNzIFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTsKQEAg
LTM5LDcgKzQwLDYgQEAgY2xhc3MgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOwogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w7CiBjbGFz
cyBXQ1NjZW5lQ29udGV4dDsKIHN0cnVjdCBXQ1VwYXRlSW5mbzsKIApAQCAtNDksNyArNDksNyBA
QCBwdWJsaWM6CiAgICAgV0NTY2VuZSgpOwogICAgIH5XQ1NjZW5lKCk7CiAgICAgdm9pZCBpbml0
aWFsaXplKFdDU2NlbmVDb250ZXh0Jik7Ci0gICAgdm9pZCB1cGRhdGUoV0NVcGF0ZUluZm8mJiwg
VmVjdG9yPFJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4+JiYpOworICAgIHZvaWQgdXBk
YXRlKFdDVXBhdGVJbmZvJiYsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckNv
bnRlbnRzRGlzcGxheURlbGVnYXRlPj4mJik7CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IExheWVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMzUwZmRkNDk3ZWFhLi41NzAwYWE4ODIxOWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtMTIsNiArMTIsNyBAQCBsaXN0KEFQUEVORCBX
ZWJLaXRfU09VUkNFUwogICAgIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xXaW4uY3BwCiAKICAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJU
cmVlSG9zdC5jcHAKKyAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDRGlzcGxheUJ1ZmZlck1h
bmFnZXIuY3BwCiAgICAgR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcAogICAgIEdQ
VVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZUNvbnRleHQuY3BwCiAKQEAgLTEyMCw2ICsxMjEs
NyBAQCBsaXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJ
VF9ESVJ9L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzIgogICAgICIke1dFQktJVF9ESVJ9L1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvciIKICAgICAiJHtXRUJL
SVRfRElSfS9TaGFyZWQvUGx1Z2lucy93aW4iCisgICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL3dj
IgogICAgICIke1dFQktJVF9ESVJ9L1NoYXJlZC93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQ
cm9jZXNzL0FQSS9DL2NhaXJvIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9j
dXJsIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5w
eSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggMDkzMGNm
OTE3YmE3Li40NDViNWRiZTgyNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93
ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNz
YWdlcy5weQpAQCAtMzYxLDYgKzM2MSw3IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3
YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJLaXQ6OlRyYW5zYWN0aW9uSUQnLAogICAgICAg
ICAnV2ViS2l0OjpVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dl
YktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OldDRGlz
cGxheUJ1ZmZlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpXZWJHUFVJZGVudGlmaWVy
JywKICAgICAgICAgJ1dlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJLaXQ6OldlYlVSTFNjaGVtZUhhbmRsZXJJZGVudGlmaWVyJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL3djL1dDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL3djL1dDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdkN2Y0NDMwMzNkYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3djL1dDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIuaApA
QCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1JB
UEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCitu
YW1lc3BhY2UgV1RGIHsKK2NsYXNzIFRleHRTdHJlYW07Cit9CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIEdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZTsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIgeworcHVi
bGljOgorICAgIFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIoKSB7IH0KKworICAgIFdDRGlzcGxh
eUJ1ZmZlcklkZW50aWZpZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURl
bGVnYXRlKiBkZWxlZ2F0ZSkKKyAgICAgICAgOiBtX2lkZW50aWZpZXIoZGVsZWdhdGUpCisgICAg
eworICAgIH0KKworICAgIG9wZXJhdG9yIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rp
c3BsYXlEZWxlZ2F0ZSooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWRlbnRpZmll
cjsKKyAgICB9CisKKyAgICB2b2lkIG9wZXJhdG9yPShXZWJDb3JlOjpHcmFwaGljc0xheWVyQ29u
dGVudHNEaXNwbGF5RGVsZWdhdGUqIGRlbGVnYXRlKQorICAgIHsKKyAgICAgICAgbV9pZGVudGlm
aWVyID0gZGVsZWdhdGU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGVuY29k
ZXIgPDwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9pZGVudGlmaWVyKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxXQ0Rp
c3BsYXlCdWZmZXJJZGVudGlmaWVyPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKKyAgICB7Cisg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8aW50cHRyX3Q+IGlkZW50aWZpZXI7CisgICAgICAgIGRlY29k
ZXIgPj4gaWRlbnRpZmllcjsKKyAgICAgICAgaWYgKCFpZGVudGlmaWVyKQorICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKj4oKmlkZW50aWZpZXIp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ29udGVudHNE
aXNwbGF5RGVsZWdhdGUqIG1faWRlbnRpZmllciB7IG51bGxwdHIgfTsKK307CisKK2lubGluZSBX
VEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0
IFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKiBkZWxlZ2F0ZSA9IGlkZW50aWZp
ZXI7CisgICAgcmV0dXJuIHN0cmVhbSA8PCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGVs
ZWdhdGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQ
SElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eVdDLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eVdDLmNwcAppbmRleCA4MTQ4NTA2YzgzODguLmE1ZTJiMDUzMmZhOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5V0MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eVdDLmNwcApAQCAtODQsMTEgKzg0
LDEzIEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eVdDOjpwcmVwYXJlRm9yRGlz
cGxheSgpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6UHJlcGFyZUZvckRpc3BsYXkoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpQcmVwYXJlRm9yRGlzcGxheTo6UmVwbHkoKSk7CisgICAgV0NEaXNwbGF5QnVmZmVySWRl
bnRpZmllciBkaXNwbGF5QnVmZmVyOworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3BsYXkoKSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQcmVwYXJlRm9yRGlzcGxheTo6UmVwbHko
ZGlzcGxheUJ1ZmZlcikpOwogICAgIGlmICghc2VuZFJlc3VsdCkgewogICAgICAgICBtYXJrQ29u
dGV4dExvc3QoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBzdGF0aWNfY2FzdDxXQ1Bs
YXRmb3JtTGF5ZXJHQ0dMKj4obV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLT5wbGF0Zm9y
bUxheWVyKCkpLT5hZGREaXNwbGF5QnVmZmVySWRlbnRpZmllcihkaXNwbGF5QnVmZmVyKTsKICAg
ICBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmgK
aW5kZXggYTg3ZTA4ZTgyZTE5Li45YWExMjRhYjQwODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVy
R0NHTC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIldDRGlzcGxheUJ1ZmZlcklkZW50
aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1dDUGxhdGZvcm1MYXllci5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTM4LDggKzM5LDIyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgR3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyJiBncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIoKSB7IHJl
dHVybiBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsgfQogCisgICAgV0NEaXNwbGF5QnVm
ZmVySWRlbnRpZmllciB0YWtlRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaXNwbGF5QnVmZmVySWRlbnRpZmllciwgeyB9KTsK
KyAgICB9CisKKyAgICB2b2lkIGFkZERpc3BsYXlCdWZmZXJJZGVudGlmaWVyKFdDRGlzcGxheUJ1
ZmZlcklkZW50aWZpZXIgZGlzcGxheUJ1ZmZlcikKKyAgICB7CisgICAgICAgIGlmICghZGlzcGxh
eUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKCFtX2Rpc3BsYXlC
dWZmZXJJZGVudGlmaWVyKTsKKyAgICAgICAgbV9kaXNwbGF5QnVmZmVySWRlbnRpZmllciA9IGRp
c3BsYXlCdWZmZXI7CisgICAgfQorCiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllciBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsKKyAgICBXQ0Rpc3BsYXlCdWZm
ZXJJZGVudGlmaWVyIG1fZGlzcGxheUJ1ZmZlcklkZW50aWZpZXI7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwCmluZGV4IGJkOWFjYmU5MzMzZi4uNjBmMmNiNTkwNThm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGlj
c0xheWVyV0MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dy
YXBoaWNzTGF5ZXJXQy5jcHAKQEAgLTQ3NSwxMCArNDc1LDExIEBAIHZvaWQgR3JhcGhpY3NMYXll
cldDOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKICAgICAgICAgdXBk
YXRlLmJhY2tkcm9wRmlsdGVyc1JlY3QgPSBiYWNrZHJvcEZpbHRlcnNSZWN0KCk7CiAgICAgfQog
ICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsK
KyAgICAgICAgdXBkYXRlLnBsYXRmb3JtTGF5ZXIgPSBtX3BsYXRmb3JtTGF5ZXI7CiAgICAgICAg
IGlmIChtX3BsYXRmb3JtTGF5ZXIpCi0gICAgICAgICAgICB1cGRhdGUuZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8V0NQbGF0Zm9ybUxheWVyR0NHTCo+KG1fcGxhdGZv
cm1MYXllciktPmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcigpLnRvVUludDY0KCk7CisgICAg
ICAgICAgICB1cGRhdGUuZGlzcGxheUJ1ZmZlcklkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxXQ1Bs
YXRmb3JtTGF5ZXJHQ0dMKj4obV9wbGF0Zm9ybUxheWVyKS0+dGFrZURpc3BsYXlCdWZmZXJJZGVu
dGlmaWVyKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVwZGF0ZS5ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIgPSAwOworICAgICAgICAgICAgdXBkYXRlLmRpc3BsYXlCdWZmZXJJZGVu
dGlmaWVyID0gbnVsbHB0cjsKICAgICB9CiAgICAgbV9vYnNlcnZlci0+Y29tbWl0TGF5ZXJVcGF0
ZUluZm8oV1RGTW92ZSh1cGRhdGUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oCmluZGV4IGM3YjRkZDgxYjdlMS4uM2YxZjc2ZWRi
MTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1Vw
YXRlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBh
dGVJbmZvLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV0NC
YWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJXQ0Rpc3BsYXlCdWZmZXJJZGVudGlmaWVyLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyLmg+CiAjaW5jbHVkZSA8b3B0aW9uYWw+CkBAIC03NCw2ICs3NSw3IEBAIHN0cnVj
dCBXQ0xheWVyVXBhdGVJbmZvIHsKICAgICBib29sIGNvbnRlbnRzVmlzaWJsZTsKICAgICBib29s
IGJhY2tmYWNlVmlzaWJpbGl0eTsKICAgICBib29sIHByZXNlcnZlczNEOworICAgIGJvb2wgcGxh
dGZvcm1MYXllcjsKICAgICBXZWJDb3JlOjpDb2xvciBzb2xpZENvbG9yOwogICAgIFdlYkNvcmU6
OkNvbG9yIGJhY2tncm91bmRDb2xvcjsKICAgICBXZWJDb3JlOjpDb2xvciBkZWJ1Z0JvcmRlckNv
bG9yOwpAQCAtODgsNyArOTAsNyBAQCBzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7CiAgICAgV2Vi
Q29yZTo6RmlsdGVyT3BlcmF0aW9ucyBiYWNrZHJvcEZpbHRlcnM7CiAgICAgV2ViQ29yZTo6Rmxv
YXRSb3VuZGVkUmVjdCBiYWNrZHJvcEZpbHRlcnNSZWN0OwogICAgIFdlYkNvcmU6OkZsb2F0Um91
bmRlZFJlY3QgY29udGVudHNDbGlwcGluZ1JlY3Q7Ci0gICAgdWludDY0X3QgZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyOworICAgIFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIgZGlzcGxheUJ1
ZmZlcklkZW50aWZpZXI7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CkBAIC0xMzYsNyArMTM4LDcgQEAgc3RydWN0
IFdDTGF5ZXJVcGF0ZUluZm8gewogICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
OkJhY2tkcm9wRmlsdGVycykKICAgICAgICAgICAgIGVuY29kZXIgPDwgYmFja2Ryb3BGaWx0ZXJz
IDw8IGJhY2tkcm9wRmlsdGVyc1JlY3Q7CiAgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6UGxhdGZvcm1MYXllcikKLSAgICAgICAgICAgIGVuY29kZXIgPDwgZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyOworICAgICAgICAgICAgZW5jb2RlciA8PCBwbGF0Zm9ybUxheWVyIDw8
IGRpc3BsYXlCdWZmZXJJZGVudGlmaWVyOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDxjbGFzcyBE
ZWNvZGVyPgpAQCAtMjQxLDcgKzI0Myw5IEBAIHN0cnVjdCBXQ0xheWVyVXBhdGVJbmZvIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlc3Vs
dC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UGxhdGZvcm1MYXllcikgewotICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKSkK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnBsYXRmb3JtTGF5ZXIpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LmRpc3BsYXlCdWZmZXJJZGVudGlmaWVyKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7Cg==
</data>
<flag name="commit-queue"
          id="471680"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446315</attachid>
            <date>2021-12-07 23:36:16 -0800</date>
            <delta_ts>2021-12-14 23:38:17 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>29810</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcAppbmRleCA1ZDY0ZGVjZjQxY2MuLjBhZTI2NDdlN2Q3MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cApAQCAtMTQ2LDYgKzE0Niw3IEBACiAKICNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCiAjaW5j
bHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiV0NEaXNwbGF5QnVmZmVy
TWFuYWdlci5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMjk5LDYgKzMwMCwx
MSBAQCB2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZENsb3NlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbikKICAgICAvLyBSZW1vdGVHcmFwaGljc0NvbnRleHRzR0wgb2JqZWN0
cyBhcmUgdW5uZWVkZWQgYWZ0ZXIgY29ubmVjdGlvbiBjbG9zZXMuCiAgICAgbV9yZW1vdGVHcmFw
aGljc0NvbnRleHRHTE1hcC5jbGVhcigpOwogI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX0xBWUVS
X1dDKQorICAgIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0
Y2goW3dlYlByb2Nlc3NJZGVudGlmaWVyID0gbV93ZWJQcm9jZXNzSWRlbnRpZmllcl0geworICAg
ICAgICBXQ0Rpc3BsYXlCdWZmZXJNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZW1vdmVBbGxEaXNwbGF5
QnVmZmVyc0ZvclByb2Nlc3Mod2ViUHJvY2Vzc0lkZW50aWZpZXIpOworICAgIH0pOworI2VuZGlm
CiAKICAgICBncHVQcm9jZXNzKCkuY29ubmVjdGlvblRvV2ViUHJvY2Vzc0Nsb3NlZChjb25uZWN0
aW9uKTsKICAgICBncHVQcm9jZXNzKCkucmVtb3ZlR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcygq
dGhpcyk7IC8vIE1heSBkZXN0cm95IHx0aGlzfC4KQEAgLTM1NSwxMiArMzYxLDYgQEAgdm9pZCBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlV0NMYXllclRyZWVIb3N0KFdlYktpdDo6
V0NMYXllclRyZWVIb3N0SWQKIHsKICAgICBtX3JlbW90ZVdDTGF5ZXJUcmVlSG9zdE1hcC5yZW1v
dmUoaWRlbnRpZmllcik7CiB9Ci0KLVJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4gR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKEdyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllciBpZGVudGlmaWVyKQotewotICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgcmV0dXJuIG1fcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xNYXAuZ2V0
KGlkZW50aWZpZXIpOwotfQogI2VuZGlmCiAKIGJvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6YWxsb3dzRXhpdFVuZGVyTWVtb3J5UHJlc3N1cmUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggZmFi
NjcwZmI5MDljLi5kYmUxZjRlZWE3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMTcxLDEwICsxNzEsNiBAQCBw
dWJsaWM6CiAgICAgUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkmIGltYWdlRGVjb2RlckFWRlBy
b3h5KCk7CiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKLSAgICBSZWZQdHI8
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+IGZpbmRSZW1vdGVHcmFwaGljc0NvbnRleHRHTChHcmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIpOwotI2VuZGlmCi0KICAgICB2b2lkIHVwZGF0ZVN1cHBv
cnRlZFJlbW90ZUNvbW1hbmRzKCk7CiAKICAgICBib29sIGFsbG93c0V4aXRVbmRlck1lbW9yeVBy
ZXNzdXJlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oCmluZGV4IDE1OWU1MDU2NzcwNC4u
M2NjZjE5YzAyMTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaApAQCAtNTgsNiArNTgsMTEgQEAg
Y2xhc3MgTWFjaFNlbmRSaWdodDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKKyNpZiBVU0UoR1JB
UEhJQ1NfTEFZRVJfV0MpCitjbGFzcyBXQ0Rpc3BsYXlCdWZmZXJJZGVudGlmaWVyOworY2xhc3Mg
V0NEaXNwbGF5QnVmZmVyTWFuYWdlcjsKKyNlbmRpZgorCiAvLyBHUFUgcHJvY2VzcyBzaWRlIGlt
cGxlbWVudGF0aW9uIG9mIHRoYXQgcmVjZWl2ZXMgbWVzc2FnZXMgYWJvdXQgR3JhcGhpY3NDb250
ZXh0R0wgY2FsbHMKIC8vIGFuZCBpc3N1ZXMgcmVhbCBHcmFwaGljc0NvbnRleHRHTCBjYWxscyBi
YXNlZCBvbiB0aGUgcmVjZWl2ZWQgbWVzc2FnZXMuCiAvLyBUaGUgaW1wbGVtZW50YXRpb24gaXMg
bGFyZ2VseSBnZW5lcmF0ZWQgYnkgcnVubmluZyBUb29scy9TY3JpcHRzL2dlbmVyYXRlLWdwdXAt
d2ViZ2wuCkBAIC03MywxMSArNzgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNwbGF5V2FzUmVj
b25maWd1cmVkKCk7CiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKLSAgICAv
LyBGSVhNRTogVGhpcyBpcyBsYXllcmluZyB2aW9sYXRpb24gYW5kIHNob3VsZCBiZSByZW1vdmVk
LgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKLSNlbmRpZgotCiBw
cm90ZWN0ZWQ6CiAgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0woR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyYsIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCYsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmKTsKICAgICB2b2lkIGluaXRpYWxp
emUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwpAQCAtMTAwLDYgKzEw
MCw4IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIG5vdGlmeU1hcmtDb250ZXh0Q2hhbmdlZCgpOwog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGlzcGxheShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFdURjo6TWFjaFNlbmRSaWdodCYmKT4mJikgPSAwOworI2Vs
aWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGlz
cGxheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIpPiYm
KSA9IDA7CiAjZWxzZQogICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3Nh
Z2VzLmluCmluZGV4IDE2YjNlOWU4MjZlYS4uMDYyYjZlMTg4NjFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVz
c2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCkBAIC0yOSw3ICsyOSwxMCBAQCBtZXNzYWdlcyAt
PiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTCBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgdm9pZCBQcmVwYXJlRm9yRGlzcGxheSgpIC0+IChNYWNoU2VuZFJp
Z2h0IGRpc3BsYXlCdWZmZXIpIFN5bmNocm9ub3VzIE5vdFN0cmVhbUVuY29kYWJsZVJlcGx5CiAj
ZW5kaWYKLSNpZiAhUExBVEZPUk0oQ09DT0EpCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQor
ICAgIHZvaWQgUHJlcGFyZUZvckRpc3BsYXkoKSAtPiAoV2ViS2l0OjpXQ0Rpc3BsYXlCdWZmZXJJ
ZGVudGlmaWVyIGRpc3BsYXlCdWZmZXIpIFN5bmNocm9ub3VzCisjZW5kaWYKKyNpZiAhUExBVEZP
Uk0oQ09DT0EpICYmICFVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCiAgICAgdm9pZCBQcmVwYXJlRm9y
RGlzcGxheSgpIC0+ICgpIFN5bmNocm9ub3VzCiAjZW5kaWYKICAgICB2b2lkIEVuc3VyZUV4dGVu
c2lvbkVuYWJsZWQoU3RyaW5nIGV4dGVuc2lvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4u
Y3BwCmluZGV4IDlkZjgzZjQ2MDdjYy4uOGI4NGQwMGJhODUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFdpbi5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykgJiYgRU5BQkxFKFdFQkdMKSAmJiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSAiR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIldDRGlzcGxheUJ1ZmZlck1hbmFnZXIuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQwLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgLy8gUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0wgb3ZlcnJpZGVzLgogICAgIHZvaWQgcGxhdGZvcm1Xb3JrUXVl
dWVJbml0aWFsaXplKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKSBmaW5h
bDsKKyAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV0NE
aXNwbGF5QnVmZmVySWRlbnRpZmllcik+JiYpIGZpbmFsOwogfTsKIAogUmVmPFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMPiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Y3JlYXRlKEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMsIEdyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllciBncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQmIHJlbmRlcmluZ0JhY2tlbmQsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmIHN0cmVh
bSkKQEAgLTU5LDE5ICs2MSwxMyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luOjpw
bGF0Zm9ybVdvcmtRdWV1ZUluaXRpYWxpemUoV2ViQ29yZTo6R3JhcGhpY3NDbwogICAgIG1fY29u
dGV4dCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFdU
Rk1vdmUoYXR0cmlidXRlcykpOwogfQogCi12b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpw
cmVwYXJlRm9yRGlzcGxheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luOjpwcmVwYXJlRm9yRGlzcGxh
eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fY29udGV4dC0+cHJlcGFyZUZvckRpc3BsYXkoKTsK
LSAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIGF1dG8gaWRlbnRpZmllciA9IFdDRGlzcGxh
eUJ1ZmZlck1hbmFnZXI6OnNpbmdsZXRvbigpLmFkZERpc3BsYXlCdWZmZXIobV93ZWJQcm9jZXNz
SWRlbnRpZmllciwgbV9jb250ZXh0LT5sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKCkpOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGlkZW50aWZpZXIpOwogfQogCi0jaWYgVVNFKEdSQVBISUNT
X0xBWUVSX1dDKQotUGxhdGZvcm1MYXllciogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBsYXRm
b3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRleHQtPmxheWVyQ29udGVudHNE
aXNwbGF5RGVsZWdhdGUoKS0+cGxhdGZvcm1MYXllcigpOwotfQotI2VuZGlmCi0KIH0KIAogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVt
b3RlV0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGZkM2QyOWZjNGUwMC4uMDAzMmZh
YjFlMTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2Mv
UmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcApAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVt
b3RlV0NMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0cmVhbUNvbm5l
Y3Rpb25Xb3JrUXVldWUuaCIKKyNpbmNsdWRlICJXQ0Rpc3BsYXlCdWZmZXJNYW5hZ2VyLmgiCiAj
aW5jbHVkZSAiV0NTY2VuZS5oIgogI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgiCiAKQEAgLTQ2LDYg
KzQ3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdD4gUmVtb3RlV0NM
YXllclRyZWVIb3N0OjpjcmVhdGUoR1BVQ29ubmVjdGkKIAogUmVtb3RlV0NMYXllclRyZWVIb3N0
OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3QoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgY29ubmVj
dGlvblRvV2ViUHJvY2VzcywgV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVyIGlkZW50
aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKICAgICA6IG1fY29ubmVjdGlvblRvV2ViUHJv
Y2Vzcyhjb25uZWN0aW9uVG9XZWJQcm9jZXNzKQorICAgICwgbV93ZWJQcm9jZXNzSWRlbnRpZmll
cihjb25uZWN0aW9uVG9XZWJQcm9jZXNzLndlYlByb2Nlc3NJZGVudGlmaWVyKCkpCiAgICAgLCBt
X2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fc2hhcmVkU2NlbmVDb250ZXh0SG9sZGVy
KGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ3B1UHJvY2VzcygpLnNoYXJlZFNjZW5lQ29udGV4dCgp
LmVuc3VyZUhvbGRlckZvcldpbmRvdyhuYXRpdmVXaW5kb3cpKQogewpAQCAtODIsMTcgKzg0LDE2
IEBAIHVpbnQ2NF90IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0
aW9uSUQoKSBjb25zdAogCiB2b2lkIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlKFdDVXBh
dGVJbmZvJiYgdXBkYXRlKQogewotICAgIC8vIGZpbmRSZW1vdGVHcmFwaGljc0NvbnRleHRHTCBz
aG91bGQgYmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZAotICAgIGF1dG8gcmVtb3RlR0NHTCA9
IFdURjo6bWFwKHVwZGF0ZS5jaGFuZ2VkTGF5ZXJzLCBbdGhpc10oYXV0byYgbGF5ZXJVcGRhdGUp
IC0+IFJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4gewotICAgICAgICBpZiAobGF5ZXJV
cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKLSAgICAgICAg
ICAgIGlmIChsYXllclVwZGF0ZS5ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1fY29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+ZmluZFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMKG1ha2VPYmplY3RJZGVudGlmaWVyPEdyYXBoaWNzQ29udGV4dEdMSWRlbnRp
ZmllclR5cGU+KGxheWVyVXBkYXRlLmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcikpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0pOworICAgIHJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0g
V2Vha1B0cigqdGhpcyksIHNjZW5lID0gbV9zY2VuZS5nZXQoKSwgdXBkYXRlID0gV1RGTW92ZSh1
cGRhdGUpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvIGRpc3BsYXlEZWxlZ2F0ZXMgPSBXVEY6
Om1hcCh1cGRhdGUuY2hhbmdlZExheWVycywgW3RoaXNdKGF1dG8mIGxheWVyVXBkYXRlKSAtPiBS
ZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlPiB7Cisg
ICAgICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRm
b3JtTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAobGF5ZXJVcGRhdGUuZGlzcGxheUJ1ZmZl
cklkZW50aWZpZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXQ0Rpc3BsYXlCdWZmZXJN
YW5hZ2VyOjpzaW5nbGV0b24oKS5yZW1vdmVEaXNwbGF5QnVmZmVyKG1fd2ViUHJvY2Vzc0lkZW50
aWZpZXIsIGxheWVyVXBkYXRlLmRpc3BsYXlCdWZmZXJJZGVudGlmaWVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9KTsKIAotICAgIHJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtU
aGlzID0gV2Vha1B0cigqdGhpcyksIHNjZW5lID0gbV9zY2VuZS5nZXQoKSwgdXBkYXRlID0gV1RG
TW92ZSh1cGRhdGUpLCByZW1vdGVHQ0dMID0gV1RGTW92ZShyZW1vdGVHQ0dMKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgc2NlbmUtPnVwZGF0ZShXVEZNb3ZlKHVwZGF0ZSksIFdURk1vdmUocmVtb3Rl
R0NHTCkpOworICAgICAgICBzY2VuZS0+dXBkYXRlKFdURk1vdmUodXBkYXRlKSwgV1RGTW92ZShk
aXNwbGF5RGVsZWdhdGVzKSk7CiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhp
cywgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKV0gewogICAgICAgICAgICAgaWYgKCF3ZWFr
VGhpcykKICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmgKaW5k
ZXggZWRjNGZiYjQxMGE2Li5iMWJiMmFhZjU3ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmgK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAi
V0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oIgogI2luY2x1ZGUgIldDU2hhcmVkU2NlbmVDb250
ZXh0SG9sZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CkBAIC01
NSw2ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0
aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcz4gbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFdlYkNvcmU6OlByb2Nlc3NJ
ZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7CiAgICAgV0NMYXllclRyZWVIb3N0SWRl
bnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgUmVmUHRyPFdDU2hhcmVkU2NlbmVDb250ZXh0SG9s
ZGVyOjpIb2xkZXI+IG1fc2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxXQ1NjZW5lPiBtX3NjZW5lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL3djL1dDRGlzcGxheUJ1ZmZlck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDRGlzcGxheUJ1ZmZlck1hbmFnZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjczZjY1NjkxMmVkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDRGlzcGxh
eUJ1ZmZlck1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldDRGlzcGxheUJ1ZmZlck1hbmFnZXIuaCIKKwor
I2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgIldDRGlzcGxheUJ1ZmZlcklk
ZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3Bs
YXlEZWxlZ2F0ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV0NEaXNwbGF5QnVmZmVyTWFu
YWdlciYgV0NEaXNwbGF5QnVmZmVyTWFuYWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8V0NEaXNwbGF5QnVmZmVyTWFuYWdlcj4gZGlzcGxheUJ1ZmZlck1hbmFn
ZXI7CisgICAgcmV0dXJuIGRpc3BsYXlCdWZmZXJNYW5hZ2VyOworfQorCitXQ0Rpc3BsYXlCdWZm
ZXJJZGVudGlmaWVyIFdDRGlzcGxheUJ1ZmZlck1hbmFnZXI6OmFkZERpc3BsYXlCdWZmZXIoV2Vi
Q29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcywgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4gZGlzcGxheUJ1ZmZlcikKK3sKKyAgICBhdXRv
IHByb2Nlc3NBZGRSZXN1bHQgPSBtX2Rpc3BsYXlCdWZmZXJNYXAuYWRkKHByb2Nlc3MsIEhhc2hT
ZXQ8UmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4+
IHsgfSk7CisgICAgYXV0byBkaXNwbGF5QnVmZmVyQWRkUmVzdWx0ID0gcHJvY2Vzc0FkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuYWRkKGRpc3BsYXlCdWZmZXIpOworICAgIGlmICghZGlzcGxheUJ1
ZmZlckFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gZGlzcGxheUJ1ZmZlci5nZXQoKTsKK30KKworUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4gV0NEaXNwbGF5QnVmZmVyTWFuYWdlcjo6cmVt
b3ZlRGlzcGxheUJ1ZmZlcihXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzLCBXQ0Rp
c3BsYXlCdWZmZXJJZGVudGlmaWVyIGRpc3BsYXlCdWZmZXIpCit7CisgICAgQVNTRVJUKG1fZGlz
cGxheUJ1ZmZlck1hcC5jb250YWlucyhwcm9jZXNzKSk7CisgICAgQVNTRVJUKG1fZGlzcGxheUJ1
ZmZlck1hcC5maW5kKHByb2Nlc3MpLT52YWx1ZS5jb250YWlucyhkaXNwbGF5QnVmZmVyKSk7Cisg
ICAgcmV0dXJuIG1fZGlzcGxheUJ1ZmZlck1hcC5maW5kKHByb2Nlc3MpLT52YWx1ZS50YWtlKGRp
c3BsYXlCdWZmZXIpOworfQorCit2b2lkIFdDRGlzcGxheUJ1ZmZlck1hbmFnZXI6OnJlbW92ZUFs
bERpc3BsYXlCdWZmZXJzRm9yUHJvY2VzcyhXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBwcm9j
ZXNzKQoreworICAgIG1fZGlzcGxheUJ1ZmZlck1hcC5yZW1vdmUocHJvY2Vzcyk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDRGlzcGxh
eUJ1ZmZlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9X
Q0Rpc3BsYXlCdWZmZXJNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi44OGUyNzNmYzU2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NEaXNwbGF5QnVmZmVyTWFuYWdlci5oCkBAIC0wLDAgKzEs
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1JBUEhJQ1Nf
TEFZRVJfV0MpCisKKyNpbmNsdWRlICJXQ0Rpc3BsYXlCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgR3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlOworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV0NEaXNwbGF5QnVmZmVyTWFuYWdlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFdDRGlzcGxheUJ1ZmZlck1hbmFnZXImIHNpbmdsZXRvbigpOworCisgICAgV0NEaXNw
bGF5QnVmZmVySWRlbnRpZmllciBhZGREaXNwbGF5QnVmZmVyKFdlYkNvcmU6OlByb2Nlc3NJZGVu
dGlmaWVyLCBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVn
YXRlPik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlE
ZWxlZ2F0ZT4gcmVtb3ZlRGlzcGxheUJ1ZmZlcihXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwg
V0NEaXNwbGF5QnVmZmVySWRlbnRpZmllcik7CisgICAgdm9pZCByZW1vdmVBbGxEaXNwbGF5QnVm
ZmVyc0ZvclByb2Nlc3MoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIpOworCitwcml2YXRlOgor
ICAgIEhhc2hNYXA8V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIEhhc2hTZXQ8UmVmUHRyPFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4+PiBtX2Rpc3BsYXlC
dWZmZXJNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShH
UkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy93Yy9XQ1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy93Yy9XQ1NjZW5lLmNwcAppbmRleCBiMzU3NDVjZDVlYWMuLjM1OGFmZWU1ZDdjOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcApAQCAt
NzAsNyArNzAsNyBAQCBXQ1NjZW5lOjp+V0NTY2VuZSgpCiAgICAgbV90ZXh0dXJlTWFwcGVyID0g
bnVsbHB0cjsKIH0KIAotdm9pZCBXQ1NjZW5lOjp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUs
IFZlY3RvcjxSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+PiYmIHJlbW90ZUdDR0wpCit2
b2lkIFdDU2NlbmU6OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVwZGF0ZSwgVmVjdG9yPFJlZlB0cjxX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU+PiYmIGRpc3BsYXlE
ZWxlZ2F0ZXMpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgV0NTY2VuZTo6dXBkYXRlKFdD
VXBhdGVJbmZvJiYgdXBkYXRlLCBWZWN0b3I8UmVmUHRyPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
CiAgICAgICAgIG1fbGF5ZXJzLmFkZChpZCwgV1RGTW92ZShsYXllcikpOwogICAgIH0KIAotICAg
IGF1dG8gcmVtb3RlR0NHTEl0ZXJhdG9yID0gcmVtb3RlR0NHTC5iZWdpbigpOworICAgIGF1dG8g
ZGlzcGxheURlbGVnYXRlc0l0ZXJhdG9yID0gZGlzcGxheURlbGVnYXRlcy5iZWdpbigpOwogCiAg
ICAgZm9yIChhdXRvJiBsYXllclVwZGF0ZSA6IHVwZGF0ZS5jaGFuZ2VkTGF5ZXJzKSB7CiAgICAg
ICAgIGF1dG8gbGF5ZXIgPSBtX2xheWVycy5nZXQobGF5ZXJVcGRhdGUuaWQpOwpAQCAtMTY1LDE2
ICsxNjUsMTYgQEAgdm9pZCBXQ1NjZW5lOjp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUsIFZl
Y3RvcjxSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0wKICAgICAgICAgICAgIGxheWVyLT50
ZXhtYXBMYXllci5zZXRCYWNrZHJvcEZpbHRlcnNSZWN0KGxheWVyVXBkYXRlLmJhY2tkcm9wRmls
dGVyc1JlY3QpOwogICAgICAgICB9CiAgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6UGxhdGZvcm1MYXllcikgewotICAgICAgICAgICAgaWYgKCpyZW1vdGVH
Q0dMSXRlcmF0b3IpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHBsYXRmb3JtTGF5ZXIgPSAoKnJl
bW90ZUdDR0xJdGVyYXRvciktPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICAgICAgICAgIGlmICgqZGlz
cGxheURlbGVnYXRlc0l0ZXJhdG9yKSB7CisgICAgICAgICAgICAgICAgYXV0byBwbGF0Zm9ybUxh
eWVyID0gKCpkaXNwbGF5RGVsZWdhdGVzSXRlcmF0b3IpLT5wbGF0Zm9ybUxheWVyKCk7CiAgICAg
ICAgICAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0Q2xpZW50KGxheWVyKTsKICAgICAgICAgICAg
ICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q29udGVudHNMYXllcihwbGF0Zm9ybUxheWVyKTsK
LSAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgfSBlbHNlIGlmICghbGF5ZXJVcGRhdGUu
cGxhdGZvcm1MYXllcikKICAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q29u
dGVudHNMYXllcihudWxscHRyKTsKICAgICAgICAgfQotICAgICAgICByZW1vdGVHQ0dMSXRlcmF0
b3IrKzsKKyAgICAgICAgZGlzcGxheURlbGVnYXRlc0l0ZXJhdG9yKys7CiAgICAgfQotICAgIEFT
U0VSVChyZW1vdGVHQ0dMSXRlcmF0b3IgPT0gcmVtb3RlR0NHTC5lbmQoKSk7CisgICAgQVNTRVJU
KGRpc3BsYXlEZWxlZ2F0ZXNJdGVyYXRvciA9PSBkaXNwbGF5RGVsZWdhdGVzLmVuZCgpKTsKIAog
ICAgIGZvciAoYXV0byBpZCA6IHVwZGF0ZS5yZW1vdmVkTGF5ZXJzKQogICAgICAgICBtX2xheWVy
cy5yZW1vdmUoaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL3djL1dDU2NlbmUuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9X
Q1NjZW5lLmgKaW5kZXggNjNlZDAzZjNlZTg2Li5jYmYyMzZiNzgzMWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmgKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuaApAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IEdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZTsKIGNsYXNzIFRleHR1cmVNYXBw
ZXI7CiBjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXI7CiBjbGFzcyBUZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmU7CkBAIC0zOSw3ICs0MCw2IEBAIGNsYXNzIFRleHR1cmVNYXBwZXJUaWxlZEJh
Y2tpbmdTdG9yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOwogY2xhc3MgV0NTY2VuZUNvbnRleHQ7CiBzdHJ1Y3QgV0NVcGF0ZUluZm87CiAK
QEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIFdDU2NlbmUoKTsKICAgICB+V0NTY2VuZSgp
OwogICAgIHZvaWQgaW5pdGlhbGl6ZShXQ1NjZW5lQ29udGV4dCYpOwotICAgIHZvaWQgdXBkYXRl
KFdDVXBhdGVJbmZvJiYsIFZlY3RvcjxSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+PiYm
KTsKKyAgICB2b2lkIHVwZGF0ZShXQ1VwYXRlSW5mbyYmLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4+JiYpOwogCiBwcml2YXRlOgog
ICAgIHN0cnVjdCBMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4u
Y21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDM1MGZkZDQ5N2Vh
YS4uNTcwMGFhODgyMTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTEyLDYgKzEyLDcg
QEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMV2luLmNwcAogCiAgICAgR1BVUHJvY2Vzcy9ncmFwaGljcy93
Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwCisgICAgR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9X
Q0Rpc3BsYXlCdWZmZXJNYW5hZ2VyLmNwcAogICAgIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NT
Y2VuZS5jcHAKICAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmVDb250ZXh0LmNwcAog
CkBAIC0xMjAsNiArMTIxLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcyIKICAgICAi
JHtXRUJLSVRfRElSfS9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0
b3IiCiAgICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL1BsdWdpbnMvd2luIgorICAgICIke1dFQktJ
VF9ESVJ9L1NoYXJlZC93YyIKICAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvd2luIgogICAgICIk
e1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9jYWlybyIKICAgICAiJHtXRUJLSVRfRElSfS9V
SVByb2Nlc3MvQVBJL0MvY3VybCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93
ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5CmluZGV4IDA5MzBjZjkxN2JhNy4uYmQ3ZmM1MGY3Mjg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTM2MSw2ICszNjEsNyBAQCBkZWYgdHlwZXNfdGhh
dF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViS2l0OjpUcmFuc2Fj
dGlvbklEJywKICAgICAgICAgJ1dlYktpdDo6VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmll
cicsCiAgICAgICAgICdXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXInLAorICAgICAg
ICAnV2ViS2l0OjpXQ0Rpc3BsYXlCdWZmZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6
V2ViR1BVSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OldlYlBhZ2VQcm94eUlkZW50aWZp
ZXInLAogICAgICAgICAnV2ViS2l0OjpXZWJVUkxTY2hlbWVIYW5kbGVySWRlbnRpZmllcicsCkBA
IC0zNzMsNiArMzc0LDcgQEAgZGVmIGNvbmRpdGlvbnNfZm9yX2hlYWRlcihoZWFkZXIpOgogICAg
ICAgICAnIklucHV0TWV0aG9kU3RhdGUuaCInOiBbIlBMQVRGT1JNKEdUSykiLCAiUExBVEZPUk0o
V1BFKSJdLAogICAgICAgICAnIkxheWVySG9zdGluZ0NvbnRleHQuaCInOiBbIlBMQVRGT1JNKENP
Q09BKSIsIF0sCiAgICAgICAgICciR2VzdHVyZVR5cGVzLmgiJzogWyJQTEFURk9STShJT1NfRkFN
SUxZKSJdLAorICAgICAgICAnIldDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIuaCInOiBbIlVTRShH
UkFQSElDU19MQVlFUl9XQykiXSwKICAgICAgICAgJyJXQ0xheWVyVHJlZUhvc3RJZGVudGlmaWVy
LmgiJzogWyJVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpIl0sCiAgICAgICAgICc8V2ViQ29yZS9DVlV0
aWxpdGllcy5oPic6IFsiUExBVEZPUk0oQ09DT0EpIiwgXSwKICAgICAgICAgJzxXZWJDb3JlL0Rh
dGFEZXRlY3RvclR5cGUuaD4nOiBbIkVOQUJMRShEQVRBX0RFVEVDVElPTikiXSwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3djL1dDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIuaCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL3djL1dDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdkN2Y0NDMwMzNkYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3djL1dDRGlzcGxheUJ1ZmZlcklkZW50
aWZpZXIuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmll
ci5oPgorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFRleHRTdHJlYW07Cit9CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZTsK
K30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdDRGlzcGxheUJ1ZmZlcklkZW50aWZp
ZXIgeworcHVibGljOgorICAgIFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIoKSB7IH0KKworICAg
IFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNvbnRlbnRz
RGlzcGxheURlbGVnYXRlKiBkZWxlZ2F0ZSkKKyAgICAgICAgOiBtX2lkZW50aWZpZXIoZGVsZWdh
dGUpCisgICAgeworICAgIH0KKworICAgIG9wZXJhdG9yIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
b250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
aWRlbnRpZmllcjsKKyAgICB9CisKKyAgICB2b2lkIG9wZXJhdG9yPShXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUqIGRlbGVnYXRlKQorICAgIHsKKyAgICAgICAg
bV9pZGVudGlmaWVyID0gZGVsZWdhdGU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGVuY29kZXIgPDwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9pZGVudGlmaWVyKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRp
b25hbDxXQ0Rpc3BsYXlCdWZmZXJJZGVudGlmaWVyPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
KyAgICB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8aW50cHRyX3Q+IGlkZW50aWZpZXI7CisgICAg
ICAgIGRlY29kZXIgPj4gaWRlbnRpZmllcjsKKyAgICAgICAgaWYgKCFpZGVudGlmaWVyKQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8V2ViQ29yZTo6R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKj4oKmlk
ZW50aWZpZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q29udGVudHNEaXNwbGF5RGVsZWdhdGUqIG1faWRlbnRpZmllciB7IG51bGxwdHIgfTsKK307CisK
K2lubGluZSBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiBzdHJl
YW0sIGNvbnN0IFdDRGlzcGxheUJ1ZmZlcklkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKiBkZWxlZ2F0ZSA9
IGlkZW50aWZpZXI7CisgICAgcmV0dXJuIHN0cmVhbSA8PCByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oZGVsZWdhdGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eVdDLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eVdDLmNwcAppbmRleCA4MTQ4NTA2YzgzODguLmE1ZTJiMDUzMmZhOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5V0MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eVdDLmNwcApAQCAt
ODQsMTEgKzg0LDEzIEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eVdDOjpwcmVw
YXJlRm9yRGlzcGxheSgpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3BsYXkoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpQcmVwYXJlRm9yRGlzcGxheTo6UmVwbHkoKSk7CisgICAgV0NEaXNwbGF5
QnVmZmVySWRlbnRpZmllciBkaXNwbGF5QnVmZmVyOworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3Bs
YXkoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQcmVwYXJlRm9yRGlzcGxh
eTo6UmVwbHkoZGlzcGxheUJ1ZmZlcikpOwogICAgIGlmICghc2VuZFJlc3VsdCkgewogICAgICAg
ICBtYXJrQ29udGV4dExvc3QoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBzdGF0aWNf
Y2FzdDxXQ1BsYXRmb3JtTGF5ZXJHQ0dMKj4obV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRl
LT5wbGF0Zm9ybUxheWVyKCkpLT5hZGREaXNwbGF5QnVmZmVySWRlbnRpZmllcihkaXNwbGF5QnVm
ZmVyKTsKICAgICBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5
ZXJHQ0dMLmgKaW5kZXggYTg3ZTA4ZTgyZTE5Li45YWExMjRhYjQwODQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NH
TC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvV0NQbGF0
Zm9ybUxheWVyR0NHTC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIldDRGlzcGxheUJ1
ZmZlcklkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1dDUGxhdGZvcm1MYXllci5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTM4LDggKzM5LDIyIEBAIHB1YmxpYzoKICAgICB9CiAg
ICAgR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyJiBncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIoKSB7IHJldHVybiBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsgfQogCisgICAgV0NE
aXNwbGF5QnVmZmVySWRlbnRpZmllciB0YWtlRGlzcGxheUJ1ZmZlcklkZW50aWZpZXIoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaXNwbGF5QnVmZmVySWRlbnRpZmll
ciwgeyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZERpc3BsYXlCdWZmZXJJZGVudGlmaWVyKFdD
RGlzcGxheUJ1ZmZlcklkZW50aWZpZXIgZGlzcGxheUJ1ZmZlcikKKyAgICB7CisgICAgICAgIGlm
ICghZGlzcGxheUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKCFt
X2Rpc3BsYXlCdWZmZXJJZGVudGlmaWVyKTsKKyAgICAgICAgbV9kaXNwbGF5QnVmZmVySWRlbnRp
ZmllciA9IGRpc3BsYXlCdWZmZXI7CisgICAgfQorCiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllciBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsKKyAgICBXQ0Rp
c3BsYXlCdWZmZXJJZGVudGlmaWVyIG1fZGlzcGxheUJ1ZmZlcklkZW50aWZpZXI7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwCmluZGV4IGJkOWFjYmU5MzMzZi4uYzQy
MjVmYzEzZWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93
Yy9HcmFwaGljc0xheWVyV0MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyV0M6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IHJlY3QsIFNob3UKIHZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRDb250ZW50c05lZWRzRGlzcGxh
eSgpCiB7CiAgICAgLy8gRm9yIGV4YW1wbGUsIGlmIFdlYkdMIGNhbnZhcyBjaGFuZ2VkLCBpdCBu
ZWVkcyBmbHVzaCB0byBkaXNwbGF5LgotICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZCh7IH0p
OworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9ybUxh
eWVyKTsKIH0KIAogYm9vbCBHcmFwaGljc0xheWVyV0M6OnNldENoaWxkcmVuKFZlY3RvcjxSZWY8
R3JhcGhpY3NMYXllcj4+JiYgY2hpbGRyZW4pCkBAIC00NzUsMTAgKzQ3NSwxMSBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJXQzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiAg
ICAgICAgIHVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNSZWN0ID0gYmFja2Ryb3BGaWx0ZXJzUmVjdCgp
OwogICAgIH0KICAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9y
bUxheWVyKSB7CisgICAgICAgIHVwZGF0ZS5wbGF0Zm9ybUxheWVyID0gbV9wbGF0Zm9ybUxheWVy
OwogICAgICAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQotICAgICAgICAgICAgdXBkYXRlLmdyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PFdDUGxhdGZvcm1MYXllckdDR0wq
PihtX3BsYXRmb3JtTGF5ZXIpLT5ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIoKS50b1VJbnQ2
NCgpOworICAgICAgICAgICAgdXBkYXRlLmRpc3BsYXlCdWZmZXJJZGVudGlmaWVyID0gc3RhdGlj
X2Nhc3Q8V0NQbGF0Zm9ybUxheWVyR0NHTCo+KG1fcGxhdGZvcm1MYXllciktPnRha2VEaXNwbGF5
QnVmZmVySWRlbnRpZmllcigpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB1cGRhdGUuZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyID0gMDsKKyAgICAgICAgICAgIHVwZGF0ZS5kaXNwbGF5
QnVmZmVySWRlbnRpZmllciA9IG51bGxwdHI7CiAgICAgfQogICAgIG1fb2JzZXJ2ZXItPmNvbW1p
dExheWVyVXBhdGVJbmZvKFdURk1vdmUodXBkYXRlKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaAppbmRleCBjN2I0ZGQ4MWI3ZTEu
LjNmMWY3NmVkYjEzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2Uvd2MvV0NVcGF0ZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS93Yy9XQ1VwYXRlSW5mby5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIldDQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiV0NEaXNwbGF5QnVmZmVySWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NMYXllci5oPgogI2luY2x1ZGUgPG9wdGlvbmFsPgpAQCAtNzQsNiArNzUs
NyBAQCBzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7CiAgICAgYm9vbCBjb250ZW50c1Zpc2libGU7
CiAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHk7CiAgICAgYm9vbCBwcmVzZXJ2ZXMzRDsKKyAg
ICBib29sIHBsYXRmb3JtTGF5ZXI7CiAgICAgV2ViQ29yZTo6Q29sb3Igc29saWRDb2xvcjsKICAg
ICBXZWJDb3JlOjpDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CiAgICAgV2ViQ29yZTo6Q29sb3IgZGVi
dWdCb3JkZXJDb2xvcjsKQEAgLTg4LDcgKzkwLDcgQEAgc3RydWN0IFdDTGF5ZXJVcGF0ZUluZm8g
ewogICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgYmFja2Ryb3BGaWx0ZXJzOwogICAgIFdl
YkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgYmFja2Ryb3BGaWx0ZXJzUmVjdDsKICAgICBXZWJDb3Jl
OjpGbG9hdFJvdW5kZWRSZWN0IGNvbnRlbnRzQ2xpcHBpbmdSZWN0OwotICAgIHVpbnQ2NF90IGdy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsKKyAgICBXQ0Rpc3BsYXlCdWZmZXJJZGVudGlmaWVy
IGRpc3BsYXlCdWZmZXJJZGVudGlmaWVyOwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
ICAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApAQCAtMTM2LDcgKzEzOCw3
IEBAIHN0cnVjdCBXQ0xheWVyVXBhdGVJbmZvIHsKICAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xh
eWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMpCiAgICAgICAgICAgICBlbmNvZGVyIDw8IGJhY2tk
cm9wRmlsdGVycyA8PCBiYWNrZHJvcEZpbHRlcnNSZWN0OwogICAgICAgICBpZiAoY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpCi0gICAgICAgICAgICBlbmNvZGVyIDw8IGdy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgcGxhdGZv
cm1MYXllciA8PCBkaXNwbGF5QnVmZmVySWRlbnRpZmllcjsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZSA8Y2xhc3MgRGVjb2Rlcj4KQEAgLTI0MSw3ICsyNDMsOSBAQCBzdHJ1Y3QgV0NMYXllclVwYXRl
SW5mbyB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKLSAg
ICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmdyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllcikpCisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wbGF0Zm9y
bUxheWVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5kaXNwbGF5QnVmZmVySWRlbnRpZmllcikpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447206</attachid>
            <date>2021-12-14 23:38:17 -0800</date>
            <delta_ts>2021-12-15 22:06:41 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>34004</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcAppbmRleCAyY2E5MGY1MGMzYjEuLjcyYTQyMmQ0YWVmZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cApAQCAtMTQ2LDYgKzE0Niw3IEBACiAKICNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCiAjaW5j
bHVkZSAiUmVtb3RlV0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiV0NDb250ZW50QnVmZmVy
TWFuYWdlci5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMzAzLDYgKzMwNCwx
MSBAQCB2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZENsb3NlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbikKICAgICAvLyBSZW1vdGVHcmFwaGljc0NvbnRleHRzR0wgb2JqZWN0
cyBhcmUgdW5uZWVkZWQgYWZ0ZXIgY29ubmVjdGlvbiBjbG9zZXMuCiAgICAgbV9yZW1vdGVHcmFw
aGljc0NvbnRleHRHTE1hcC5jbGVhcigpOwogI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX0xBWUVS
X1dDKQorICAgIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0
Y2goW3dlYlByb2Nlc3NJZGVudGlmaWVyID0gbV93ZWJQcm9jZXNzSWRlbnRpZmllcl0geworICAg
ICAgICBXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZW1vdmVBbGxDb250ZW50
QnVmZmVyc0ZvclByb2Nlc3Mod2ViUHJvY2Vzc0lkZW50aWZpZXIpOworICAgIH0pOworI2VuZGlm
CiAKICAgICBncHVQcm9jZXNzKCkuY29ubmVjdGlvblRvV2ViUHJvY2Vzc0Nsb3NlZChjb25uZWN0
aW9uKTsKICAgICBncHVQcm9jZXNzKCkucmVtb3ZlR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcygq
dGhpcyk7IC8vIE1heSBkZXN0cm95IHx0aGlzfC4KQEAgLTM1OSwxMiArMzY1LDYgQEAgdm9pZCBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlV0NMYXllclRyZWVIb3N0KFdlYktpdDo6
V0NMYXllclRyZWVIb3N0SWQKIHsKICAgICBtX3JlbW90ZVdDTGF5ZXJUcmVlSG9zdE1hcC5yZW1v
dmUoaWRlbnRpZmllcik7CiB9Ci0KLVJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4gR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKEdyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllciBpZGVudGlmaWVyKQotewotICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgcmV0dXJuIG1fcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xNYXAuZ2V0
KGlkZW50aWZpZXIpOwotfQogI2VuZGlmCiAKIGJvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6YWxsb3dzRXhpdFVuZGVyTWVtb3J5UHJlc3N1cmUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggYjQ1
OTA3ZjI1NDM4Li45ODFiNDhlODdlNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMTc1LDEwICsxNzUsNiBAQCBw
dWJsaWM6CiAgICAgUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkmIGltYWdlRGVjb2RlckFWRlBy
b3h5KCk7CiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKLSAgICBSZWZQdHI8
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+IGZpbmRSZW1vdGVHcmFwaGljc0NvbnRleHRHTChHcmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIpOwotI2VuZGlmCi0KICAgICB2b2lkIHVwZGF0ZVN1cHBv
cnRlZFJlbW90ZUNvbW1hbmRzKCk7CiAKICAgICBib29sIGFsbG93c0V4aXRVbmRlck1lbW9yeVBy
ZXNzdXJlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oCmluZGV4IDE1OWU1MDU2NzcwNC4u
YWMxYTMzZDVhNDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaApAQCAtNTgsNiArNTgsMTEgQEAg
Y2xhc3MgTWFjaFNlbmRSaWdodDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKKyNpZiBVU0UoR1JB
UEhJQ1NfTEFZRVJfV0MpCitjbGFzcyBXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyOworY2xhc3Mg
V0NDb250ZW50QnVmZmVyTWFuYWdlcjsKKyNlbmRpZgorCiAvLyBHUFUgcHJvY2VzcyBzaWRlIGlt
cGxlbWVudGF0aW9uIG9mIHRoYXQgcmVjZWl2ZXMgbWVzc2FnZXMgYWJvdXQgR3JhcGhpY3NDb250
ZXh0R0wgY2FsbHMKIC8vIGFuZCBpc3N1ZXMgcmVhbCBHcmFwaGljc0NvbnRleHRHTCBjYWxscyBi
YXNlZCBvbiB0aGUgcmVjZWl2ZWQgbWVzc2FnZXMuCiAvLyBUaGUgaW1wbGVtZW50YXRpb24gaXMg
bGFyZ2VseSBnZW5lcmF0ZWQgYnkgcnVubmluZyBUb29scy9TY3JpcHRzL2dlbmVyYXRlLWdwdXAt
d2ViZ2wuCkBAIC03MywxMSArNzgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNwbGF5V2FzUmVj
b25maWd1cmVkKCk7CiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKLSAgICAv
LyBGSVhNRTogVGhpcyBpcyBsYXllcmluZyB2aW9sYXRpb24gYW5kIHNob3VsZCBiZSByZW1vdmVk
LgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKLSNlbmRpZgotCiBw
cm90ZWN0ZWQ6CiAgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0woR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyYsIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCYsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmKTsKICAgICB2b2lkIGluaXRpYWxp
emUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwpAQCAtMTAwLDYgKzEw
MCw4IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIG5vdGlmeU1hcmtDb250ZXh0Q2hhbmdlZCgpOwog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGlzcGxheShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFdURjo6TWFjaFNlbmRSaWdodCYmKT4mJikgPSAwOworI2Vs
aWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGlz
cGxheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8V0NDb250ZW50QnVmZmVy
SWRlbnRpZmllcj4pPiYmKSA9IDA7CiAjZWxzZQogICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXko
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMLm1lc3NhZ2VzLmluCmluZGV4IDE2YjNlOWU4MjZlYS4uYzhhYjI5NzcyOTMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0wubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCkBAIC0yOSw3ICsyOSwx
MCBAQCBtZXNzYWdlcyAtPiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTCBOb3RSZWZDb3VudGVkIFN0
cmVhbSB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBQcmVwYXJlRm9yRGlzcGxheSgp
IC0+IChNYWNoU2VuZFJpZ2h0IGRpc3BsYXlCdWZmZXIpIFN5bmNocm9ub3VzIE5vdFN0cmVhbUVu
Y29kYWJsZVJlcGx5CiAjZW5kaWYKLSNpZiAhUExBVEZPUk0oQ09DT0EpCisjaWYgVVNFKEdSQVBI
SUNTX0xBWUVSX1dDKQorICAgIHZvaWQgUHJlcGFyZUZvckRpc3BsYXkoKSAtPiAoc3RkOjpvcHRp
b25hbDxXZWJLaXQ6OldDQ29udGVudEJ1ZmZlcklkZW50aWZpZXI+IGNvbnRlbnRCdWZmZXIpIFN5
bmNocm9ub3VzCisjZW5kaWYKKyNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoR1JBUEhJQ1Nf
TEFZRVJfV0MpCiAgICAgdm9pZCBQcmVwYXJlRm9yRGlzcGxheSgpIC0+ICgpIFN5bmNocm9ub3Vz
CiAjZW5kaWYKICAgICB2b2lkIEVuc3VyZUV4dGVuc2lvbkVuYWJsZWQoU3RyaW5nIGV4dGVuc2lv
bikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTFdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwCmluZGV4IDlkZjgzZjQ2MDdjYy4uODBi
NmI1ZDIzY2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykgJiYgRU5BQkxFKFdFQkdMKSAmJiBQTEFU
Rk9STShXSU4pCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1
ZGUgIldDQ29udGVudEJ1ZmZlck1hbmFnZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dEdMVGV4dHVyZU1hcHBlci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQwLDYg
KzQxLDcgQEAgcHVibGljOgogCiAgICAgLy8gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wgb3ZlcnJp
ZGVzLgogICAgIHZvaWQgcGxhdGZvcm1Xb3JrUXVldWVJbml0aWFsaXplKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKSBmaW5hbDsKKyAgICB2b2lkIHByZXBhcmVGb3JEaXNw
bGF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxXQ0NvbnRlbnRCdWZmZXJJ
ZGVudGlmaWVyPik+JiYpIGZpbmFsOwogfTsKIAogUmVmPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
PiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMsIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciBncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIHJlbmRlcmlu
Z0JhY2tlbmQsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmIHN0cmVhbSkKQEAgLTU5LDE5
ICs2MSwxMyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luOjpwbGF0Zm9ybVdvcmtR
dWV1ZUluaXRpYWxpemUoV2ViQ29yZTo6R3JhcGhpY3NDbwogICAgIG1fY29udGV4dCA9IFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFdURk1vdmUoYXR0cmli
dXRlcykpOwogfQogCi12b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwcmVwYXJlRm9yRGlz
cGxheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luOjpwcmVwYXJlRm9yRGlzcGxheShDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8V0NDb250ZW50QnVmZmVySWRlbnRpZmllcj4pPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fY29udGV4dC0+cHJlcGFyZUZvckRpc3BsYXko
KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIGF1dG8gaWRlbnRpZmllciA9IFdDQ29u
dGVudEJ1ZmZlck1hbmFnZXI6OnNpbmdsZXRvbigpLmFkZENvbnRlbnRCdWZmZXIobV93ZWJQcm9j
ZXNzSWRlbnRpZmllciwgbV9jb250ZXh0LT5sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKCkt
PnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoaWRlbnRpZmllcik7CiB9
CiAKLSNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCi1QbGF0Zm9ybUxheWVyKiBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29u
dGV4dC0+bGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSgpLT5wbGF0Zm9ybUxheWVyKCk7Ci19
Ci0jZW5kaWYKLQogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXgg
ZmQzZDI5ZmM0ZTAwLi4wMGQ1YjdhODdkZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3Bw
CkBAIC00NiwxMSArNDYsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVdDTGF5ZXJUcmVlSG9z
dD4gUmVtb3RlV0NMYXllclRyZWVIb3N0OjpjcmVhdGUoR1BVQ29ubmVjdGkKIAogUmVtb3RlV0NM
YXllclRyZWVIb3N0OjpSZW1vdGVXQ0xheWVyVHJlZUhvc3QoR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcyYgY29ubmVjdGlvblRvV2ViUHJvY2VzcywgV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIHVpbnQ2NF90IG5hdGl2ZVdpbmRvdykKICAgICA6IG1fY29ubmVj
dGlvblRvV2ViUHJvY2Vzcyhjb25uZWN0aW9uVG9XZWJQcm9jZXNzKQorICAgICwgbV93ZWJQcm9j
ZXNzSWRlbnRpZmllcihjb25uZWN0aW9uVG9XZWJQcm9jZXNzLndlYlByb2Nlc3NJZGVudGlmaWVy
KCkpCiAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fc2hhcmVkU2NlbmVD
b250ZXh0SG9sZGVyKGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ3B1UHJvY2VzcygpLnNoYXJlZFNj
ZW5lQ29udGV4dCgpLmVuc3VyZUhvbGRlckZvcldpbmRvdyhuYXRpdmVXaW5kb3cpKQogewogICAg
IG1fY29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9pZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKLSAgICBtX3NjZW5lID0g
bWFrZVVuaXF1ZTxXQ1NjZW5lPigpOworICAgIG1fc2NlbmUgPSBtYWtlVW5pcXVlPFdDU2NlbmU+
KG1fd2ViUHJvY2Vzc0lkZW50aWZpZXIpOwogICAgIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3Ry
ZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW3NjZW5lID0gbV9zY2VuZS5nZXQoKSwgc2NlbmVDb250
ZXh0SG9sZGVyID0gbV9zaGFyZWRTY2VuZUNvbnRleHRIb2xkZXIuZ2V0KCksIG5hdGl2ZVdpbmRv
d10gewogICAgICAgICBpZiAoIXNjZW5lQ29udGV4dEhvbGRlci0+Y29udGV4dCkKICAgICAgICAg
ICAgIHNjZW5lQ29udGV4dEhvbGRlci0+Y29udGV4dC5lbXBsYWNlKG5hdGl2ZVdpbmRvdyk7CkBA
IC04MiwxNyArODMsOCBAQCB1aW50NjRfdCBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6Om1lc3NhZ2VT
ZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKIAogdm9pZCBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6
OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVwZGF0ZSkKIHsKLSAgICAvLyBmaW5kUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0wgc2hvdWxkIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQKLSAgICBhdXRv
IHJlbW90ZUdDR0wgPSBXVEY6Om1hcCh1cGRhdGUuY2hhbmdlZExheWVycywgW3RoaXNdKGF1dG8m
IGxheWVyVXBkYXRlKSAtPiBSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+IHsKLSAgICAg
ICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9ybUxheWVy
KSB7Ci0gICAgICAgICAgICBpZiAobGF5ZXJVcGRhdGUuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyKQotICAgICAgICAgICAgICAgIHJldHVybiBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmZp
bmRSZW1vdGVHcmFwaGljc0NvbnRleHRHTChtYWtlT2JqZWN0SWRlbnRpZmllcjxHcmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXJUeXBlPihsYXllclVwZGF0ZS5ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9KTsKLQot
ICAgIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW3Ro
aXMsIHdlYWtUaGlzID0gV2Vha1B0cigqdGhpcyksIHNjZW5lID0gbV9zY2VuZS5nZXQoKSwgdXBk
YXRlID0gV1RGTW92ZSh1cGRhdGUpLCByZW1vdGVHQ0dMID0gV1RGTW92ZShyZW1vdGVHQ0dMKV0o
KSBtdXRhYmxlIHsKLSAgICAgICAgc2NlbmUtPnVwZGF0ZShXVEZNb3ZlKHVwZGF0ZSksIFdURk1v
dmUocmVtb3RlR0NHTCkpOworICAgIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1
ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gV2Vha1B0cigqdGhpcyksIHNjZW5lID0g
bV9zY2VuZS5nZXQoKSwgdXBkYXRlID0gV1RGTW92ZSh1cGRhdGUpXSgpIG11dGFibGUgeworICAg
ICAgICBzY2VuZS0+dXBkYXRlKFdURk1vdmUodXBkYXRlKSk7CiAgICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKV0gewogICAg
ICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRy
ZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NM
YXllclRyZWVIb3N0LmgKaW5kZXggZWRjNGZiYjQxMGE2Li5iMWJiMmFhZjU3ZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJl
ZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3Rl
V0NMYXllclRyZWVIb3N0LmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJNZXNzYWdlU2Vu
ZGVyLmgiCiAjaW5jbHVkZSAiV0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oIgogI2luY2x1ZGUg
IldDU2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNz
SWRlbnRpZmllci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M7CkBAIC01NSw2ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgdWludDY0X3QgbWVz
c2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFdlYWtQdHI8
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAg
IFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7CiAgICAg
V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgUmVmUHRyPFdDU2hh
cmVkU2NlbmVDb250ZXh0SG9sZGVyOjpIb2xkZXI+IG1fc2hhcmVkU2NlbmVDb250ZXh0SG9sZGVy
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXQ1NjZW5lPiBtX3NjZW5lOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDQ29udGVudEJ1ZmZlck1hbmFnZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDQ29udGVudEJ1ZmZl
ck1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODA4
NWY3OGIwMzI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL3djL1dDQ29udGVudEJ1ZmZlck1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTI4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXQ0NvbnRlbnRC
dWZmZXJNYW5hZ2VyLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNsdWRl
ICJXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBX
Q0NvbnRlbnRCdWZmZXIgZmluYWwgOiBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
cjo6Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBX
Q0NvbnRlbnRCdWZmZXIoV0NDb250ZW50QnVmZmVyTWFuYWdlciYgbWFuYWdlciwgV2ViQ29yZTo6
UHJvY2Vzc0lkZW50aWZpZXIgcHJvY2Vzc0lkZW50aWZpZXIsIFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQorICAgICAgICA6IG1fbWFuYWdlcihtYW5h
Z2VyKQorICAgICAgICAsIG1fcHJvY2Vzc0lkZW50aWZpZXIocHJvY2Vzc0lkZW50aWZpZXIpCisg
ICAgICAgICwgbV9wbGF0Zm9ybUxheWVyKHBsYXRmb3JtTGF5ZXIpCisgICAgeworICAgICAgICBt
X3BsYXRmb3JtTGF5ZXItPnNldENsaWVudCh0aGlzKTsKKyAgICB9CisKKyAgICB+V0NDb250ZW50
QnVmZmVyKCkKKyAgICB7CisgICAgICAgIG1fcGxhdGZvcm1MYXllci0+c2V0Q2xpZW50KG51bGxw
dHIpOworICAgIH0KKworICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUxheWVyOyB9OworCitwcml2
YXRlOgorICAgIHZvaWQgcGxhdGZvcm1MYXllcldpbGxCZURlc3Ryb3llZCgpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBtX21hbmFnZXIucmVtb3ZlQ29udGVudEJ1ZmZlcihtX3Byb2Nlc3NJZGVu
dGlmaWVyLCBXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyKHRoaXMpKTsKKyAgICB9CisgICAgdm9p
ZCBzZXRQbGF0Zm9ybUxheWVyTmVlZHNEaXNwbGF5KCkgb3ZlcnJpZGUgeyB9CisKKyAgICBXQ0Nv
bnRlbnRCdWZmZXJNYW5hZ2VyJiBtX21hbmFnZXI7CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50
aWZpZXIgbV9wcm9jZXNzSWRlbnRpZmllcjsKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllciogbV9wbGF0Zm9ybUxheWVyOworfTsKKworY2xhc3MgV0NDb250ZW50QnVmZmVy
TWFuYWdlcjo6UHJvY2Vzc0luZm8geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIFByb2Nlc3NJbmZvKFdDQ29udGVudEJ1ZmZlck1hbmFnZXImIG1hbmFnZXIsIFdl
YkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3NJZGVudGlmaWVyKQorICAgICAgICA6IG1f
bWFuYWdlcihtYW5hZ2VyKQorICAgICAgICAsIG1fcHJvY2Vzc0lkZW50aWZpZXIocHJvY2Vzc0lk
ZW50aWZpZXIpIHsgfQorCisgICAgc3RkOjpvcHRpb25hbDxXQ0NvbnRlbnRCdWZmZXJJZGVudGlm
aWVyPiBhZGRDb250ZW50QnVmZmVyKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKQorICAgIHsKKyAgICAgICAgYXV0byBwbGF0Zm9ybUxheWVyQWRkUmVz
dWx0ID0gbV9wbGF0Zm9ybUxheWVycy5hZGQocGxhdGZvcm1MYXllcik7CisgICAgICAgIGlmICgh
cGxhdGZvcm1MYXllckFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBjb250ZW50QnVmZmVyID0gbWFrZVVuaXF1ZTxXQ0Nv
bnRlbnRCdWZmZXI+KG1fbWFuYWdlciwgbV9wcm9jZXNzSWRlbnRpZmllciwgcGxhdGZvcm1MYXll
cik7CisgICAgICAgIGF1dG8gY29udGVudEJ1ZmZlckFkZFJlc3VsdCA9IG1fY29udGVudEJ1ZmZl
cnMuYWRkKFdURk1vdmUoY29udGVudEJ1ZmZlcikpOworICAgICAgICBBU1NFUlQoY29udGVudEJ1
ZmZlckFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgcmV0dXJuIFdDQ29udGVudEJ1ZmZl
cklkZW50aWZpZXIoY29udGVudEJ1ZmZlckFkZFJlc3VsdC5pdGVyYXRvci0+Z2V0KCkpOworICAg
IH0KKworICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiByZW1vdmVDb250
ZW50QnVmZmVyKFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICB7Cisg
ICAgICAgIGF1dG8gY29udGVudEJ1ZmZlciA9IG1fY29udGVudEJ1ZmZlcnMudGFrZShpZGVudGlm
aWVyKTsKKyAgICAgICAgaWYgKCFjb250ZW50QnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIG1fcGxhdGZvcm1MYXllcnMucmVtb3ZlKGNvbnRlbnRCdWZmZXItPnBs
YXRmb3JtTGF5ZXIoKSk7CisgICAgICAgIHJldHVybiBjb250ZW50QnVmZmVyLT5wbGF0Zm9ybUxh
eWVyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFdDQ29udGVudEJ1ZmZlck1hbmFnZXImIG1f
bWFuYWdlcjsKKyAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3Byb2Nlc3NJZGVudGlm
aWVyOworICAgIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPFdDQ29udGVudEJ1ZmZlcj4+IG1fY29u
dGVudEJ1ZmZlcnM7CisgICAgSGFzaFNldDxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllcio+IG1fcGxhdGZvcm1MYXllcnM7Cit9OworCitXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyJiBX
Q0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyPiBjb250ZW50QnVmZmVyTWFuYWdlcjsKKyAg
ICByZXR1cm4gY29udGVudEJ1ZmZlck1hbmFnZXI7Cit9CisKK3N0ZDo6b3B0aW9uYWw8V0NDb250
ZW50QnVmZmVySWRlbnRpZmllcj4gV0NDb250ZW50QnVmZmVyTWFuYWdlcjo6YWRkQ29udGVudEJ1
ZmZlcihXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzSWRlbnRpZmllciwgV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCit7CisgICAgYXV0
byBwcm9jZXNzQWRkUmVzdWx0ID0gbV9wcm9jZXNzTWFwLmVuc3VyZShwcm9jZXNzSWRlbnRpZmll
ciwgWyZdIHsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UHJvY2Vzc0luZm8+KCp0aGlzLCBw
cm9jZXNzSWRlbnRpZmllcik7CisgICAgfSk7CisgICAgcmV0dXJuIHByb2Nlc3NBZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLT5hZGRDb250ZW50QnVmZmVyKHBsYXRmb3JtTGF5ZXIpOworfQorCitX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogV0NDb250ZW50QnVmZmVyTWFuYWdl
cjo6cmVtb3ZlQ29udGVudEJ1ZmZlcihXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBwcm9jZXNz
SWRlbnRpZmllciwgV0NDb250ZW50QnVmZmVySWRlbnRpZmllciBjb250ZW50QnVmZmVySWRlbnRp
ZmllcikKK3sKKyAgICBBU1NFUlQobV9wcm9jZXNzTWFwLmNvbnRhaW5zKHByb2Nlc3NJZGVudGlm
aWVyKSk7CisgICAgcmV0dXJuIG1fcHJvY2Vzc01hcC5nZXQocHJvY2Vzc0lkZW50aWZpZXIpLT5y
ZW1vdmVDb250ZW50QnVmZmVyKGNvbnRlbnRCdWZmZXJJZGVudGlmaWVyKTsKK30KKwordm9pZCBX
Q0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpyZW1vdmVBbGxDb250ZW50QnVmZmVyc0ZvclByb2Nlc3Mo
V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgcHJvY2Vzc0lkZW50aWZpZXIpCit7CisgICAgbV9w
cm9jZXNzTWFwLnJlbW92ZShwcm9jZXNzSWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDQ29udGVudEJ1ZmZlck1hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ0NvbnRlbnRCdWZm
ZXJNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mODE3
Y2E4NmMzODMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3Mvd2MvV0NDb250ZW50QnVmZmVyTWFuYWdlci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisK
KyNpbmNsdWRlICJXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybUxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXI7Cit9
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXQ0NvbnRlbnRCdWZmZXI7CisKK2NsYXNz
IFdDQ29udGVudEJ1ZmZlck1hbmFnZXIgeworcHVibGljOgorICAgIGNsYXNzIFByb2Nlc3NJbmZv
OworCisgICAgc3RhdGljIFdDQ29udGVudEJ1ZmZlck1hbmFnZXImIHNpbmdsZXRvbigpOworCisg
ICAgc3RkOjpvcHRpb25hbDxXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyPiBhZGRDb250ZW50QnVm
ZmVyKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllciopOworICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBy
ZW1vdmVDb250ZW50QnVmZmVyKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBXQ0NvbnRlbnRC
dWZmZXJJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbENvbnRlbnRCdWZmZXJzRm9yUHJv
Y2VzcyhXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgSGFzaE1h
cDxXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NJbmZv
Pj4gbV9wcm9jZXNzTWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAKaW5kZXggYjM1NzQ1Y2Q1ZWFjLi41ZTk2ZTIwZDIyNDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5l
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5j
cHAKQEAgLTI5LDEwICsyOSwxMiBAQAogI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKIAogI2lu
Y2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiV0NDb250ZW50QnVm
ZmVyTWFuYWdlci5oIgogI2luY2x1ZGUgIldDU2NlbmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiV0NV
cGF0ZUluZm8uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0
dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC02
Miw3ICs2NCwxMCBAQCB2b2lkIFdDU2NlbmU6OmluaXRpYWxpemUoV0NTY2VuZUNvbnRleHQmIGNv
bnRleHQpCiAgICAgbV90ZXh0dXJlTWFwcGVyID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlTWFw
cGVyKCk7CiB9CiAKLVdDU2NlbmU6OldDU2NlbmUoKSA9IGRlZmF1bHQ7CitXQ1NjZW5lOjpXQ1Nj
ZW5lKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKQorICAg
IDogbV93ZWJQcm9jZXNzSWRlbnRpZmllcih3ZWJQcm9jZXNzSWRlbnRpZmllcikKK3sKK30KIAog
V0NTY2VuZTo6fldDU2NlbmUoKQogewpAQCAtNzAsNyArNzUsNyBAQCBXQ1NjZW5lOjp+V0NTY2Vu
ZSgpCiAgICAgbV90ZXh0dXJlTWFwcGVyID0gbnVsbHB0cjsKIH0KIAotdm9pZCBXQ1NjZW5lOjp1
cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUsIFZlY3RvcjxSZWZQdHI8UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w+PiYmIHJlbW90ZUdDR0wpCit2b2lkIFdDU2NlbmU6OnVwZGF0ZShXQ1VwYXRlSW5m
byYmIHVwZGF0ZSkKIHsKICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTgwLDggKzg1LDYgQEAgdm9pZCBXQ1NjZW5lOjp1cGRhdGUo
V0NVcGF0ZUluZm8mJiB1cGRhdGUsIFZlY3RvcjxSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0wKICAgICAgICAgbV9sYXllcnMuYWRkKGlkLCBXVEZNb3ZlKGxheWVyKSk7CiAgICAgfQogCi0g
ICAgYXV0byByZW1vdGVHQ0dMSXRlcmF0b3IgPSByZW1vdGVHQ0dMLmJlZ2luKCk7Ci0KICAgICBm
b3IgKGF1dG8mIGxheWVyVXBkYXRlIDogdXBkYXRlLmNoYW5nZWRMYXllcnMpIHsKICAgICAgICAg
YXV0byBsYXllciA9IG1fbGF5ZXJzLmdldChsYXllclVwZGF0ZS5pZCk7CiAgICAgICAgIGlmIChs
YXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q2hpbGRyZW4pIHsKQEAgLTE2NSwx
NiArMTY4LDE5IEBAIHZvaWQgV0NTY2VuZTo6dXBkYXRlKFdDVXBhdGVJbmZvJiYgdXBkYXRlLCBW
ZWN0b3I8UmVmUHRyPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMCiAgICAgICAgICAgICBsYXllci0+
dGV4bWFwTGF5ZXIuc2V0QmFja2Ryb3BGaWx0ZXJzUmVjdChsYXllclVwZGF0ZS5iYWNrZHJvcEZp
bHRlcnNSZWN0KTsKICAgICAgICAgfQogICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKLSAgICAgICAgICAgIGlmICgqcmVtb3Rl
R0NHTEl0ZXJhdG9yKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBwbGF0Zm9ybUxheWVyID0gKCpy
ZW1vdGVHQ0dMSXRlcmF0b3IpLT5wbGF0Zm9ybUxheWVyKCk7Ci0gICAgICAgICAgICAgICAgcGxh
dGZvcm1MYXllci0+c2V0Q2xpZW50KGxheWVyKTsKLSAgICAgICAgICAgICAgICBsYXllci0+dGV4
bWFwTGF5ZXIuc2V0Q29udGVudHNMYXllcihwbGF0Zm9ybUxheWVyKTsKLSAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgaWYgKCFsYXllclVwZGF0ZS5oYXNQbGF0Zm9ybUxheWVyKQogICAg
ICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c0xheWVyKG51bGxwdHIp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgV2ViQ29yZTo6VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBudWxscHRyOworICAgICAgICAgICAg
ICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogbGF5ZXJVcGRhdGUuY29udGVudEJ1ZmZlcklkZW50
aWZpZXJzKQorICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybUxheWVyID0gV0NDb250ZW50QnVm
ZmVyTWFuYWdlcjo6c2luZ2xldG9uKCkucmVtb3ZlQ29udGVudEJ1ZmZlcihtX3dlYlByb2Nlc3NJ
ZGVudGlmaWVyLCBpZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICBpZiAocGxhdGZvcm1MYXll
cikgeworICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybUxheWVyLT5zZXRDbGllbnQobGF5ZXIp
OworICAgICAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q29udGVudHNMYXll
cihwbGF0Zm9ybUxheWVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgcmVtb3RlR0NHTEl0ZXJhdG9yKys7CiAgICAgfQotICAgIEFTU0VSVChy
ZW1vdGVHQ0dMSXRlcmF0b3IgPT0gcmVtb3RlR0NHTC5lbmQoKSk7CiAKICAgICBmb3IgKGF1dG8g
aWQgOiB1cGRhdGUucmVtb3ZlZExheWVycykKICAgICAgICAgbV9sYXllcnMucmVtb3ZlKGlkKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5l
LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5oCmluZGV4
IDYzZWQwM2YzZWU4Ni4uM2QxNTFkOWQyOTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIFVTRShH
UkFQSElDU19MQVlFUl9XQykKIAorI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJGUFNDb3VudGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMzQsMjcgKzM1
LDI4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBUZXh0dXJlTWFwcGVyOwogY2xhc3Mg
VGV4dHVyZU1hcHBlckxheWVyOworY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXI7CiBj
bGFzcyBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU7CiB9CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCi1jbGFzcyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDsKIGNsYXNzIFdDU2NlbmVDb250
ZXh0Owogc3RydWN0IFdDVXBhdGVJbmZvOwogCiBjbGFzcyBXQ1NjZW5lIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBXQ1NjZW5lKCk7CisgICAgV0NTY2VuZShX
ZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcik7CiAgICAgfldDU2NlbmUoKTsKICAgICB2b2lkIGlu
aXRpYWxpemUoV0NTY2VuZUNvbnRleHQmKTsKLSAgICB2b2lkIHVwZGF0ZShXQ1VwYXRlSW5mbyYm
LCBWZWN0b3I8UmVmUHRyPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMPj4mJik7CisgICAgdm9pZCB1
cGRhdGUoV0NVcGF0ZUluZm8mJik7CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IExheWVyOwogICAg
IHVzaW5nIExheWVyTWFwID0gSGFzaE1hcDx1aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPExheWVy
Pj47CiAKKyAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3dlYlByb2Nlc3NJZGVudGlm
aWVyOwogICAgIFdDU2NlbmVDb250ZXh0KiBtX2NvbnRleHQgeyBudWxscHRyIH07CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKICAg
ICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyRlBTQ291bnRlciBtX2Zwc0NvdW50ZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybVdpbi5jbWFrZQppbmRleCAzNTBmZGQ0OTdlYWEuLjM2NzZjMzUxNDU2NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtV2luLmNtYWtlCkBAIC0xMiw2ICsxMiw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VS
Q0VTCiAgICAgR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5j
cHAKIAogICAgIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmNw
cAorICAgIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NDb250ZW50QnVmZmVyTWFuYWdlci5jcHAK
ICAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCiAgICAgR1BVUHJvY2Vzcy9n
cmFwaGljcy93Yy9XQ1NjZW5lQ29udGV4dC5jcHAKIApAQCAtMTIwLDYgKzEyMSw3IEBAIGxpc3Qo
QVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCiAgICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yIgogICAgICIke1dFQktJVF9ESVJ9L1No
YXJlZC9QbHVnaW5zL3dpbiIKKyAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvd2MiCiAgICAgIiR7
V0VCS0lUX0RJUn0vU2hhcmVkL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJ
L0MvY2Fpcm8iCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2N1cmwiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNl
L1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA5NGNmZDkwMGMzMDQuLmQx
MzBmY2UxMDdkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNz
YWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBA
IC0zNjEsNiArMzYxLDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFy
ZWQoKToKICAgICAgICAgJ1dlYktpdDo6VHJhbnNhY3Rpb25JRCcsCiAgICAgICAgICdXZWJLaXQ6
OlVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpXQ0xh
eWVyVHJlZUhvc3RJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6V0NDb250ZW50QnVmZmVy
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OldlYkdQVUlkZW50aWZpZXInLAogICAgICAg
ICAnV2ViS2l0OjpXZWJQYWdlUHJveHlJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6V2Vi
VVJMU2NoZW1lSGFuZGxlcklkZW50aWZpZXInLApAQCAtMzczLDYgKzM3NCw3IEBAIGRlZiBjb25k
aXRpb25zX2Zvcl9oZWFkZXIoaGVhZGVyKToKICAgICAgICAgJyJJbnB1dE1ldGhvZFN0YXRlLmgi
JzogWyJQTEFURk9STShHVEspIiwgIlBMQVRGT1JNKFdQRSkiXSwKICAgICAgICAgJyJMYXllckhv
c3RpbmdDb250ZXh0LmgiJzogWyJQTEFURk9STShDT0NPQSkiLCBdLAogICAgICAgICAnIkdlc3R1
cmVUeXBlcy5oIic6IFsiUExBVEZPUk0oSU9TX0ZBTUlMWSkiXSwKKyAgICAgICAgJyJXQ0NvbnRl
bnRCdWZmZXJJZGVudGlmaWVyLmgiJzogWyJVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpIl0sCiAgICAg
ICAgICciV0NMYXllclRyZWVIb3N0SWRlbnRpZmllci5oIic6IFsiVVNFKEdSQVBISUNTX0xBWUVS
X1dDKSJdLAogICAgICAgICAnPFdlYkNvcmUvQ1ZVdGlsaXRpZXMuaD4nOiBbIlBMQVRGT1JNKENP
Q09BKSIsIF0sCiAgICAgICAgICc8V2ViQ29yZS9EYXRhRGV0ZWN0b3JUeXBlLmg+JzogWyJFTkFC
TEUoREFUQV9ERVRFQ1RJT04pIl0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93
Yy9XQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93Yy9X
Q0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi43ZmY5ZmE0ZTc5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC93Yy9XQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyLmgKQEAgLTAsMCArMSw4MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQor
CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdURiB7Citj
bGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV0NDb250
ZW50QnVmZmVyOworCitjbGFzcyBXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyKFdDQ29udGVudEJ1ZmZlciog
Y29udGVudEJ1ZmZlcikKKyAgICAgICAgOiBtX2lkZW50aWZpZXIoY29udGVudEJ1ZmZlcikKKyAg
ICB7CisgICAgfQorCisgICAgb3BlcmF0b3IgV0NDb250ZW50QnVmZmVyKigpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVyOworICAgIH0KKworICAgIHZvaWQgb3BlcmF0
b3I9KFdDQ29udGVudEJ1ZmZlciogY29udGVudEJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1faWRl
bnRpZmllciA9IGNvbnRlbnRCdWZmZXI7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGVuY29kZXIgPDwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9pZGVudGlmaWVyKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRp
b25hbDxXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
KyAgICB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8aW50cHRyX3Q+IGlkZW50aWZpZXI7CisgICAg
ICAgIGRlY29kZXIgPj4gaWRlbnRpZmllcjsKKyAgICAgICAgaWYgKCFpZGVudGlmaWVyKQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIFdDQ29udGVudEJ1
ZmZlcklkZW50aWZpZXIocmVpbnRlcnByZXRfY2FzdDxXQ0NvbnRlbnRCdWZmZXIqPigqaWRlbnRp
ZmllcikpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXQ0NvbnRlbnRCdWZmZXIqIG1faWRlbnRp
ZmllciB7IG51bGxwdHIgfTsKK307CisKK2lubGluZSBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IFdDQ29udGVudEJ1ZmZlcklkZW50aWZp
ZXImIGlkZW50aWZpZXIpCit7CisgICAgV0NDb250ZW50QnVmZmVyKiBjb250ZW50QnVmZmVyID0g
aWRlbnRpZmllcjsKKyAgICByZXR1cm4gc3RyZWFtIDw8IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pihjb250ZW50QnVmZmVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlXQy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHlXQy5jcHAKaW5kZXggODE0ODUwNmM4Mzg4Li5kMDA5NzI0NGRmZTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eVdDLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlXQy5jcHAK
QEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5V0MoR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mIGdwdVByb2Nlc3NDb25uZWN0aW9u
LCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMs
IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmQpCiAgICAgICAgIDog
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eShncHVQcm9jZXNzQ29ubmVjdGlvbiwgYXR0cmli
dXRlcywgcmVuZGVyaW5nQmFja2VuZCkKLSAgICAgICAgLCBtX2xheWVyQ29udGVudHNEaXNwbGF5
RGVsZWdhdGUoUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZTo6Y3JlYXRlKG1ha2VVbmlxdWU8
V0NQbGF0Zm9ybUxheWVyR0NHTD4obV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpKSkKKyAg
ICAgICAgLCBtX2xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUoUGxhdGZvcm1MYXllckRpc3Bs
YXlEZWxlZ2F0ZTo6Y3JlYXRlKG1ha2VVbmlxdWU8V0NQbGF0Zm9ybUxheWVyR0NHTD4oKSkpCiAg
ICAgewogICAgIH0KIApAQCAtODQsMTEgKzg0LDE0IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eVdDOjpwcmVwYXJlRm9yRGlzcGxheSgpCiB7CiAgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3BsYXkoKSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQcmVwYXJlRm9yRGlzcGxheTo6UmVwbHko
KSk7CisgICAgc3RkOjpvcHRpb25hbDxXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyPiBjb250ZW50
QnVmZmVyOworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3BsYXkoKSwgTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpQcmVwYXJlRm9yRGlzcGxheTo6UmVwbHkoY29udGVudEJ1ZmZlcikp
OwogICAgIGlmICghc2VuZFJlc3VsdCkgewogICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoY29udGVudEJ1ZmZlcikKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8V0NQbGF0Zm9ybUxheWVyR0NHTCo+KG1fbGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxl
Z2F0ZS0+cGxhdGZvcm1MYXllcigpKS0+YWRkQ29udGVudEJ1ZmZlcklkZW50aWZpZXIoKmNvbnRl
bnRCdWZmZXIpOwogICAgIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJH
Q0dMLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1dDUGxhdGZv
cm1MYXllckdDR0wuaAppbmRleCBhODdlMDhlODJlMTkuLmJmMmRmMDQ0NDgxMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5
ZXJHQ0dMLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9X
Q1BsYXRmb3JtTGF5ZXJHQ0dMLmgKQEAgLTI2LDIwICsyNiwyNyBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJXQ0Nv
bnRlbnRCdWZmZXJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9XQ1BsYXRmb3JtTGF5
ZXIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdDUGxhdGZvcm1MYXllckdDR0wg
OiBwdWJsaWMgV2ViQ29yZTo6V0NQbGF0Zm9ybUxheWVyIHsKIHB1YmxpYzoKLSAgICBXQ1BsYXRm
b3JtTGF5ZXJHQ0dMKEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciBpZGVudGlmaWVyKQotICAg
ICAgICA6IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgVmVj
dG9yPFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXI+IHRha2VDb250ZW50QnVmZmVySWRlbnRpZmll
cnMoKQogICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9jb250ZW50QnVmZmVy
SWRlbnRpZmllcnMsIHsgfSk7CisgICAgfQorCisgICAgdm9pZCBhZGRDb250ZW50QnVmZmVySWRl
bnRpZmllcihXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyIGNvbnRlbnRCdWZmZXIpCisgICAgewor
ICAgICAgICBtX2NvbnRlbnRCdWZmZXJJZGVudGlmaWVycy5hcHBlbmQoY29udGVudEJ1ZmZlcik7
CisgICAgICAgIC8vIEZJWE1FOiBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIgZG9lc24n
dCBzdXBwb3J0IGRvdWJsZSBidWZmZXJpbmcuCisgICAgICAgIEFTU0VSVChtX2NvbnRlbnRCdWZm
ZXJJZGVudGlmaWVycy5zaXplKCkgPT0gMSk7CiAgICAgfQotICAgIEdyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllciYgZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9ncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXI7IH0KIAogcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXI7CisgICAgVmVjdG9y
PFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXI+IG1fY29udGVudEJ1ZmZlcklkZW50aWZpZXJzOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcAppbmRleCBiZDlhY2JlOTMz
M2YuLjdhNzI2NWU5NjY3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllcldDOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiByZWN0LCBTaG91CiB2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVudHNOZWVk
c0Rpc3BsYXkoKQogewogICAgIC8vIEZvciBleGFtcGxlLCBpZiBXZWJHTCBjYW52YXMgY2hhbmdl
ZCwgaXQgbmVlZHMgZmx1c2ggdG8gZGlzcGxheS4KLSAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5n
ZWQoeyB9KTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6UGxh
dGZvcm1MYXllcik7CiB9CiAKIGJvb2wgR3JhcGhpY3NMYXllcldDOjpzZXRDaGlsZHJlbihWZWN0
b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiYmIGNoaWxkcmVuKQpAQCAtNDc1LDEwICs0NzUsOSBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJXQzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpCiAgICAgICAgIHVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNSZWN0ID0gYmFja2Ryb3BGaWx0ZXJz
UmVjdCgpOwogICAgIH0KICAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQ
bGF0Zm9ybUxheWVyKSB7CisgICAgICAgIHVwZGF0ZS5oYXNQbGF0Zm9ybUxheWVyID0gbV9wbGF0
Zm9ybUxheWVyOwogICAgICAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQotICAgICAgICAgICAgdXBk
YXRlLmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PFdDUGxhdGZvcm1M
YXllckdDR0wqPihtX3BsYXRmb3JtTGF5ZXIpLT5ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIo
KS50b1VJbnQ2NCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1cGRhdGUuZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyID0gMDsKKyAgICAgICAgICAgIHVwZGF0ZS5jb250ZW50QnVmZmVy
SWRlbnRpZmllcnMgPSBzdGF0aWNfY2FzdDxXQ1BsYXRmb3JtTGF5ZXJHQ0dMKj4obV9wbGF0Zm9y
bUxheWVyKS0+dGFrZUNvbnRlbnRCdWZmZXJJZGVudGlmaWVycygpOwogICAgIH0KICAgICBtX29i
c2VydmVyLT5jb21taXRMYXllclVwYXRlSW5mbyhXVEZNb3ZlKHVwZGF0ZSkpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmgKaW5kZXgg
YzdiNGRkODFiN2UxLi4xNDkyZmU4OWY3MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJXQ0JhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIldDQ29udGVu
dEJ1ZmZlcklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KICNpbmNsdWRlIDxvcHRpb25hbD4K
QEAgLTc0LDYgKzc1LDcgQEAgc3RydWN0IFdDTGF5ZXJVcGF0ZUluZm8gewogICAgIGJvb2wgY29u
dGVudHNWaXNpYmxlOwogICAgIGJvb2wgYmFja2ZhY2VWaXNpYmlsaXR5OwogICAgIGJvb2wgcHJl
c2VydmVzM0Q7CisgICAgYm9vbCBoYXNQbGF0Zm9ybUxheWVyOwogICAgIFdlYkNvcmU6OkNvbG9y
IHNvbGlkQ29sb3I7CiAgICAgV2ViQ29yZTo6Q29sb3IgYmFja2dyb3VuZENvbG9yOwogICAgIFdl
YkNvcmU6OkNvbG9yIGRlYnVnQm9yZGVyQ29sb3I7CkBAIC04OCw3ICs5MCw3IEBAIHN0cnVjdCBX
Q0xheWVyVXBhdGVJbmZvIHsKICAgICBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGJhY2tkcm9w
RmlsdGVyczsKICAgICBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IGJhY2tkcm9wRmlsdGVyc1Jl
Y3Q7CiAgICAgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCBjb250ZW50c0NsaXBwaW5nUmVjdDsK
LSAgICB1aW50NjRfdCBncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXI7CisgICAgVmVjdG9yPFdD
Q29udGVudEJ1ZmZlcklkZW50aWZpZXI+IGNvbnRlbnRCdWZmZXJJZGVudGlmaWVyczsKIAogICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiAgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKQEAgLTEzNiw3ICsxMzgsNyBAQCBzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7CiAg
ICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzKQogICAg
ICAgICAgICAgZW5jb2RlciA8PCBiYWNrZHJvcEZpbHRlcnMgPDwgYmFja2Ryb3BGaWx0ZXJzUmVj
dDsKICAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9ybUxheWVyKQot
ICAgICAgICAgICAgZW5jb2RlciA8PCBncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXI7CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IGhhc1BsYXRmb3JtTGF5ZXIgPDwgY29udGVudEJ1ZmZlcklkZW50
aWZpZXJzOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDxjbGFzcyBEZWNvZGVyPgpAQCAtMjQxLDcg
KzI0Myw5IEBAIHN0cnVjdCBXQ0xheWVyVXBhdGVJbmZvIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6UGxhdGZvcm1MYXllcikgewotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKSkKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmhhc1BsYXRmb3JtTGF5ZXIpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNv
bnRlbnRCdWZmZXJJZGVudGlmaWVycykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447326</attachid>
            <date>2021-12-15 22:06:52 -0800</date>
            <delta_ts>2021-12-15 23:04:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233756-20211216150651.patch</filename>
            <type>text/plain</type>
            <size>41888</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MDEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNjNTkzM2E2ZTY1YWY2MmVk
NjI1YWY2NmQ4NWVlZGM0ZGY4NzJmOTQuLjdmZWZlNTE0ZDM5ZjRmODhkN2NjMDRjODYzODFlZGVm
ZWUxZDExZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODggQEAKKzIwMjEtMTItMTUgIEZ1amlpIEhp
cm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgV0MgdmFyaWFudCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGxhdGZvcm1MYXllcigpIHNob3VsZCBiZSByZW1vdmVk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM3NTYK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg2MjYxOTE5PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdpbkNhaXJvIGlzIHVzaW5nIFRleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllciBhcyB0aGUgV2ViR0wKKyAgICAgICAgUGxhdGZvcm1MYXllciBh
dCB0aGUgbW9tZW50LCB0aGF0IGlzIHVzaW5nIG9ubHkgYSBzaW5nbGUgb3V0cHV0CisgICAgICAg
IGJ1ZmZlci4gQW5kLCBXaW5DYWlybyBkb2Vzbid0IHRyYW5zZmVyIHRoZSBXZWJHTCBvdXRwdXQg
YnVmZmVyCisgICAgICAgIGNyb3NzLXByb2Nlc3MgYm91bmRhcnkgZXZlbiBpbiBHUFUgcHJvY2Vz
cyBtb2RlLiBCYXNlZCBvbiB0aGVzZQorICAgICAgICBhc3N1bXB0aW9ucywgcjI4NTA5OSBhZGRl
ZCBwbGF0Zm9ybUxheWVyKCkgbWV0aG9kIHRvCisgICAgICAgIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMIHRvIGdldCBhIFBsYXRmb3JtTGF5ZXIgYW5kIHBhc3MgaXQgdG8gdGhlCisgICAgICAgIGNv
bXBvc2l0b3IgaW4gR1BVIHByb2Nlc3MuCisKKyAgICAgICAgSG93ZXZlciwgdGhpcyBpcyBub3Qg
YXBwcm9wcmlhdGUuIFRoZSBvdXRwdXQgYnVmZmVyIGlkZW50aWZpZXIKKyAgICAgICAgc2hvdWxk
IGJlIHRyYW5zZmVycmVkIHRvIHdlYiBwcm9jZXNzIGJ5IHVzaW5nIHRoZSBjb21wbGV0aW9uCisg
ICAgICAgIGhhbmRsZSBvZiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3Bs
YXkgbWVzc2FnZS4KKyAgICAgICAgVGhlbiwgdGhlIGlkZW50aWZpZXIgd2lsbCBiZSBwYXNzZWQg
YmFjayB0byBHUFUgcHJvY2Vzcy4KKworICAgICAgICBBZGRlZCBXQ0NvbnRlbnRCdWZmZXJNYW5h
Z2VyIHRvIG1hbmFnZSB0aGUgV2ViR0wgb3V0cHV0IGJ1ZmZlcgorICAgICAgICBpZGVudGlmaWVy
cy4gSG93ZXZlciwgYmVjYXVzZSBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIgaGFzCisg
ICAgICAgIG9ubHkgYSBzaW5nbGUgb3V0cHV0IGJ1ZmZlciwgdGhlIG1heGltdW0gbnVtYmVyIG9m
IGlkZW50aWZpZXJzIGlzCisgICAgICAgIG9uZSBmb3IgZWFjaCBQbGF0Zm9ybUxheWVyIG5vdy4K
KworICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZENsb3NlKToKKyAg
ICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVsZWFzZVdDTGF5ZXJU
cmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmZp
bmRSZW1vdGVHcmFwaGljc0NvbnRleHRHTCk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW46CisgICAgICAgICogR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luOjpwcmVwYXJlRm9yRGlzcGxheSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwcmVwYXJlRm9yRGlz
cGxheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dy
YXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVdDTGF5ZXJUcmVlSG9zdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0Ojp1cGRhdGUpOgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogR1BVUHJv
Y2Vzcy9ncmFwaGljcy93Yy9XQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OldDQ29udGVudEJ1ZmZlck1hbmFnZXI6OlByb2Nlc3NJbmZvOjpQcm9jZXNz
SW5mbyk6CisgICAgICAgIChXZWJLaXQ6OldDQ29udGVudEJ1ZmZlck1hbmFnZXI6OlByb2Nlc3NJ
bmZvOjphY3F1aXJlQ29udGVudEJ1ZmZlcklkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpX
Q0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpQcm9jZXNzSW5mbzo6cmVsZWFzZUNvbnRlbnRCdWZmZXJJ
ZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V0NDb250ZW50QnVmZmVyTWFuYWdlcjo6UHJv
Y2Vzc0luZm86OnJlbW92ZUNvbnRlbnRCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXQ0NvbnRl
bnRCdWZmZXJNYW5hZ2VyOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViS2l0OjpXQ0NvbnRlbnRC
dWZmZXJNYW5hZ2VyOjphY3F1aXJlQ29udGVudEJ1ZmZlcklkZW50aWZpZXIpOgorICAgICAgICAo
V2ViS2l0OjpXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpyZWxlYXNlQ29udGVudEJ1ZmZlcklkZW50
aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpyZW1vdmVD
b250ZW50QnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V0NDb250ZW50QnVmZmVyTWFuYWdlcjo6
cmVtb3ZlQWxsQ29udGVudEJ1ZmZlcnNGb3JQcm9jZXNzKToKKyAgICAgICAgKiBHUFVQcm9jZXNz
L2dyYXBoaWNzL3djL1dDQ29udGVudEJ1ZmZlck1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgICog
R1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V0NT
Y2VuZTo6V0NTY2VuZSk6CisgICAgICAgIChXZWJLaXQ6OldDU2NlbmU6OnVwZGF0ZSk6CisgICAg
ICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmg6CisgICAgICAgICogUGxhdGZv
cm1XaW4uY21ha2U6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAg
ICAgICh0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKToKKyAgICAgICAgKGNv
bmRpdGlvbnNfZm9yX2hlYWRlcik6CisgICAgICAgICogU2hhcmVkL3djL1dDQ29udGVudEJ1ZmZl
cklkZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldDQ29udGVudEJ1ZmZlcklk
ZW50aWZpZXI6OldDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpX
Q0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldDQ29udGVudEJ1ZmZlcklkZW50aWZpZXI6OnRvV0NDb250ZW50
QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V0NDb250ZW50QnVmZmVySWRlbnRpZmll
cjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldDQ29udGVudEJ1ZmZlcklk
ZW50aWZpZXI6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXQ0NvbnRlbnRC
dWZmZXJJZGVudGlmaWVyOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXQ0NvbnRl
bnRCdWZmZXJJZGVudGlmaWVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXQ0NvbnRlbnRC
dWZmZXJJZGVudGlmaWVyOjpoYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoV2ViS2l0
OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdURjo6RGVmYXVsdEhhc2g8V2ViS2l0OjpXQ0NvbnRl
bnRCdWZmZXJJZGVudGlmaWVyPjo6aGFzaCk6CisgICAgICAgIChXVEY6OkRlZmF1bHRIYXNoPFdl
YktpdDo6V0NDb250ZW50QnVmZmVySWRlbnRpZmllcj46OmVxdWFsKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5V0MuY3Bw
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1dDUGxhdGZvcm1MYXllckdD
R0wuaDoKKyAgICAgICAgKFdlYktpdDo6V0NQbGF0Zm9ybUxheWVyR0NHTDo6dGFrZUNvbnRlbnRC
dWZmZXJJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OldDUGxhdGZvcm1MYXllckdDR0w6
OmFkZENvbnRlbnRCdWZmZXJJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V0NQbGF0Zm9y
bUxheWVyR0NHTDo6V0NQbGF0Zm9ybUxheWVyR0NHTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldDUGxhdGZvcm1MYXllckdDR0w6OmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik6IERl
bGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVudHNOZWVkc0Rp
c3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmZsdXNoQ29tcG9zaXRp
bmdTdGF0ZUZvclRoaXNMYXllck9ubHkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS93
Yy9XQ1VwYXRlSW5mby5oOgorICAgICAgICAoV2ViS2l0OjpXQ0xheWVyVXBhdGVJbmZvOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXQ0xheWVyVXBhdGVJbmZvOjpkZWNvZGUpOgor
CiAyMDIxLTEyLTEzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgQWxsb3cgV0tDb250ZW50UnVsZUxpc3QgdG8gcnVuIHJlZ2V4ZXMgb24gY3Vy
cmVudCBmcmFtZSdzIFVSTCwgbm90IGp1c3QgdG9wIGZyYW1lJ3MgVVJMCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5k
ZXggMmNhOTBmNTBjM2IxZTlhNjFhZjcxZTc1NGM1ODBlM2M3Y2M1NjRjZS4uNzJhNDIyZDRhZWZk
NjY1MWZmOWRjZjc4NDM3YzA2NDJiMmU1MTdkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMTQ2LDYgKzE0
Niw3IEBACiAKICNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCiAjaW5jbHVkZSAiUmVtb3RlV0NM
YXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiV0NDb250ZW50QnVmZmVyTWFuYWdlci5oIgogI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMzAzLDYgKzMwNCwxMSBAQCB2b2lkIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
bikKICAgICAvLyBSZW1vdGVHcmFwaGljc0NvbnRleHRzR0wgb2JqZWN0cyBhcmUgdW5uZWVkZWQg
YWZ0ZXIgY29ubmVjdGlvbiBjbG9zZXMuCiAgICAgbV9yZW1vdGVHcmFwaGljc0NvbnRleHRHTE1h
cC5jbGVhcigpOwogI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIHJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW3dlYlByb2Nlc3NJ
ZGVudGlmaWVyID0gbV93ZWJQcm9jZXNzSWRlbnRpZmllcl0geworICAgICAgICBXQ0NvbnRlbnRC
dWZmZXJNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZW1vdmVBbGxDb250ZW50QnVmZmVyc0ZvclByb2Nl
c3Mod2ViUHJvY2Vzc0lkZW50aWZpZXIpOworICAgIH0pOworI2VuZGlmCiAKICAgICBncHVQcm9j
ZXNzKCkuY29ubmVjdGlvblRvV2ViUHJvY2Vzc0Nsb3NlZChjb25uZWN0aW9uKTsKICAgICBncHVQ
cm9jZXNzKCkucmVtb3ZlR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcygqdGhpcyk7IC8vIE1heSBk
ZXN0cm95IHx0aGlzfC4KQEAgLTM1OSwxMiArMzY1LDYgQEAgdm9pZCBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpyZWxlYXNlV0NMYXllclRyZWVIb3N0KFdlYktpdDo6V0NMYXllclRyZWVIb3N0
SWQKIHsKICAgICBtX3JlbW90ZVdDTGF5ZXJUcmVlSG9zdE1hcC5yZW1vdmUoaWRlbnRpZmllcik7
CiB9Ci0KLVJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4gR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6ZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKEdyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllciBpZGVudGlmaWVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgcmV0dXJuIG1fcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xNYXAuZ2V0KGlkZW50aWZpZXIpOwot
fQogI2VuZGlmCiAKIGJvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6YWxsb3dzRXhpdFVu
ZGVyTWVtb3J5UHJlc3N1cmUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggYjQ1OTA3ZjI1NDM4ZTNkN2I4
OGY0NzQ2Y2M0ODA4ZWY0ZjQyN2NmZS4uOTgxYjQ4ZTg3ZTZkODg2MjJiY2VkZDhiMjk4YTAyZTNh
MDAwZTdiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5oCkBAIC0xNzUsMTAgKzE3NSw2IEBAIHB1YmxpYzoKICAgICBSZW1v
dGVJbWFnZURlY29kZXJBVkZQcm94eSYgaW1hZ2VEZWNvZGVyQVZGUHJveHkoKTsKICNlbmRpZgog
Ci0jaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQotICAgIFJlZlB0cjxSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTD4gZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKEdyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllcik7Ci0jZW5kaWYKLQogICAgIHZvaWQgdXBkYXRlU3VwcG9ydGVkUmVtb3RlQ29tbWFu
ZHMoKTsKIAogICAgIGJvb2wgYWxsb3dzRXhpdFVuZGVyTWVtb3J5UHJlc3N1cmUoKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZUdyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggMTU5ZTUwNTY3NzA0MzMwMWZkMTk4NTBjMzQ5NzQ2
Zjc1OTgxMmU0Yi4uNDllODE1YmUxNTczYTc3OTVlNWM0NjExYmI3NzlmYmE5YjdkODk0YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZUdyYXBoaWNzQ29udGV4dEdMLmgKQEAgLTU4LDYgKzU4LDEwIEBAIGNsYXNzIE1hY2hTZW5kUmln
aHQ7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQor
Y2xhc3MgV0NDb250ZW50QnVmZmVySWRlbnRpZmllcjsKKyNlbmRpZgorCiAvLyBHUFUgcHJvY2Vz
cyBzaWRlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgcmVjZWl2ZXMgbWVzc2FnZXMgYWJvdXQgR3Jh
cGhpY3NDb250ZXh0R0wgY2FsbHMKIC8vIGFuZCBpc3N1ZXMgcmVhbCBHcmFwaGljc0NvbnRleHRH
TCBjYWxscyBiYXNlZCBvbiB0aGUgcmVjZWl2ZWQgbWVzc2FnZXMuCiAvLyBUaGUgaW1wbGVtZW50
YXRpb24gaXMgbGFyZ2VseSBnZW5lcmF0ZWQgYnkgcnVubmluZyBUb29scy9TY3JpcHRzL2dlbmVy
YXRlLWdwdXAtd2ViZ2wuCkBAIC03MywxMSArNzcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNw
bGF5V2FzUmVjb25maWd1cmVkKCk7CiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19MQVlFUl9X
QykKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBsYXllcmluZyB2aW9sYXRpb24gYW5kIHNob3VsZCBi
ZSByZW1vdmVkLgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKLSNl
bmRpZgotCiBwcm90ZWN0ZWQ6CiAgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0woR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2VzcyYsIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZCYsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmKTsKICAgICB2b2lk
IGluaXRpYWxpemUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwpAQCAt
MTAwLDYgKzk5LDggQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgbm90aWZ5TWFya0NvbnRleHRDaGFu
Z2VkKCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JE
aXNwbGF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV1RGOjpNYWNoU2VuZFJpZ2h0JiYpPiYmKSA9
IDA7CisjZWxpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgdmlydHVhbCB2b2lkIHByZXBh
cmVGb3JEaXNwbGF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxXQ0NvbnRl
bnRCdWZmZXJJZGVudGlmaWVyPik+JiYpID0gMDsKICNlbHNlCiAgICAgdm9pZCBwcmVwYXJlRm9y
RGlzcGxheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0wubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4KaW5kZXggMTZiM2U5ZTgyNmVhNDE3ZGJlMmM3
M2UyZGVjNzEzODM5YjdmNjczMi4uYzhhYjI5NzcyOTMwYmZkNDA4YTAzY2ViMzdhMGMyOTg5OGUz
MDJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbgpAQCAtMjks
NyArMjksMTAgQEAgbWVzc2FnZXMgLT4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wgTm90UmVmQ291
bnRlZCBTdHJlYW0gewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgUHJlcGFyZUZvckRp
c3BsYXkoKSAtPiAoTWFjaFNlbmRSaWdodCBkaXNwbGF5QnVmZmVyKSBTeW5jaHJvbm91cyBOb3RT
dHJlYW1FbmNvZGFibGVSZXBseQogI2VuZGlmCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmIFVT
RShHUkFQSElDU19MQVlFUl9XQykKKyAgICB2b2lkIFByZXBhcmVGb3JEaXNwbGF5KCkgLT4gKHN0
ZDo6b3B0aW9uYWw8V2ViS2l0OjpXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyPiBjb250ZW50QnVm
ZmVyKSBTeW5jaHJvbm91cworI2VuZGlmCisjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEdS
QVBISUNTX0xBWUVSX1dDKQogICAgIHZvaWQgUHJlcGFyZUZvckRpc3BsYXkoKSAtPiAoKSBTeW5j
aHJvbm91cwogI2VuZGlmCiAgICAgdm9pZCBFbnN1cmVFeHRlbnNpb25FbmFibGVkKFN0cmluZyBl
eHRlbnNpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luLmNwcAppbmRleCA5ZGY4M2Y0NjA3
Y2M5OGMwZDhmYjdlZGY2N2VkNmY3Yjg5NzgxYTRiLi41ODIxY2RhOWZmMjE4OTk1ZTdiZjg1ZjMy
ZmI4N2M0ZWI2NWVlYWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHAKQEAgLTI5
LDYgKzI5LDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykgJiYgRU5BQkxFKFdFQkdMKSAm
JiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgor
I2luY2x1ZGUgIldDQ29udGVudEJ1ZmZlck1hbmFnZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAg
LTQwLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgLy8gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wg
b3ZlcnJpZGVzLgogICAgIHZvaWQgcGxhdGZvcm1Xb3JrUXVldWVJbml0aWFsaXplKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKSBmaW5hbDsKKyAgICB2b2lkIHByZXBhcmVG
b3JEaXNwbGF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxXQ0NvbnRlbnRC
dWZmZXJJZGVudGlmaWVyPik+JiYpIGZpbmFsOwogfTsKIAogUmVmPFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMPiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMsIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ciBncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIHJl
bmRlcmluZ0JhY2tlbmQsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmIHN0cmVhbSkKQEAg
LTU5LDE5ICs2MSwxMyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luOjpwbGF0Zm9y
bVdvcmtRdWV1ZUluaXRpYWxpemUoV2ViQ29yZTo6R3JhcGhpY3NDbwogICAgIG1fY29udGV4dCA9
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFdURk1vdmUo
YXR0cmlidXRlcykpOwogfQogCi12b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwcmVwYXJl
Rm9yRGlzcGxheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luOjpwcmVwYXJlRm9yRGlzcGxheShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8V0NDb250ZW50QnVmZmVySWRlbnRpZmll
cj4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fY29udGV4dC0+cHJlcGFyZUZvckRp
c3BsYXkoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIGF1dG8gaWRlbnRpZmllciA9
IFdDQ29udGVudEJ1ZmZlck1hbmFnZXI6OnNpbmdsZXRvbigpLmFjcXVpcmVDb250ZW50QnVmZmVy
SWRlbnRpZmllcihtX3dlYlByb2Nlc3NJZGVudGlmaWVyLCBtX2NvbnRleHQtPmxheWVyQ29udGVu
dHNEaXNwbGF5RGVsZWdhdGUoKS0+cGxhdGZvcm1MYXllcigpKTsKKyAgICBjb21wbGV0aW9uSGFu
ZGxlcihpZGVudGlmaWVyKTsKIH0KIAotI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKLVBsYXRm
b3JtTGF5ZXIqIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKCkt
PnBsYXRmb3JtTGF5ZXIoKTsKLX0KLSNlbmRpZgotCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9z
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXll
clRyZWVIb3N0LmNwcAppbmRleCBmZDNkMjlmYzRlMDA5ZDY3NTYyMTNmMDI1NWM5NzZkYjQ4ZGU5
ZWUzLi4wMGQ1YjdhODdkZjdmNjhjMjg0NWI0YjEwNDMxZjJkZDE2YTk2YTFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVI
b3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3Rl
V0NMYXllclRyZWVIb3N0LmNwcApAQCAtNDYsMTEgKzQ2LDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxS
ZW1vdGVXQ0xheWVyVHJlZUhvc3Q+IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKEdQVUNv
bm5lY3RpCiAKIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0KEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdlYktpdDo6
V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBpZGVudGlmaWVyLCB1aW50NjRfdCBuYXRpdmVXaW5k
b3cpCiAgICAgOiBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoY29ubmVjdGlvblRvV2ViUHJvY2Vz
cykKKyAgICAsIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXIoY29ubmVjdGlvblRvV2ViUHJvY2Vzcy53
ZWJQcm9jZXNzSWRlbnRpZmllcigpKQogICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAg
ICAgLCBtX3NoYXJlZFNjZW5lQ29udGV4dEhvbGRlcihjb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdw
dVByb2Nlc3MoKS5zaGFyZWRTY2VuZUNvbnRleHQoKS5lbnN1cmVIb2xkZXJGb3JXaW5kb3cobmF0
aXZlV2luZG93KSkKIHsKICAgICBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNl
aXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRyZWVI
b3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhp
cyk7Ci0gICAgbV9zY2VuZSA9IG1ha2VVbmlxdWU8V0NTY2VuZT4oKTsKKyAgICBtX3NjZW5lID0g
bWFrZVVuaXF1ZTxXQ1NjZW5lPihtX3dlYlByb2Nlc3NJZGVudGlmaWVyKTsKICAgICByZW1vdGVH
cmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFtzY2VuZSA9IG1fc2Nl
bmUuZ2V0KCksIHNjZW5lQ29udGV4dEhvbGRlciA9IG1fc2hhcmVkU2NlbmVDb250ZXh0SG9sZGVy
LmdldCgpLCBuYXRpdmVXaW5kb3ddIHsKICAgICAgICAgaWYgKCFzY2VuZUNvbnRleHRIb2xkZXIt
PmNvbnRleHQpCiAgICAgICAgICAgICBzY2VuZUNvbnRleHRIb2xkZXItPmNvbnRleHQuZW1wbGFj
ZShuYXRpdmVXaW5kb3cpOwpAQCAtODIsMTcgKzgzLDggQEAgdWludDY0X3QgUmVtb3RlV0NMYXll
clRyZWVIb3N0OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0CiAKIHZvaWQgUmVt
b3RlV0NMYXllclRyZWVIb3N0Ojp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUpCiB7Ci0gICAg
Ly8gZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBiZSBjYWxsZWQgb24gdGhlIG1h
aW4gdGhyZWFkCi0gICAgYXV0byByZW1vdGVHQ0dMID0gV1RGOjptYXAodXBkYXRlLmNoYW5nZWRM
YXllcnMsIFt0aGlzXShhdXRvJiBsYXllclVwZGF0ZSkgLT4gUmVmUHRyPFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMPiB7Ci0gICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6UGxhdGZvcm1MYXllcikgewotICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmdyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllcikKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jb25uZWN0
aW9uVG9XZWJQcm9jZXNzLT5maW5kUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wobWFrZU9iamVjdElk
ZW50aWZpZXI8R3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyVHlwZT4obGF5ZXJVcGRhdGUuZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfSk7Ci0KLSAgICByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtR
dWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdlYWtQdHIoKnRoaXMpLCBzY2VuZSA9
IG1fc2NlbmUuZ2V0KCksIHVwZGF0ZSA9IFdURk1vdmUodXBkYXRlKSwgcmVtb3RlR0NHTCA9IFdU
Rk1vdmUocmVtb3RlR0NHTCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIHNjZW5lLT51cGRhdGUoV1RG
TW92ZSh1cGRhdGUpLCBXVEZNb3ZlKHJlbW90ZUdDR0wpKTsKKyAgICByZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdlYWtQ
dHIoKnRoaXMpLCBzY2VuZSA9IG1fc2NlbmUuZ2V0KCksIHVwZGF0ZSA9IFdURk1vdmUodXBkYXRl
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc2NlbmUtPnVwZGF0ZShXVEZNb3ZlKHVwZGF0ZSkpOwog
ICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gV1RGTW92
ZSh3ZWFrVGhpcyldIHsKICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGVkYzRmYmI0MTBhNjVhYmVk
OWMyMjNhNGQxOTdhZjY1ZDQ3ZGE2NDUuLmIxYmIyYWFmNTdlN2EwOTY5MzU0MmJhMDI1YTc1MGEx
MjkzNmY1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93
Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmgKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiV0NMYXllclRyZWVIb3N0SWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgIldDU2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNs
YXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CkBAIC01NSw2ICs1Niw3IEBAIHByaXZhdGU6
CiAgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9jb25uZWN0aW9u
VG9XZWJQcm9jZXNzOworICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vz
c0lkZW50aWZpZXI7CiAgICAgV0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBtX2lkZW50aWZpZXI7
CiAgICAgUmVmUHRyPFdDU2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyOjpIb2xkZXI+IG1fc2hhcmVk
U2NlbmVDb250ZXh0SG9sZGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXQ1NjZW5lPiBtX3NjZW5l
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDQ29u
dGVudEJ1ZmZlck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L3djL1dDQ29udGVudEJ1ZmZlck1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzMjdhOTNjOWE4ZTM2
ZDU5MWQ4NDU2OGFjYTVkZTkwZTRjNDk5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NDb250ZW50QnVmZmVyTWFuYWdlci5jcHAKQEAg
LTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldDQ29udGVudEJ1ZmZlck1hbmFnZXIuaCIKKworI2lmIFVTRShHUkFQSElDU19MQVlF
Ul9XQykKKworI2luY2x1ZGUgIldDQ29udGVudEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXQ0NvbnRlbnRCdWZmZXJNYW5h
Z2VyOjpQcm9jZXNzSW5mbyB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgUHJvY2Vzc0luZm8oV0NDb250ZW50QnVmZmVyTWFuYWdlciYgbWFuYWdlciwgV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIgcHJvY2Vzc0lkZW50aWZpZXIpCisgICAgICAgIDogbV9tYW5h
Z2VyKG1hbmFnZXIpCisgICAgICAgICwgbV9wcm9jZXNzSWRlbnRpZmllcihwcm9jZXNzSWRlbnRp
ZmllcikgeyB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXI+
IGFjcXVpcmVDb250ZW50QnVmZmVySWRlbnRpZmllcihXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUZXh0
dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIgZG9lc24ndCBzdXBwb3J0IGRvdWJsZSBidWZmZXJp
bmcgeWV0LgorICAgICAgICAvLyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciBjYW4gYWNxdWly
ZSBhIHNpbmdsZSBXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyLgorICAgICAgICBhdXRvIGNvbnRl
bnRCdWZmZXJBZGRSZXN1bHQgPSBtX2NvbnRlbnRCdWZmZXJzLmVuc3VyZShwbGF0Zm9ybUxheWVy
LCBbJl0geworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8V0NDb250ZW50QnVmZmVyPiht
X21hbmFnZXIsIG1fcHJvY2Vzc0lkZW50aWZpZXIsIHBsYXRmb3JtTGF5ZXIpOworICAgICAgICB9
KTsKKyAgICAgICAgYXV0byBpZGVudGlmaWVyID0gY29udGVudEJ1ZmZlckFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUtPmlkZW50aWZpZXIoKTsKKyAgICAgICAgYXV0byBpZGVudGlmaWVyQWRkUmVz
dWx0ID0gbV92YWxpZElkZW50aWZpZXJzLmFkZChpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFp
ZGVudGlmaWVyQWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgICAgICByZXR1cm4gaWRlbnRpZmllcjsKKyAgICB9CisKKyAgICBXQ0NvbnRl
bnRCdWZmZXIqIHJlbGVhc2VDb250ZW50QnVmZmVySWRlbnRpZmllcihXQ0NvbnRlbnRCdWZmZXJJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAgeworICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIg
aXMgcGFzc2VkIGJ5IHdlYiBwcm9jZXNzLgorICAgICAgICAvLyBJdCBtdXN0IGJlIGNoZWNrZWQg
dmFsaWRpdHkgYmVmb3JlIGdldHRpbmcgdGhlIFdDQ29udGVudEJ1ZmZlciBwb2ludGVyLgorICAg
ICAgICBpZiAoIW1fdmFsaWRJZGVudGlmaWVycy5yZW1vdmUoaWRlbnRpZmllcikpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIudG9XQ0NvbnRl
bnRCdWZmZXIoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZUNvbnRlbnRCdWZmZXIoV0NDb250
ZW50QnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgbV92YWxpZElk
ZW50aWZpZXJzLnJlbW92ZShpZGVudGlmaWVyKTsKKyAgICAgICAgYXV0byBjb250ZW50QnVmZmVy
ID0gaWRlbnRpZmllci50b1dDQ29udGVudEJ1ZmZlcigpOworICAgICAgICBtX2NvbnRlbnRCdWZm
ZXJzLnJlbW92ZShjb250ZW50QnVmZmVyLT5wbGF0Zm9ybUxheWVyKCkpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyJiBtX21hbmFnZXI7CisgICAgV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV9wcm9jZXNzSWRlbnRpZmllcjsKKyAgICBIYXNoTWFwPFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiwgc3RkOjp1bmlxdWVfcHRyPFdDQ29u
dGVudEJ1ZmZlcj4+IG1fY29udGVudEJ1ZmZlcnM7CisgICAgSGFzaFNldDxXQ0NvbnRlbnRCdWZm
ZXJJZGVudGlmaWVyPiBtX3ZhbGlkSWRlbnRpZmllcnM7Cit9OworCitXQ0NvbnRlbnRCdWZmZXJN
YW5hZ2VyJiBXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyPiBjb250ZW50QnVmZmVyTWFu
YWdlcjsKKyAgICByZXR1cm4gY29udGVudEJ1ZmZlck1hbmFnZXI7Cit9CisKK3N0ZDo6b3B0aW9u
YWw8V0NDb250ZW50QnVmZmVySWRlbnRpZmllcj4gV0NDb250ZW50QnVmZmVyTWFuYWdlcjo6YWNx
dWlyZUNvbnRlbnRCdWZmZXJJZGVudGlmaWVyKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHBy
b2Nlc3NJZGVudGlmaWVyLCBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcikKK3sKKyAgICBhdXRvIHByb2Nlc3NBZGRSZXN1bHQgPSBtX3Byb2Nlc3NNYXAu
ZW5zdXJlKHByb2Nlc3NJZGVudGlmaWVyLCBbJl0geworICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxQcm9jZXNzSW5mbz4oKnRoaXMsIHByb2Nlc3NJZGVudGlmaWVyKTsKKyAgICB9KTsKKyAgICBy
ZXR1cm4gcHJvY2Vzc0FkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFjcXVpcmVDb250ZW50QnVm
ZmVySWRlbnRpZmllcihwbGF0Zm9ybUxheWVyKTsKK30KKworV0NDb250ZW50QnVmZmVyKiBXQ0Nv
bnRlbnRCdWZmZXJNYW5hZ2VyOjpyZWxlYXNlQ29udGVudEJ1ZmZlcklkZW50aWZpZXIoV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIgcHJvY2Vzc0lkZW50aWZpZXIsIFdDQ29udGVudEJ1ZmZlcklk
ZW50aWZpZXIgY29udGVudEJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fcHJvY2Vz
c01hcC5jb250YWlucyhwcm9jZXNzSWRlbnRpZmllcikpOworICAgIHJldHVybiBtX3Byb2Nlc3NN
YXAuZ2V0KHByb2Nlc3NJZGVudGlmaWVyKS0+cmVsZWFzZUNvbnRlbnRCdWZmZXJJZGVudGlmaWVy
KGNvbnRlbnRCdWZmZXJJZGVudGlmaWVyKTsKK30KKwordm9pZCBXQ0NvbnRlbnRCdWZmZXJNYW5h
Z2VyOjpyZW1vdmVDb250ZW50QnVmZmVyKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHByb2Nl
c3NJZGVudGlmaWVyLCBXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyIGNvbnRlbnRCdWZmZXJJZGVu
dGlmaWVyKQoreworICAgIEFTU0VSVChtX3Byb2Nlc3NNYXAuY29udGFpbnMocHJvY2Vzc0lkZW50
aWZpZXIpKTsKKyAgICBtX3Byb2Nlc3NNYXAuZ2V0KHByb2Nlc3NJZGVudGlmaWVyKS0+cmVtb3Zl
Q29udGVudEJ1ZmZlcihjb250ZW50QnVmZmVySWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV0NDb250
ZW50QnVmZmVyTWFuYWdlcjo6cmVtb3ZlQWxsQ29udGVudEJ1ZmZlcnNGb3JQcm9jZXNzKFdlYkNv
cmU6OlByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3NJZGVudGlmaWVyKQoreworICAgIG1fcHJvY2Vz
c01hcC5yZW1vdmUocHJvY2Vzc0lkZW50aWZpZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyLmgg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NDb250ZW50QnVmZmVyTWFu
YWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjlmY2VhNmFkMWVlNTY4NzhiNTg3ODg1ODdiNjFiZDA0M2MyMDZi
YjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
d2MvV0NDb250ZW50QnVmZmVyTWFuYWdlci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNs
dWRlICJXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0
Zm9ybUxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
V0NDb250ZW50QnVmZmVyOworCitjbGFzcyBXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyIHsKK3B1Ymxp
YzoKKyAgICBjbGFzcyBQcm9jZXNzSW5mbzsKKworICAgIHN0YXRpYyBXQ0NvbnRlbnRCdWZmZXJN
YW5hZ2VyJiBzaW5nbGV0b24oKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8V0NDb250ZW50QnVmZmVy
SWRlbnRpZmllcj4gYWNxdWlyZUNvbnRlbnRCdWZmZXJJZGVudGlmaWVyKFdlYkNvcmU6OlByb2Nl
c3NJZGVudGlmaWVyLCBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciopOworICAg
IFdDQ29udGVudEJ1ZmZlciogcmVsZWFzZUNvbnRlbnRCdWZmZXJJZGVudGlmaWVyKFdlYkNvcmU6
OlByb2Nlc3NJZGVudGlmaWVyLCBXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB2b2lk
IHJlbW92ZUNvbnRlbnRCdWZmZXIoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIFdDQ29udGVu
dEJ1ZmZlcklkZW50aWZpZXIpOworICAgIHZvaWQgcmVtb3ZlQWxsQ29udGVudEJ1ZmZlcnNGb3JQ
cm9jZXNzKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICBIYXNo
TWFwPFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vzc0lu
Zm8+PiBtX3Byb2Nlc3NNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcAppbmRleCBiMzU3NDVjZDVlYWM5YWNjN2MzZDEwMWEz
OTgwOGNiMWViMTY2ZjNmLi5hYTY1YzAxMTIxMmY3N2NkYTJmNGZhMTBhNmZkMGVkZWE0NzZkMWEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2Vu
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUu
Y3BwCkBAIC0yOSwyNSArMjksMjcgQEAKICNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCiAKICNp
bmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oIgorI2luY2x1ZGUgIldDQ29udGVudEJ1
ZmZlci5oIgorI2luY2x1ZGUgIldDQ29udGVudEJ1ZmZlck1hbmFnZXIuaCIKICNpbmNsdWRlICJX
Q1NjZW5lQ29udGV4dC5oIgogI2luY2x1ZGUgIldDVXBhdGVJbmZvLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVy
ZU1hcHBlckxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3Jl
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdHJ1Y3QgV0NTY2VuZTo6TGF5ZXIgOiBwdWJs
aWMgV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXI6OkNsaWVudCB7CitzdHJ1Y3Qg
V0NTY2VuZTo6TGF5ZXIgZmluYWwgOiBwdWJsaWMgV0NDb250ZW50QnVmZmVyOjpDbGllbnQgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIExheWVyKCkgPSBkZWZh
dWx0OwogCi0gICAgLy8gVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXI6OkNsaWVudAorICAgIC8v
IFdDQ29udGVudEJ1ZmZlcjo6Q2xpZW50CiAgICAgdm9pZCBwbGF0Zm9ybUxheWVyV2lsbEJlRGVz
dHJveWVkKCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHRleG1hcExheWVyLnNldENvbnRlbnRz
TGF5ZXIobnVsbHB0cik7CiAgICAgfQotICAgIHZvaWQgc2V0UGxhdGZvcm1MYXllck5lZWRzRGlz
cGxheSgpIG92ZXJyaWRlIHsgfQogCiAgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyIHRl
eG1hcExheWVyOwogICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5n
U3RvcmU+IGJhY2tpbmdTdG9yZTsKQEAgLTYyLDcgKzY0LDEwIEBAIHZvaWQgV0NTY2VuZTo6aW5p
dGlhbGl6ZShXQ1NjZW5lQ29udGV4dCYgY29udGV4dCkKICAgICBtX3RleHR1cmVNYXBwZXIgPSBt
X2NvbnRleHQtPmNyZWF0ZVRleHR1cmVNYXBwZXIoKTsKIH0KIAotV0NTY2VuZTo6V0NTY2VuZSgp
ID0gZGVmYXVsdDsKK1dDU2NlbmU6OldDU2NlbmUoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIg
d2ViUHJvY2Vzc0lkZW50aWZpZXIpCisgICAgOiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyKHdlYlBy
b2Nlc3NJZGVudGlmaWVyKQoreworfQogCiBXQ1NjZW5lOjp+V0NTY2VuZSgpCiB7CkBAIC03MCw3
ICs3NSw3IEBAIFdDU2NlbmU6On5XQ1NjZW5lKCkKICAgICBtX3RleHR1cmVNYXBwZXIgPSBudWxs
cHRyOwogfQogCi12b2lkIFdDU2NlbmU6OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVwZGF0ZSwgVmVj
dG9yPFJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4+JiYgcmVtb3RlR0NHTCkKK3ZvaWQg
V0NTY2VuZTo6dXBkYXRlKFdDVXBhdGVJbmZvJiYgdXBkYXRlKQogewogICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODAsOCArODUs
NiBAQCB2b2lkIFdDU2NlbmU6OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVwZGF0ZSwgVmVjdG9yPFJl
ZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTAogICAgICAgICBtX2xheWVycy5hZGQoaWQsIFdU
Rk1vdmUobGF5ZXIpKTsKICAgICB9CiAKLSAgICBhdXRvIHJlbW90ZUdDR0xJdGVyYXRvciA9IHJl
bW90ZUdDR0wuYmVnaW4oKTsKLQogICAgIGZvciAoYXV0byYgbGF5ZXJVcGRhdGUgOiB1cGRhdGUu
Y2hhbmdlZExheWVycykgewogICAgICAgICBhdXRvIGxheWVyID0gbV9sYXllcnMuZ2V0KGxheWVy
VXBkYXRlLmlkKTsKICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpDaGlsZHJlbikgewpAQCAtMTY1LDE2ICsxNjgsMTkgQEAgdm9pZCBXQ1NjZW5lOjp1cGRh
dGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUsIFZlY3RvcjxSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0wKICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNrZHJvcEZpbHRlcnNS
ZWN0KGxheWVyVXBkYXRlLmJhY2tkcm9wRmlsdGVyc1JlY3QpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UGxhdGZvcm1MYXllcikg
ewotICAgICAgICAgICAgaWYgKCpyZW1vdGVHQ0dMSXRlcmF0b3IpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIHBsYXRmb3JtTGF5ZXIgPSAoKnJlbW90ZUdDR0xJdGVyYXRvciktPnBsYXRmb3JtTGF5
ZXIoKTsKLSAgICAgICAgICAgICAgICBwbGF0Zm9ybUxheWVyLT5zZXRDbGllbnQobGF5ZXIpOwot
ICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRDb250ZW50c0xheWVyKHBsYXRm
b3JtTGF5ZXIpOwotICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpZiAoIWxheWVyVXBk
YXRlLmhhc1BsYXRmb3JtTGF5ZXIpCiAgICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVy
LnNldENvbnRlbnRzTGF5ZXIobnVsbHB0cik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBXQ0NvbnRlbnRCdWZmZXIqIGNvbnRlbnRCdWZmZXIgPSBudWxscHRyOworICAgICAg
ICAgICAgICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogbGF5ZXJVcGRhdGUuY29udGVudEJ1ZmZl
cklkZW50aWZpZXJzKQorICAgICAgICAgICAgICAgICAgICBjb250ZW50QnVmZmVyID0gV0NDb250
ZW50QnVmZmVyTWFuYWdlcjo6c2luZ2xldG9uKCkucmVsZWFzZUNvbnRlbnRCdWZmZXJJZGVudGlm
aWVyKG1fd2ViUHJvY2Vzc0lkZW50aWZpZXIsIGlkZW50aWZpZXIpOworICAgICAgICAgICAgICAg
IGlmIChjb250ZW50QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRCdWZmZXIt
PnNldENsaWVudChsYXllcik7CisgICAgICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXll
ci5zZXRDb250ZW50c0xheWVyKGNvbnRlbnRCdWZmZXItPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJlbW90ZUdD
R0xJdGVyYXRvcisrOwogICAgIH0KLSAgICBBU1NFUlQocmVtb3RlR0NHTEl0ZXJhdG9yID09IHJl
bW90ZUdDR0wuZW5kKCkpOwogCiAgICAgZm9yIChhdXRvIGlkIDogdXBkYXRlLnJlbW92ZWRMYXll
cnMpCiAgICAgICAgIG1fbGF5ZXJzLnJlbW92ZShpZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5oIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuaAppbmRleCA2M2VkMDNmM2VlODZhMmFhMjE3N2M4
YzFiYzk4NTI0YTgyMzAyOWJjLi4zZDE1MWQ5ZDI5NmFjNGM2MGNiZDc1ZDk0OGRmMDg1ZWNiYThi
ZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NT
Y2VuZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5l
LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKIAorI2lu
Y2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Rl
eHR1cmVNYXBwZXJGUFNDb3VudGVyLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMzQsMjcgKzM1LDI4IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBUZXh0dXJlTWFwcGVyOwogY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyOworY2xh
c3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXI7CiBjbGFzcyBUZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmU7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDsKIGNsYXNzIFdDU2NlbmVDb250ZXh0Owogc3RydWN0IFdDVXBhdGVJbmZv
OwogCiBjbGFzcyBXQ1NjZW5lIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICBXQ1NjZW5lKCk7CisgICAgV0NTY2VuZShXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmll
cik7CiAgICAgfldDU2NlbmUoKTsKICAgICB2b2lkIGluaXRpYWxpemUoV0NTY2VuZUNvbnRleHQm
KTsKLSAgICB2b2lkIHVwZGF0ZShXQ1VwYXRlSW5mbyYmLCBWZWN0b3I8UmVmUHRyPFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMPj4mJik7CisgICAgdm9pZCB1cGRhdGUoV0NVcGF0ZUluZm8mJik7CiAK
IHByaXZhdGU6CiAgICAgc3RydWN0IExheWVyOwogICAgIHVzaW5nIExheWVyTWFwID0gSGFzaE1h
cDx1aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPExheWVyPj47CiAKKyAgICBXZWJDb3JlOjpQcm9j
ZXNzSWRlbnRpZmllciBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOwogICAgIFdDU2NlbmVDb250ZXh0
KiBtX2NvbnRleHQgeyBudWxscHRyIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
RlBTQ291bnRlciBtX2Zwc0NvdW50ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtV2luLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCAzNTBm
ZGQ0OTdlYWFhYjcxMTA1OWM1NGI1MDc1MDE1YjE5Mzc5MzY4Li4zNjc2YzM1MTQ1NjRlYjFmMWJj
ZDY5N2UzN2FhZGNkMDQyNGFlNzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
V2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTEyLDYg
KzEyLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBHUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luLmNwcAogCiAgICAgR1BVUHJvY2Vzcy9ncmFw
aGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwCisgICAgR1BVUHJvY2Vzcy9ncmFwaGlj
cy93Yy9XQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyLmNwcAogICAgIEdQVVByb2Nlc3MvZ3JhcGhpY3Mv
d2MvV0NTY2VuZS5jcHAKICAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmVDb250ZXh0
LmNwcAogCkBAIC0xMjAsNiArMTIxLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcyIK
ICAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNv
bXBvc2l0b3IiCiAgICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL1BsdWdpbnMvd2luIgorICAgICIk
e1dFQktJVF9ESVJ9L1NoYXJlZC93YyIKICAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvd2luIgog
ICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9jYWlybyIKICAgICAiJHtXRUJLSVRf
RElSfS9VSVByb2Nlc3MvQVBJL0MvY3VybCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5CmluZGV4IDk0Y2ZkOTAwYzMwNGU5NTY3NTFmYzFiMDI4ZmVhYzNlNjQxOTIzOTUu
LmQxMzBmY2UxMDdkMjk5OTRiZmFiNDExZDkyMDZjZWE3ZDE3NGRiMzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtMzYxLDYgKzM2MSw3IEBAIGRlZiB0eXBl
c190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJLaXQ6OlRy
YW5zYWN0aW9uSUQnLAogICAgICAgICAnV2ViS2l0OjpVc2VyQ29udGVudENvbnRyb2xsZXJJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllcicsCisg
ICAgICAgICdXZWJLaXQ6OldDQ29udGVudEJ1ZmZlcklkZW50aWZpZXInLAogICAgICAgICAnV2Vi
S2l0OjpXZWJHUFVJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6V2ViUGFnZVByb3h5SWRl
bnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OldlYlVSTFNjaGVtZUhhbmRsZXJJZGVudGlmaWVy
JywKQEAgLTM3Myw2ICszNzQsNyBAQCBkZWYgY29uZGl0aW9uc19mb3JfaGVhZGVyKGhlYWRlcik6
CiAgICAgICAgICciSW5wdXRNZXRob2RTdGF0ZS5oIic6IFsiUExBVEZPUk0oR1RLKSIsICJQTEFU
Rk9STShXUEUpIl0sCiAgICAgICAgICciTGF5ZXJIb3N0aW5nQ29udGV4dC5oIic6IFsiUExBVEZP
Uk0oQ09DT0EpIiwgXSwKICAgICAgICAgJyJHZXN0dXJlVHlwZXMuaCInOiBbIlBMQVRGT1JNKElP
U19GQU1JTFkpIl0sCisgICAgICAgICciV0NDb250ZW50QnVmZmVySWRlbnRpZmllci5oIic6IFsi
VVNFKEdSQVBISUNTX0xBWUVSX1dDKSJdLAogICAgICAgICAnIldDTGF5ZXJUcmVlSG9zdElkZW50
aWZpZXIuaCInOiBbIlVTRShHUkFQSElDU19MQVlFUl9XQykiXSwKICAgICAgICAgJzxXZWJDb3Jl
L0NWVXRpbGl0aWVzLmg+JzogWyJQTEFURk9STShDT0NPQSkiLCBdLAogICAgICAgICAnPFdlYkNv
cmUvRGF0YURldGVjdG9yVHlwZS5oPic6IFsiRU5BQkxFKERBVEFfREVURUNUSU9OKSJdLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2MvV0NDb250ZW50QnVmZmVySWRlbnRpZmll
ci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2MvV0NDb250ZW50QnVmZmVySWRlbnRpZmllci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY3NDhjYTZlY2NjYTFhN2JmNWM0Njk0YzlhYTI0YjA0OWYyNTU5ZTUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93Yy9XQ0NvbnRlbnRCdWZmZXJJ
ZGVudGlmaWVyLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgPG9wdGlvbmFsPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV0NDb250ZW50QnVmZmVyOworCitjbGFz
cyBXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyIHsKK3B1YmxpYzoKKyAgICBXQ0NvbnRlbnRCdWZm
ZXJJZGVudGlmaWVyKCkgeyB9CisKKyAgICBleHBsaWNpdCBXQ0NvbnRlbnRCdWZmZXJJZGVudGlm
aWVyKFdDQ29udGVudEJ1ZmZlciogY29udGVudEJ1ZmZlcikKKyAgICAgICAgOiBtX2lkZW50aWZp
ZXIoY29udGVudEJ1ZmZlcikKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgV0NDb250ZW50
QnVmZmVySWRlbnRpZmllcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAg
IDogbV9pZGVudGlmaWVyKGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2lkZW50aWZpZXIgPT0gaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CisgICAgfQor
CisgICAgV0NDb250ZW50QnVmZmVyKiB0b1dDQ29udGVudEJ1ZmZlcigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2lkZW50aWZpZXIgPT0gb3RoZXIubV9pZGVudGlmaWVyOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXIgIT0gb3RoZXIu
bV9pZGVudGlmaWVyOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBlbmNvZGVy
IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1faWRlbnRpZmllcik7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8V0NDb250
ZW50QnVmZmVySWRlbnRpZmllcj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCisgICAgeworICAg
ICAgICBzdGQ6Om9wdGlvbmFsPGludHB0cl90PiBpZGVudGlmaWVyOworICAgICAgICBkZWNvZGVy
ID4+IGlkZW50aWZpZXI7CisgICAgICAgIGlmICghaWRlbnRpZmllcikKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBXQ0NvbnRlbnRCdWZmZXJJZGVudGlm
aWVyKHJlaW50ZXJwcmV0X2Nhc3Q8V0NDb250ZW50QnVmZmVyKj4oKmlkZW50aWZpZXIpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIHN0cnVjdCBXVEY6OkRlZmF1bHRIYXNoPFdDQ29u
dGVudEJ1ZmZlcklkZW50aWZpZXI+OworCisgICAgc3RhdGljIFdDQ29udGVudEJ1ZmZlciogaGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXQ0NvbnRlbnRC
dWZmZXIqPih+c3RhdGljX2Nhc3Q8dWludHB0cl90PigwKSk7IH0KKyAgICAKKyAgICBXQ0NvbnRl
bnRCdWZmZXIqIG1faWRlbnRpZmllciB7IG51bGxwdHIgfTsKK307CisKK2lubGluZSBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IFdDQ29u
dGVudEJ1ZmZlcklkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIHN0cmVhbSA8
PCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaWRlbnRpZmllci50b1dDQ29udGVudEJ1ZmZl
cigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTw+CitzdHJ1Y3QgSGFzaFRyYWl0czxXZWJLaXQ6OldDQ29udGVudEJ1ZmZlcklkZW50
aWZpZXI+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFdlYktpdDo6V0NDb250ZW50QnVmZmVySWRl
bnRpZmllcj4geyB9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViS2l0OjpX
Q0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyPiB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgV2ViS2l0OjpXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyJiBpZGVudGlmaWVyKSB7IHJldHVy
biBEZWZhdWx0SGFzaDxXZWJLaXQ6OldDQ29udGVudEJ1ZmZlcio+OjpoYXNoKGlkZW50aWZpZXIu
bV9pZGVudGlmaWVyKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYktpdDo6V0ND
b250ZW50QnVmZmVySWRlbnRpZmllciYgYSwgY29uc3QgV2ViS2l0OjpXQ0NvbnRlbnRCdWZmZXJJ
ZGVudGlmaWVyJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHlXQy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL3djL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlXQy5jcHAKaW5kZXggODE0ODUwNmM4
Mzg4MWMyYWM2ZjgzMjI1OWZhNGE3NWRiYjU5N2I1Yi4uZDAwOTcyNDRkZmU3NjcyN2Q4NWE1ZTAy
YWFmMjU5MjRjMWJjNTM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy93Yy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5V0MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eVdDLmNwcApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlXQyhHUFVQcm9jZXNzQ29ubmVjdGlvbiYgZ3B1
UHJvY2Vzc0Nvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyYgYXR0cmlidXRlcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFj
a2VuZCkKICAgICAgICAgOiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5KGdwdVByb2Nlc3ND
b25uZWN0aW9uLCBhdHRyaWJ1dGVzLCByZW5kZXJpbmdCYWNrZW5kKQotICAgICAgICAsIG1fbGF5
ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZShQbGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlOjpj
cmVhdGUobWFrZVVuaXF1ZTxXQ1BsYXRmb3JtTGF5ZXJHQ0dMPihtX2dyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllcikpKQorICAgICAgICAsIG1fbGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZShQ
bGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlOjpjcmVhdGUobWFrZVVuaXF1ZTxXQ1BsYXRmb3Jt
TGF5ZXJHQ0dMPigpKSkKICAgICB7CiAgICAgfQogCkBAIC04NCwxMSArODQsMTQgQEAgdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5V0M6OnByZXBhcmVGb3JEaXNwbGF5KCkKIHsKICAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byBzZW5kUmVz
dWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQcmVwYXJl
Rm9yRGlzcGxheSgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlByZXBhcmVG
b3JEaXNwbGF5OjpSZXBseSgpKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFdDQ29udGVudEJ1ZmZlcklk
ZW50aWZpZXI+IGNvbnRlbnRCdWZmZXI7CisgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQcmVwYXJlRm9yRGlzcGxheSgpLCBN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlByZXBhcmVGb3JEaXNwbGF5OjpSZXBs
eShjb250ZW50QnVmZmVyKSk7CiAgICAgaWYgKCFzZW5kUmVzdWx0KSB7CiAgICAgICAgIG1hcmtD
b250ZXh0TG9zdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmIChjb250ZW50QnVm
ZmVyKQorICAgICAgICBzdGF0aWNfY2FzdDxXQ1BsYXRmb3JtTGF5ZXJHQ0dMKj4obV9sYXllckNv
bnRlbnRzRGlzcGxheURlbGVnYXRlLT5wbGF0Zm9ybUxheWVyKCkpLT5hZGRDb250ZW50QnVmZmVy
SWRlbnRpZmllcigqY29udGVudEJ1ZmZlcik7CiAgICAgbWFya0xheWVyQ29tcG9zaXRlZCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3dj
L1dDUGxhdGZvcm1MYXllckdDR0wuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oCmluZGV4IGE4N2UwOGU4MmUxOTA3YTgwYWQ3
YTdkMGJjZDM2YmU5MDNiNDM5M2IuLmEwZDNjMWE0M2Y4MDNlZjNiMzRkMDk0N2Q5NjZmNGFmZTRk
OTE0YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
d2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oCkBAIC0yNiwyMCArMjYsMjcgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLmgi
CisjaW5jbHVkZSAiV0NDb250ZW50QnVmZmVySWRlbnRpZmllci5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvV0NQbGF0Zm9ybUxheWVyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXQ1Bs
YXRmb3JtTGF5ZXJHQ0dMIDogcHVibGljIFdlYkNvcmU6OldDUGxhdGZvcm1MYXllciB7CiBwdWJs
aWM6Ci0gICAgV0NQbGF0Zm9ybUxheWVyR0NHTChHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIg
aWRlbnRpZmllcikKLSAgICAgICAgOiBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcihpZGVu
dGlmaWVyKQorICAgIFZlY3RvcjxXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyPiB0YWtlQ29udGVu
dEJ1ZmZlcklkZW50aWZpZXJzKCkKICAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdl
KG1fY29udGVudEJ1ZmZlcklkZW50aWZpZXJzLCB7IH0pOworICAgIH0KKworICAgIHZvaWQgYWRk
Q29udGVudEJ1ZmZlcklkZW50aWZpZXIoV0NDb250ZW50QnVmZmVySWRlbnRpZmllciBjb250ZW50
QnVmZmVyKQorICAgIHsKKyAgICAgICAgbV9jb250ZW50QnVmZmVySWRlbnRpZmllcnMuYXBwZW5k
KGNvbnRlbnRCdWZmZXIpOworICAgICAgICAvLyBGSVhNRTogVGV4dHVyZU1hcHBlckdDR0xQbGF0
Zm9ybUxheWVyIGRvZXNuJ3Qgc3VwcG9ydCBkb3VibGUgYnVmZmVyaW5nIHlldC4KKyAgICAgICAg
QVNTRVJUKG1fY29udGVudEJ1ZmZlcklkZW50aWZpZXJzLnNpemUoKSA9PSAxKTsKICAgICB9Ci0g
ICAgR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyJiBncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIoKSB7IHJldHVybiBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsgfQogCiBwcml2YXRl
OgotICAgIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciBtX2dyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllcjsKKyAgICBWZWN0b3I8V0NDb250ZW50QnVmZmVySWRlbnRpZmllcj4gbV9jb250ZW50
QnVmZmVySWRlbnRpZmllcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0Mu
Y3BwCmluZGV4IGJkOWFjYmU5MzMzZjE4YTc3OTczYmVlOWFkMDEwY2YxZjA2NTc5NmYuLjdhNzI2
NWU5NjY3ZGViMTIxNzhjNjIyODc3OTlhZWExNzdhOGQyYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcApAQCAt
NzYsNyArNzYsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCwgU2hvdQogdm9pZCBHcmFwaGljc0xheWVy
V0M6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKIHsKICAgICAvLyBGb3IgZXhhbXBsZSwgaWYg
V2ViR0wgY2FudmFzIGNoYW5nZWQsIGl0IG5lZWRzIGZsdXNoIHRvIGRpc3BsYXkuCi0gICAgbm90
ZUxheWVyUHJvcGVydHlDaGFuZ2VkKHsgfSk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2Vk
KFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpOwogfQogCiBib29sIEdyYXBoaWNzTGF5ZXJX
Qzo6c2V0Q2hpbGRyZW4oVmVjdG9yPFJlZjxHcmFwaGljc0xheWVyPj4mJiBjaGlsZHJlbikKQEAg
LTQ3NSwxMCArNDc1LDkgQEAgdm9pZCBHcmFwaGljc0xheWVyV0M6OmZsdXNoQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKQogICAgICAgICB1cGRhdGUuYmFja2Ryb3BGaWx0ZXJzUmVj
dCA9IGJhY2tkcm9wRmlsdGVyc1JlY3QoKTsKICAgICB9CiAgICAgaWYgKHVwZGF0ZS5jaGFuZ2Vz
ICYgV0NMYXllckNoYW5nZTo6UGxhdGZvcm1MYXllcikgeworICAgICAgICB1cGRhdGUuaGFzUGxh
dGZvcm1MYXllciA9IG1fcGxhdGZvcm1MYXllcjsKICAgICAgICAgaWYgKG1fcGxhdGZvcm1MYXll
cikKLSAgICAgICAgICAgIHVwZGF0ZS5ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgPSBzdGF0
aWNfY2FzdDxXQ1BsYXRmb3JtTGF5ZXJHQ0dMKj4obV9wbGF0Zm9ybUxheWVyKS0+Z3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKCkudG9VSW50NjQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdXBkYXRlLmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciA9IDA7CisgICAgICAgICAgICB1
cGRhdGUuY29udGVudEJ1ZmZlcklkZW50aWZpZXJzID0gc3RhdGljX2Nhc3Q8V0NQbGF0Zm9ybUxh
eWVyR0NHTCo+KG1fcGxhdGZvcm1MYXllciktPnRha2VDb250ZW50QnVmZmVySWRlbnRpZmllcnMo
KTsKICAgICB9CiAgICAgbV9vYnNlcnZlci0+Y29tbWl0TGF5ZXJVcGF0ZUluZm8oV1RGTW92ZSh1
cGRhdGUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L3djL1dDVXBhdGVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9X
Q1VwYXRlSW5mby5oCmluZGV4IGM3YjRkZDgxYjdlMTc3ZWU2NzY3YWFhNzU1YmZlODkwNDU5ZmVm
Y2UuLjE0OTJmZTg5ZjcxYmFhNTQwZjBmMGFkODllYjA2OTJjNzRhNzc4YmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmgKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaApAQCAtMjYs
NiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJXQ0JhY2tpbmdTdG9yZS5oIgor
I2luY2x1ZGUgIldDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KICNp
bmNsdWRlIDxvcHRpb25hbD4KQEAgLTc0LDYgKzc1LDcgQEAgc3RydWN0IFdDTGF5ZXJVcGF0ZUlu
Zm8gewogICAgIGJvb2wgY29udGVudHNWaXNpYmxlOwogICAgIGJvb2wgYmFja2ZhY2VWaXNpYmls
aXR5OwogICAgIGJvb2wgcHJlc2VydmVzM0Q7CisgICAgYm9vbCBoYXNQbGF0Zm9ybUxheWVyOwog
ICAgIFdlYkNvcmU6OkNvbG9yIHNvbGlkQ29sb3I7CiAgICAgV2ViQ29yZTo6Q29sb3IgYmFja2dy
b3VuZENvbG9yOwogICAgIFdlYkNvcmU6OkNvbG9yIGRlYnVnQm9yZGVyQ29sb3I7CkBAIC04OCw3
ICs5MCw3IEBAIHN0cnVjdCBXQ0xheWVyVXBhdGVJbmZvIHsKICAgICBXZWJDb3JlOjpGaWx0ZXJP
cGVyYXRpb25zIGJhY2tkcm9wRmlsdGVyczsKICAgICBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0
IGJhY2tkcm9wRmlsdGVyc1JlY3Q7CiAgICAgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCBjb250
ZW50c0NsaXBwaW5nUmVjdDsKLSAgICB1aW50NjRfdCBncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXI7CisgICAgVmVjdG9yPFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXI+IGNvbnRlbnRCdWZmZXJJ
ZGVudGlmaWVyczsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiAgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKQEAgLTEzNiw3ICsxMzgsNyBAQCBzdHJ1Y3QgV0NM
YXllclVwYXRlSW5mbyB7CiAgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFj
a2Ryb3BGaWx0ZXJzKQogICAgICAgICAgICAgZW5jb2RlciA8PCBiYWNrZHJvcEZpbHRlcnMgPDwg
YmFja2Ryb3BGaWx0ZXJzUmVjdDsKICAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpQbGF0Zm9ybUxheWVyKQotICAgICAgICAgICAgZW5jb2RlciA8PCBncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXI7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGhhc1BsYXRmb3JtTGF5ZXIgPDwg
Y29udGVudEJ1ZmZlcklkZW50aWZpZXJzOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDxjbGFzcyBE
ZWNvZGVyPgpAQCAtMjQxLDcgKzI0Myw5IEBAIHN0cnVjdCBXQ0xheWVyVXBhdGVJbmZvIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlc3Vs
dC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6UGxhdGZvcm1MYXllcikgewotICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKSkK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmhhc1BsYXRmb3JtTGF5ZXIp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LmNvbnRlbnRCdWZmZXJJZGVudGlmaWVycykpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwo=
</data>
<flag name="commit-queue"
          id="472930"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447329</attachid>
            <date>2021-12-15 22:47:17 -0800</date>
            <delta_ts>2021-12-20 16:18:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233756-20211216154716.patch</filename>
            <type>text/plain</type>
            <size>45373</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MDEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNjNTkzM2E2ZTY1YWY2MmVk
NjI1YWY2NmQ4NWVlZGM0ZGY4NzJmOTQuLmE4ODQ0ZmY1MmUyNTJkNmMzYjQ1NWFjZjgwNjZiZGVh
NTM0ZjNjZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkgQEAKKzIwMjEtMTItMTUgIEZ1amlpIEhp
cm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgV0MgdmFyaWFudCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGxhdGZvcm1MYXllcigpIHNob3VsZCBiZSByZW1vdmVk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM3NTYK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg2MjYxOTE5PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdpbkNhaXJvIGlzIHVzaW5nIFRleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllciBhcyB0aGUgV2ViR0wKKyAgICAgICAgUGxhdGZvcm1MYXllciBh
dCB0aGUgbW9tZW50LCB0aGF0IGlzIHVzaW5nIG9ubHkgYSBzaW5nbGUgb3V0cHV0CisgICAgICAg
IGJ1ZmZlci4gQW5kLCBXaW5DYWlybyBkb2Vzbid0IHRyYW5zZmVyIHRoZSBXZWJHTCBvdXRwdXQg
YnVmZmVyCisgICAgICAgIGNyb3NzLXByb2Nlc3MgYm91bmRhcnkgZXZlbiBpbiBHUFUgcHJvY2Vz
cyBtb2RlLiBCYXNlZCBvbiB0aGVzZQorICAgICAgICBhc3N1bXB0aW9ucywgcjI4NTA5OSBhZGRl
ZCBwbGF0Zm9ybUxheWVyKCkgbWV0aG9kIHRvCisgICAgICAgIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMIHRvIGdldCBhIFBsYXRmb3JtTGF5ZXIgYW5kIHBhc3MgaXQgdG8gdGhlCisgICAgICAgIGNv
bXBvc2l0b3IgaW4gR1BVIHByb2Nlc3MuCisKKyAgICAgICAgSG93ZXZlciwgdGhpcyBpcyBub3Qg
YXBwcm9wcmlhdGUuIFRoZSBvdXRwdXQgYnVmZmVyIGlkZW50aWZpZXIKKyAgICAgICAgc2hvdWxk
IGJlIHRyYW5zZmVycmVkIHRvIHdlYiBwcm9jZXNzIGJ5IHVzaW5nIHRoZSBjb21wbGV0aW9uCisg
ICAgICAgIGhhbmRsZSBvZiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3Bs
YXkgbWVzc2FnZS4KKyAgICAgICAgVGhlbiwgdGhlIGlkZW50aWZpZXIgd2lsbCBiZSBwYXNzZWQg
YmFjayB0byBHUFUgcHJvY2Vzcy4KKworICAgICAgICBBZGRlZCBXQ0NvbnRlbnRCdWZmZXJNYW5h
Z2VyIHRvIG1hbmFnZSB0aGUgV2ViR0wgb3V0cHV0IGJ1ZmZlcgorICAgICAgICBpZGVudGlmaWVy
cy4gSG93ZXZlciwgYmVjYXVzZSBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIgaGFzCisg
ICAgICAgIG9ubHkgYSBzaW5nbGUgb3V0cHV0IGJ1ZmZlciwgdGhlIG1heGltdW0gbnVtYmVyIG9m
IGlkZW50aWZpZXJzIGlzCisgICAgICAgIG9uZSBmb3IgZWFjaCBQbGF0Zm9ybUxheWVyIG5vdy4K
KworICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZENsb3NlKToKKyAg
ICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVsZWFzZVdDTGF5ZXJU
cmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmZp
bmRSZW1vdGVHcmFwaGljc0NvbnRleHRHTCk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW46CisgICAgICAgICogR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luOjpwcmVwYXJlRm9yRGlzcGxheSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwcmVwYXJlRm9yRGlz
cGxheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dy
YXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVdDTGF5ZXJUcmVlSG9zdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0Ojp1cGRhdGUpOgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogR1BVUHJv
Y2Vzcy9ncmFwaGljcy93Yy9XQ0NvbnRlbnRCdWZmZXIuaDogQWRkZWQuCisgICAgICAgICogR1BV
UHJvY2Vzcy9ncmFwaGljcy93Yy9XQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldDQ29udGVudEJ1ZmZlck1hbmFnZXI6OlByb2Nlc3NJbmZvOjpQcm9j
ZXNzSW5mbyk6CisgICAgICAgIChXZWJLaXQ6OldDQ29udGVudEJ1ZmZlck1hbmFnZXI6OlByb2Nl
c3NJbmZvOjphY3F1aXJlQ29udGVudEJ1ZmZlcklkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0
OjpXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpQcm9jZXNzSW5mbzo6cmVsZWFzZUNvbnRlbnRCdWZm
ZXJJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V0NDb250ZW50QnVmZmVyTWFuYWdlcjo6
UHJvY2Vzc0luZm86OnJlbW92ZUNvbnRlbnRCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXQ0Nv
bnRlbnRCdWZmZXJNYW5hZ2VyOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViS2l0OjpXQ0NvbnRl
bnRCdWZmZXJNYW5hZ2VyOjphY3F1aXJlQ29udGVudEJ1ZmZlcklkZW50aWZpZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpyZWxlYXNlQ29udGVudEJ1ZmZlcklk
ZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpyZW1v
dmVDb250ZW50QnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V0NDb250ZW50QnVmZmVyTWFuYWdl
cjo6cmVtb3ZlQWxsQ29udGVudEJ1ZmZlcnNGb3JQcm9jZXNzKToKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL2dyYXBoaWNzL3djL1dDQ29udGVudEJ1ZmZlck1hbmFnZXIuaDogQWRkZWQuCisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V0NTY2VuZTo6V0NTY2VuZSk6CisgICAgICAgIChXZWJLaXQ6OldDU2NlbmU6OnVwZGF0ZSk6Cisg
ICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmg6CisgICAgICAgICogUGxh
dGZvcm1XaW4uY21ha2U6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6Cisg
ICAgICAgICh0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKToKKyAgICAgICAg
KGNvbmRpdGlvbnNfZm9yX2hlYWRlcik6CisgICAgICAgICogU2hhcmVkL3djL1dDQ29udGVudEJ1
ZmZlcklkZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldDQ29udGVudEJ1ZmZl
cklkZW50aWZpZXI6OldDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0
OjpXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OldDQ29udGVudEJ1ZmZlcklkZW50aWZpZXI6OnRvV0NDb250
ZW50QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V0NDb250ZW50QnVmZmVySWRlbnRp
Zmllcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldDQ29udGVudEJ1ZmZl
cklkZW50aWZpZXI6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXQ0NvbnRl
bnRCdWZmZXJJZGVudGlmaWVyOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXQ0Nv
bnRlbnRCdWZmZXJJZGVudGlmaWVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXQ0NvbnRl
bnRCdWZmZXJJZGVudGlmaWVyOjpoYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoV2Vi
S2l0OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdURjo6RGVmYXVsdEhhc2g8V2ViS2l0OjpXQ0Nv
bnRlbnRCdWZmZXJJZGVudGlmaWVyPjo6aGFzaCk6CisgICAgICAgIChXVEY6OkRlZmF1bHRIYXNo
PFdlYktpdDo6V0NDb250ZW50QnVmZmVySWRlbnRpZmllcj46OmVxdWFsKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5V0Mu
Y3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1dDUGxhdGZvcm1MYXll
ckdDR0wuaDoKKyAgICAgICAgKFdlYktpdDo6V0NQbGF0Zm9ybUxheWVyR0NHTDo6dGFrZUNvbnRl
bnRCdWZmZXJJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OldDUGxhdGZvcm1MYXllckdD
R0w6OmFkZENvbnRlbnRCdWZmZXJJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V0NQbGF0
Zm9ybUxheWVyR0NHTDo6V0NQbGF0Zm9ybUxheWVyR0NHTCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldDUGxhdGZvcm1MYXllckdDR0w6OmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik6
IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJX
Qy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0Q29udGVudHNOZWVk
c0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS93Yy9XQ1VwYXRlSW5mby5oOgorICAgICAgICAoV2ViS2l0OjpXQ0xheWVyVXBhdGVJbmZvOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXQ0xheWVyVXBhdGVJbmZvOjpkZWNvZGUp
OgorCiAyMDIxLTEyLTEzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgQWxsb3cgV0tDb250ZW50UnVsZUxpc3QgdG8gcnVuIHJlZ2V4ZXMgb24g
Y3VycmVudCBmcmFtZSdzIFVSTCwgbm90IGp1c3QgdG9wIGZyYW1lJ3MgVVJMCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAK
aW5kZXggMmNhOTBmNTBjM2IxZTlhNjFhZjcxZTc1NGM1ODBlM2M3Y2M1NjRjZS4uNzJhNDIyZDRh
ZWZkNjY1MWZmOWRjZjc4NDM3YzA2NDJiMmU1MTdkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMTQ2LDYg
KzE0Niw3IEBACiAKICNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCiAjaW5jbHVkZSAiUmVtb3Rl
V0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiV0NDb250ZW50QnVmZmVyTWFuYWdlci5oIgog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMzAzLDYgKzMwNCwxMSBAQCB2b2lkIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbikKICAgICAvLyBSZW1vdGVHcmFwaGljc0NvbnRleHRzR0wgb2JqZWN0cyBhcmUgdW5uZWVk
ZWQgYWZ0ZXIgY29ubmVjdGlvbiBjbG9zZXMuCiAgICAgbV9yZW1vdGVHcmFwaGljc0NvbnRleHRH
TE1hcC5jbGVhcigpOwogI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIHJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW3dlYlByb2Nl
c3NJZGVudGlmaWVyID0gbV93ZWJQcm9jZXNzSWRlbnRpZmllcl0geworICAgICAgICBXQ0NvbnRl
bnRCdWZmZXJNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZW1vdmVBbGxDb250ZW50QnVmZmVyc0ZvclBy
b2Nlc3Mod2ViUHJvY2Vzc0lkZW50aWZpZXIpOworICAgIH0pOworI2VuZGlmCiAKICAgICBncHVQ
cm9jZXNzKCkuY29ubmVjdGlvblRvV2ViUHJvY2Vzc0Nsb3NlZChjb25uZWN0aW9uKTsKICAgICBn
cHVQcm9jZXNzKCkucmVtb3ZlR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcygqdGhpcyk7IC8vIE1h
eSBkZXN0cm95IHx0aGlzfC4KQEAgLTM1OSwxMiArMzY1LDYgQEAgdm9pZCBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpyZWxlYXNlV0NMYXllclRyZWVIb3N0KFdlYktpdDo6V0NMYXllclRyZWVI
b3N0SWQKIHsKICAgICBtX3JlbW90ZVdDTGF5ZXJUcmVlSG9zdE1hcC5yZW1vdmUoaWRlbnRpZmll
cik7CiB9Ci0KLVJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4gR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6ZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKEdyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllciBpZGVudGlmaWVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
Ci0gICAgcmV0dXJuIG1fcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xNYXAuZ2V0KGlkZW50aWZpZXIp
OwotfQogI2VuZGlmCiAKIGJvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6YWxsb3dzRXhp
dFVuZGVyTWVtb3J5UHJlc3N1cmUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggYjQ1OTA3ZjI1NDM4ZTNk
N2I4OGY0NzQ2Y2M0ODA4ZWY0ZjQyN2NmZS4uOTgxYjQ4ZTg3ZTZkODg2MjJiY2VkZDhiMjk4YTAy
ZTNhMDAwZTdiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5oCkBAIC0xNzUsMTAgKzE3NSw2IEBAIHB1YmxpYzoKICAgICBS
ZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eSYgaW1hZ2VEZWNvZGVyQVZGUHJveHkoKTsKICNlbmRp
ZgogCi0jaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQotICAgIFJlZlB0cjxSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTD4gZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKEdyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllcik7Ci0jZW5kaWYKLQogICAgIHZvaWQgdXBkYXRlU3VwcG9ydGVkUmVtb3RlQ29t
bWFuZHMoKTsKIAogICAgIGJvb2wgYWxsb3dzRXhpdFVuZGVyTWVtb3J5UHJlc3N1cmUoKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggMTU5ZTUwNTY3NzA0MzMwMWZkMTk4NTBjMzQ5
NzQ2Zjc1OTgxMmU0Yi4uNDllODE1YmUxNTczYTc3OTVlNWM0NjExYmI3NzlmYmE5YjdkODk0YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMLmgKQEAgLTU4LDYgKzU4LDEwIEBAIGNsYXNzIE1hY2hTZW5k
UmlnaHQ7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dD
KQorY2xhc3MgV0NDb250ZW50QnVmZmVySWRlbnRpZmllcjsKKyNlbmRpZgorCiAvLyBHUFUgcHJv
Y2VzcyBzaWRlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgcmVjZWl2ZXMgbWVzc2FnZXMgYWJvdXQg
R3JhcGhpY3NDb250ZXh0R0wgY2FsbHMKIC8vIGFuZCBpc3N1ZXMgcmVhbCBHcmFwaGljc0NvbnRl
eHRHTCBjYWxscyBiYXNlZCBvbiB0aGUgcmVjZWl2ZWQgbWVzc2FnZXMuCiAvLyBUaGUgaW1wbGVt
ZW50YXRpb24gaXMgbGFyZ2VseSBnZW5lcmF0ZWQgYnkgcnVubmluZyBUb29scy9TY3JpcHRzL2dl
bmVyYXRlLWdwdXAtd2ViZ2wuCkBAIC03MywxMSArNzcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
aXNwbGF5V2FzUmVjb25maWd1cmVkKCk7CiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19MQVlF
Ul9XQykKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBsYXllcmluZyB2aW9sYXRpb24gYW5kIHNob3Vs
ZCBiZSByZW1vdmVkLgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsK
LSNlbmRpZgotCiBwcm90ZWN0ZWQ6CiAgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0woR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyYsIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZCYsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmKTsKICAgICB2
b2lkIGluaXRpYWxpemUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwpA
QCAtMTAwLDYgKzk5LDggQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgbm90aWZ5TWFya0NvbnRleHRD
aGFuZ2VkKCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVG
b3JEaXNwbGF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV1RGOjpNYWNoU2VuZFJpZ2h0JiYpPiYm
KSA9IDA7CisjZWxpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgdmlydHVhbCB2b2lkIHBy
ZXBhcmVGb3JEaXNwbGF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxXQ0Nv
bnRlbnRCdWZmZXJJZGVudGlmaWVyPik+JiYpID0gMDsKICNlbHNlCiAgICAgdm9pZCBwcmVwYXJl
Rm9yRGlzcGxheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0wubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4KaW5kZXggMTZiM2U5ZTgyNmVhNDE3ZGJl
MmM3M2UyZGVjNzEzODM5YjdmNjczMi4uYzhhYjI5NzcyOTMwYmZkNDA4YTAzY2ViMzdhMGMyOTg5
OGUzMDJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbgpAQCAt
MjksNyArMjksMTAgQEAgbWVzc2FnZXMgLT4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wgTm90UmVm
Q291bnRlZCBTdHJlYW0gewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgUHJlcGFyZUZv
ckRpc3BsYXkoKSAtPiAoTWFjaFNlbmRSaWdodCBkaXNwbGF5QnVmZmVyKSBTeW5jaHJvbm91cyBO
b3RTdHJlYW1FbmNvZGFibGVSZXBseQogI2VuZGlmCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lm
IFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICB2b2lkIFByZXBhcmVGb3JEaXNwbGF5KCkgLT4g
KHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyPiBjb250ZW50
QnVmZmVyKSBTeW5jaHJvbm91cworI2VuZGlmCisjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNF
KEdSQVBISUNTX0xBWUVSX1dDKQogICAgIHZvaWQgUHJlcGFyZUZvckRpc3BsYXkoKSAtPiAoKSBT
eW5jaHJvbm91cwogI2VuZGlmCiAgICAgdm9pZCBFbnN1cmVFeHRlbnNpb25FbmFibGVkKFN0cmlu
ZyBleHRlbnNpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luLmNwcAppbmRleCA5ZGY4M2Y0
NjA3Y2M5OGMwZDhmYjdlZGY2N2VkNmY3Yjg5NzgxYTRiLi41ODIxY2RhOWZmMjE4OTk1ZTdiZjg1
ZjMyZmI4N2M0ZWI2NWVlYWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykgJiYgRU5BQkxFKFdFQkdM
KSAmJiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5o
IgorI2luY2x1ZGUgIldDQ29udGVudEJ1ZmZlck1hbmFnZXIuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
QEAgLTQwLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgLy8gUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0wgb3ZlcnJpZGVzLgogICAgIHZvaWQgcGxhdGZvcm1Xb3JrUXVldWVJbml0aWFsaXplKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKSBmaW5hbDsKKyAgICB2b2lkIHByZXBh
cmVGb3JEaXNwbGF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxXQ0NvbnRl
bnRCdWZmZXJJZGVudGlmaWVyPik+JiYpIGZpbmFsOwogfTsKIAogUmVmPFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMPiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMsIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRp
ZmllciBncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQm
IHJlbmRlcmluZ0JhY2tlbmQsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmIHN0cmVhbSkK
QEAgLTU5LDE5ICs2MSwxMyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luOjpwbGF0
Zm9ybVdvcmtRdWV1ZUluaXRpYWxpemUoV2ViQ29yZTo6R3JhcGhpY3NDbwogICAgIG1fY29udGV4
dCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFdURk1v
dmUoYXR0cmlidXRlcykpOwogfQogCi12b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwcmVw
YXJlRm9yRGlzcGxheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luOjpwcmVwYXJlRm9yRGlzcGxheShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8V0NDb250ZW50QnVmZmVySWRlbnRp
Zmllcj4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fY29udGV4dC0+cHJlcGFyZUZv
ckRpc3BsYXkoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIGF1dG8gaWRlbnRpZmll
ciA9IFdDQ29udGVudEJ1ZmZlck1hbmFnZXI6OnNpbmdsZXRvbigpLmFjcXVpcmVDb250ZW50QnVm
ZmVySWRlbnRpZmllcihtX3dlYlByb2Nlc3NJZGVudGlmaWVyLCBtX2NvbnRleHQtPmxheWVyQ29u
dGVudHNEaXNwbGF5RGVsZWdhdGUoKS0+cGxhdGZvcm1MYXllcigpKTsKKyAgICBjb21wbGV0aW9u
SGFuZGxlcihpZGVudGlmaWVyKTsKIH0KIAotI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKLVBs
YXRmb3JtTGF5ZXIqIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwbGF0Zm9ybUxheWVyKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRl
KCktPnBsYXRmb3JtTGF5ZXIoKTsKLX0KLSNlbmRpZgotCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVl
SG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NM
YXllclRyZWVIb3N0LmNwcAppbmRleCBmZDNkMjlmYzRlMDA5ZDY3NTYyMTNmMDI1NWM5NzZkYjQ4
ZGU5ZWUzLi4wMGQ1YjdhODdkZjdmNjhjMjg0NWI0YjEwNDMxZjJkZDE2YTk2YTFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRy
ZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVt
b3RlV0NMYXllclRyZWVIb3N0LmNwcApAQCAtNDYsMTEgKzQ2LDEyIEBAIHN0ZDo6dW5pcXVlX3B0
cjxSZW1vdGVXQ0xheWVyVHJlZUhvc3Q+IFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKEdQ
VUNvbm5lY3RpCiAKIFJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6UmVtb3RlV0NMYXllclRyZWVIb3N0
KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdlYktp
dDo6V0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBpZGVudGlmaWVyLCB1aW50NjRfdCBuYXRpdmVX
aW5kb3cpCiAgICAgOiBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoY29ubmVjdGlvblRvV2ViUHJv
Y2VzcykKKyAgICAsIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXIoY29ubmVjdGlvblRvV2ViUHJvY2Vz
cy53ZWJQcm9jZXNzSWRlbnRpZmllcigpKQogICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIp
CiAgICAgLCBtX3NoYXJlZFNjZW5lQ29udGV4dEhvbGRlcihjb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmdwdVByb2Nlc3MoKS5zaGFyZWRTY2VuZUNvbnRleHQoKS5lbnN1cmVIb2xkZXJGb3JXaW5kb3co
bmF0aXZlV2luZG93KSkKIHsKICAgICBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VS
ZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV0NMYXllclRy
ZWVIb3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllci50b1VJbnQ2NCgpLCAq
dGhpcyk7Ci0gICAgbV9zY2VuZSA9IG1ha2VVbmlxdWU8V0NTY2VuZT4oKTsKKyAgICBtX3NjZW5l
ID0gbWFrZVVuaXF1ZTxXQ1NjZW5lPihtX3dlYlByb2Nlc3NJZGVudGlmaWVyKTsKICAgICByZW1v
dGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFtzY2VuZSA9IG1f
c2NlbmUuZ2V0KCksIHNjZW5lQ29udGV4dEhvbGRlciA9IG1fc2hhcmVkU2NlbmVDb250ZXh0SG9s
ZGVyLmdldCgpLCBuYXRpdmVXaW5kb3ddIHsKICAgICAgICAgaWYgKCFzY2VuZUNvbnRleHRIb2xk
ZXItPmNvbnRleHQpCiAgICAgICAgICAgICBzY2VuZUNvbnRleHRIb2xkZXItPmNvbnRleHQuZW1w
bGFjZShuYXRpdmVXaW5kb3cpOwpAQCAtODIsMTcgKzgzLDggQEAgdWludDY0X3QgUmVtb3RlV0NM
YXllclRyZWVIb3N0OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0CiAKIHZvaWQg
UmVtb3RlV0NMYXllclRyZWVIb3N0Ojp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUpCiB7Ci0g
ICAgLy8gZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIHNob3VsZCBiZSBjYWxsZWQgb24gdGhl
IG1haW4gdGhyZWFkCi0gICAgYXV0byByZW1vdGVHQ0dMID0gV1RGOjptYXAodXBkYXRlLmNoYW5n
ZWRMYXllcnMsIFt0aGlzXShhdXRvJiBsYXllclVwZGF0ZSkgLT4gUmVmUHRyPFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMPiB7Ci0gICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6UGxhdGZvcm1MYXllcikgewotICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmdy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcikKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLT5maW5kUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wobWFrZU9iamVj
dElkZW50aWZpZXI8R3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyVHlwZT4obGF5ZXJVcGRhdGUu
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfSk7Ci0KLSAgICByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdv
cmtRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdlYWtQdHIoKnRoaXMpLCBzY2Vu
ZSA9IG1fc2NlbmUuZ2V0KCksIHVwZGF0ZSA9IFdURk1vdmUodXBkYXRlKSwgcmVtb3RlR0NHTCA9
IFdURk1vdmUocmVtb3RlR0NHTCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIHNjZW5lLT51cGRhdGUo
V1RGTW92ZSh1cGRhdGUpLCBXVEZNb3ZlKHJlbW90ZUdDR0wpKTsKKyAgICByZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdl
YWtQdHIoKnRoaXMpLCBzY2VuZSA9IG1fc2NlbmUuZ2V0KCksIHVwZGF0ZSA9IFdURk1vdmUodXBk
YXRlKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc2NlbmUtPnVwZGF0ZShXVEZNb3ZlKHVwZGF0ZSkp
OwogICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gV1RG
TW92ZSh3ZWFrVGhpcyldIHsKICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGVkYzRmYmI0MTBhNjVh
YmVkOWMyMjNhNGQxOTdhZjY1ZDQ3ZGE2NDUuLmIxYmIyYWFmNTdlN2EwOTY5MzU0MmJhMDI1YTc1
MGExMjkzNmY1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmgKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiV0NMYXllclRyZWVIb3N0SWRl
bnRpZmllci5oIgogI2luY2x1ZGUgIldDU2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CkBAIC01NSw2ICs1Niw3IEBAIHByaXZh
dGU6CiAgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9jb25uZWN0
aW9uVG9XZWJQcm9jZXNzOworICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJv
Y2Vzc0lkZW50aWZpZXI7CiAgICAgV0NMYXllclRyZWVIb3N0SWRlbnRpZmllciBtX2lkZW50aWZp
ZXI7CiAgICAgUmVmUHRyPFdDU2hhcmVkU2NlbmVDb250ZXh0SG9sZGVyOjpIb2xkZXI+IG1fc2hh
cmVkU2NlbmVDb250ZXh0SG9sZGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXQ1NjZW5lPiBtX3Nj
ZW5lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dD
Q29udGVudEJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dD
Q29udGVudEJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3YTE0YmRiODhhODFkNDdmOTdmYjllNzA0NWYz
NmVhODI4ZDJkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvV0NDb250ZW50QnVmZmVyLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2lu
Y2x1ZGUgIldDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJXQ0NvbnRlbnRC
dWZmZXJNYW5hZ2VyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdDQ29udGVudEJ1ZmZlciBmaW5hbCA6IFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyOjpDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHVibGljOgorICAgICAg
ICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1MYXllcldpbGxCZURlc3Ryb3llZCgpID0gMDsKKyAgICB9
OworICAgIAorICAgIFdDQ29udGVudEJ1ZmZlcihXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyJiBtYW5h
Z2VyLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzSWRlbnRpZmllciwgV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCisgICAgICAgIDog
bV9tYW5hZ2VyKG1hbmFnZXIpCisgICAgICAgICwgbV9wcm9jZXNzSWRlbnRpZmllcihwcm9jZXNz
SWRlbnRpZmllcikKKyAgICAgICAgLCBtX3BsYXRmb3JtTGF5ZXIocGxhdGZvcm1MYXllcikKKyAg
ICB7CisgICAgICAgIG1fcGxhdGZvcm1MYXllci0+c2V0Q2xpZW50KHRoaXMpOworICAgIH0KKwor
ICAgIH5XQ0NvbnRlbnRCdWZmZXIoKQorICAgIHsKKyAgICAgICAgbV9wbGF0Zm9ybUxheWVyLT5z
ZXRDbGllbnQobnVsbHB0cik7CisgICAgfQorCisgICAgdm9pZCBzZXRDbGllbnQoQ2xpZW50KiBj
bGllbnQpCisgICAgeworICAgICAgICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICB9CisKKyAgICBX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyOworICAgIH0KKworICAgIFdD
Q29udGVudEJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllcigpCisgICAgeworICAgICAgICByZXR1
cm4gV0NDb250ZW50QnVmZmVySWRlbnRpZmllcih0aGlzKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBwbGF0Zm9ybUxheWVyV2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50LT5wbGF0Zm9ybUxheWVy
V2lsbEJlRGVzdHJveWVkKCk7CisgICAgICAgIG1fbWFuYWdlci5yZW1vdmVDb250ZW50QnVmZmVy
KG1fcHJvY2Vzc0lkZW50aWZpZXIsIGlkZW50aWZpZXIoKSk7CisgICAgfQorICAgIHZvaWQgc2V0
UGxhdGZvcm1MYXllck5lZWRzRGlzcGxheSgpIG92ZXJyaWRlIHsgfQorCisgICAgV0NDb250ZW50
QnVmZmVyTWFuYWdlciYgbV9tYW5hZ2VyOworICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVy
IG1fcHJvY2Vzc0lkZW50aWZpZXI7CisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIqIG1fcGxhdGZvcm1MYXllcjsKKyAgICBDbGllbnQqIG1fY2xpZW50IHsgbnVsbHB0ciB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1Nf
TEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
d2MvV0NDb250ZW50QnVmZmVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvV0NDb250ZW50QnVmZmVyTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDMyN2E5
M2M5YThlMzZkNTkxZDg0NTY4YWNhNWRlOTBlNGM0OTk0ZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ0NvbnRlbnRCdWZmZXJNYW5hZ2Vy
LmNwcApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0NDb250ZW50QnVmZmVyTWFuYWdlci5oIgorCisjaWYgVVNFKEdSQVBI
SUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSAiV0NDb250ZW50QnVmZmVyLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdDQ29udGVudEJ1
ZmZlck1hbmFnZXI6OlByb2Nlc3NJbmZvIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBQcm9jZXNzSW5mbyhXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyJiBtYW5hZ2Vy
LCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzSWRlbnRpZmllcikKKyAgICAgICAg
OiBtX21hbmFnZXIobWFuYWdlcikKKyAgICAgICAgLCBtX3Byb2Nlc3NJZGVudGlmaWVyKHByb2Nl
c3NJZGVudGlmaWVyKSB7IH0KKworICAgIHN0ZDo6b3B0aW9uYWw8V0NDb250ZW50QnVmZmVySWRl
bnRpZmllcj4gYWNxdWlyZUNvbnRlbnRCdWZmZXJJZGVudGlmaWVyKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllciBkb2Vzbid0IHN1cHBvcnQgZG91Ymxl
IGJ1ZmZlcmluZyB5ZXQuCisgICAgICAgIC8vIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIGNh
biBhY3F1aXJlIGEgc2luZ2xlIFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIuCisgICAgICAgIGF1
dG8gY29udGVudEJ1ZmZlckFkZFJlc3VsdCA9IG1fY29udGVudEJ1ZmZlcnMuZW5zdXJlKHBsYXRm
b3JtTGF5ZXIsIFsmXSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxXQ0NvbnRlbnRC
dWZmZXI+KG1fbWFuYWdlciwgbV9wcm9jZXNzSWRlbnRpZmllciwgcGxhdGZvcm1MYXllcik7Cisg
ICAgICAgIH0pOworICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBjb250ZW50QnVmZmVyQWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS0+aWRlbnRpZmllcigpOworICAgICAgICBhdXRvIGlkZW50aWZp
ZXJBZGRSZXN1bHQgPSBtX3ZhbGlkSWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIpOworICAgICAg
ICBpZiAoIWlkZW50aWZpZXJBZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBpZGVudGlmaWVyOworICAgIH0KKworICAg
IFdDQ29udGVudEJ1ZmZlciogcmVsZWFzZUNvbnRlbnRCdWZmZXJJZGVudGlmaWVyKFdDQ29udGVu
dEJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaWRl
bnRpZmllciBpcyBwYXNzZWQgYnkgd2ViIHByb2Nlc3MuCisgICAgICAgIC8vIEl0IG11c3QgYmUg
Y2hlY2tlZCB2YWxpZGl0eSBiZWZvcmUgZ2V0dGluZyB0aGUgV0NDb250ZW50QnVmZmVyIHBvaW50
ZXIuCisgICAgICAgIGlmICghbV92YWxpZElkZW50aWZpZXJzLnJlbW92ZShpZGVudGlmaWVyKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gaWRlbnRpZmllci50
b1dDQ29udGVudEJ1ZmZlcigpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlQ29udGVudEJ1ZmZl
cihXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAgeworICAgICAgICBt
X3ZhbGlkSWRlbnRpZmllcnMucmVtb3ZlKGlkZW50aWZpZXIpOworICAgICAgICBhdXRvIGNvbnRl
bnRCdWZmZXIgPSBpZGVudGlmaWVyLnRvV0NDb250ZW50QnVmZmVyKCk7CisgICAgICAgIG1fY29u
dGVudEJ1ZmZlcnMucmVtb3ZlKGNvbnRlbnRCdWZmZXItPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFdDQ29udGVudEJ1ZmZlck1hbmFnZXImIG1fbWFuYWdlcjsKKyAg
ICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3Byb2Nlc3NJZGVudGlmaWVyOworICAgIEhh
c2hNYXA8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqLCBzdGQ6OnVuaXF1ZV9w
dHI8V0NDb250ZW50QnVmZmVyPj4gbV9jb250ZW50QnVmZmVyczsKKyAgICBIYXNoU2V0PFdDQ29u
dGVudEJ1ZmZlcklkZW50aWZpZXI+IG1fdmFsaWRJZGVudGlmaWVyczsKK307CisKK1dDQ29udGVu
dEJ1ZmZlck1hbmFnZXImIFdDQ29udGVudEJ1ZmZlck1hbmFnZXI6OnNpbmdsZXRvbigpCit7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdDQ29udGVudEJ1ZmZlck1hbmFnZXI+IGNvbnRlbnRC
dWZmZXJNYW5hZ2VyOworICAgIHJldHVybiBjb250ZW50QnVmZmVyTWFuYWdlcjsKK30KKworc3Rk
OjpvcHRpb25hbDxXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyPiBXQ0NvbnRlbnRCdWZmZXJNYW5h
Z2VyOjphY3F1aXJlQ29udGVudEJ1ZmZlcklkZW50aWZpZXIoV2ViQ29yZTo6UHJvY2Vzc0lkZW50
aWZpZXIgcHJvY2Vzc0lkZW50aWZpZXIsIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKQoreworICAgIGF1dG8gcHJvY2Vzc0FkZFJlc3VsdCA9IG1fcHJv
Y2Vzc01hcC5lbnN1cmUocHJvY2Vzc0lkZW50aWZpZXIsIFsmXSB7CisgICAgICAgIHJldHVybiBt
YWtlVW5pcXVlPFByb2Nlc3NJbmZvPigqdGhpcywgcHJvY2Vzc0lkZW50aWZpZXIpOworICAgIH0p
OworICAgIHJldHVybiBwcm9jZXNzQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWNxdWlyZUNv
bnRlbnRCdWZmZXJJZGVudGlmaWVyKHBsYXRmb3JtTGF5ZXIpOworfQorCitXQ0NvbnRlbnRCdWZm
ZXIqIFdDQ29udGVudEJ1ZmZlck1hbmFnZXI6OnJlbGVhc2VDb250ZW50QnVmZmVySWRlbnRpZmll
cihXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzSWRlbnRpZmllciwgV0NDb250ZW50
QnVmZmVySWRlbnRpZmllciBjb250ZW50QnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQo
bV9wcm9jZXNzTWFwLmNvbnRhaW5zKHByb2Nlc3NJZGVudGlmaWVyKSk7CisgICAgcmV0dXJuIG1f
cHJvY2Vzc01hcC5nZXQocHJvY2Vzc0lkZW50aWZpZXIpLT5yZWxlYXNlQ29udGVudEJ1ZmZlcklk
ZW50aWZpZXIoY29udGVudEJ1ZmZlcklkZW50aWZpZXIpOworfQorCit2b2lkIFdDQ29udGVudEJ1
ZmZlck1hbmFnZXI6OnJlbW92ZUNvbnRlbnRCdWZmZXIoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZp
ZXIgcHJvY2Vzc0lkZW50aWZpZXIsIFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIgY29udGVudEJ1
ZmZlcklkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fcHJvY2Vzc01hcC5jb250YWlucyhwcm9j
ZXNzSWRlbnRpZmllcikpOworICAgIG1fcHJvY2Vzc01hcC5nZXQocHJvY2Vzc0lkZW50aWZpZXIp
LT5yZW1vdmVDb250ZW50QnVmZmVyKGNvbnRlbnRCdWZmZXJJZGVudGlmaWVyKTsKK30KKwordm9p
ZCBXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpyZW1vdmVBbGxDb250ZW50QnVmZmVyc0ZvclByb2Nl
c3MoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgcHJvY2Vzc0lkZW50aWZpZXIpCit7CisgICAg
bV9wcm9jZXNzTWFwLnJlbW92ZShwcm9jZXNzSWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDQ29udGVudEJ1ZmZlck1h
bmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ0NvbnRlbnRC
dWZmZXJNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWZjZWE2YWQxZWU1Njg3OGI1ODc4ODU4N2I2MWJk
MDQzYzIwNmJiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy93Yy9XQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyLmgKQEAgLTAsMCArMSw2MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5j
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykK
KworI2luY2x1ZGUgIldDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVy
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXQ0NvbnRlbnRCdWZmZXI7CisKK2NsYXNzIFdDQ29udGVudEJ1ZmZlck1hbmFnZXIg
eworcHVibGljOgorICAgIGNsYXNzIFByb2Nlc3NJbmZvOworCisgICAgc3RhdGljIFdDQ29udGVu
dEJ1ZmZlck1hbmFnZXImIHNpbmdsZXRvbigpOworCisgICAgc3RkOjpvcHRpb25hbDxXQ0NvbnRl
bnRCdWZmZXJJZGVudGlmaWVyPiBhY3F1aXJlQ29udGVudEJ1ZmZlcklkZW50aWZpZXIoV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIsIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
Kik7CisgICAgV0NDb250ZW50QnVmZmVyKiByZWxlYXNlQ29udGVudEJ1ZmZlcklkZW50aWZpZXIo
V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIpOwor
ICAgIHZvaWQgcmVtb3ZlQ29udGVudEJ1ZmZlcihXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwg
V0NDb250ZW50QnVmZmVySWRlbnRpZmllcik7CisgICAgdm9pZCByZW1vdmVBbGxDb250ZW50QnVm
ZmVyc0ZvclByb2Nlc3MoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIpOworCitwcml2YXRlOgor
ICAgIEhhc2hNYXA8V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxQ
cm9jZXNzSW5mbz4+IG1fcHJvY2Vzc01hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCmluZGV4IGIzNTc0NWNkNWVhYzlhY2M3
YzNkMTAxYTM5ODA4Y2IxZWIxNjZmM2YuLmFhNjVjMDExMjEyZjc3Y2RhMmY0ZmExMGE2ZmQwZWRl
YTQ3NmQxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93
Yy9XQ1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2Mv
V0NTY2VuZS5jcHAKQEAgLTI5LDI1ICsyOSwyNyBAQAogI2lmIFVTRShHUkFQSElDU19MQVlFUl9X
QykKIAogI2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgiCisjaW5jbHVkZSAiV0ND
b250ZW50QnVmZmVyLmgiCisjaW5jbHVkZSAiV0NDb250ZW50QnVmZmVyTWFuYWdlci5oIgogI2lu
Y2x1ZGUgIldDU2NlbmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiV0NVcGF0ZUluZm8uaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9UZXh0dXJlTWFwcGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyVGlsZWRCYWNr
aW5nU3RvcmUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0cnVjdCBXQ1NjZW5lOjpMYXll
ciA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjo6Q2xpZW50IHsK
K3N0cnVjdCBXQ1NjZW5lOjpMYXllciBmaW5hbCA6IHB1YmxpYyBXQ0NvbnRlbnRCdWZmZXI6OkNs
aWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgTGF5ZXIo
KSA9IGRlZmF1bHQ7CiAKLSAgICAvLyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjo6Q2xpZW50
CisgICAgLy8gV0NDb250ZW50QnVmZmVyOjpDbGllbnQKICAgICB2b2lkIHBsYXRmb3JtTGF5ZXJX
aWxsQmVEZXN0cm95ZWQoKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgdGV4bWFwTGF5ZXIuc2V0
Q29udGVudHNMYXllcihudWxscHRyKTsKICAgICB9Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybUxheWVy
TmVlZHNEaXNwbGF5KCkgb3ZlcnJpZGUgeyB9CiAKICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
TGF5ZXIgdGV4bWFwTGF5ZXI7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxl
ZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlOwpAQCAtNjIsNyArNjQsMTAgQEAgdm9pZCBXQ1Nj
ZW5lOjppbml0aWFsaXplKFdDU2NlbmVDb250ZXh0JiBjb250ZXh0KQogICAgIG1fdGV4dHVyZU1h
cHBlciA9IG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZU1hcHBlcigpOwogfQogCi1XQ1NjZW5lOjpX
Q1NjZW5lKCkgPSBkZWZhdWx0OworV0NTY2VuZTo6V0NTY2VuZShXZWJDb3JlOjpQcm9jZXNzSWRl
bnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcikKKyAgICA6IG1fd2ViUHJvY2Vzc0lkZW50aWZp
ZXIod2ViUHJvY2Vzc0lkZW50aWZpZXIpCit7Cit9CiAKIFdDU2NlbmU6On5XQ1NjZW5lKCkKIHsK
QEAgLTcwLDcgKzc1LDcgQEAgV0NTY2VuZTo6fldDU2NlbmUoKQogICAgIG1fdGV4dHVyZU1hcHBl
ciA9IG51bGxwdHI7CiB9CiAKLXZvaWQgV0NTY2VuZTo6dXBkYXRlKFdDVXBhdGVJbmZvJiYgdXBk
YXRlLCBWZWN0b3I8UmVmUHRyPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMPj4mJiByZW1vdGVHQ0dM
KQordm9pZCBXQ1NjZW5lOjp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUpCiB7CiAgICAgaWYg
KCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC04
MCw4ICs4NSw2IEBAIHZvaWQgV0NTY2VuZTo6dXBkYXRlKFdDVXBhdGVJbmZvJiYgdXBkYXRlLCBW
ZWN0b3I8UmVmUHRyPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMCiAgICAgICAgIG1fbGF5ZXJzLmFk
ZChpZCwgV1RGTW92ZShsYXllcikpOwogICAgIH0KIAotICAgIGF1dG8gcmVtb3RlR0NHTEl0ZXJh
dG9yID0gcmVtb3RlR0NHTC5iZWdpbigpOwotCiAgICAgZm9yIChhdXRvJiBsYXllclVwZGF0ZSA6
IHVwZGF0ZS5jaGFuZ2VkTGF5ZXJzKSB7CiAgICAgICAgIGF1dG8gbGF5ZXIgPSBtX2xheWVycy5n
ZXQobGF5ZXJVcGRhdGUuaWQpOwogICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6OkNoaWxkcmVuKSB7CkBAIC0xNjUsMTYgKzE2OCwxOSBAQCB2b2lkIFdDU2Nl
bmU6OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVwZGF0ZSwgVmVjdG9yPFJlZlB0cjxSZW1vdGVHcmFw
aGljc0NvbnRleHRHTAogICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJhY2tkcm9w
RmlsdGVyc1JlY3QobGF5ZXJVcGRhdGUuYmFja2Ryb3BGaWx0ZXJzUmVjdCk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9y
bUxheWVyKSB7Ci0gICAgICAgICAgICBpZiAoKnJlbW90ZUdDR0xJdGVyYXRvcikgewotICAgICAg
ICAgICAgICAgIGF1dG8gcGxhdGZvcm1MYXllciA9ICgqcmVtb3RlR0NHTEl0ZXJhdG9yKS0+cGxh
dGZvcm1MYXllcigpOwotICAgICAgICAgICAgICAgIHBsYXRmb3JtTGF5ZXItPnNldENsaWVudChs
YXllcik7Ci0gICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldENvbnRlbnRzTGF5
ZXIocGxhdGZvcm1MYXllcik7Ci0gICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGlmICgh
bGF5ZXJVcGRhdGUuaGFzUGxhdGZvcm1MYXllcikKICAgICAgICAgICAgICAgICBsYXllci0+dGV4
bWFwTGF5ZXIuc2V0Q29udGVudHNMYXllcihudWxscHRyKTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIFdDQ29udGVudEJ1ZmZlciogY29udGVudEJ1ZmZlciA9IG51bGxwdHI7
CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIGlkZW50aWZpZXIgOiBsYXllclVwZGF0ZS5jb250
ZW50QnVmZmVySWRlbnRpZmllcnMpCisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRCdWZmZXIg
PSBXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZWxlYXNlQ29udGVudEJ1ZmZl
cklkZW50aWZpZXIobV93ZWJQcm9jZXNzSWRlbnRpZmllciwgaWRlbnRpZmllcik7CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRlbnRCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGVu
dEJ1ZmZlci0+c2V0Q2xpZW50KGxheWVyKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPnRl
eG1hcExheWVyLnNldENvbnRlbnRzTGF5ZXIoY29udGVudEJ1ZmZlci0+cGxhdGZvcm1MYXllcigp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
cmVtb3RlR0NHTEl0ZXJhdG9yKys7CiAgICAgfQotICAgIEFTU0VSVChyZW1vdGVHQ0dMSXRlcmF0
b3IgPT0gcmVtb3RlR0NHTC5lbmQoKSk7CiAKICAgICBmb3IgKGF1dG8gaWQgOiB1cGRhdGUucmVt
b3ZlZExheWVycykKICAgICAgICAgbV9sYXllcnMucmVtb3ZlKGlkKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmggYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5oCmluZGV4IDYzZWQwM2YzZWU4NmEy
YWEyMTc3YzhjMWJjOTg1MjRhODIzMDI5YmMuLjNkMTUxZDlkMjk2YWM0YzYwY2JkNzVkOTQ4ZGYw
ODVlY2JhOGJmMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy93Yy9XQ1NjZW5lLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3dj
L1dDU2NlbmUuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dD
KQogCisjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0zNCwyNyArMzUsMjggQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIFRleHR1cmVNYXBwZXI7CiBjbGFzcyBUZXh0dXJlTWFwcGVyTGF5
ZXI7CitjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjsKIGNsYXNzIFRleHR1cmVNYXBw
ZXJUaWxlZEJhY2tpbmdTdG9yZTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOwogY2xhc3MgV0NTY2VuZUNvbnRleHQ7CiBzdHJ1Y3QgV0NV
cGF0ZUluZm87CiAKIGNsYXNzIFdDU2NlbmUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIFdDU2NlbmUoKTsKKyAgICBXQ1NjZW5lKFdlYkNvcmU6OlByb2Nlc3NJ
ZGVudGlmaWVyKTsKICAgICB+V0NTY2VuZSgpOwogICAgIHZvaWQgaW5pdGlhbGl6ZShXQ1NjZW5l
Q29udGV4dCYpOwotICAgIHZvaWQgdXBkYXRlKFdDVXBhdGVJbmZvJiYsIFZlY3RvcjxSZWZQdHI8
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+PiYmKTsKKyAgICB2b2lkIHVwZGF0ZShXQ1VwYXRlSW5m
byYmKTsKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgTGF5ZXI7CiAgICAgdXNpbmcgTGF5ZXJNYXAg
PSBIYXNoTWFwPHVpbnQ2NF90LCBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXI+PjsKIAorICAgIFdlYkNv
cmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7CiAgICAgV0NTY2Vu
ZUNvbnRleHQqIG1fY29udGV4dCB7IG51bGxwdHIgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwogICAgIFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJGUFNDb3VudGVyIG1fZnBzQ291bnRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCmlu
ZGV4IDM1MGZkZDQ5N2VhYWFiNzExMDU5YzU0YjUwNzUwMTViMTkzNzkzNjguLjM2NzZjMzUxNDU2
NGViMWYxYmNkNjk3ZTM3YWFkY2QwNDI0YWU3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQpA
QCAtMTIsNiArMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwCiAKICAgICBHUFVQcm9j
ZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5jcHAKKyAgICBHUFVQcm9jZXNz
L2dyYXBoaWNzL3djL1dDQ29udGVudEJ1ZmZlck1hbmFnZXIuY3BwCiAgICAgR1BVUHJvY2Vzcy9n
cmFwaGljcy93Yy9XQ1NjZW5lLmNwcAogICAgIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2Vu
ZUNvbnRleHQuY3BwCiAKQEAgLTEyMCw2ICsxMjEsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXRfSU5D
TFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzIgogICAgICIke1dFQktJVF9ESVJ9L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3Ro
cmVhZGVkY29tcG9zaXRvciIKICAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvUGx1Z2lucy93aW4i
CisgICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL3djIgogICAgICIke1dFQktJVF9ESVJ9L1NoYXJl
ZC93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2NhaXJvIgogICAgICIk
e1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9jdXJsIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93
ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggOTRjZmQ5MDBjMzA0ZTk1Njc1MWZjMWIwMjhmZWFjM2U2
NDE5MjM5NS4uZDEzMGZjZTEwN2QyOTk5NGJmYWI0MTFkOTIwNmNlYTdkMTc0ZGIzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0zNjEsNiArMzYxLDcgQEAg
ZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dl
YktpdDo6VHJhbnNhY3Rpb25JRCcsCiAgICAgICAgICdXZWJLaXQ6OlVzZXJDb250ZW50Q29udHJv
bGxlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpXQ0xheWVyVHJlZUhvc3RJZGVudGlm
aWVyJywKKyAgICAgICAgJ1dlYktpdDo6V0NDb250ZW50QnVmZmVySWRlbnRpZmllcicsCiAgICAg
ICAgICdXZWJLaXQ6OldlYkdQVUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpXZWJQYWdl
UHJveHlJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6V2ViVVJMU2NoZW1lSGFuZGxlcklk
ZW50aWZpZXInLApAQCAtMzczLDYgKzM3NCw3IEBAIGRlZiBjb25kaXRpb25zX2Zvcl9oZWFkZXIo
aGVhZGVyKToKICAgICAgICAgJyJJbnB1dE1ldGhvZFN0YXRlLmgiJzogWyJQTEFURk9STShHVEsp
IiwgIlBMQVRGT1JNKFdQRSkiXSwKICAgICAgICAgJyJMYXllckhvc3RpbmdDb250ZXh0LmgiJzog
WyJQTEFURk9STShDT0NPQSkiLCBdLAogICAgICAgICAnIkdlc3R1cmVUeXBlcy5oIic6IFsiUExB
VEZPUk0oSU9TX0ZBTUlMWSkiXSwKKyAgICAgICAgJyJXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVy
LmgiJzogWyJVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpIl0sCiAgICAgICAgICciV0NMYXllclRyZWVI
b3N0SWRlbnRpZmllci5oIic6IFsiVVNFKEdSQVBISUNTX0xBWUVSX1dDKSJdLAogICAgICAgICAn
PFdlYkNvcmUvQ1ZVdGlsaXRpZXMuaD4nOiBbIlBMQVRGT1JNKENPQ09BKSIsIF0sCiAgICAgICAg
ICc8V2ViQ29yZS9EYXRhRGV0ZWN0b3JUeXBlLmg+JzogWyJFTkFCTEUoREFUQV9ERVRFQ1RJT04p
Il0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93Yy9XQ0NvbnRlbnRCdWZmZXJJ
ZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93Yy9XQ0NvbnRlbnRCdWZmZXJJZGVu
dGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjc0OGNhNmVjY2NhMWE3YmY1YzQ2OTRjOWFhMjRiMDQ5ZjI1
NTllNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3djL1dDQ29udGVu
dEJ1ZmZlcklkZW50aWZpZXIuaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorCisjaW5jbHVkZSA8b3B0aW9u
YWw+CisjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXQ0NvbnRlbnRCdWZmZXI7
CisKK2NsYXNzIFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIgeworcHVibGljOgorICAgIFdDQ29u
dGVudEJ1ZmZlcklkZW50aWZpZXIoKSB7IH0KKworICAgIGV4cGxpY2l0IFdDQ29udGVudEJ1ZmZl
cklkZW50aWZpZXIoV0NDb250ZW50QnVmZmVyKiBjb250ZW50QnVmZmVyKQorICAgICAgICA6IG1f
aWRlbnRpZmllcihjb250ZW50QnVmZmVyKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBX
Q0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkK
KyAgICAgICAgOiBtX2lkZW50aWZpZXIoaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCisgICAgewor
ICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllciA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsK
KyAgICB9CisKKyAgICBXQ0NvbnRlbnRCdWZmZXIqIHRvV0NDb250ZW50QnVmZmVyKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXI7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXImIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllciA9PSBvdGhlci5tX2lkZW50aWZpZXI7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdDQ29udGVudEJ1ZmZlcklkZW50
aWZpZXImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllciAh
PSBvdGhlci5tX2lkZW50aWZpZXI7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKKyAgICB7CisgICAgICAg
IGVuY29kZXIgPDwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9pZGVudGlmaWVyKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25h
bDxXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKKyAg
ICB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8aW50cHRyX3Q+IGlkZW50aWZpZXI7CisgICAgICAg
IGRlY29kZXIgPj4gaWRlbnRpZmllcjsKKyAgICAgICAgaWYgKCFpZGVudGlmaWVyKQorICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIFdDQ29udGVudEJ1ZmZl
cklkZW50aWZpZXIocmVpbnRlcnByZXRfY2FzdDxXQ0NvbnRlbnRCdWZmZXIqPigqaWRlbnRpZmll
cikpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgc3RydWN0IFdURjo6RGVmYXVsdEhh
c2g8V0NDb250ZW50QnVmZmVySWRlbnRpZmllcj47CisKKyAgICBzdGF0aWMgV0NDb250ZW50QnVm
ZmVyKiBoYXNoVGFibGVEZWxldGVkVmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFdD
Q29udGVudEJ1ZmZlcio+KH5zdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDApKTsgfQorICAgIAorICAg
IFdDQ29udGVudEJ1ZmZlciogbV9pZGVudGlmaWVyIHsgbnVsbHB0ciB9OworfTsKKworaW5saW5l
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHN0cmVhbSwgY29u
c3QgV0NDb250ZW50QnVmZmVySWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4g
c3RyZWFtIDw8IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpZGVudGlmaWVyLnRvV0NDb250
ZW50QnVmZmVyKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBIYXNoVHJhaXRzPFdlYktpdDo6V0NDb250ZW50QnVm
ZmVySWRlbnRpZmllcj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8V2ViS2l0OjpXQ0NvbnRlbnRC
dWZmZXJJZGVudGlmaWVyPiB7IH07CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxX
ZWJLaXQ6OldDQ29udGVudEJ1ZmZlcklkZW50aWZpZXI+IHsKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBXZWJLaXQ6OldDQ29udGVudEJ1ZmZlcklkZW50aWZpZXImIGlkZW50aWZpZXIp
IHsgcmV0dXJuIERlZmF1bHRIYXNoPFdlYktpdDo6V0NDb250ZW50QnVmZmVyKj46Omhhc2goaWRl
bnRpZmllci5tX2lkZW50aWZpZXIpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2Vi
S2l0OjpXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyJiBhLCBjb25zdCBXZWJLaXQ6OldDQ29udGVu
dEJ1ZmZlcklkZW50aWZpZXImIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eVdDLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eVdDLmNwcAppbmRleCA4
MTQ4NTA2YzgzODgxYzJhYzZmODMyMjU5ZmE0YTc1ZGJiNTk3YjViLi5kMDA5NzI0NGRmZTc2NzI3
ZDg1YTVlMDJhYWYyNTkyNGMxYmM1Mzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlXQy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5V0MuY3BwCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eVdDKEdQVVByb2Nlc3NDb25uZWN0
aW9uJiBncHVQcm9jZXNzQ29ubmVjdGlvbiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5k
ZXJpbmdCYWNrZW5kKQogICAgICAgICA6IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkoZ3B1
UHJvY2Vzc0Nvbm5lY3Rpb24sIGF0dHJpYnV0ZXMsIHJlbmRlcmluZ0JhY2tlbmQpCi0gICAgICAg
ICwgbV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKFBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVs
ZWdhdGU6OmNyZWF0ZShtYWtlVW5pcXVlPFdDUGxhdGZvcm1MYXllckdDR0w+KG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKSkpCisgICAgICAgICwgbV9sYXllckNvbnRlbnRzRGlzcGxheURl
bGVnYXRlKFBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdhdGU6OmNyZWF0ZShtYWtlVW5pcXVlPFdD
UGxhdGZvcm1MYXllckdDR0w+KCkpKQogICAgIHsKICAgICB9CiAKQEAgLTg0LDExICs4NCwxNCBA
QCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlXQzo6cHJlcGFyZUZvckRpc3BsYXko
KQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRv
IHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OlByZXBhcmVGb3JEaXNwbGF5KCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
UHJlcGFyZUZvckRpc3BsYXk6OlJlcGx5KCkpOworICAgIHN0ZDo6b3B0aW9uYWw8V0NDb250ZW50
QnVmZmVySWRlbnRpZmllcj4gY29udGVudEJ1ZmZlcjsKKyAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlByZXBhcmVGb3JEaXNw
bGF5KCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3Bs
YXk6OlJlcGx5KGNvbnRlbnRCdWZmZXIpKTsKICAgICBpZiAoIXNlbmRSZXN1bHQpIHsKICAgICAg
ICAgbWFya0NvbnRleHRMb3N0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKGNv
bnRlbnRCdWZmZXIpCisgICAgICAgIHN0YXRpY19jYXN0PFdDUGxhdGZvcm1MYXllckdDR0wqPiht
X2xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUtPnBsYXRmb3JtTGF5ZXIoKSktPmFkZENvbnRl
bnRCdWZmZXJJZGVudGlmaWVyKCpjb250ZW50QnVmZmVyKTsKICAgICBtYXJrTGF5ZXJDb21wb3Np
dGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmgKaW5kZXggYTg3ZTA4ZTgyZTE5
MDdhODBhZDdhN2QwYmNkMzZiZTkwM2I0MzkzYi4uYTBkM2MxYTQzZjgwM2VmM2IzNGQwOTQ3ZDk2
NmY0YWZlNGQ5MTRjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmgKQEAgLTI2LDIwICsy
NiwyNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIuaCIKKyNpbmNsdWRlICJXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9XQ1BsYXRmb3JtTGF5ZXIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNs
YXNzIFdDUGxhdGZvcm1MYXllckdDR0wgOiBwdWJsaWMgV2ViQ29yZTo6V0NQbGF0Zm9ybUxheWVy
IHsKIHB1YmxpYzoKLSAgICBXQ1BsYXRmb3JtTGF5ZXJHQ0dMKEdyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllciBpZGVudGlmaWVyKQotICAgICAgICA6IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyKGlkZW50aWZpZXIpCisgICAgVmVjdG9yPFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXI+IHRh
a2VDb250ZW50QnVmZmVySWRlbnRpZmllcnMoKQogICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
ZXhjaGFuZ2UobV9jb250ZW50QnVmZmVySWRlbnRpZmllcnMsIHsgfSk7CisgICAgfQorCisgICAg
dm9pZCBhZGRDb250ZW50QnVmZmVySWRlbnRpZmllcihXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVy
IGNvbnRlbnRCdWZmZXIpCisgICAgeworICAgICAgICBtX2NvbnRlbnRCdWZmZXJJZGVudGlmaWVy
cy5hcHBlbmQoY29udGVudEJ1ZmZlcik7CisgICAgICAgIC8vIEZJWE1FOiBUZXh0dXJlTWFwcGVy
R0NHTFBsYXRmb3JtTGF5ZXIgZG9lc24ndCBzdXBwb3J0IGRvdWJsZSBidWZmZXJpbmcgeWV0Lgor
ICAgICAgICBBU1NFUlQobV9jb250ZW50QnVmZmVySWRlbnRpZmllcnMuc2l6ZSgpID09IDEpOwog
ICAgIH0KLSAgICBHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXImIGdyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllcigpIHsgcmV0dXJuIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyOyB9CiAK
IHByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIG1fZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyOworICAgIFZlY3RvcjxXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyPiBt
X2NvbnRlbnRCdWZmZXJJZGVudGlmaWVyczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NM
YXllcldDLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNz
TGF5ZXJXQy5jcHAKaW5kZXggYmQ5YWNiZTkzMzNmMThhNzc5NzNiZWU5YWQwMTBjZjFmMDY1Nzk2
Zi4uN2E3MjY1ZTk2NjdkZWIxMjE3OGM2MjI4Nzc5OWFlYTE3N2E4ZDJjOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0Mu
Y3BwCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXROZWVkc0Rpc3Bs
YXlJblJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0LCBTaG91CiB2b2lkIEdyYXBo
aWNzTGF5ZXJXQzo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQogewogICAgIC8vIEZvciBleGFt
cGxlLCBpZiBXZWJHTCBjYW52YXMgY2hhbmdlZCwgaXQgbmVlZHMgZmx1c2ggdG8gZGlzcGxheS4K
LSAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoeyB9KTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6UGxhdGZvcm1MYXllcik7CiB9CiAKIGJvb2wgR3JhcGhp
Y3NMYXllcldDOjpzZXRDaGlsZHJlbihWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiYmIGNoaWxk
cmVuKQpAQCAtNDc1LDEwICs0NzUsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6Zmx1c2hDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiAgICAgICAgIHVwZGF0ZS5iYWNrZHJvcEZp
bHRlcnNSZWN0ID0gYmFja2Ryb3BGaWx0ZXJzUmVjdCgpOwogICAgIH0KICAgICBpZiAodXBkYXRl
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9ybUxheWVyKSB7CisgICAgICAgIHVwZGF0
ZS5oYXNQbGF0Zm9ybUxheWVyID0gbV9wbGF0Zm9ybUxheWVyOwogICAgICAgICBpZiAobV9wbGF0
Zm9ybUxheWVyKQotICAgICAgICAgICAgdXBkYXRlLmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ciA9IHN0YXRpY19jYXN0PFdDUGxhdGZvcm1MYXllckdDR0wqPihtX3BsYXRmb3JtTGF5ZXIpLT5n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIoKS50b1VJbnQ2NCgpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB1cGRhdGUuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyID0gMDsKKyAgICAg
ICAgICAgIHVwZGF0ZS5jb250ZW50QnVmZmVySWRlbnRpZmllcnMgPSBzdGF0aWNfY2FzdDxXQ1Bs
YXRmb3JtTGF5ZXJHQ0dMKj4obV9wbGF0Zm9ybUxheWVyKS0+dGFrZUNvbnRlbnRCdWZmZXJJZGVu
dGlmaWVycygpOwogICAgIH0KICAgICBtX29ic2VydmVyLT5jb21taXRMYXllclVwYXRlSW5mbyhX
VEZNb3ZlKHVwZGF0ZSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3djL1dDVXBhdGVJbmZvLmgKaW5kZXggYzdiNGRkODFiN2UxNzdlZTY3NjdhYWE3NTViZmU4
OTA0NTlmZWZjZS4uMTQ5MmZlODlmNzFiYWE1NDBmMGYwYWQ4OWViMDY5MmM3NGE3NzhiYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8u
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5o
CkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIldDQmFja2luZ1N0
b3JlLmgiCisjaW5jbHVkZSAiV0NDb250ZW50QnVmZmVySWRlbnRpZmllci5oIgogI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXll
ci5oPgogI2luY2x1ZGUgPG9wdGlvbmFsPgpAQCAtNzQsNiArNzUsNyBAQCBzdHJ1Y3QgV0NMYXll
clVwYXRlSW5mbyB7CiAgICAgYm9vbCBjb250ZW50c1Zpc2libGU7CiAgICAgYm9vbCBiYWNrZmFj
ZVZpc2liaWxpdHk7CiAgICAgYm9vbCBwcmVzZXJ2ZXMzRDsKKyAgICBib29sIGhhc1BsYXRmb3Jt
TGF5ZXI7CiAgICAgV2ViQ29yZTo6Q29sb3Igc29saWRDb2xvcjsKICAgICBXZWJDb3JlOjpDb2xv
ciBiYWNrZ3JvdW5kQ29sb3I7CiAgICAgV2ViQ29yZTo6Q29sb3IgZGVidWdCb3JkZXJDb2xvcjsK
QEAgLTg4LDcgKzkwLDcgQEAgc3RydWN0IFdDTGF5ZXJVcGF0ZUluZm8gewogICAgIFdlYkNvcmU6
OkZpbHRlck9wZXJhdGlvbnMgYmFja2Ryb3BGaWx0ZXJzOwogICAgIFdlYkNvcmU6OkZsb2F0Um91
bmRlZFJlY3QgYmFja2Ryb3BGaWx0ZXJzUmVjdDsKICAgICBXZWJDb3JlOjpGbG9hdFJvdW5kZWRS
ZWN0IGNvbnRlbnRzQ2xpcHBpbmdSZWN0OwotICAgIHVpbnQ2NF90IGdyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllcjsKKyAgICBWZWN0b3I8V0NDb250ZW50QnVmZmVySWRlbnRpZmllcj4gY29udGVu
dEJ1ZmZlcklkZW50aWZpZXJzOwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KICAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApAQCAtMTM2LDcgKzEzOCw3IEBAIHN0
cnVjdCBXQ0xheWVyVXBhdGVJbmZvIHsKICAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpCYWNrZHJvcEZpbHRlcnMpCiAgICAgICAgICAgICBlbmNvZGVyIDw8IGJhY2tkcm9wRmls
dGVycyA8PCBiYWNrZHJvcEZpbHRlcnNSZWN0OwogICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpCi0gICAgICAgICAgICBlbmNvZGVyIDw8IGdyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllcjsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgaGFzUGxhdGZvcm1M
YXllciA8PCBjb250ZW50QnVmZmVySWRlbnRpZmllcnM7CiAgICAgfQogCiAgICAgdGVtcGxhdGUg
PGNsYXNzIERlY29kZXI+CkBAIC0yNDEsNyArMjQzLDkgQEAgc3RydWN0IFdDTGF5ZXJVcGF0ZUlu
Zm8gewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBp
ZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9ybUxheWVyKSB7Ci0gICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIpKQorICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaGFzUGxhdGZv
cm1MYXllcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29udGVudEJ1ZmZlcklkZW50aWZpZXJzKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447660</attachid>
            <date>2021-12-20 16:18:33 -0800</date>
            <delta_ts>2021-12-20 16:18:33 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233756-20211221091831.patch</filename>
            <type>text/plain</type>
            <size>41949</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk0OTU1MTlmZTk5YzNjZDFl
Y2U0MTI2NjI0MjdiODAxYmFmZWRlZDguLjBlZmJkY2M1YWIwZWMxNTRkMDA1MzBjYTViYjI2ZTM5
NTY4ZTM2ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzggQEAKKzIwMjEtMTItMjAgIEZ1amlpIEhp
cm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgV0MgdmFyaWFudCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGxhdGZvcm1MYXllcigpIHNob3VsZCBiZSByZW1vdmVk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM3NTYK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg2MjYxOTE5PgorCisgICAgICAgIFJldmlld2VkIGJ5
IEtpbW1vIEtpbm51bmVuLgorCisgICAgICAgIFdpbkNhaXJvIGlzIHVzaW5nIFRleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllciBhcyB0aGUgV2ViR0wKKyAgICAgICAgUGxhdGZvcm1MYXllciBh
dCB0aGUgbW9tZW50LCB0aGF0IGlzIHVzaW5nIG9ubHkgYSBzaW5nbGUgb3V0cHV0CisgICAgICAg
IGJ1ZmZlci4gQW5kLCBXaW5DYWlybyBkb2Vzbid0IHRyYW5zZmVyIHRoZSBXZWJHTCBvdXRwdXQg
YnVmZmVyCisgICAgICAgIGNyb3NzLXByb2Nlc3MgYm91bmRhcnkgZXZlbiBpbiBHUFUgcHJvY2Vz
cyBtb2RlLiBCYXNlZCBvbiB0aGVzZQorICAgICAgICBhc3N1bXB0aW9ucywgcjI4NTA5OSBhZGRl
ZCBwbGF0Zm9ybUxheWVyKCkgbWV0aG9kIHRvCisgICAgICAgIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMIHRvIGdldCBhIFBsYXRmb3JtTGF5ZXIgYW5kIHBhc3MgaXQgdG8gdGhlCisgICAgICAgIGNv
bXBvc2l0b3IgaW4gR1BVIHByb2Nlc3MuCisKKyAgICAgICAgSG93ZXZlciwgdGhpcyBpcyBub3Qg
YXBwcm9wcmlhdGUuIFRoZSBvdXRwdXQgYnVmZmVyIGlkZW50aWZpZXIKKyAgICAgICAgc2hvdWxk
IGJlIHRyYW5zZmVycmVkIHRvIHdlYiBwcm9jZXNzIGJ5IHVzaW5nIHRoZSBjb21wbGV0aW9uCisg
ICAgICAgIGhhbmRsZXIgb2YgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlByZXBhcmVGb3JEaXNw
bGF5IG1lc3NhZ2UuCisgICAgICAgIFRoZW4sIHRoZSBpZGVudGlmaWVyIHdpbGwgYmUgcGFzc2Vk
IGJhY2sgdG8gR1BVIHByb2Nlc3MuCisKKyAgICAgICAgQWRkZWQgV0NDb250ZW50QnVmZmVyTWFu
YWdlciB0byBtYW5hZ2UgdGhlIFdlYkdMIG91dHB1dCBidWZmZXIKKyAgICAgICAgaWRlbnRpZmll
cnMuIEhvd2V2ZXIsIGJlY2F1c2UgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyIGhhcwor
ICAgICAgICBvbmx5IGEgc2luZ2xlIG91dHB1dCBidWZmZXIsIHRoZSBtYXhpbXVtIG51bWJlciBv
ZiBpZGVudGlmaWVycyBpcworICAgICAgICBvbmUgZm9yIGVhY2ggUGxhdGZvcm1MYXllciBub3cu
CisKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRDbG9zZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VXQ0xheWVy
VHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpm
aW5kUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbjo6cHJlcGFyZUZvckRpc3BsYXkp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cHJlcGFyZUZvckRp
c3BsYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6cGxhdGZvcm1MYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9n
cmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlKToKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvV0NDb250ZW50QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NDb250ZW50QnVmZmVyTWFuYWdlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpQcm9jZXNzSW5mbzo6UHJv
Y2Vzc0luZm8pOgorICAgICAgICAoV2ViS2l0OjpXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpQcm9j
ZXNzSW5mbzo6YWNxdWlyZUNvbnRlbnRCdWZmZXJJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktp
dDo6V0NDb250ZW50QnVmZmVyTWFuYWdlcjo6UHJvY2Vzc0luZm86OnJlbGVhc2VDb250ZW50QnVm
ZmVySWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OldDQ29udGVudEJ1ZmZlck1hbmFnZXI6
OlByb2Nlc3NJbmZvOjpyZW1vdmVDb250ZW50QnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V0ND
b250ZW50QnVmZmVyTWFuYWdlcjo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYktpdDo6V0NDb250
ZW50QnVmZmVyTWFuYWdlcjo6YWNxdWlyZUNvbnRlbnRCdWZmZXJJZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYktpdDo6V0NDb250ZW50QnVmZmVyTWFuYWdlcjo6cmVsZWFzZUNvbnRlbnRCdWZmZXJJ
ZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V0NDb250ZW50QnVmZmVyTWFuYWdlcjo6cmVt
b3ZlQ29udGVudEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldDQ29udGVudEJ1ZmZlck1hbmFn
ZXI6OnJlbW92ZUFsbENvbnRlbnRCdWZmZXJzRm9yUHJvY2Vzcyk6CisgICAgICAgICogR1BVUHJv
Y2Vzcy9ncmFwaGljcy93Yy9XQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldDU2NlbmU6OldDU2NlbmUpOgorICAgICAgICAoV2ViS2l0OjpXQ1NjZW5lOjp1cGRhdGUpOgor
ICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5oOgorICAgICAgICAqIFBs
YXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Ogor
ICAgICAgICAodHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCk6CisgICAgICAg
IChjb25kaXRpb25zX2Zvcl9oZWFkZXIpOgorICAgICAgICAqIFNoYXJlZC93Yy9XQ0NvbnRlbnRC
dWZmZXJJZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL3djL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlXQy5jcHA6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3Mvd2MvV0NQbGF0Zm9ybUxheWVyR0NHTC5oOgorICAgICAgICAo
V2ViS2l0OjpXQ1BsYXRmb3JtTGF5ZXJHQ0dMOjp0YWtlQ29udGVudEJ1ZmZlcklkZW50aWZpZXJz
KToKKyAgICAgICAgKFdlYktpdDo6V0NQbGF0Zm9ybUxheWVyR0NHTDo6YWRkQ29udGVudEJ1ZmZl
cklkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXQ1BsYXRmb3JtTGF5ZXJHQ0dMOjpXQ1Bs
YXRmb3JtTGF5ZXJHQ0dMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V0NQbGF0Zm9ybUxh
eWVyR0NHTDo6Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAg
IChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmg6
CisgICAgICAgIChXZWJLaXQ6OldDTGF5ZXJVcGF0ZUluZm86OmVuY29kZSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldDTGF5ZXJVcGF0ZUluZm86OmRlY29kZSk6CisKIDIwMjEtMTItMjAgIFlv
dWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEltcHJvdmUgVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkgbG9nZ2luZwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4
IDJjYTkwZjUwYzNiMWU5YTYxYWY3MWU3NTRjNTgwZTNjN2NjNTY0Y2UuLjcyYTQyMmQ0YWVmZDY2
NTFmZjlkY2Y3ODQzN2MwNjQyYjJlNTE3ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTE0Niw2ICsxNDYs
NyBAQAogCiAjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQogI2luY2x1ZGUgIlJlbW90ZVdDTGF5
ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgIldDQ29udGVudEJ1ZmZlck1hbmFnZXIuaCIKICNlbmRp
ZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTMwMyw2ICszMDQsMTEgQEAgdm9pZCBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24p
CiAgICAgLy8gUmVtb3RlR3JhcGhpY3NDb250ZXh0c0dMIG9iamVjdHMgYXJlIHVubmVlZGVkIGFm
dGVyIGNvbm5lY3Rpb24gY2xvc2VzLgogICAgIG1fcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xNYXAu
Y2xlYXIoKTsKICNlbmRpZgorI2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKKyAgICByZW1vdGVH
cmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNoKFt3ZWJQcm9jZXNzSWRl
bnRpZmllciA9IG1fd2ViUHJvY2Vzc0lkZW50aWZpZXJdIHsKKyAgICAgICAgV0NDb250ZW50QnVm
ZmVyTWFuYWdlcjo6c2luZ2xldG9uKCkucmVtb3ZlQWxsQ29udGVudEJ1ZmZlcnNGb3JQcm9jZXNz
KHdlYlByb2Nlc3NJZGVudGlmaWVyKTsKKyAgICB9KTsKKyNlbmRpZgogCiAgICAgZ3B1UHJvY2Vz
cygpLmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NDbG9zZWQoY29ubmVjdGlvbik7CiAgICAgZ3B1UHJv
Y2VzcygpLnJlbW92ZUdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKnRoaXMpOyAvLyBNYXkgZGVz
dHJveSB8dGhpc3wuCkBAIC0zNTksMTIgKzM2NSw2IEBAIHZvaWQgR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6cmVsZWFzZVdDTGF5ZXJUcmVlSG9zdChXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElk
CiB7CiAgICAgbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RNYXAucmVtb3ZlKGlkZW50aWZpZXIpOwog
fQotCi1SZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+IEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OmZpbmRSZW1vdGVHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIgaWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IHJldHVybiBtX3JlbW90ZUdyYXBoaWNzQ29udGV4dEdMTWFwLmdldChpZGVudGlmaWVyKTsKLX0K
ICNlbmRpZgogCiBib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmFsbG93c0V4aXRVbmRl
ck1lbW9yeVByZXNzdXJlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmluZGV4IGI0NTkwN2YyNTQzOGUzZDdiODhm
NDc0NmNjNDgwOGVmNGY0MjdjZmUuLjk4MWI0OGU4N2U2ZDg4NjIyYmNlZGQ4YjI5OGEwMmUzYTAw
MGU3YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuaApAQCAtMTc1LDEwICsxNzUsNiBAQCBwdWJsaWM6CiAgICAgUmVtb3Rl
SW1hZ2VEZWNvZGVyQVZGUHJveHkmIGltYWdlRGVjb2RlckFWRlByb3h5KCk7CiAjZW5kaWYKIAot
I2lmIFVTRShHUkFQSElDU19MQVlFUl9XQykKLSAgICBSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w+IGZpbmRSZW1vdGVHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIpOwotI2VuZGlmCi0KICAgICB2b2lkIHVwZGF0ZVN1cHBvcnRlZFJlbW90ZUNvbW1hbmRz
KCk7CiAKICAgICBib29sIGFsbG93c0V4aXRVbmRlck1lbW9yeVByZXNzdXJlKCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTC5oCmluZGV4IDE1OWU1MDU2NzcwNDMzMDFmZDE5ODUwYzM0OTc0NmY3
NTk4MTJlNGIuLmViMjBkMTZjMzc3ZjVmM2UwMDdmMjFiYTI1NjI0ZGQxOWUzNmJiMTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTC5oCkBAIC01MCw2ICs1MCwxMCBAQAogI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9DR0Rpc3BsYXlDb25maWd1cmF0aW9uLmg+CiAjZW5kaWYKIAorI2lmIFVTRShHUkFQSElD
U19MQVlFUl9XQykKKyNpbmNsdWRlICJXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyLmgiCisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBNYWNoU2Vu
ZFJpZ2h0OwpAQCAtNzMsMTEgKzc3LDYgQEAgcHVibGljOgogICAgIHZvaWQgZGlzcGxheVdhc1Jl
Y29uZmlndXJlZCgpOwogI2VuZGlmCiAKLSNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCi0gICAg
Ly8gRklYTUU6IFRoaXMgaXMgbGF5ZXJpbmcgdmlvbGF0aW9uIGFuZCBzaG91bGQgYmUgcmVtb3Zl
ZC4KLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7Ci0jZW5kaWYKLQog
cHJvdGVjdGVkOgogICAgIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MmLCBHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQmLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdm9pZCBpbml0aWFs
aXplKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKTsKQEAgLTEwMCw2ICs5
OSw4IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIG5vdGlmeU1hcmtDb250ZXh0Q2hhbmdlZCgpOwog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGlzcGxheShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFdURjo6TWFjaFNlbmRSaWdodCYmKT4mJikgPSAwOworI2Vs
aWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGlz
cGxheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8V0NDb250ZW50QnVmZmVy
SWRlbnRpZmllcj4pPiYmKSA9IDA7CiAjZWxzZQogICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXko
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMLm1lc3NhZ2VzLmluCmluZGV4IDE2YjNlOWU4MjZlYTQxN2RiZTJjNzNlMmRlYzcx
MzgzOWI3ZjY3MzIuLmM4YWIyOTc3MjkzMGJmZDQwOGEwM2NlYjM3YTBjMjk4OThlMzAyYjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4KQEAgLTI5LDcgKzI5LDEw
IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIE5vdFJlZkNvdW50ZWQgU3Ry
ZWFtIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIFByZXBhcmVGb3JEaXNwbGF5KCkg
LT4gKE1hY2hTZW5kUmlnaHQgZGlzcGxheUJ1ZmZlcikgU3luY2hyb25vdXMgTm90U3RyZWFtRW5j
b2RhYmxlUmVwbHkKICNlbmRpZgotI2lmICFQTEFURk9STShDT0NPQSkKKyNpZiBVU0UoR1JBUEhJ
Q1NfTEFZRVJfV0MpCisgICAgdm9pZCBQcmVwYXJlRm9yRGlzcGxheSgpIC0+IChzdGQ6Om9wdGlv
bmFsPFdlYktpdDo6V0NDb250ZW50QnVmZmVySWRlbnRpZmllcj4gY29udGVudEJ1ZmZlcikgU3lu
Y2hyb25vdXMKKyNlbmRpZgorI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVVTRShHUkFQSElDU19M
QVlFUl9XQykKICAgICB2b2lkIFByZXBhcmVGb3JEaXNwbGF5KCkgLT4gKCkgU3luY2hyb25vdXMK
ICNlbmRpZgogICAgIHZvaWQgRW5zdXJlRXh0ZW5zaW9uRW5hYmxlZChTdHJpbmcgZXh0ZW5zaW9u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHAKaW5kZXggOWRmODNmNDYwN2NjOThjMGQ4
ZmI3ZWRmNjdlZDZmN2I4OTc4MWE0Yi4uNTgyMWNkYTlmZjIxODk5NWU3YmY4NWYzMmZiODdjNGVi
NjVlZWFlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpICYmIEVOQUJMRShXRUJHTCkgJiYgUExBVEZP
Uk0oV0lOKQogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKKyNpbmNsdWRl
ICJXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00MCw2ICs0
MSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIG92ZXJyaWRl
cy4KICAgICB2b2lkIHBsYXRmb3JtV29ya1F1ZXVlSW5pdGlhbGl6ZShXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMmJikgZmluYWw7CisgICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxh
eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8V0NDb250ZW50QnVmZmVySWRl
bnRpZmllcj4pPiYmKSBmaW5hbDsKIH07CiAKIFJlZjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4g
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
JiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzLCBHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiByZW5kZXJpbmdC
YWNrZW5kLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJiBzdHJlYW0pCkBAIC01OSwxOSAr
NjEsMTMgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbjo6cGxhdGZvcm1Xb3JrUXVl
dWVJbml0aWFsaXplKFdlYkNvcmU6OkdyYXBoaWNzQ28KICAgICBtX2NvbnRleHQgPSBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmNyZWF0ZShXVEZNb3ZlKGF0dHJpYnV0
ZXMpKTsKIH0KIAotdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cHJlcGFyZUZvckRpc3Bs
YXkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbjo6cHJlcGFyZUZvckRpc3BsYXkoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXI+KT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBtX2NvbnRleHQtPnByZXBhcmVGb3JEaXNwbGF5KCk7
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICBhdXRvIGlkZW50aWZpZXIgPSBXQ0NvbnRl
bnRCdWZmZXJNYW5hZ2VyOjpzaW5nbGV0b24oKS5hY3F1aXJlQ29udGVudEJ1ZmZlcklkZW50aWZp
ZXIobV93ZWJQcm9jZXNzSWRlbnRpZmllciwgbV9jb250ZXh0LT5sYXllckNvbnRlbnRzRGlzcGxh
eURlbGVnYXRlKCktPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoaWRl
bnRpZmllcik7CiB9CiAKLSNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCi1QbGF0Zm9ybUxheWVy
KiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fY29udGV4dC0+bGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSgpLT5wbGF0Zm9y
bUxheWVyKCk7Ci19Ci0jZW5kaWYKLQogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuY3BwIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9z
dC5jcHAKaW5kZXggZmQzZDI5ZmM0ZTAwOWQ2NzU2MjEzZjAyNTVjOTc2ZGI0OGRlOWVlMy4uMDBk
NWI3YTg3ZGY3ZjY4YzI4NDViNGIxMDQzMWYyZGQxNmE5NmExYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1JlbW90ZVdDTGF5ZXJU
cmVlSG9zdC5jcHAKQEAgLTQ2LDExICs0NiwxMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlV0NM
YXllclRyZWVIb3N0PiBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZShHUFVDb25uZWN0aQog
CiBSZW1vdGVXQ0xheWVyVHJlZUhvc3Q6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdChHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzJiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBXZWJLaXQ6OldDTGF5ZXJU
cmVlSG9zdElkZW50aWZpZXIgaWRlbnRpZmllciwgdWludDY0X3QgbmF0aXZlV2luZG93KQogICAg
IDogbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzKGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCisgICAg
LCBtX3dlYlByb2Nlc3NJZGVudGlmaWVyKGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mud2ViUHJvY2Vz
c0lkZW50aWZpZXIoKSkKICAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9z
aGFyZWRTY2VuZUNvbnRleHRIb2xkZXIoY29ubmVjdGlvblRvV2ViUHJvY2Vzcy5ncHVQcm9jZXNz
KCkuc2hhcmVkU2NlbmVDb250ZXh0KCkuZW5zdXJlSG9sZGVyRm9yV2luZG93KG5hdGl2ZVdpbmRv
dykpCiB7CiAgICAgbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAo
KS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdDTGF5ZXJUcmVlSG9zdDo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOwotICAg
IG1fc2NlbmUgPSBtYWtlVW5pcXVlPFdDU2NlbmU+KCk7CisgICAgbV9zY2VuZSA9IG1ha2VVbmlx
dWU8V0NTY2VuZT4obV93ZWJQcm9jZXNzSWRlbnRpZmllcik7CiAgICAgcmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xTdHJlYW1Xb3JrUXVldWUoKS5kaXNwYXRjaChbc2NlbmUgPSBtX3NjZW5lLmdldCgp
LCBzY2VuZUNvbnRleHRIb2xkZXIgPSBtX3NoYXJlZFNjZW5lQ29udGV4dEhvbGRlci5nZXQoKSwg
bmF0aXZlV2luZG93XSB7CiAgICAgICAgIGlmICghc2NlbmVDb250ZXh0SG9sZGVyLT5jb250ZXh0
KQogICAgICAgICAgICAgc2NlbmVDb250ZXh0SG9sZGVyLT5jb250ZXh0LmVtcGxhY2UobmF0aXZl
V2luZG93KTsKQEAgLTgyLDE3ICs4Myw4IEBAIHVpbnQ2NF90IFJlbW90ZVdDTGF5ZXJUcmVlSG9z
dDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAogCiB2b2lkIFJlbW90ZVdDTGF5
ZXJUcmVlSG9zdDo6dXBkYXRlKFdDVXBhdGVJbmZvJiYgdXBkYXRlKQogewotICAgIC8vIGZpbmRS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTCBzaG91bGQgYmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVh
ZAotICAgIGF1dG8gcmVtb3RlR0NHTCA9IFdURjo6bWFwKHVwZGF0ZS5jaGFuZ2VkTGF5ZXJzLCBb
dGhpc10oYXV0byYgbGF5ZXJVcGRhdGUpIC0+IFJlZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRH
TD4gewotICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBs
YXRmb3JtTGF5ZXIpIHsKLSAgICAgICAgICAgIGlmIChsYXllclVwZGF0ZS5ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy0+ZmluZFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKG1ha2VPYmplY3RJZGVudGlmaWVy
PEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllclR5cGU+KGxheWVyVXBkYXRlLmdyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllcikpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0pOwotCi0gICAgcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xTdHJlYW1Xb3JrUXVldWUoKS5k
aXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyKCp0aGlzKSwgc2NlbmUgPSBtX3NjZW5l
LmdldCgpLCB1cGRhdGUgPSBXVEZNb3ZlKHVwZGF0ZSksIHJlbW90ZUdDR0wgPSBXVEZNb3ZlKHJl
bW90ZUdDR0wpXSgpIG11dGFibGUgewotICAgICAgICBzY2VuZS0+dXBkYXRlKFdURk1vdmUodXBk
YXRlKSwgV1RGTW92ZShyZW1vdGVHQ0dMKSk7CisgICAgcmVtb3RlR3JhcGhpY3NDb250ZXh0R0xT
dHJlYW1Xb3JrUXVldWUoKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyKCp0aGlz
KSwgc2NlbmUgPSBtX3NjZW5lLmdldCgpLCB1cGRhdGUgPSBXVEZNb3ZlKHVwZGF0ZSldKCkgbXV0
YWJsZSB7CisgICAgICAgIHNjZW5lLT51cGRhdGUoV1RGTW92ZSh1cGRhdGUpKTsKICAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1Ro
aXMpXSB7CiAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9SZW1v
dGVXQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93
Yy9SZW1vdGVXQ0xheWVyVHJlZUhvc3QuaAppbmRleCBlZGM0ZmJiNDEwYTY1YWJlZDljMjIzYTRk
MTk3YWY2NWQ0N2RhNjQ1Li5iMWJiMmFhZjU3ZTdhMDk2OTM1NDJiYTAyNWE3NTBhMTI5MzZmNWVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvUmVtb3Rl
V0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L3djL1JlbW90ZVdDTGF5ZXJUcmVlSG9zdC5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
TWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIuaCIK
ICNpbmNsdWRlICJXQ1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOwpAQCAtNTUsNiArNTYsNyBAQCBwcml2YXRlOgogICAgIHVp
bnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fY29ubmVjdGlvblRvV2ViUHJv
Y2VzczsKKyAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3dlYlByb2Nlc3NJZGVudGlm
aWVyOwogICAgIFdDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIFJl
ZlB0cjxXQ1NoYXJlZFNjZW5lQ29udGV4dEhvbGRlcjo6SG9sZGVyPiBtX3NoYXJlZFNjZW5lQ29u
dGV4dEhvbGRlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V0NTY2VuZT4gbV9zY2VuZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ0NvbnRlbnRCdWZm
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ0NvbnRlbnRCdWZm
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zODJhZWFlMzhmOWQ0YjEzYWY3YzYzMzA2NWI1MjUyMTc5MTQ2ZjJk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3dj
L1dDQ29udGVudEJ1ZmZlci5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNsdWRlICJXQ0Nv
bnRlbnRCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiV0NDb250ZW50QnVmZmVyTWFuYWdl
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBXQ0NvbnRlbnRCdWZmZXIgZmluYWwgOiBXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllcjo6Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2
b2lkIHBsYXRmb3JtTGF5ZXJXaWxsQmVEZXN0cm95ZWQoKSA9IDA7CisgICAgfTsKKyAgICAKKyAg
ICBXQ0NvbnRlbnRCdWZmZXIoV0NDb250ZW50QnVmZmVyTWFuYWdlciYgbWFuYWdlciwgV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIgcHJvY2Vzc0lkZW50aWZpZXIsIFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQorICAgICAgICA6IG1fbWFuYWdlciht
YW5hZ2VyKQorICAgICAgICAsIG1fcHJvY2Vzc0lkZW50aWZpZXIocHJvY2Vzc0lkZW50aWZpZXIp
CisgICAgICAgICwgbV9wbGF0Zm9ybUxheWVyKHBsYXRmb3JtTGF5ZXIpCisgICAgeworICAgICAg
ICBtX3BsYXRmb3JtTGF5ZXItPnNldENsaWVudCh0aGlzKTsKKyAgICB9CisKKyAgICB+V0NDb250
ZW50QnVmZmVyKCkKKyAgICB7CisgICAgICAgIG1fcGxhdGZvcm1MYXllci0+c2V0Q2xpZW50KG51
bGxwdHIpOworICAgIH0KKworICAgIHZvaWQgc2V0Q2xpZW50KENsaWVudCogY2xpZW50KQorICAg
IHsKKyAgICAgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAgfQorCisgICAgV2ViQ29yZTo6VGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllcjsKKyAgICB9CisKKyAgICBXQ0NvbnRlbnRCdWZm
ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWRlbnRp
ZmllcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBwbGF0Zm9ybUxheWVyV2lsbEJlRGVz
dHJveWVkKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAg
ICAgIG1fY2xpZW50LT5wbGF0Zm9ybUxheWVyV2lsbEJlRGVzdHJveWVkKCk7CisgICAgICAgIG1f
bWFuYWdlci5yZW1vdmVDb250ZW50QnVmZmVyKG1fcHJvY2Vzc0lkZW50aWZpZXIsICp0aGlzKTsK
KyAgICB9CisgICAgdm9pZCBzZXRQbGF0Zm9ybUxheWVyTmVlZHNEaXNwbGF5KCkgb3ZlcnJpZGUg
eyB9CisKKyAgICBXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyJiBtX21hbmFnZXI7CisgICAgV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV9wcm9jZXNzSWRlbnRpZmllcjsKKyAgICBXQ0NvbnRlbnRC
dWZmZXJJZGVudGlmaWVyIG1faWRlbnRpZmllciB7IFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXI6
OmdlbmVyYXRlKCkgfTsKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciog
bV9wbGF0Zm9ybUxheWVyOworICAgIENsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9X
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ0Nv
bnRlbnRCdWZmZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy93Yy9XQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTIyZTE5NmE5NmQ5
YTNhYTlhNjdlZTQwNWQ0OGQwMzQ2ZDJmNzA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDQ29udGVudEJ1ZmZlck1hbmFnZXIuY3BwCkBA
IC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZ
RVJfV0MpCisKKyNpbmNsdWRlICJXQ0NvbnRlbnRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV0NDb250ZW50QnVmZmVyTWFu
YWdlcjo6UHJvY2Vzc0luZm8geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIFByb2Nlc3NJbmZvKFdDQ29udGVudEJ1ZmZlck1hbmFnZXImIG1hbmFnZXIsIFdlYkNv
cmU6OlByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3NJZGVudGlmaWVyKQorICAgICAgICA6IG1fbWFu
YWdlcihtYW5hZ2VyKQorICAgICAgICAsIG1fcHJvY2Vzc0lkZW50aWZpZXIocHJvY2Vzc0lkZW50
aWZpZXIpIHsgfQorCisgICAgc3RkOjpvcHRpb25hbDxXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVy
PiBhY3F1aXJlQ29udGVudEJ1ZmZlcklkZW50aWZpZXIoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCisgICAgeworICAgICAgICAvLyBGSVhNRTogVGV4
dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyIGRvZXNuJ3Qgc3VwcG9ydCBkb3VibGUgYnVmZmVy
aW5nIHlldC4KKyAgICAgICAgLy8gVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIgY2FuIGFjcXVp
cmUgYSBzaW5nbGUgV0NDb250ZW50QnVmZmVySWRlbnRpZmllci4KKyAgICAgICAgYXV0byBjb250
ZW50QnVmZmVyQWRkUmVzdWx0ID0gbV9jb250ZW50QnVmZmVycy5lbnN1cmUocGxhdGZvcm1MYXll
ciwgWyZdIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFdDQ29udGVudEJ1ZmZlcj4o
bV9tYW5hZ2VyLCBtX3Byb2Nlc3NJZGVudGlmaWVyLCBwbGF0Zm9ybUxheWVyKTsKKyAgICAgICAg
fSk7CisgICAgICAgIFdDQ29udGVudEJ1ZmZlciogYnVmZmVyID0gY29udGVudEJ1ZmZlckFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IGJ1
ZmZlci0+aWRlbnRpZmllcigpOworICAgICAgICBhdXRvIGlkZW50aWZpZXJBZGRSZXN1bHQgPSBt
X3ZhbGlkSWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIsIGJ1ZmZlcik7CisgICAgICAgIGlmICgh
aWRlbnRpZmllckFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CisgICAgfQorCisgICAgV0NDb250
ZW50QnVmZmVyKiByZWxlYXNlQ29udGVudEJ1ZmZlcklkZW50aWZpZXIoV0NDb250ZW50QnVmZmVy
SWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsaWRJZGVu
dGlmaWVycy50YWtlKGlkZW50aWZpZXIpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlQ29udGVu
dEJ1ZmZlcihXQ0NvbnRlbnRCdWZmZXImIGNvbnRlbnRCdWZmZXIpCisgICAgeworICAgICAgICBt
X3ZhbGlkSWRlbnRpZmllcnMucmVtb3ZlKGNvbnRlbnRCdWZmZXIuaWRlbnRpZmllcigpKTsKKyAg
ICAgICAgbV9jb250ZW50QnVmZmVycy5yZW1vdmUoY29udGVudEJ1ZmZlci5wbGF0Zm9ybUxheWVy
KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyJiBtX21h
bmFnZXI7CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV9wcm9jZXNzSWRlbnRpZmll
cjsKKyAgICBIYXNoTWFwPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiwgc3Rk
Ojp1bmlxdWVfcHRyPFdDQ29udGVudEJ1ZmZlcj4+IG1fY29udGVudEJ1ZmZlcnM7CisgICAgSGFz
aE1hcDxXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyLCBXQ0NvbnRlbnRCdWZmZXIqPiBtX3ZhbGlk
SWRlbnRpZmllcnM7Cit9OworCitXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyJiBXQ0NvbnRlbnRCdWZm
ZXJNYW5hZ2VyOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXQ0Nv
bnRlbnRCdWZmZXJNYW5hZ2VyPiBjb250ZW50QnVmZmVyTWFuYWdlcjsKKyAgICByZXR1cm4gY29u
dGVudEJ1ZmZlck1hbmFnZXI7Cit9CisKK3N0ZDo6b3B0aW9uYWw8V0NDb250ZW50QnVmZmVySWRl
bnRpZmllcj4gV0NDb250ZW50QnVmZmVyTWFuYWdlcjo6YWNxdWlyZUNvbnRlbnRCdWZmZXJJZGVu
dGlmaWVyKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3NJZGVudGlmaWVyLCBXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKK3sKKyAgICBh
dXRvIHByb2Nlc3NBZGRSZXN1bHQgPSBtX3Byb2Nlc3NNYXAuZW5zdXJlKHByb2Nlc3NJZGVudGlm
aWVyLCBbJl0geworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxQcm9jZXNzSW5mbz4oKnRoaXMs
IHByb2Nlc3NJZGVudGlmaWVyKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcHJvY2Vzc0FkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUtPmFjcXVpcmVDb250ZW50QnVmZmVySWRlbnRpZmllcihwbGF0Zm9y
bUxheWVyKTsKK30KKworV0NDb250ZW50QnVmZmVyKiBXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpy
ZWxlYXNlQ29udGVudEJ1ZmZlcklkZW50aWZpZXIoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIg
cHJvY2Vzc0lkZW50aWZpZXIsIFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIgY29udGVudEJ1ZmZl
cklkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fcHJvY2Vzc01hcC5jb250YWlucyhwcm9jZXNz
SWRlbnRpZmllcikpOworICAgIHJldHVybiBtX3Byb2Nlc3NNYXAuZ2V0KHByb2Nlc3NJZGVudGlm
aWVyKS0+cmVsZWFzZUNvbnRlbnRCdWZmZXJJZGVudGlmaWVyKGNvbnRlbnRCdWZmZXJJZGVudGlm
aWVyKTsKK30KKwordm9pZCBXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyOjpyZW1vdmVDb250ZW50QnVm
ZmVyKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3NJZGVudGlmaWVyLCBXQ0NvbnRl
bnRCdWZmZXImIGNvbnRlbnRCdWZmZXIpCit7CisgICAgQVNTRVJUKG1fcHJvY2Vzc01hcC5jb250
YWlucyhwcm9jZXNzSWRlbnRpZmllcikpOworICAgIG1fcHJvY2Vzc01hcC5nZXQocHJvY2Vzc0lk
ZW50aWZpZXIpLT5yZW1vdmVDb250ZW50QnVmZmVyKGNvbnRlbnRCdWZmZXIpOworfQorCit2b2lk
IFdDQ29udGVudEJ1ZmZlck1hbmFnZXI6OnJlbW92ZUFsbENvbnRlbnRCdWZmZXJzRm9yUHJvY2Vz
cyhXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzSWRlbnRpZmllcikKK3sKKyAgICBt
X3Byb2Nlc3NNYXAucmVtb3ZlKHByb2Nlc3NJZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NDb250ZW50QnVmZmVyTWFu
YWdlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDQ29udGVudEJ1
ZmZlck1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMjdhZjA5MDIwMTYxN2Q1MmNkYTMyMTJjODE5ZjA0
N2M4NTY3MDFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL3djL1dDQ29udGVudEJ1ZmZlck1hbmFnZXIuaApAQCAtMCwwICsxLDYwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQor
CisjaW5jbHVkZSAiV0NDb250ZW50QnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1MYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdDQ29udGVudEJ1ZmZlcjsKKworY2xhc3MgV0NDb250ZW50QnVmZmVyTWFuYWdlciB7
CitwdWJsaWM6CisgICAgY2xhc3MgUHJvY2Vzc0luZm87CisKKyAgICBzdGF0aWMgV0NDb250ZW50
QnVmZmVyTWFuYWdlciYgc2luZ2xldG9uKCk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFdDQ29udGVu
dEJ1ZmZlcklkZW50aWZpZXI+IGFjcXVpcmVDb250ZW50QnVmZmVySWRlbnRpZmllcihXZWJDb3Jl
OjpQcm9jZXNzSWRlbnRpZmllciwgV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIq
KTsKKyAgICBXQ0NvbnRlbnRCdWZmZXIqIHJlbGVhc2VDb250ZW50QnVmZmVySWRlbnRpZmllcihX
ZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgV0NDb250ZW50QnVmZmVySWRlbnRpZmllcik7Cisg
ICAgdm9pZCByZW1vdmVDb250ZW50QnVmZmVyKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBX
Q0NvbnRlbnRCdWZmZXImKTsKKyAgICB2b2lkIHJlbW92ZUFsbENvbnRlbnRCdWZmZXJzRm9yUHJv
Y2VzcyhXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgSGFzaE1h
cDxXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NJbmZv
Pj4gbV9wcm9jZXNzTWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAKaW5kZXggYjM1NzQ1Y2Q1ZWFjOWFjYzdjM2QxMDFhMzk4
MDhjYjFlYjE2NmYzZi4uYWE2NWMwMTEyMTJmNzdjZGEyZjRmYTEwYTZmZDBlZGVhNDc2ZDFhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNw
cApAQCAtMjksMjUgKzI5LDI3IEBACiAjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQogCiAjaW5j
bHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlICJXQ0NvbnRlbnRCdWZm
ZXIuaCIKKyNpbmNsdWRlICJXQ0NvbnRlbnRCdWZmZXJNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV0NT
Y2VuZUNvbnRleHQuaCIKICNpbmNsdWRlICJXQ1VwYXRlSW5mby5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVN
YXBwZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZS5o
PgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RydWN0IFdDU2NlbmU6OkxheWVyIDogcHVibGlj
IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyOjpDbGllbnQgeworc3RydWN0IFdD
U2NlbmU6OkxheWVyIGZpbmFsIDogcHVibGljIFdDQ29udGVudEJ1ZmZlcjo6Q2xpZW50IHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBMYXllcigpID0gZGVmYXVs
dDsKIAotICAgIC8vIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyOjpDbGllbnQKKyAgICAvLyBX
Q0NvbnRlbnRCdWZmZXI6OkNsaWVudAogICAgIHZvaWQgcGxhdGZvcm1MYXllcldpbGxCZURlc3Ry
b3llZCgpIG92ZXJyaWRlCiAgICAgewogICAgICAgICB0ZXhtYXBMYXllci5zZXRDb250ZW50c0xh
eWVyKG51bGxwdHIpOwogICAgIH0KLSAgICB2b2lkIHNldFBsYXRmb3JtTGF5ZXJOZWVkc0Rpc3Bs
YXkoKSBvdmVycmlkZSB7IH0KIAogICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciB0ZXht
YXBMYXllcjsKICAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmU7CkBAIC02Miw3ICs2NCwxMCBAQCB2b2lkIFdDU2NlbmU6OmluaXRp
YWxpemUoV0NTY2VuZUNvbnRleHQmIGNvbnRleHQpCiAgICAgbV90ZXh0dXJlTWFwcGVyID0gbV9j
b250ZXh0LT5jcmVhdGVUZXh0dXJlTWFwcGVyKCk7CiB9CiAKLVdDU2NlbmU6OldDU2NlbmUoKSA9
IGRlZmF1bHQ7CitXQ1NjZW5lOjpXQ1NjZW5lKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdl
YlByb2Nlc3NJZGVudGlmaWVyKQorICAgIDogbV93ZWJQcm9jZXNzSWRlbnRpZmllcih3ZWJQcm9j
ZXNzSWRlbnRpZmllcikKK3sKK30KIAogV0NTY2VuZTo6fldDU2NlbmUoKQogewpAQCAtNzAsNyAr
NzUsNyBAQCBXQ1NjZW5lOjp+V0NTY2VuZSgpCiAgICAgbV90ZXh0dXJlTWFwcGVyID0gbnVsbHB0
cjsKIH0KIAotdm9pZCBXQ1NjZW5lOjp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUsIFZlY3Rv
cjxSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+PiYmIHJlbW90ZUdDR0wpCit2b2lkIFdD
U2NlbmU6OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVwZGF0ZSkKIHsKICAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTgwLDggKzg1LDYg
QEAgdm9pZCBXQ1NjZW5lOjp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUsIFZlY3RvcjxSZWZQ
dHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0wKICAgICAgICAgbV9sYXllcnMuYWRkKGlkLCBXVEZN
b3ZlKGxheWVyKSk7CiAgICAgfQogCi0gICAgYXV0byByZW1vdGVHQ0dMSXRlcmF0b3IgPSByZW1v
dGVHQ0dMLmJlZ2luKCk7Ci0KICAgICBmb3IgKGF1dG8mIGxheWVyVXBkYXRlIDogdXBkYXRlLmNo
YW5nZWRMYXllcnMpIHsKICAgICAgICAgYXV0byBsYXllciA9IG1fbGF5ZXJzLmdldChsYXllclVw
ZGF0ZS5pZCk7CiAgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6Q2hpbGRyZW4pIHsKQEAgLTE2NSwxNiArMTY4LDE5IEBAIHZvaWQgV0NTY2VuZTo6dXBkYXRl
KFdDVXBhdGVJbmZvJiYgdXBkYXRlLCBWZWN0b3I8UmVmUHRyPFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMCiAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2Ryb3BGaWx0ZXJzUmVj
dChsYXllclVwZGF0ZS5iYWNrZHJvcEZpbHRlcnNSZWN0KTsKICAgICAgICAgfQogICAgICAgICBp
ZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsK
LSAgICAgICAgICAgIGlmICgqcmVtb3RlR0NHTEl0ZXJhdG9yKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byBwbGF0Zm9ybUxheWVyID0gKCpyZW1vdGVHQ0dMSXRlcmF0b3IpLT5wbGF0Zm9ybUxheWVy
KCk7Ci0gICAgICAgICAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0Q2xpZW50KGxheWVyKTsKLSAg
ICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0Q29udGVudHNMYXllcihwbGF0Zm9y
bUxheWVyKTsKLSAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaWYgKCFsYXllclVwZGF0
ZS5oYXNQbGF0Zm9ybUxheWVyKQogICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5z
ZXRDb250ZW50c0xheWVyKG51bGxwdHIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgV0NDb250ZW50QnVmZmVyKiBjb250ZW50QnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8gaWRlbnRpZmllciA6IGxheWVyVXBkYXRlLmNvbnRlbnRCdWZmZXJJ
ZGVudGlmaWVycykKKyAgICAgICAgICAgICAgICAgICAgY29udGVudEJ1ZmZlciA9IFdDQ29udGVu
dEJ1ZmZlck1hbmFnZXI6OnNpbmdsZXRvbigpLnJlbGVhc2VDb250ZW50QnVmZmVySWRlbnRpZmll
cihtX3dlYlByb2Nlc3NJZGVudGlmaWVyLCBpZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICBp
ZiAoY29udGVudEJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBjb250ZW50QnVmZmVyLT5z
ZXRDbGllbnQobGF5ZXIpOworICAgICAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIu
c2V0Q29udGVudHNMYXllcihjb250ZW50QnVmZmVyLT5wbGF0Zm9ybUxheWVyKCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZW1vdGVHQ0dM
SXRlcmF0b3IrKzsKICAgICB9Ci0gICAgQVNTRVJUKHJlbW90ZUdDR0xJdGVyYXRvciA9PSByZW1v
dGVHQ0dMLmVuZCgpKTsKIAogICAgIGZvciAoYXV0byBpZCA6IHVwZGF0ZS5yZW1vdmVkTGF5ZXJz
KQogICAgICAgICBtX2xheWVycy5yZW1vdmUoaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmgKaW5kZXggNjNlZDAzZjNlZTg2YTJhYTIxNzdjOGMx
YmM5ODUyNGE4MjMwMjliYy4uM2QxNTFkOWQyOTZhYzRjNjBjYmQ3NWQ5NDhkZjA4NWVjYmE4YmYx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2Nl
bmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5o
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCiAKKyNpbmNs
dWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0
dXJlTWFwcGVyRlBTQ291bnRlci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM0LDI3ICszNSwyOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgVGV4dHVyZU1hcHBlcjsKIGNsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKK2NsYXNz
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyOwogY2xhc3MgVGV4dHVyZU1hcHBlclRpbGVkQmFj
a2luZ1N0b3JlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w7CiBjbGFzcyBXQ1NjZW5lQ29udGV4dDsKIHN0cnVjdCBXQ1VwYXRlSW5mbzsK
IAogY2xhc3MgV0NTY2VuZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgV0NTY2VuZSgpOworICAgIFdDU2NlbmUoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIp
OwogICAgIH5XQ1NjZW5lKCk7CiAgICAgdm9pZCBpbml0aWFsaXplKFdDU2NlbmVDb250ZXh0Jik7
Ci0gICAgdm9pZCB1cGRhdGUoV0NVcGF0ZUluZm8mJiwgVmVjdG9yPFJlZlB0cjxSZW1vdGVHcmFw
aGljc0NvbnRleHRHTD4+JiYpOworICAgIHZvaWQgdXBkYXRlKFdDVXBhdGVJbmZvJiYpOwogCiBw
cml2YXRlOgogICAgIHN0cnVjdCBMYXllcjsKICAgICB1c2luZyBMYXllck1hcCA9IEhhc2hNYXA8
dWludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxMYXllcj4+OwogCisgICAgV2ViQ29yZTo6UHJvY2Vz
c0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsKICAgICBXQ1NjZW5lQ29udGV4dCog
bV9jb250ZXh0IHsgbnVsbHB0ciB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7CiAgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckZQ
U0NvdW50ZXIgbV9mcHNDb3VudGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMzUwZmRk
NDk3ZWFhYWI3MTEwNTljNTRiNTA3NTAxNWIxOTM3OTM2OC4uMzY3NmMzNTE0NTY0ZWIxZjFiY2Q2
OTdlMzdhYWRjZDA0MjRhZTcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdp
bi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC0xMiw2ICsx
Miw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHAKIAogICAgIEdQVVByb2Nlc3MvZ3JhcGhp
Y3Mvd2MvUmVtb3RlV0NMYXllclRyZWVIb3N0LmNwcAorICAgIEdQVVByb2Nlc3MvZ3JhcGhpY3Mv
d2MvV0NDb250ZW50QnVmZmVyTWFuYWdlci5jcHAKICAgICBHUFVQcm9jZXNzL2dyYXBoaWNzL3dj
L1dDU2NlbmUuY3BwCiAgICAgR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lQ29udGV4dC5j
cHAKIApAQCAtMTIwLDYgKzEyMSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCiAg
ICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21w
b3NpdG9yIgogICAgICIke1dFQktJVF9ESVJ9L1NoYXJlZC9QbHVnaW5zL3dpbiIKKyAgICAiJHtX
RUJLSVRfRElSfS9TaGFyZWQvd2MiCiAgICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL3dpbiIKICAg
ICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL0MvY2Fpcm8iCiAgICAgIiR7V0VCS0lUX0RJ
Un0vVUlQcm9jZXNzL0FQSS9DL2N1cmwiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNz
YWdlcy5weQppbmRleCA1ZWExYjdmZDY0MDllMjQxOWU1MmRjYzI2ZjllYTU5Y2VmMjZkM2U2Li5j
ZTVmZWEyYjJlYTE2N2U3M2EyMzEwOTIyYTA2MThmMmNkMTc5MTU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQv
U2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTM2Miw2ICszNjIsNyBAQCBkZWYgdHlwZXNf
dGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViS2l0OjpUcmFu
c2FjdGlvbklEJywKICAgICAgICAgJ1dlYktpdDo6VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRp
ZmllcicsCiAgICAgICAgICdXZWJLaXQ6OldDTGF5ZXJUcmVlSG9zdElkZW50aWZpZXInLAorICAg
ICAgICAnV2ViS2l0OjpXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktp
dDo6V2ViR1BVSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OldlYlBhZ2VQcm94eUlkZW50
aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpXZWJVUkxTY2hlbWVIYW5kbGVySWRlbnRpZmllcics
CkBAIC0zNzQsNiArMzc1LDcgQEAgZGVmIGNvbmRpdGlvbnNfZm9yX2hlYWRlcihoZWFkZXIpOgog
ICAgICAgICAnIklucHV0TWV0aG9kU3RhdGUuaCInOiBbIlBMQVRGT1JNKEdUSykiLCAiUExBVEZP
Uk0oV1BFKSJdLAogICAgICAgICAnIkxheWVySG9zdGluZ0NvbnRleHQuaCInOiBbIlBMQVRGT1JN
KENPQ09BKSIsIF0sCiAgICAgICAgICciR2VzdHVyZVR5cGVzLmgiJzogWyJQTEFURk9STShJT1Nf
RkFNSUxZKSJdLAorICAgICAgICAnIldDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIuaCInOiBbIlVT
RShHUkFQSElDU19MQVlFUl9XQykiXSwKICAgICAgICAgJyJXQ0xheWVyVHJlZUhvc3RJZGVudGlm
aWVyLmgiJzogWyJVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpIl0sCiAgICAgICAgICc8V2ViQ29yZS9D
VlV0aWxpdGllcy5oPic6IFsiUExBVEZPUk0oQ09DT0EpIiwgXSwKICAgICAgICAgJzxXZWJDb3Jl
L0RhdGFEZXRlY3RvclR5cGUuaD4nOiBbIkVOQUJMRShEQVRBX0RFVEVDVElPTikiXSwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3djL1dDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIu
aCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3djL1dDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lYzg2MjA1YmFjOTY1N2ZjOWU5ODhhNDQ1YTZmMzExZDI2NGZlNzk0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2MvV0NDb250ZW50QnVmZmVySWRl
bnRpZmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRl
bnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBXQ0NvbnRlbnRCdWZmZXJJ
ZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyID0gT2Jq
ZWN0SWRlbnRpZmllcjxXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1dDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy93Yy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5V0MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy93Yy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5V0MuY3BwCmluZGV4IDgxNDg1
MDZjODM4ODFjMmFjNmY4MzIyNTlmYTRhNzVkYmI1OTdiNWIuLmQwMDk3MjQ0ZGZlNzY3MjdkODVh
NWUwMmFhZjI1OTI0YzFiYzUzNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3Mvd2MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eVdDLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL3djL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHlXQy5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5V0MoR1BVUHJvY2Vzc0Nvbm5lY3Rpb24m
IGdwdVByb2Nlc3NDb25uZWN0aW9uLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmlu
Z0JhY2tlbmQpCiAgICAgICAgIDogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eShncHVQcm9j
ZXNzQ29ubmVjdGlvbiwgYXR0cmlidXRlcywgcmVuZGVyaW5nQmFja2VuZCkKLSAgICAgICAgLCBt
X2xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUoUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0
ZTo6Y3JlYXRlKG1ha2VVbmlxdWU8V0NQbGF0Zm9ybUxheWVyR0NHTD4obV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIpKSkKKyAgICAgICAgLCBtX2xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdh
dGUoUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZTo6Y3JlYXRlKG1ha2VVbmlxdWU8V0NQbGF0
Zm9ybUxheWVyR0NHTD4oKSkpCiAgICAgewogICAgIH0KIApAQCAtODQsMTEgKzg0LDE0IEBAIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eVdDOjpwcmVwYXJlRm9yRGlzcGxheSgpCiB7
CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJl
cGFyZUZvckRpc3BsYXkoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQcmVw
YXJlRm9yRGlzcGxheTo6UmVwbHkoKSk7CisgICAgc3RkOjpvcHRpb25hbDxXQ0NvbnRlbnRCdWZm
ZXJJZGVudGlmaWVyPiBjb250ZW50QnVmZmVyOworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRT
eW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3BsYXko
KSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQcmVwYXJlRm9yRGlzcGxheTo6
UmVwbHkoY29udGVudEJ1ZmZlcikpOwogICAgIGlmICghc2VuZFJlc3VsdCkgewogICAgICAgICBt
YXJrQ29udGV4dExvc3QoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoY29udGVu
dEJ1ZmZlcikKKyAgICAgICAgc3RhdGljX2Nhc3Q8V0NQbGF0Zm9ybUxheWVyR0NHTCo+KG1fbGF5
ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZS0+cGxhdGZvcm1MYXllcigpKS0+YWRkQ29udGVudEJ1
ZmZlcklkZW50aWZpZXIoKmNvbnRlbnRCdWZmZXIpOwogICAgIG1hcmtMYXllckNvbXBvc2l0ZWQo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy93Yy9XQ1BsYXRmb3JtTGF5ZXJHQ0dMLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL3djL1dDUGxhdGZvcm1MYXllckdDR0wuaAppbmRleCBhODdlMDhlODJlMTkwN2E4
MGFkN2E3ZDBiY2QzNmJlOTAzYjQzOTNiLi5hMGQzYzFhNDNmODAzZWYzYjM0ZDA5NDdkOTY2ZjRh
ZmU0ZDkxNGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL3djL1dDUGxhdGZvcm1MYXllckdDR0wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL3djL1dDUGxhdGZvcm1MYXllckdDR0wuaApAQCAtMjYsMjAgKzI2LDI3
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ci5oIgorI2luY2x1ZGUgIldDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL1dDUGxhdGZvcm1MYXllci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3Mg
V0NQbGF0Zm9ybUxheWVyR0NHTCA6IHB1YmxpYyBXZWJDb3JlOjpXQ1BsYXRmb3JtTGF5ZXIgewog
cHVibGljOgotICAgIFdDUGxhdGZvcm1MYXllckdDR0woR3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyIGlkZW50aWZpZXIpCi0gICAgICAgIDogbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIo
aWRlbnRpZmllcikKKyAgICBWZWN0b3I8V0NDb250ZW50QnVmZmVySWRlbnRpZmllcj4gdGFrZUNv
bnRlbnRCdWZmZXJJZGVudGlmaWVycygpCiAgICAgeworICAgICAgICByZXR1cm4gc3RkOjpleGNo
YW5nZShtX2NvbnRlbnRCdWZmZXJJZGVudGlmaWVycywgeyB9KTsKKyAgICB9CisKKyAgICB2b2lk
IGFkZENvbnRlbnRCdWZmZXJJZGVudGlmaWVyKFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXIgY29u
dGVudEJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1fY29udGVudEJ1ZmZlcklkZW50aWZpZXJzLmFw
cGVuZChjb250ZW50QnVmZmVyKTsKKyAgICAgICAgLy8gRklYTUU6IFRleHR1cmVNYXBwZXJHQ0dM
UGxhdGZvcm1MYXllciBkb2Vzbid0IHN1cHBvcnQgZG91YmxlIGJ1ZmZlcmluZyB5ZXQuCisgICAg
ICAgIEFTU0VSVChtX2NvbnRlbnRCdWZmZXJJZGVudGlmaWVycy5zaXplKCkgPT0gMSk7CiAgICAg
fQotICAgIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciYgZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKCkgeyByZXR1cm4gbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXI7IH0KIAogcHJp
dmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXI7CisgICAgVmVjdG9yPFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXI+IG1fY29u
dGVudEJ1ZmZlcklkZW50aWZpZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVy
V0MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXll
cldDLmNwcAppbmRleCBiZDlhY2JlOTMzM2YxOGE3Nzk3M2JlZTlhZDAxMGNmMWYwNjU3OTZmLi43
YTcyNjVlOTY2N2RlYjEyMTc4YzYyMjg3Nzk5YWVhMTc3YThkMmM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAK
QEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyV0M6OnNldE5lZWRzRGlzcGxheUlu
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QsIFNob3UKIHZvaWQgR3JhcGhpY3NM
YXllcldDOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCiB7CiAgICAgLy8gRm9yIGV4YW1wbGUs
IGlmIFdlYkdMIGNhbnZhcyBjaGFuZ2VkLCBpdCBuZWVkcyBmbHVzaCB0byBkaXNwbGF5LgotICAg
IG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZCh7IH0pOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hh
bmdlZChXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9ybUxheWVyKTsKIH0KIAogYm9vbCBHcmFwaGljc0xh
eWVyV0M6OnNldENoaWxkcmVuKFZlY3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+JiYgY2hpbGRyZW4p
CkBAIC00NzUsMTAgKzQ3NSw5IEBAIHZvaWQgR3JhcGhpY3NMYXllcldDOjpmbHVzaENvbXBvc2l0
aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKICAgICAgICAgdXBkYXRlLmJhY2tkcm9wRmlsdGVy
c1JlY3QgPSBiYWNrZHJvcEZpbHRlcnNSZWN0KCk7CiAgICAgfQogICAgIGlmICh1cGRhdGUuY2hh
bmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgdXBkYXRlLmhh
c1BsYXRmb3JtTGF5ZXIgPSBtX3BsYXRmb3JtTGF5ZXI7CiAgICAgICAgIGlmIChtX3BsYXRmb3Jt
TGF5ZXIpCi0gICAgICAgICAgICB1cGRhdGUuZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyID0g
c3RhdGljX2Nhc3Q8V0NQbGF0Zm9ybUxheWVyR0NHTCo+KG1fcGxhdGZvcm1MYXllciktPmdyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllcigpLnRvVUludDY0KCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHVwZGF0ZS5ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgPSAwOworICAgICAgICAg
ICAgdXBkYXRlLmNvbnRlbnRCdWZmZXJJZGVudGlmaWVycyA9IHN0YXRpY19jYXN0PFdDUGxhdGZv
cm1MYXllckdDR0wqPihtX3BsYXRmb3JtTGF5ZXIpLT50YWtlQ29udGVudEJ1ZmZlcklkZW50aWZp
ZXJzKCk7CiAgICAgfQogICAgIG1fb2JzZXJ2ZXItPmNvbW1pdExheWVyVXBhdGVJbmZvKFdURk1v
dmUodXBkYXRlKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS93Yy9XQ1VwYXRlSW5mby5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
d2MvV0NVcGF0ZUluZm8uaAppbmRleCBjN2I0ZGQ4MWI3ZTE3N2VlNjc2N2FhYTc1NWJmZTg5MDQ1
OWZlZmNlLi4xNDkyZmU4OWY3MWJhYTU0MGYwZjBhZDg5ZWIwNjkyYzc0YTc3OGJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmgKQEAg
LTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV0NCYWNraW5nU3RvcmUu
aCIKKyNpbmNsdWRlICJXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+
CiAjaW5jbHVkZSA8b3B0aW9uYWw+CkBAIC03NCw2ICs3NSw3IEBAIHN0cnVjdCBXQ0xheWVyVXBh
dGVJbmZvIHsKICAgICBib29sIGNvbnRlbnRzVmlzaWJsZTsKICAgICBib29sIGJhY2tmYWNlVmlz
aWJpbGl0eTsKICAgICBib29sIHByZXNlcnZlczNEOworICAgIGJvb2wgaGFzUGxhdGZvcm1MYXll
cjsKICAgICBXZWJDb3JlOjpDb2xvciBzb2xpZENvbG9yOwogICAgIFdlYkNvcmU6OkNvbG9yIGJh
Y2tncm91bmRDb2xvcjsKICAgICBXZWJDb3JlOjpDb2xvciBkZWJ1Z0JvcmRlckNvbG9yOwpAQCAt
ODgsNyArOTAsNyBAQCBzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7CiAgICAgV2ViQ29yZTo6Rmls
dGVyT3BlcmF0aW9ucyBiYWNrZHJvcEZpbHRlcnM7CiAgICAgV2ViQ29yZTo6RmxvYXRSb3VuZGVk
UmVjdCBiYWNrZHJvcEZpbHRlcnNSZWN0OwogICAgIFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Qg
Y29udGVudHNDbGlwcGluZ1JlY3Q7Ci0gICAgdWludDY0X3QgZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyOworICAgIFZlY3RvcjxXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyPiBjb250ZW50QnVm
ZmVySWRlbnRpZmllcnM7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CkBAIC0xMzYsNyArMTM4LDcgQEAgc3RydWN0
IFdDTGF5ZXJVcGF0ZUluZm8gewogICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
OkJhY2tkcm9wRmlsdGVycykKICAgICAgICAgICAgIGVuY29kZXIgPDwgYmFja2Ryb3BGaWx0ZXJz
IDw8IGJhY2tkcm9wRmlsdGVyc1JlY3Q7CiAgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNo
YW5nZTo6UGxhdGZvcm1MYXllcikKLSAgICAgICAgICAgIGVuY29kZXIgPDwgZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyOworICAgICAgICAgICAgZW5jb2RlciA8PCBoYXNQbGF0Zm9ybUxheWVy
IDw8IGNvbnRlbnRCdWZmZXJJZGVudGlmaWVyczsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgRGVjb2Rlcj4KQEAgLTI0MSw3ICsyNDMsOSBAQCBzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmIChy
ZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIpIHsKLSAgICAgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
cikpCisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5oYXNQbGF0Zm9ybUxh
eWVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50QnVmZmVySWRlbnRpZmllcnMpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>