<?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>86050</bug_id>
          
          <creation_ts>2012-05-09 18:44:55 -0700</creation_ts>
          <short_desc>[chromium] Move deferral-related logic out of Canvas2DLayerChromium</short_desc>
          <delta_ts>2012-06-07 16:36:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>junov</cc>
    
    <cc>senorblanco</cc>
    
    <cc>twiz</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>620151</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-09 18:44:55 -0700</bug_when>
    <thetext>[chromium] Move deferral-related logic out of Canvas2DLayerChromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620157</commentid>
    <comment_count>1</comment_count>
      <attachid>141071</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-09 18:51:45 -0700</bug_when>
    <thetext>Created attachment 141071
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620571</commentid>
    <comment_count>2</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-05-10 07:32:35 -0700</bug_when>
    <thetext>I&apos;d really like junov@ to take a look at this, but unfortunately he&apos;s on vacation for a week.  Could you wait that long, or is this more pressing than that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620740</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-10 11:14:50 -0700</bug_when>
    <thetext>OK, but I&apos;m pretty sure I&apos;m not changing any logic (just relocating it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621185</commentid>
    <comment_count>4</comment_count>
      <attachid>141308</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-10 18:37:05 -0700</bug_when>
    <thetext>Created attachment 141308
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621186</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-10 18:37:40 -0700</bug_when>
    <thetext>This just goes all the way over to using TextureLayerChromium for canvas 2d content.  It&apos;s a bigger patch, but I think it makes a lot more sense as one patch than two.  Happy to split it back out if reviewers would find that easier to manage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624498</commentid>
    <comment_count>6</comment_count>
      <attachid>141308</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-05-15 13:38:25 -0700</bug_when>
    <thetext>Comment on attachment 141308
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:110
&gt; +SkCanvas* Canvas2DLayerBridge::skCanvas(SkDevice* device)

Maybe this should be createSkCanvas()?

Also, it&apos;s a bit muddled to have the canvas allocation happening here, but not ownership or deletion.  I think I&apos;d prefer to have it back where it was, if possible, so all SkCanvases are allocated and freed in ImageBuffer and just set on this class.  That does seem to suggest that AcceleratedDeviceContext creation would move back too, though, which is perhaps against your intent.

Random thought:  I wonder if we could just make this class implement both the Client interface and the SkDeferredCanvas::DeviceContext interface as well?

&gt; Source/WebCore/platform/graphics/chromium/ImageBufferDataSkia.h:38
&gt; +class Canvas2DLayerBridge;

Not fond of the &quot;Bridge&quot; name, but I can&apos;t really come up with a better one either.

&gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:153
&gt; +        const_cast&lt;Canvas2DLayerBridge*&gt;(m_data.m_layerBridge.get())-&gt;contextAcquired();

Eww.. (const_cast).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624499</commentid>
    <comment_count>7</comment_count>
      <attachid>141308</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-05-15 13:38:29 -0700</bug_when>
    <thetext>Comment on attachment 141308
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:110
&gt; +SkCanvas* Canvas2DLayerBridge::skCanvas(SkDevice* device)

Maybe this should be createSkCanvas()?

Also, it&apos;s a bit muddled to have the canvas allocation happening here, but not ownership or deletion.  I think I&apos;d prefer to have it back where it was, if possible, so all SkCanvases are allocated and freed in ImageBuffer and just set on this class.  That does seem to suggest that AcceleratedDeviceContext creation would move back too, though, which is perhaps against your intent.

Random thought:  I wonder if we could just make this class implement both the Client interface and the SkDeferredCanvas::DeviceContext interface as well?

&gt; Source/WebCore/platform/graphics/chromium/ImageBufferDataSkia.h:38
&gt; +class Canvas2DLayerBridge;

Not fond of the &quot;Bridge&quot; name, but I can&apos;t really come up with a better one either.

&gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:153
&gt; +        const_cast&lt;Canvas2DLayerBridge*&gt;(m_data.m_layerBridge.get())-&gt;contextAcquired();

Eww.. (const_cast).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624654</commentid>
    <comment_count>8</comment_count>
      <attachid>141308</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-15 15:31:52 -0700</bug_when>
    <thetext>Comment on attachment 141308
Patch

Good suggestions.  I&apos;ll update this patch with what I discover with those in mind.  Clearing review? until then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624792</commentid>
    <comment_count>9</comment_count>
      <attachid>142111</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-15 17:53:56 -0700</bug_when>
    <thetext>Created attachment 142111
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624793</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-15 17:54:48 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 141308 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141308&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:110
&gt; &gt; +SkCanvas* Canvas2DLayerBridge::skCanvas(SkDevice* device)
&gt; 
&gt; Maybe this should be createSkCanvas()?
&gt; 
&gt; Also, it&apos;s a bit muddled to have the canvas allocation happening here, but not ownership or deletion.  I think I&apos;d prefer to have it back where it was, if possible, so all SkCanvases are allocated and freed in ImageBuffer and just set on this class.  That does seem to suggest that AcceleratedDeviceContext creation would move back too, though, which is perhaps against your intent.
&gt; 
&gt; Random thought:  I wonder if we could just make this class implement both the Client interface and the SkDeferredCanvas::DeviceContext interface as well?
&gt; 
This appears to work and is fairly nice, except I believe it means I have to buy in to the SkRefCnt management for this class.  I think I&apos;m doing it correctly in this patch (the tests pass and it doesn&apos;t crash) but I may be one unref() short - can you check that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625387</commentid>
    <comment_count>11</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-05-16 07:16:09 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 141308 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141308&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:110
&gt; &gt; &gt; +SkCanvas* Canvas2DLayerBridge::skCanvas(SkDevice* device)
&gt; &gt; 
&gt; &gt; Maybe this should be createSkCanvas()?
&gt; &gt; 
&gt; &gt; Also, it&apos;s a bit muddled to have the canvas allocation happening here, but not ownership or deletion.  I think I&apos;d prefer to have it back where it was, if possible, so all SkCanvases are allocated and freed in ImageBuffer and just set on this class.  That does seem to suggest that AcceleratedDeviceContext creation would move back too, though, which is perhaps against your intent.
&gt; &gt; 
&gt; &gt; Random thought:  I wonder if we could just make this class implement both the Client interface and the SkDeferredCanvas::DeviceContext interface as well?
&gt; &gt; 
&gt; This appears to work and is fairly nice, except I believe it means I have to buy in to the SkRefCnt management for this class.  I think I&apos;m doing it correctly in this patch (the tests pass and it doesn&apos;t crash) but I may be one unref() short - can you check that?

I&apos;m not super-familiar with this idiom (internally, skia doesn&apos;t actually aggregate objects via SkAutoTUnref very much), but I think you&apos;re ok:  there&apos;s one ref on creation, but zero refs on SkAutoTUnref::reset().  One ref and one unref by the SkDeferredCanvas::DeferredDevice, and one unref in the SkAutoTUnref d&apos;tor.

If you want to be certain, maybe you could check with some printf&apos;s in the Canvas2DLayerBridge destructor (or valgrind, if you&apos;re patient).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625397</commentid>
    <comment_count>12</comment_count>
      <attachid>142111</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-05-16 07:21:34 -0700</bug_when>
    <thetext>Comment on attachment 142111
Patch

Looks good (assuming it&apos;s been smoke-tested w/impl thread with and without deferral).  Thanks for the extra effort.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627057</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-17 15:36:13 -0700</bug_when>
    <thetext>So there&apos;s one problem with making the bridge be an SkDeferredCanvas::DeviceContext in threaded deferred mode.  The basic issue is DeviceContext is refcounted and skia holds the last ref.  This means when an ImageBuffer is being destroyed, ganesh goes ahead and deletes the texture, but I&apos;ve hooked up the logic to tell the compositor the texture is dead to ~Canvas2DLayerBridge() which isn&apos;t called until skia drops that ref.  Thus we might try to draw a frame with the texture that&apos;s already been deleted which makes the command buffer sad.

I think I&apos;ll have the DeviceContext be held by the Bridge, sort of how it was previous, by try to keep the SkCanvas creation in ImageBufferSkia.cpp.  Will update patch momentarily...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627168</commentid>
    <comment_count>14</comment_count>
      <attachid>142597</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-17 17:54:50 -0700</bug_when>
    <thetext>Created attachment 142597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627169</commentid>
    <comment_count>15</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-17 17:56:35 -0700</bug_when>
    <thetext>Would you mind taking one more look, Stephen?  Changes are:

1.) Add back a private AcceleratedDeviceContext class since it&apos;s refcounted by skia
2.) Add a m_layer-&gt;clearClient() call in ~Canvas2DLayerBridge, since it is the client&apos;s layer.

These were found mostly by resizing FishIE a whole lot in debug/release with the 4 modes (thread on/off, deferral on/off).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627688</commentid>
    <comment_count>16</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-05-18 07:38:31 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Would you mind taking one more look, Stephen?  Changes are:
&gt; 
&gt; 1.) Add back a private AcceleratedDeviceContext class since it&apos;s refcounted by skia
&gt; 2.) Add a m_layer-&gt;clearClient() call in ~Canvas2DLayerBridge, since it is the client&apos;s layer.
&gt; 
&gt; These were found mostly by resizing FishIE a whole lot in debug/release with the 4 modes (thread on/off, deferral on/off).

(In reply to comment #13)
&gt; So there&apos;s one problem with making the bridge be an SkDeferredCanvas::DeviceContext in threaded deferred mode.  The basic issue is DeviceContext is refcounted and skia holds the last ref.  This means when an ImageBuffer is being destroyed, ganesh goes ahead and deletes the texture, but I&apos;ve hooked up the logic to tell the compositor the texture is dead to ~Canvas2DLayerBridge() which isn&apos;t called until skia drops that ref.  Thus we might try to draw a frame with the texture that&apos;s already been deleted which makes the command buffer sad.

Could be fixed by setting the bridge&apos;s textureId to 0 in ImageBuffer[Skia]&apos;s destructor?  Then the compositor could stop using it before anyone gets destroyed.

Another solution might be to add some kind of &quot;your texture is about to die&quot; notification to SkDeferredCanvas::DeviceContext, so the bridge could tell the compositor not to draw with it, even if the bridge lives on.  Since this would require a skia change, I&apos;d go with the above for now.

&gt; I think I&apos;ll have the DeviceContext be held by the Bridge, sort of how it was previous, by try to keep the SkCanvas creation in ImageBufferSkia.cpp.  Will update patch momentarily...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627979</commentid>
    <comment_count>17</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-18 13:23:06 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; Would you mind taking one more look, Stephen?  Changes are:
&gt; &gt; 
&gt; &gt; 1.) Add back a private AcceleratedDeviceContext class since it&apos;s refcounted by skia
&gt; &gt; 2.) Add a m_layer-&gt;clearClient() call in ~Canvas2DLayerBridge, since it is the client&apos;s layer.
&gt; &gt; 
&gt; &gt; These were found mostly by resizing FishIE a whole lot in debug/release with the 4 modes (thread on/off, deferral on/off).
&gt; 
&gt; (In reply to comment #13)
&gt; &gt; So there&apos;s one problem with making the bridge be an SkDeferredCanvas::DeviceContext in threaded deferred mode.  The basic issue is DeviceContext is refcounted and skia holds the last ref.  This means when an ImageBuffer is being destroyed, ganesh goes ahead and deletes the texture, but I&apos;ve hooked up the logic to tell the compositor the texture is dead to ~Canvas2DLayerBridge() which isn&apos;t called until skia drops that ref.  Thus we might try to draw a frame with the texture that&apos;s already been deleted which makes the command buffer sad.
&gt; 
&gt; Could be fixed by setting the bridge&apos;s textureId to 0 in ImageBuffer[Skia]&apos;s destructor?  Then the compositor could stop using it before anyone gets destroyed.

That works, but it&apos;d require ImageBufferSkia reaching in to the bridge to tell it &quot;You aren&apos;t going to be deleted just yet, but stop doing this&quot;.  I think it&apos;s clearer to have the bridge be OwnPtr&lt;&gt; by ImageBufferSkia and have the DeviceContext hang off of the bridge as the latest patch does.  Then the C++ object lifetimes map well to the resources they represent:

*) ImageBufferSkia has ownership of the SkCanvas, back buffer texture, and the Canvas2DLayerBridge.
*) Canvas2DLayerBridge has a reference to (but not ownership of) the back buffer texture and SkCanvas and has ownership of the front buffer texture if double buffering is enabled.  Creates and manages the layer.  If the canvas is deferred, Canvas2DLayerBridge has a ref to an SkDeferredCanvas::DeviceContext.
*) AcceleratedDeviceContext - lifetime managed by Canvas2DLayerBridge and Skia, has a ref to the layer and context.

The issue I have with having a death notification on the bridge is it puts it in a strange state where it&apos;s still alive but a lot of its member variables are dead (SkCanvas, front buffer texture).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630352</commentid>
    <comment_count>18</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-05-22 07:37:57 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; Would you mind taking one more look, Stephen?  Changes are:
&gt; &gt; &gt; 
&gt; &gt; &gt; 1.) Add back a private AcceleratedDeviceContext class since it&apos;s refcounted by skia
&gt; &gt; &gt; 2.) Add a m_layer-&gt;clearClient() call in ~Canvas2DLayerBridge, since it is the client&apos;s layer.
&gt; &gt; &gt; 
&gt; &gt; &gt; These were found mostly by resizing FishIE a whole lot in debug/release with the 4 modes (thread on/off, deferral on/off).
&gt; &gt; 
&gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; So there&apos;s one problem with making the bridge be an SkDeferredCanvas::DeviceContext in threaded deferred mode.  The basic issue is DeviceContext is refcounted and skia holds the last ref.  This means when an ImageBuffer is being destroyed, ganesh goes ahead and deletes the texture, but I&apos;ve hooked up the logic to tell the compositor the texture is dead to ~Canvas2DLayerBridge() which isn&apos;t called until skia drops that ref.  Thus we might try to draw a frame with the texture that&apos;s already been deleted which makes the command buffer sad.
&gt; &gt; 
&gt; &gt; Could be fixed by setting the bridge&apos;s textureId to 0 in ImageBuffer[Skia]&apos;s destructor?  Then the compositor could stop using it before anyone gets destroyed.
&gt; 
&gt; That works, but it&apos;d require ImageBufferSkia reaching in to the bridge to tell it &quot;You aren&apos;t going to be deleted just yet, but stop doing this&quot;.  I think it&apos;s clearer to have the bridge be OwnPtr&lt;&gt; by ImageBufferSkia and have the DeviceContext hang off of the bridge as the latest patch does.  Then the C++ object lifetimes map well to the resources they represent:
&gt; 
&gt; *) ImageBufferSkia has ownership of the SkCanvas, back buffer texture, and the Canvas2DLayerBridge.
&gt; *) Canvas2DLayerBridge has a reference to (but not ownership of) the back buffer texture and SkCanvas and has ownership of the front buffer texture if double buffering is enabled.  Creates and manages the layer.  If the canvas is deferred, Canvas2DLayerBridge has a ref to an SkDeferredCanvas::DeviceContext.
&gt; *) AcceleratedDeviceContext - lifetime managed by Canvas2DLayerBridge and Skia, has a ref to the layer and context.
&gt; 
&gt; The issue I have with having a death notification on the bridge is it puts it in a strange state where it&apos;s still alive but a lot of its member variables are dead (SkCanvas, front buffer texture).

OK, fair enough.  I still don&apos;t like the AcceleratedDeviceContext, but that&apos;s partly just my feeling that we have too damn many Contexts in the code already, and it&apos;s not your fault.

Perhaps we can fix up the refptr ownership of ADC in Skia and then revisit this design later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630353</commentid>
    <comment_count>19</comment_count>
      <attachid>142597</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-05-22 07:38:18 -0700</bug_when>
    <thetext>Comment on attachment 142597
Patch

OK.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630378</commentid>
    <comment_count>20</comment_count>
      <attachid>142597</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-05-22 08:11:23 -0700</bug_when>
    <thetext>Comment on attachment 142597
Patch

Pulling my r+ for now, since junov@ has some comments he&apos;d like to see addressed first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630396</commentid>
    <comment_count>21</comment_count>
      <attachid>142597</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-05-22 08:28:54 -0700</bug_when>
    <thetext>Comment on attachment 142597
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.h:47
&gt; +    // This class derives from SkRefCnt (via SkDeferredCanvas::DeviceContext) and so should
&gt; +    // always be retained in an SkAutoTUnref or similar (but not a WTF smart pointer type).

I think this comment no longer applies.

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.h:71
&gt; +    SkAutoTUnref&lt;AcceleratedDeviceContext&gt; m_deferredDeviceContext;

Is this ref count really necessary?  This object is already ref counted in SkDeferredCanvas::DeferredDevice.  I am pretty sure there is no need to even hold on to a reference to it in this class. Method deferredDeviceContext() could be replaced with createDeferredDeviceContext().

Something like:

Canvas2DLayerBridge::createDeferredDeviceContext() {
    ASSERT(m_deferralMode == Deferred);
    return new AcceleratedDeviceContext(m_context.get(), m_layer.get(), m_useDoubleBuffering)
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630710</commentid>
    <comment_count>22</comment_count>
      <attachid>142597</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-22 13:41:07 -0700</bug_when>
    <thetext>Comment on attachment 142597
Patch

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

I&apos;ll refresh this with the simplifications Justin suggested.

&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.h:47
&gt;&gt; +    // always be retained in an SkAutoTUnref or similar (but not a WTF smart pointer type).
&gt; 
&gt; I think this comment no longer applies.

You&apos;re right, it does not

&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.h:71
&gt;&gt; +    SkAutoTUnref&lt;AcceleratedDeviceContext&gt; m_deferredDeviceContext;
&gt; 
&gt; Is this ref count really necessary?  This object is already ref counted in SkDeferredCanvas::DeferredDevice.  I am pretty sure there is no need to even hold on to a reference to it in this class. Method deferredDeviceContext() could be replaced with createDeferredDeviceContext().
&gt; 
&gt; Something like:
&gt; 
&gt; Canvas2DLayerBridge::createDeferredDeviceContext() {
&gt;     ASSERT(m_deferralMode == Deferred);
&gt;     return new AcceleratedDeviceContext(m_context.get(), m_layer.get(), m_useDoubleBuffering)
&gt; }

Hm - I think that would work, since ADC holds refs to everything it needs.  I&apos;ll do that instead. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632200</commentid>
    <comment_count>23</comment_count>
      <attachid>143682</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-23 16:56:43 -0700</bug_when>
    <thetext>Created attachment 143682
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632209</commentid>
    <comment_count>24</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-23 17:04:07 -0700</bug_when>
    <thetext>This does just that - mind taking one more look, Stephen and/or Justin?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632730</commentid>
    <comment_count>25</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-05-24 06:44:00 -0700</bug_when>
    <thetext>Me likes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632739</commentid>
    <comment_count>26</comment_count>
      <attachid>143682</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-05-24 06:59:06 -0700</bug_when>
    <thetext>Comment on attachment 143682
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:151
&gt; +void Canvas2DLayerBridge::contextAcquired()

Sorry for more bikeshedding, but this name is ambiguous, given the plethora of contexts we have going on here (GraphicsContext3D, GraphicsContext, AcceleratedDeviceContext...).

Could we name it by what the function does (e.g., willModifyTexture()) rather than by what the caller is doing?

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:154
&gt; +    if (m_deferralMode == NonDeferred &amp;&amp; !m_useDoubleBuffering)
&gt; +        m_layer-&gt;willModifyTexture();

Just to verify:  this used to be protected by an impl-thread check.  Now it looks like it will be called even in the single-threaded case (where single-buffered, non-deferred is the default behaviour).  Is that because willModifyTexture is a no-op at the CCProxy level for the single-threaded case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642012</commentid>
    <comment_count>27</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-05 16:48:06 -0700</bug_when>
    <thetext>I had thought this landed weeks ago, but it appears I just dropped it.

(In reply to comment #26)
&gt; (From update of attachment 143682 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143682&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:151
&gt; &gt; +void Canvas2DLayerBridge::contextAcquired()
&gt; 
&gt; Sorry for more bikeshedding, but this name is ambiguous, given the plethora of contexts we have going on here (GraphicsContext3D, GraphicsContext, AcceleratedDeviceContext...).
&gt; 
&gt; Could we name it by what the function does (e.g., willModifyTexture()) rather than by what the caller is doing?

willModifyTexture() is incorrect because we will only modify the texture here if we&apos;re in non-deferred mode - in deferred mode, we don&apos;t actually change anything until the prepareForDraw() call is made on the device context.  I think this name is about as good as we&apos;re going to get - if people are confused, they can look for callers.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:154
&gt; &gt; +    if (m_deferralMode == NonDeferred &amp;&amp; !m_useDoubleBuffering)
&gt; &gt; +        m_layer-&gt;willModifyTexture();
&gt; 
&gt; Just to verify:  this used to be protected by an impl-thread check.  Now it looks like it will be called even in the single-threaded case (where single-buffered, non-deferred is the default behaviour).  Is that because willModifyTexture is a no-op at the CCProxy level for the single-threaded case?

Correct.  We&apos;re going to modify the texture in this instance so we need to notify the layer.  What that does inside the compositor implementation or inside the proxy is the compositor implementation&apos;s concern, not the bridge&apos;s concern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642017</commentid>
    <comment_count>28</comment_count>
      <attachid>145898</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-05 17:02:35 -0700</bug_when>
    <thetext>Created attachment 145898
updated to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642477</commentid>
    <comment_count>29</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-06-06 08:01:43 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; I had thought this landed weeks ago, but it appears I just dropped it.
&gt; 
&gt; (In reply to comment #26)
&gt; &gt; (From update of attachment 143682 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143682&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:151
&gt; &gt; &gt; +void Canvas2DLayerBridge::contextAcquired()
&gt; &gt; 
&gt; &gt; Sorry for more bikeshedding, but this name is ambiguous, given the plethora of contexts we have going on here (GraphicsContext3D, GraphicsContext, AcceleratedDeviceContext...).
&gt; &gt; 
&gt; &gt; Could we name it by what the function does (e.g., willModifyTexture()) rather than by what the caller is doing?
&gt; 
&gt; willModifyTexture() is incorrect because we will only modify the texture here if we&apos;re in non-deferred mode - in deferred mode, we don&apos;t actually change anything until the prepareForDraw() call is made on the device context.  I think this name is about as good as we&apos;re going to get - if people are confused, they can look for callers.

I don&apos;t think that&apos;s a good answer, since other people are going to be modifying this code once you&apos;re done with it.  Normally I&apos;d say, take pity on them, and try to make the code self-documenting.

However, since deferral is now on by default and looks like it will stick, I think this code can go away soon anyway, so I&apos;ll let this go.

&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:154
&gt; &gt; &gt; +    if (m_deferralMode == NonDeferred &amp;&amp; !m_useDoubleBuffering)
&gt; &gt; &gt; +        m_layer-&gt;willModifyTexture();
&gt; &gt; 
&gt; &gt; Just to verify:  this used to be protected by an impl-thread check.  Now it looks like it will be called even in the single-threaded case (where single-buffered, non-deferred is the default behaviour).  Is that because willModifyTexture is a no-op at the CCProxy level for the single-threaded case?
&gt; 
&gt; Correct.  We&apos;re going to modify the texture in this instance so we need to notify the layer.  What that does inside the compositor implementation or inside the proxy is the compositor implementation&apos;s concern, not the bridge&apos;s concern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642478</commentid>
    <comment_count>30</comment_count>
      <attachid>145898</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-06-06 08:02:19 -0700</bug_when>
    <thetext>Comment on attachment 145898
updated to ToT

OK.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644051</commentid>
    <comment_count>31</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-07 16:36:12 -0700</bug_when>
    <thetext>Committed r119769: &lt;http://trac.webkit.org/changeset/119769&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141071</attachid>
            <date>2012-05-09 18:51:45 -0700</date>
            <delta_ts>2012-05-10 18:37:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86050-20120509185144.patch</filename>
            <type>text/plain</type>
            <size>23090</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDg0MTNkYjBhYTI4NTMw
NjNkNzcyYzVkODhkOGRkNzNlNWJkNDhjYy4uMDUxNjA4ZjM3YzY5YTgyNjQ1MTZkYjIxYmQ1ZGY3
MWE4NGFiYTdmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA1LTA5ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBN
b3ZlIGRlZmVycmFsLXJlbGF0ZWQgbG9naWMgb3V0IG9mIENhbnZhczJETGF5ZXJDaHJvbWl1bQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYwNTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcnMg
dGhlIGRlZmVycmFsLXJlbGF0ZWQgbG9naWMgb3V0IG9mIENhbnZhczJETGF5ZXJDaHJvbWl1bSBp
biBwcmVwZXJhdGlvbiBmb3IgdXNpbmcgVGV4dHVyZUxheWVyQ2hyb21pdW0KKyAgICAgICAgZGly
ZWN0bHkuICBUaGVzZSBjb25jZXJucyBhcmUgc3BlY2lmaWMgdG8gc2tpYSdzIGNhbnZhcyBpbXBs
ZW1lbnRhdGlvbiBhbmQgbm90IGxvZ2ljYWxseSBwYXJ0IG9mIHRoZSBjb21wb3NpdG9yLgorICAg
ICAgICBDYW52YXMyRExheWVyQnJpZGdlIGlzIG93bmVkIGJ5IEltYWdlQnVmZmVyICh2aWEgSW1h
Z2VCdWZmZXJEYXRhKSBhbmQgbWFuYWdlcyB0aGUgbGlmZXRpbWUgb2YgdGhlIExheWVyQ2hyb21p
dW0KKyAgICAgICAgYW5kIHRha2VzIGNhcmUgb2Ygbm90aWZ5aW5nIHRoZSBsYXllciB3aGVuZXZl
ciB0aGUgZnJvbnQgdGV4dHVyZSBtaWdodCBiZSB0b3VjaGVkLgorCisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5
ZXJCcmlkZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQWNjZWxl
cmF0ZWREZXZpY2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVkRGV2aWNl
Q29udGV4dDo6QWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2VsZXJhdGVkRGV2aWNlQ29udGV4dDo6cHJlcGFyZUZvckRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6Q2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjp+Q2FudmFzMkRMYXllckJyaWRnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpsYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpjb250ZXh0QWNxdWlyZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENhbnZhczJETGF5ZXJCcmlkZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0pOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpsYXllcldpbGxEcmF3KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKENhbnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChJbWFnZUJ1ZmZlckRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFj
Y2VsZXJhdGVkQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp+SW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIpOgorCiAyMDEyLTA1LTA5ICBN
YXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ2Fpcm9d
IEdMQ29udGV4dEdMWCByZWxlYXNlcyB0aGUgY29udGV4dCB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQg
ZGlzcGxheQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4NGY5MWJhZjFlOGRlZDFiY2Fk
NzNjODdiYjdhOWQ3NzJlYTNiN2QwLi4yYjQ2YjQ0MjA0ZWE2ZjRiMWM5NzQxM2UxY2EyOWNkNWJh
OWEyZTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEy
LTA1LTA5ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
W2Nocm9taXVtXSBNb3ZlIGRlZmVycmFsLXJlbGF0ZWQgbG9naWMgb3V0IG9mIENhbnZhczJETGF5
ZXJDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODYwNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBVcGRhdGUgdGVzdHMgdG8gY2hlY2sgYWxsIG9mIHRoZSBjYW52YXMgMmQgbW9kZXMgd2UgY2Fy
ZSBhYm91dC4KKworICAgICAgICAqIHRlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
OgorICAgICAgICAoQ2FudmFzMkRMYXllckNocm9taXVtVGVzdDo6ZnVsbExpZmVjeWNsZVRlc3Qp
OgorCiAyMDEyLTA1LTA5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTE2NTczLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IDIzNTcwMzFlMGQzMDVkNWIzNGQzNWM1MzcwODljYTE4ZGUxNjQ2ODguLmY1YjQ5
NTNhYmE0OGI5NjY3NDY0YzAwYmQ5MzQyYzVmMWJmNzJlNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM1MzQsNiArMzUzNCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0
bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
QnJpZGdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDE5NDQ3MDllNGJiZjNkYTUyMGU2ZmE4ZWIzYzM0MzI1
YjEzNjJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHAKQEAgLTAsMCArMSwxMDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDYW52YXMyRExheWVyQnJpZGdl
LmgiCisKKyNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiU2tEZWZl
cnJlZENhbnZhcy5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBBY2NlbGVyYXRlZERldmljZUNvbnRleHQgOiBwdWJsaWMgU2tEZWZlcnJl
ZENhbnZhczo6RGV2aWNlQ29udGV4dCB7CitwdWJsaWM6CisgICAgQWNjZWxlcmF0ZWREZXZpY2VD
b250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QsIENhbnZhczJETGF5ZXJDaHJvbWl1
bSogbGF5ZXIpCisgICAgICAgIDogbV9sYXllcihsYXllcikKKyAgICAgICAgLCBtX2NvbnRleHQz
RCgpCisgICAgeworICAgICAgICBBU1NFUlQoY29udGV4dDNEKTsKKyAgICAgICAgQVNTRVJUKGxh
eWVyKTsKKyAgICAgICAgbV9jb250ZXh0M0QgPSBjb250ZXh0M0Q7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIHByZXBhcmVGb3JEcmF3KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXItPmxheWVy
V2lsbERyYXcoKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBDYW52YXMyRExheWVyQ2hyb21pdW0qIG1fbGF5ZXI7Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDNEOworfTsKKworQ2FudmFzMkRMYXllckJy
aWRnZTo6Q2FudmFzMkRMYXllckJyaWRnZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBw
cnBDb250ZXh0M0QsIGNvbnN0IEludFNpemUmIHNpemUsIERlZmVycmFsTW9kZSBkZWZlcnJhbE1v
ZGUsIHVuc2lnbmVkIHRleHR1cmVJZCwgU2tEZXZpY2UqIGRldmljZSwgU2tDYW52YXMqKiBjYW52
YXMpCisgICAgOiBtX2RlZmVycmFsTW9kZShkZWZlcnJhbE1vZGUpCit7CisgICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0M0QocHJwQ29udGV4dDNEKTsKKworICAgIC8vIEZJWE1F
OiBXZSBjdXJyZW50bHkgdHVybiBvZmYgZG91YmxlIGJ1ZmZlcmluZyB3aGVuIGNhbnZhcyByZW5k
ZXJpbmcgaXMKKyAgICAvLyBkZWZlcnJlZC4gV2hhdCB3ZSBzaG91bGQgYmUgZG9pbmcgaXMgdG8g
dXNlIGEgc21hcnRlciBoZXVyaXN0aWMgYmFzZWQKKyAgICAvLyBvbiBHUFUgcmVzb3VyY2UgbW9u
aXRvcmluZyBhbmQgb3RoZXIgZmFjdG9ycyB0byBjaG9zZSBiZXR3ZWVuIHNpbmdsZQorICAgIC8v
IGFuZCBkb3VibGUgYnVmZmVyaW5nLgorICAgIGJvb2wgdXNlRG91YmxlQnVmZmVyaW5nID0gQ0NQ
cm94eTo6aGFzSW1wbFRocmVhZCgpICYmIGRlZmVycmFsTW9kZSA9PSBOb25EZWZlcnJlZDsKKwor
ICAgIG1fbGF5ZXIgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShjb250ZXh0M0QsIHNp
emUsIHVzZURvdWJsZUJ1ZmZlcmluZyk7CisgICAgbV9sYXllci0+c2V0VGV4dHVyZUlkKHRleHR1
cmVJZCk7CisKKworICAgIGlmIChkZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpIHsKKyAgICAgICAg
U2tBdXRvVFVucmVmPEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dD4gZGV2aWNlQ29udGV4dChuZXcg
QWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0KGNvbnRleHQzRC5nZXQoKSwgbV9sYXllci5nZXQoKSkp
OworICAgICAgICAqY2FudmFzID0gbmV3IFNrRGVmZXJyZWRDYW52YXMoZGV2aWNlLCBkZXZpY2VD
b250ZXh0LmdldCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgKmNhbnZhcyA9IG5ldyBTa0NhbnZh
cyhkZXZpY2UpOworCisgICAgbV9sYXllci0+c2V0Q2FudmFzKCpjYW52YXMpOworfQorCitDYW52
YXMyRExheWVyQnJpZGdlOjp+Q2FudmFzMkRMYXllckJyaWRnZSgpCit7CisgICAgbV9sYXllci0+
c2V0VGV4dHVyZUlkKDApOworfQorCitMYXllckNocm9taXVtKiBDYW52YXMyRExheWVyQnJpZGdl
OjpsYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuZ2V0KCk7Cit9CisKK3ZvaWQg
Q2FudmFzMkRMYXllckJyaWRnZTo6Y29udGV4dEFjcXVpcmVkKCkKK3sKKyAgICBpZiAobV9kZWZl
cnJhbE1vZGUgPT0gTm9uRGVmZXJyZWQpCisgICAgICAgIG1fbGF5ZXItPmxheWVyV2lsbERyYXco
KTsKK30KKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQ4
ODc1NGE5ZGQ0ZmU1OTk2MGQyMTkxOTNhODQ3NGYxODE2Y2IxMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJC
cmlkZ2UuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDYW52YXMyRExheWVyQnJp
ZGdlX2gKKyNkZWZpbmUgQ2FudmFzMkRMYXllckJyaWRnZV9oCisKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIiAvLyBGb3IgRGVmZXJyYWxNb2RlIGVudW0uCisjaW5jbHVkZSAiSW50U2l6ZS5oIgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitj
bGFzcyBTa0NhbnZhczsKK2NsYXNzIFNrRGV2aWNlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bTsKK2NsYXNzIExheWVyQ2hyb21pdW07CisKK2Ns
YXNzIENhbnZhczJETGF5ZXJCcmlkZ2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhbnZh
czJETGF5ZXJCcmlkZ2UpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENhbnZhczJE
TGF5ZXJCcmlkZ2U+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
LCBjb25zdCBJbnRTaXplJiBzaXplLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlLCB1bnNpZ25l
ZCB0ZXh0dXJlSWQsIFNrRGV2aWNlKiBkZXZpY2UsIFNrQ2FudmFzKiogY2FudmFzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYW52YXMyRExheWVyQnJpZGdlKGNvbnRleHQs
IHNpemUsIGRlZmVycmFsTW9kZSwgdGV4dHVyZUlkLCBkZXZpY2UsIGNhbnZhcykpOworICAgIH0K
KworICAgIH5DYW52YXMyRExheWVyQnJpZGdlKCk7CisKKyAgICBMYXllckNocm9taXVtKiBsYXll
cigpIGNvbnN0OworICAgIHZvaWQgY29udGV4dEFjcXVpcmVkKCk7CisKK3ByaXZhdGU6CisgICAg
Q2FudmFzMkRMYXllckJyaWRnZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgY29uc3Qg
SW50U2l6ZSYsIERlZmVycmFsTW9kZSwgdW5zaWduZWQgdGV4dHVyZUlkLCBTa0RldmljZSosIFNr
Q2FudmFzKiopOworCisgICAgRGVmZXJyYWxNb2RlIG1fZGVmZXJyYWxNb2RlOworICAgIFJlZlB0
cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IG1fbGF5ZXI7Cit9OworCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYTQ3OTI5N2I3YjZiOTI1MDg5
Njk1OTk2OGVhMzM0YzdhMDQ5NzhkMi4uY2I4Zjg3YmMzZmU1MzIwMmJjMDlmZjgzZDg2ZDkwODU5
MTZlZTdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCkBAIC00Niwy
NiArNDYsMjAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPENhbnZhczJE
TGF5ZXJDaHJvbWl1bT4gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRGVmZXJyYWxN
b2RlIGRlZmVycmFsTW9kZSkKK1Bhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBDYW52
YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHVzZURvdWJsZUJ1ZmZlcmluZykKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhczJETGF5ZXJDaHJvbWl1bShjb250ZXh0LCBz
aXplLCBkZWZlcnJhbE1vZGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhczJETGF5
ZXJDaHJvbWl1bShjb250ZXh0LCBzaXplLCB1c2VEb3VibGVCdWZmZXJpbmcpKTsKIH0KIAotQ2Fu
dmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRGVmZXJyYWxNb2Rl
IGRlZmVycmFsTW9kZSkKK0NhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNocm9t
aXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIGNvbnN0IEludFNpemUm
IHNpemUsIGJvb2wgdXNlRG91YmxlQnVmZmVyaW5nKQogICAgIDogQ2FudmFzTGF5ZXJDaHJvbWl1
bSgpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fY29udGV4dExvc3QoZmFsc2Up
CiAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAsIG1fYmFja1RleHR1cmVJZCgwKQorICAgICwgbV91
c2VEb3VibGVCdWZmZXJpbmcodXNlRG91YmxlQnVmZmVyaW5nKQogICAgICwgbV9jYW52YXMoMCkK
LSAgICAsIG1fZGVmZXJyYWxNb2RlKGRlZmVycmFsTW9kZSkKIHsKLSAgICAvLyBGSVhNRTogV2Ug
Y3VycmVudGx5IHR1cm4gb2ZmIGRvdWJsZSBidWZmZXJpbmcgd2hlbiBjYW52YXMgcmVuZGVyaW5n
IGlzCi0gICAgLy8gZGVmZXJyZWQuIFdoYXQgd2Ugc2hvdWxkIGJlIGRvaW5nIGlzIHRvIHVzZSBh
IHNtYXJ0ZXIgaGV1cmlzdGljIGJhc2VkCi0gICAgLy8gb24gR1BVIHJlc291cmNlIG1vbml0b3Jp
bmcgYW5kIG90aGVyIGZhY3RvcnMgdG8gY2hvc2UgYmV0d2VlbiBzaW5nbGUKLSAgICAvLyBhbmQg
ZG91YmxlIGJ1ZmZlcmluZy4KLSAgICBtX3VzZURvdWJsZUJ1ZmZlcmluZyA9IENDUHJveHk6Omhh
c0ltcGxUaHJlYWQoKSAmJiBkZWZlcnJhbE1vZGUgPT0gTm9uRGVmZXJyZWQ7Ci0KICAgICAvLyBU
aGUgdGhyZWFkZWQgY29tcG9zaXRvciBpcyBzZWxmIHJhdGUtbGltaXRpbmcgd2hlbiByZW5kZXJp
bmcKICAgICAvLyB0byBhIHNpbmdsZSBidWZmZXJlZCBjYW52YXMgbGF5ZXIuCiAgICAgbV91c2VS
YXRlTGltaXRlciA9ICFDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkgfHwgbV91c2VEb3VibGVCdWZm
ZXJpbmc7CkBAIC0xNTUsMTIgKzE0OSwxMCBAQCB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6
dXBkYXRlKENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIsIGNvbnN0IENDT2NjbHVzaW9uVAogICAg
IG1fY29udGV4dC0+Zmx1c2goKTsKIH0KIAotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06Omxh
eWVyV2lsbERyYXcoV2lsbERyYXdDb25kaXRpb24gY29uZGl0aW9uKSBjb25zdAordm9pZCBDYW52
YXMyRExheWVyQ2hyb21pdW06OmxheWVyV2lsbERyYXcoKQogewotICAgIGlmIChkcmF3aW5nSW50
b0ltcGxUaHJlYWRUZXh0dXJlKCkpIHsKLSAgICAgICAgaWYgKGNvbmRpdGlvbiA9PSBXaWxsRHJh
d1VuY29uZGl0aW9uYWxseSB8fCBtX2RlZmVycmFsTW9kZSA9PSBOb25EZWZlcnJlZCkKLSAgICAg
ICAgICAgIGxheWVyVHJlZUhvc3QoKS0+YWNxdWlyZUxheWVyVGV4dHVyZXMoKTsKLSAgICB9Cisg
ICAgaWYgKGRyYXdpbmdJbnRvSW1wbFRocmVhZFRleHR1cmUoKSkKKyAgICAgICAgbGF5ZXJUcmVl
SG9zdCgpLT5hY3F1aXJlTGF5ZXJUZXh0dXJlcygpOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckNocm9taXVtLmgKaW5kZXggYWQzYzY4NjVhZjRhZmRjMTJlMzY0NjllZWZlY2NlOGU5NjMy
NmI2OC4uY2ZjMGQ5OTg5NzhlN2ZhYjZiNjNiZGE5MzYyMjdmNWY1MDAyYWEzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKQEAgLTM1LDcgKzM1LDYgQEAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgog
CiBjbGFzcyBTa0NhbnZhczsKQEAgLTQ4LDEyICs0Nyw3IEBAIGNsYXNzIFJlZ2lvbjsKIC8vIEEg
bGF5ZXIgY29udGFpbmluZyBhbiBhY2NlbGVyYXRlZCAyZCBjYW52YXMKIGNsYXNzIENhbnZhczJE
TGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNMYXllckNocm9taXVtIHsKIHB1YmxpYzoKLSAg
ICBlbnVtIFdpbGxEcmF3Q29uZGl0aW9uIHsKLSAgICAgICAgV2lsbERyYXdVbmNvbmRpdGlvbmFs
bHksCi0gICAgICAgIFdpbGxEcmF3SWZMYXllck5vdERlZmVycmVkLAotICAgIH07Ci0KLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiwgY29uc3QgSW50U2l6ZSYsIERlZmVycmFsTW9kZSk7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBjcmVhdGUoUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4sIGNvbnN0IEludFNpemUmLCBib29sIHVzZURvdWJsZUJ1ZmZl
cmluZyk7CiAgICAgdmlydHVhbCB+Q2FudmFzMkRMYXllckNocm9taXVtKCk7CiAKICAgICB2b2lk
IHNldFRleHR1cmVJZCh1bnNpZ25lZCk7CkBAIC02NSwxMCArNTksMTAgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKikgT1ZFUlJJREU7CiAK
ICAgICB2b2lkIHNldENhbnZhcyhTa0NhbnZhcyopOwotICAgIHZvaWQgbGF5ZXJXaWxsRHJhdyhX
aWxsRHJhd0NvbmRpdGlvbikgY29uc3Q7CisgICAgdm9pZCBsYXllcldpbGxEcmF3KCk7CiAKIHBy
aXZhdGU6Ci0gICAgQ2FudmFzMkRMYXllckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+LCBjb25zdCBJbnRTaXplJiwgRGVmZXJyYWxNb2RlKTsKKyAgICBDYW52YXMyRExheWVy
Q2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIGNvbnN0IEludFNpemUmLCBi
b29sIHVzZURvdWJsZUJ1ZmZlcmluZyk7CiAgICAgYm9vbCBkcmF3aW5nSW50b0ltcGxUaHJlYWRU
ZXh0dXJlKCkgY29uc3Q7CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4
dDsKQEAgLTgyLDcgKzc2LDYgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+
IG1fZnJvbnRUZXh0dXJlOwogICAgIFNrQ2FudmFzKiBtX2NhbnZhczsKICAgICBib29sIG1fdXNl
UmF0ZUxpbWl0ZXI7Ci0gICAgRGVmZXJyYWxNb2RlIG1fZGVmZXJyYWxNb2RlOwogfTsKIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VCdWZmZXJEYXRhU2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oCmluZGV4IGM5MDkzMDRjZTVlNWJjNDA3ZWE1MGM2
ZDNiYTJkNmUwOGViNTJkYmUuLjZkNDljNTU3ODdmOGQ2MGQ2ZjBiZGI0ZjYxODlmYzRiMDhhYWFi
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlQnVmZmVyRGF0YVNraWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmgKQEAgLTM1LDcgKzM1LDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLWNs
YXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bTsKK2NsYXNzIENhbnZhczJETGF5ZXJCcmlkZ2U7CiAj
ZW5kaWYKIAogY2xhc3MgSW1hZ2VCdWZmZXJEYXRhIHsKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGlj
OgogICAgIE93blB0cjxTa0NhbnZhcz4gbV9jYW52YXM7CiAgICAgUGxhdGZvcm1Db250ZXh0U2tp
YSBtX3BsYXRmb3JtQ29udGV4dDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0g
ICAgUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gbV9wbGF0Zm9ybUxheWVyOworICAgIE93
blB0cjxDYW52YXMyRExheWVyQnJpZGdlPiBtX2xheWVyQnJpZGdlOwogI2VuZGlmCiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVm
ZmVyU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
QnVmZmVyU2tpYS5jcHAKaW5kZXggOGIwODZhMDc5OGI2NDZmODA1ZjEwYTM0MTA0NTk0NzNlM2Fk
ZGJjZC4uOTA5ZmUxNjQ2ZmM1ZTgyYmYyMDRmZDBiY2ZjYmFlYzdiY2UwNWE2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZm
ZXJTa2lhLmNwcApAQCAtNTEsNyArNTEsNyBAQAogI2luY2x1ZGUgIldFQlBJbWFnZUVuY29kZXIu
aCIKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNpbmNsdWRlICJDYW52YXMy
RExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJDYW52YXMyRExheWVyQnJpZGdlLmgiCiAjZW5k
aWYKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjksMzAgKzY5LDYgQEAg
SW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsK
IH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLWNsYXNzIEFjY2VsZXJhdGVk
RGV2aWNlQ29udGV4dCA6IHB1YmxpYyBTa0RlZmVycmVkQ2FudmFzOjpEZXZpY2VDb250ZXh0IHsK
LXB1YmxpYzoKLSAgICBBY2NlbGVyYXRlZERldmljZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzRCwgQ2FudmFzMkRMYXllckNocm9taXVtKiBsYXllcikKLSAgICAgICAgOiBtX3Bs
YXRmb3JtTGF5ZXIobGF5ZXIpCi0gICAgICAgICwgbV9jb250ZXh0M0QoKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGNvbnRleHQzRCk7Ci0gICAgICAgIEFTU0VSVChsYXllcik7Ci0gICAgICAgIG1f
Y29udGV4dDNEID0gY29udGV4dDNEOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
Rm9yRHJhdygpCi0gICAgewotICAgICAgICBtX3BsYXRmb3JtTGF5ZXItPmxheWVyV2lsbERyYXco
Q2FudmFzMkRMYXllckNocm9taXVtOjpXaWxsRHJhd1VuY29uZGl0aW9uYWxseSk7Ci0gICAgICAg
IG1fY29udGV4dDNELT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgQ2FudmFzMkRMYXllckNocm9taXVtKiBtX3BsYXRmb3JtTGF5ZXI7Ci0gICAgR3JhcGhpY3ND
b250ZXh0M0QqIG1fY29udGV4dDNEOwotfTsKLSNlbmRpZgotCiBzdGF0aWMgU2tDYW52YXMqIGNy
ZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKGNvbnN0IEludFNpemUmIHNpemUsIEltYWdlQnVmZmVyRGF0
YSogZGF0YSwgRGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSkKIHsKICAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQzRCA9IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXQoKTsK
QEAgLTExNCwyMCArOTAsMTEgQEAgc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVBY2NlbGVyYXRlZENh
bnZhcyhjb25zdCBJbnRTaXplJiBzaXplLCBJbWFnZUJ1ZmZlckRhdGEqIGQKICAgICBTa0NhbnZh
cyogY2FudmFzOwogICAgIFNrQXV0b1RVbnJlZjxTa0RldmljZT4gZGV2aWNlKG5ldyBTa0dwdURl
dmljZShnciwgdGV4dHVyZS5nZXQoKSkpOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLSAgICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXIgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNy
ZWF0ZShjb250ZXh0M0QsIHNpemUsIGRlZmVycmFsTW9kZSk7Ci0gICAgaWYgKGRlZmVycmFsTW9k
ZSA9PSBEZWZlcnJlZCkgewotICAgICAgICBTa0F1dG9UVW5yZWY8QWNjZWxlcmF0ZWREZXZpY2VD
b250ZXh0PiBkZXZpY2VDb250ZXh0KG5ldyBBY2NlbGVyYXRlZERldmljZUNvbnRleHQoY29udGV4
dDNELmdldCgpLCBkYXRhLT5tX3BsYXRmb3JtTGF5ZXIuZ2V0KCkpKTsKLSAgICAgICAgY2FudmFz
ID0gbmV3IFNrRGVmZXJyZWRDYW52YXMoZGV2aWNlLmdldCgpLCBkZXZpY2VDb250ZXh0LmdldCgp
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FudmFzID0gbmV3IFNrQ2FudmFzKGRldmljZS5nZXQo
KSk7CisgICAgZGF0YS0+bV9sYXllckJyaWRnZSA9IENhbnZhczJETGF5ZXJCcmlkZ2U6OmNyZWF0
ZShjb250ZXh0M0QucmVsZWFzZSgpLCBzaXplLCBkZWZlcnJhbE1vZGUsIHRleHR1cmUuZ2V0KCkt
PmdldFRleHR1cmVIYW5kbGUoKSwgZGV2aWNlLmdldCgpLCAmY2FudmFzKTsKICNlbHNlCiAgICAg
Y2FudmFzID0gbmV3IFNrQ2FudmFzKGRldmljZS5nZXQoKSk7CiAjZW5kaWYKICAgICBkYXRhLT5t
X3BsYXRmb3JtQ29udGV4dC5zZXRBY2NlbGVyYXRlZCh0cnVlKTsKLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi0gICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyLT5zZXRUZXh0dXJlSWQo
dGV4dHVyZS5nZXQoKS0+Z2V0VGV4dHVyZUhhbmRsZSgpKTsKLSAgICBkYXRhLT5tX3BsYXRmb3Jt
TGF5ZXItPnNldENhbnZhcyhjYW52YXMpOwotI2VuZGlmCiAgICAgcmV0dXJuIGNhbnZhczsKIH0K
IApAQCAtMTc0LDE3ICsxNDEsMTYgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IElu
dFNpemUmIHNpemUsIGZsb2F0IC8qIHJlc29sdXRpb25TY2FsZSAqLywgQ29sb3IKIAogSW1hZ2VC
dWZmZXI6On5JbWFnZUJ1ZmZlcigpCiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIGlmIChtX2RhdGEubV9wbGF0Zm9ybUxheWVyKQotICAgICAgICBtX2RhdGEubV9wbGF0
Zm9ybUxheWVyLT5zZXRUZXh0dXJlSWQoMCk7Ci0jZW5kaWYKIH0KIAogR3JhcGhpY3NDb250ZXh0
KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0CiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotICAgIGlmIChtX2RhdGEubV9wbGF0Zm9ybUxheWVyKQotICAgICAgICBtX2Rh
dGEubV9wbGF0Zm9ybUxheWVyLT5sYXllcldpbGxEcmF3KENhbnZhczJETGF5ZXJDaHJvbWl1bTo6
V2lsbERyYXdJZkxheWVyTm90RGVmZXJyZWQpOworICAgIGlmIChtX2RhdGEubV9sYXllckJyaWRn
ZSkgeworICAgICAgICAvLyBXZSdyZSB1c2luZyBjb250ZXh0IGFjcXVpc2l0aW9uIGFzIGEgc2ln
bmFsIHRoYXQgc29tZW9uZSBpcyBhYm91dCB0byByZW5kZXIgaW50byBvdXIgYnVmZmVyIGFuZCB3
ZSBuZWVkCisgICAgICAgIC8vIHRvIGJlIHJlYWR5LiBUaGlzIGlzbid0IGxvZ2ljYWxseSBjb25z
dC1jb3JyZWN0LCBoZW5jZSB0aGUgY2FzdC4KKyAgICAgICAgY29uc3RfY2FzdDxDYW52YXMyRExh
eWVyQnJpZGdlKj4obV9kYXRhLm1fbGF5ZXJCcmlkZ2UuZ2V0KCkpLT5jb250ZXh0QWNxdWlyZWQo
KTsKKyAgICB9CiAjZW5kaWYKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQpAQCAtMTk2
LDcgKzE2Miw3IEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0CiAKIFBsYXRmb3JtTGF5ZXIqIEltYWdl
QnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLm1fcGxh
dGZvcm1MYXllci5nZXQoKTsKKyAgICByZXR1cm4gbV9kYXRhLm1fbGF5ZXJCcmlkZ2UgPyBtX2Rh
dGEubV9sYXllckJyaWRnZS0+bGF5ZXIoKSA6IDA7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmNs
aXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJD
aHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExh
eWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBiNDI0ODViNzE4ZjA4YTU2OWYwZjEyNmQ0OWNmZjYw
MGI1YmNkNzViLi5mYTBmYjdiMmUwODg3ZWMwMDcyY2I0NzI0YmE4NDRjMmI2MmIxMDY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1
bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXll
ckNocm9taXVtVGVzdC5jcHAKQEAgLTk4LDkgKzk4LDEzIEBAIHB1YmxpYzoKIAogfSAvLyBuYW1l
c3BhY2UKIAorZW51bSBDYW52YXMyRE1vZGUgeworICAgIFNpbmdsZVRocmVhZGVkLCBUaHJlYWRl
ZE5vbkRlZmVycmVkLCBUaHJlYWRlZERlZmVycmVkCit9OworCiBjbGFzcyBDYW52YXMyRExheWVy
Q2hyb21pdW1UZXN0IDogcHVibGljIFRlc3QgewogcHJvdGVjdGVkOgotICAgIHZvaWQgZnVsbExp
ZmVjeWNsZVRlc3QoYm9vbCB0aHJlYWRlZCwgYm9vbCBkZWZlcnJlZCkKKyAgICB2b2lkIGZ1bGxM
aWZlY3ljbGVUZXN0KENhbnZhczJETW9kZSBtb2RlKQogICAgIHsKICAgICAgICAgR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7CiAKQEAgLTExOCw3ICsxMjIsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIGNvbnN0IEludFNpemUgc2l6ZSgzMDAsIDE1MCk7CiAKICAgICAgICAgT3du
UHRyPFdlYlRocmVhZD4gdGhyZWFkOwotICAgICAgICBpZiAodGhyZWFkZWQpCisgICAgICAgIGlm
IChtb2RlICE9IFNpbmdsZVRocmVhZGVkKQogICAgICAgICAgICAgdGhyZWFkID0gYWRvcHRQdHIo
V2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jcmVhdGVUaHJlYWQoIkNhbnZhczJETGF5ZXJD
aHJvbWl1bVRlc3QiKSk7CiAgICAgICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUodGhyZWFk
LmdldCgpKTsKIApAQCAtMTM0LDkgKzEzOCw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIC8v
IFBhaW50IGNhbnZhcyBjb250ZW50cyBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgICAgICAgICBF
WFBFQ1RfQ0FMTChtYWluTW9jaywgZmx1c2goKSk7CiAKLSAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCB0aGUgY2FudmFzIGJhY2tpbmcgdGV4dHVyZSBpcyBkb3VibGVidWZmZXJlZCBvbmx5IHdoZW4g
dXNpbmcgdGhlIHRocmVhZGVkCi0gICAgICAgICAgICAvLyBjb21wb3NpdG9yIGFuZCBub3QgdXNp
bmcgZGVmZXJyZWQgY2FudmFzIHJlbmRlcmluZwotICAgICAgICAgICAgaWYgKHRocmVhZGVkICYm
ICFkZWZlcnJlZCkgeworICAgICAgICAgICAgLy8gVGhyZWFkZWQgYW5kIG5vbiBkZWZlcnJlZCBj
YW52YXNlcyBhcmUgZG91YmxlIGJ1ZmZlcmVkLgorICAgICAgICAgICAgaWYgKG1vZGUgPT0gVGhy
ZWFkZWROb25EZWZlcnJlZCkgewogICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0ZXh0dXJlIGFu
ZCBkbyB0aGUgY29weSAob24gdGhlIGltcGwgdGhyZWFkKS4KICAgICAgICAgICAgICAgICBFWFBF
Q1RfQ0FMTChhbGxvY2F0b3JNb2NrLCBjcmVhdGVUZXh0dXJlKHNpemUsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBKSkKICAgICAgICAgICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybihmcm9udFRl
eHR1cmVJZCkpOwpAQCAtMTQ4LDcgKzE1MSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNhbnZh
cyA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKG1haW5Db250ZXh0LmdldCgpLCBzaXpl
LCBkZWZlcnJlZCA/IERlZmVycmVkIDogTm9uRGVmZXJyZWQpOworICAgICAgICBSZWZQdHI8Q2Fu
dmFzMkRMYXllckNocm9taXVtPiBjYW52YXMgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0
ZShtYWluQ29udGV4dC5nZXQoKSwgc2l6ZSwgbW9kZSA9PSBUaHJlYWRlZE5vbkRlZmVycmVkKTsK
ICAgICAgICAgY2FudmFzLT5zZXRJc0RyYXdhYmxlKHRydWUpOwogICAgICAgICBjYW52YXMtPnNl
dExheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdC5nZXQoKSk7CiAgICAgICAgIGNhbnZhcy0+c2V0
Qm91bmRzKEludFNpemUoNjAwLCAzMDApKTsKQEAgLTE2Nyw3ICsxNzAsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgICAgICB1cGRhdGVyLnVwZGF0ZShpbXBsQ29udGV4dC5nZXQoKSwgJmFsbG9jYXRv
ck1vY2ssICZjb3BpZXJNb2NrLCAmdXBsb2FkZXJNb2NrLCAxKTsKICAgICAgICAgICAgIGNhbnZh
cy0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwogCi0gICAgICAgICAgICBpZiAo
dGhyZWFkZWQgJiYgIWRlZmVycmVkKQorICAgICAgICAgICAgaWYgKG1vZGUgPT0gVGhyZWFkZWRO
b25EZWZlcnJlZCkKICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoZnJvbnRUZXh0dXJlSWQsIHN0
YXRpY19jYXN0PENDVGV4dHVyZUxheWVySW1wbCo+KGxheWVySW1wbC5nZXQoKSktPnRleHR1cmVJ
ZCgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoYmFja1Rl
eHR1cmVJZCwgc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlTGF5ZXJJbXBsKj4obGF5ZXJJbXBsLmdldCgp
KS0+dGV4dHVyZUlkKCkpOwpAQCAtMTgyLDI0ICsxODUsMTkgQEAgcHJvdGVjdGVkOgogCiBuYW1l
c3BhY2UgewogCi1URVNUX0YoQ2FudmFzMkRMYXllckNocm9taXVtVGVzdCwgdGVzdEZ1bGxMaWZl
Y3ljbGVTaW5nbGVUaHJlYWQpCi17Ci0gICAgZnVsbExpZmVjeWNsZVRlc3QoZmFsc2UsIGZhbHNl
KTsKLX0KLQotVEVTVF9GKENhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QsIHRlc3RGdWxsTGlmZWN5
Y2xlVGhyZWFkZWQpCitURVNUX0YoQ2FudmFzMkRMYXllckNocm9taXVtVGVzdCwgdGVzdEZ1bGxM
aWZlY3ljbGVTaW5nbGVUaHJlYWRlZCkKIHsKLSAgICBmdWxsTGlmZWN5Y2xlVGVzdCh0cnVlLCBm
YWxzZSk7CisgICAgZnVsbExpZmVjeWNsZVRlc3QoU2luZ2xlVGhyZWFkZWQpOwogfQogCi1URVNU
X0YoQ2FudmFzMkRMYXllckNocm9taXVtVGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVTaW5nbGVUaHJl
YWREZWZlcnJlZCkKK1RFU1RfRihDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LCB0ZXN0RnVsbExp
ZmVjeWNsZVRocmVhZGVkTm9uRGVmZXJyZWQpCiB7Ci0gICAgZnVsbExpZmVjeWNsZVRlc3QoZmFs
c2UsIHRydWUpOworICAgIGZ1bGxMaWZlY3ljbGVUZXN0KFRocmVhZGVkTm9uRGVmZXJyZWQpOwog
fQogCiBURVNUX0YoQ2FudmFzMkRMYXllckNocm9taXVtVGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVU
aHJlYWRlZERlZmVycmVkKQogewotICAgIGZ1bGxMaWZlY3ljbGVUZXN0KHRydWUsIHRydWUpOwor
ICAgIGZ1bGxMaWZlY3ljbGVUZXN0KFRocmVhZGVkRGVmZXJyZWQpOwogfQogCiB9IC8vIG5hbWVz
cGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141308</attachid>
            <date>2012-05-10 18:37:05 -0700</date>
            <delta_ts>2012-05-15 17:53:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86050-20120510183703.patch</filename>
            <type>text/plain</type>
            <size>51240</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDg0MTNkYjBhYTI4NTMw
NjNkNzcyYzVkODhkOGRkNzNlNWJkNDhjYy4uMzAyMmJlYjU5M2QyMGEzMTNkOTk3MDc3NWI3OThi
OThlYzViNDRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA1LTEwICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBN
b3ZlIGRlZmVycmFsLXJlbGF0ZWQgbG9naWMgb3V0IG9mIENhbnZhczJETGF5ZXJDaHJvbWl1bQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYwNTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHJlbW92
ZXMgQ2FudmFzMkRMYXllckNocm9taXVtIGFuZCBwdXRzIHRoZSBkZWZlcnJhbCBhbmQgZG91Ymxl
LWJ1ZmZlcmluZyByZWxhdGVkIGxvZ2ljIGluIGEgbmV3IGNsYXNzLAorICAgICAgICBDYW52YXMy
RExheWVyQnJpZGdlLCB0aGF0IHVzZXMgVGV4dHVyZUxheWVyQ2hyb21pdW0gZm9yIGNvbXBvc2l0
aW5nLiAgVGhlIGJyaWRnZSBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlCisgICAgICAg
IGZyb250IHRleHR1cmUgd2hlbiBkb3VibGUgYnVmZmVyaW5nIGlzIGFjdGl2ZSwgaW5zZXJ0aW5n
IHRoZSBjb3JyZWN0IG1ha2VDb250ZXh0Q3VycmVudCgpIGFuZCBmbHVzaCgpIGNhbGxzIG9uCisg
ICAgICAgIHRoZSBHcmFwaGljc0NvbnRleHQzRCBhbmQgU2tDYW52YXMgd2hlbiBhcHByb3ByaWF0
ZSwgYW5kIG93bmluZyB0aGUgbGlmZXRpbWUgb2YgdGhlIGxheWVyLgorCisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJCcmlkZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQWNj
ZWxlcmF0ZWREZXZpY2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVkRGV2
aWNlQ29udGV4dDo6QWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dDo6cHJlcGFyZUZvckRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6Q2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjp+Q2FudmFzMkRMYXllckJyaWRnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpza0NhbnZhcyk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpjb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJCcmlkZ2U6OmNvbnRleHRBY3F1aXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoQ2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyQnJpZGdlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmg6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUJ1ZmZlckRhdGFTa2lhLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlQnVm
ZmVyRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxh
eWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZUxheWVyQ2hyb21pdW06
OndpbGxNb2RpZnlUZXh0dXJlKToKKyAgICAgICAgICAgIHdpbGxNb2RpZnlUZXh0dXJlKCkgaXMg
Y2FsbGVkIHdoZW5ldmVyIHRoZSB0ZXh0dXJlIGN1cnJlbnRseSBvd25lZCBieSB0aGUgVGV4dHVy
ZUxheWVyQ2hyb21pdW0gd2lsbCBiZQorICAgICAgICAgICAgbW9kaWZpZWQgYnkgYSBzeXN0ZW0g
b3V0IG9mIHRoZSBjb21wb3NpdG9yJ3MgY29udHJvbC4gSXQgbWFrZXMgc3VyZSB0aGF0IHRoZSBj
b21wb3NpdG9yIGRvZXMgbm90IGF0dGVtcHQgdG8KKyAgICAgICAgICAgIGRyYXcgd2l0aCB0aGUg
cG90ZW50aWFsbHktbW9kaWZpZWQgdGV4dHVyZSB1bnRpbCB0aGUgbmV4dCBjb21taXQuIEZvciBj
YW52YXMsIHRoaXMgaXMgdXNlZCB3aGVuIHRocmVhZGluZyBpcworICAgICAgICAgICAgZW5hYmxl
ZCBhbmQgYSBub24tZGVmZXJyYWJsZSBkcmF3aW5nIGNvbW1hbmQgaXMgaW52b2tlZCBmcm9tIEpT
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGV4dHVyZUxheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFRleHR1cmVMYXllckNocm9taXVt
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRh
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6Omhhc01vcmVVcGRh
dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjpjbGVhcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAoQ0NU
ZXh0dXJlVXBkYXRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1
ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcik6CisKIDIwMTItMDUtMDkgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtDYWlyb10gR0xDb250ZXh0R0xYIHJl
bGVhc2VzIHRoZSBjb250ZXh0IHdpdGggYW4gdW5pbml0aWFsaXplZCBkaXNwbGF5CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDg0ZjkxYmFmMWU4ZGVkMWJjYWQ3M2M4N2JiN2E5ZDc3MmVh
M2I3ZDAuLjU0Y2Y5NTIyNTI0YWMyNTMzNzhlNThkMzA4MTlkNjZlMTU2OWU1NWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDUtMTAgIEphbWVzIFJv
Ymluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUg
ZGVmZXJyYWwtcmVsYXRlZCBsb2dpYyBvdXQgb2YgQ2FudmFzMkRMYXllckNocm9taXVtCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjA1MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6
CisgICAgICAgICogdGVzdHMvQ2FudmFzMkRMYXllckJyaWRnZVRlc3QuY3BwOiBSZW5hbWVkIGZy
b20gdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdAorICAgICAgICAoQ2FudmFzMkRMYXll
ckJyaWRnZVRlc3QpOgorICAgICAgICAoQ2FudmFzMkRMYXllckJyaWRnZVRlc3Q6OmZ1bGxMaWZl
Y3ljbGVUZXN0KToKKwogMjAxMi0wNS0wOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJv
dEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjExNjU3My4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCAyMzU3MDMxZTBkMzA1ZDViMzRkMzVjNTM3MDg5Y2ExOGRlMTY0
Njg4Li5jMzg0NmYxYzgwN2YzNGNkMTg2ZGI4ODdhY2NjYjViYjdjNjc5MDA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC0zNTM0LDEwICszNTM0LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1
bS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXNMYXllckNocm9taXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyQnJpZGdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjVhNDQ1NTc3OTc5YTE2OTgzOTFkMDFmZDI0ZDQx
M2Y5MmJmMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHAKQEAgLTAsMCArMSwxNTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDYW52YXMyRExheWVyQnJp
ZGdlLmgiCisKKyNpbmNsdWRlICJHckNvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIiAvLyBGb3IgR0xDKCkg
bWFjcm8uCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJTa0RlZmVycmVkQ2FudmFz
LmgiCisjaW5jbHVkZSAiVGV4dHVyZUxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ1By
b3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dCA6IHB1YmxpYyBTa0RlZmVy
cmVkQ2FudmFzOjpEZXZpY2VDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBBY2NlbGVyYXRlZERldmlj
ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVMYXllckNocm9taXVt
KiBsYXllciwgYm9vbCB1c2VEb3VibGVCdWZmZXJpbmcpCisgICAgICAgIDogbV9sYXllcihsYXll
cikKKyAgICAgICAgLCBtX2NvbnRleHQoKQorICAgICAgICAsIG1fdXNlRG91YmxlQnVmZmVyaW5n
KHVzZURvdWJsZUJ1ZmZlcmluZykKKyAgICB7CisgICAgICAgIEFTU0VSVChjb250ZXh0KTsKKyAg
ICAgICAgQVNTRVJUKGxheWVyKTsKKyAgICAgICAgbV9jb250ZXh0ID0gY29udGV4dDsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRyYXcoKQorICAgIHsKKyAgICAgICAgaWYg
KCFtX3VzZURvdWJsZUJ1ZmZlcmluZykKKyAgICAgICAgICAgIG1fbGF5ZXItPndpbGxNb2RpZnlU
ZXh0dXJlKCk7CisgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFRleHR1cmVMYXllckNocm9taXVtKiBtX2xheWVyOworICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgYm9vbCBtX3VzZURvdWJsZUJ1ZmZlcmlu
ZzsKK307CisKK0NhbnZhczJETGF5ZXJCcmlkZ2U6OkNhbnZhczJETGF5ZXJCcmlkZ2UoUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRGVm
ZXJyYWxNb2RlIGRlZmVycmFsTW9kZSwgdW5zaWduZWQgdGV4dHVyZUlkKQorICAgIDogbV9kZWZl
cnJhbE1vZGUoZGVmZXJyYWxNb2RlKQorICAgIC8vIEZJWE1FOiBXZSBjdXJyZW50bHkgdHVybiBv
ZmYgZG91YmxlIGJ1ZmZlcmluZyB3aGVuIGNhbnZhcyByZW5kZXJpbmcgaXMKKyAgICAvLyBkZWZl
cnJlZC4gV2hhdCB3ZSBzaG91bGQgYmUgZG9pbmcgaXMgdG8gdXNlIGEgc21hcnRlciBoZXVyaXN0
aWMgYmFzZWQKKyAgICAvLyBvbiBHUFUgcmVzb3VyY2UgbW9uaXRvcmluZyBhbmQgb3RoZXIgZmFj
dG9ycyB0byBjaG9zZSBiZXR3ZWVuIHNpbmdsZQorICAgIC8vIGFuZCBkb3VibGUgYnVmZmVyaW5n
LgorICAgICwgbV91c2VEb3VibGVCdWZmZXJpbmcoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpICYm
IGRlZmVycmFsTW9kZSA9PSBOb25EZWZlcnJlZCkKKyAgICAsIG1fZnJvbnRCdWZmZXJUZXh0dXJl
KDApCisgICAgLCBtX2JhY2tCdWZmZXJUZXh0dXJlKHRleHR1cmVJZCkKKyAgICAsIG1fc2l6ZShz
aXplKQorICAgICwgbV9jYW52YXMoMCkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQoreworICAg
IGlmIChtX3VzZURvdWJsZUJ1ZmZlcmluZykgeworICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2Zyb250QnVmZmVy
VGV4dHVyZSA9IG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpKTsKKyAgICAgICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgbV9mcm9udEJ1ZmZlclRleHR1cmUpKTsKKyAgICAgICAgLy8gRG8gYmFzaWMgbGlu
ZWFyIGZpbHRlcmluZyBvbiByZXNpemUuCisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1f
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TkVBUikpOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAg
Ly8gTlBPVCB0ZXh0dXJlcyBpbiBHTCBFUyBvbmx5IHdvcmsgd2hlbiB0aGUgd3JhcCBtb2RlIGlz
IHNldCB0byBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRS4KKyAgICAgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNz
Q29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCks
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xB
TVBfVE9fRURHRSkpOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRl
eEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkp
OworICAgICAgICBpZiAoR3JDb250ZXh0KiBnckNvbnRleHQgPSBtX2NvbnRleHQtPmdyQ29udGV4
dCgpKQorICAgICAgICAgICAgZ3JDb250ZXh0LT5yZXNldENvbnRleHQoKTsKKyAgICB9CisKKyAg
ICBtX2xheWVyID0gVGV4dHVyZUxheWVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzKTsKKyAgICBtX2xh
eWVyLT5zZXRUZXh0dXJlSWQodGV4dHVyZUlkKTsKKyAgICBtX2xheWVyLT5zZXRSYXRlTGltaXRD
b250ZXh0KCFDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkgfHwgbV91c2VEb3VibGVCdWZmZXJpbmcp
OworfQorCisKK0NhbnZhczJETGF5ZXJCcmlkZ2U6On5DYW52YXMyRExheWVyQnJpZGdlKCkKK3sK
KyAgICBtX2xheWVyLT5zZXRUZXh0dXJlSWQoMCk7CisgICAgaWYgKG1fdXNlRG91YmxlQnVmZmVy
aW5nKSB7CisgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAg
IEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX2Zyb250QnVm
ZmVyVGV4dHVyZSkpOworICAgICAgICBtX2NvbnRleHQtPmZsdXNoKCk7CisgICAgfQorfQorCitT
a0NhbnZhcyogQ2FudmFzMkRMYXllckJyaWRnZTo6c2tDYW52YXMoU2tEZXZpY2UqIGRldmljZSkK
K3sKKyAgICBpZiAobV9kZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpIHsKKyAgICAgICAgU2tBdXRv
VFVucmVmPEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dD4gZGV2aWNlQ29udGV4dChuZXcgQWNjZWxl
cmF0ZWREZXZpY2VDb250ZXh0KG1fY29udGV4dC5nZXQoKSwgbV9sYXllci5nZXQoKSwgbV91c2VE
b3VibGVCdWZmZXJpbmcpKTsKKyAgICAgICAgbV9jYW52YXMgPSBuZXcgU2tEZWZlcnJlZENhbnZh
cyhkZXZpY2UsIGRldmljZUNvbnRleHQuZ2V0KCkpOworICAgIH0gZWxzZQorICAgICAgICBtX2Nh
bnZhcyA9IG5ldyBTa0NhbnZhcyhkZXZpY2UpOworCisgICAgcmV0dXJuIG1fY2FudmFzOworfQor
CisKK3Vuc2lnbmVkIENhbnZhczJETGF5ZXJCcmlkZ2U6OnByZXBhcmVUZXh0dXJlKENDVGV4dHVy
ZVVwZGF0ZXImIHVwZGF0ZXIpCit7CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKworICAgIGlmIChtX2NhbnZhcykgeworICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNh
bnZhczJETGF5ZXJCcmlkZ2U6OlNrQ2FudmFzOjpmbHVzaCIpOworICAgICAgICBtX2NhbnZhcy0+
Zmx1c2goKTsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7CisKKyAgICBpZiAobV91
c2VEb3VibGVCdWZmZXJpbmcpIHsKKyAgICAgICAgdXBkYXRlci5hcHBlbmRDb3B5KG1fYmFja0J1
ZmZlclRleHR1cmUsIG1fZnJvbnRCdWZmZXJUZXh0dXJlLCBtX3NpemUpOworICAgICAgICByZXR1
cm4gbV9mcm9udEJ1ZmZlclRleHR1cmU7CisgICAgfQorCisgICAgcmV0dXJuIG1fYmFja0J1ZmZl
clRleHR1cmU7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEKiBDYW52YXMyRExheWVyQnJpZGdlOjpj
b250ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworfQorCitMYXllckNocm9t
aXVtKiBDYW52YXMyRExheWVyQnJpZGdlOjpsYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bGF5ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6Y29udGV4dEFjcXVp
cmVkKCkKK3sKKyAgICBpZiAobV9kZWZlcnJhbE1vZGUgPT0gTm9uRGVmZXJyZWQgJiYgIW1fdXNl
RG91YmxlQnVmZmVyaW5nKQorICAgICAgICBtX2xheWVyLT53aWxsTW9kaWZ5VGV4dHVyZSgpOwor
fQorCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YmE1OTMx
ZTQyOTVkMzkwMWQ5YmUwOGQ3NjE1NGI2ZDQ1MjVhMDdmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRn
ZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhbnZhczJETGF5ZXJCcmlkZ2Vf
aAorI2RlZmluZSBDYW52YXMyRExheWVyQnJpZGdlX2gKKworI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiIC8vIEZvciBEZWZlcnJhbE1vZGUgZW51bS4KKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5j
bHVkZSAiVGV4dHVyZUxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworY2xhc3MgU2tDYW52YXM7CitjbGFzcyBTa0Rl
dmljZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMYXllckNocm9taXVtOworY2xh
c3MgVGV4dHVyZUxheWVyQ2hyb21pdW07CisKK2NsYXNzIENhbnZhczJETGF5ZXJCcmlkZ2UgOiBw
dWJsaWMgVGV4dHVyZUxheWVyQ2hyb21pdW1DbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENhbnZhczJETGF5ZXJCcmlkZ2UpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PENhbnZhczJETGF5ZXJCcmlkZ2U+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2Rl
LCB1bnNpZ25lZCB0ZXh0dXJlSWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENhbnZhczJETGF5ZXJCcmlkZ2UoY29udGV4dCwgc2l6ZSwgZGVmZXJyYWxNb2RlLCB0ZXh0dXJl
SWQpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DYW52YXMyRExheWVyQnJpZGdlKCk7CisKKyAg
ICAvLyBUZXh0dXJlTGF5ZXJDaHJvbWl1bUNsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIHByZXBhcmVUZXh0dXJlKENDVGV4dHVyZVVwZGF0ZXImKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgT1ZFUlJJREU7CisKKyAg
ICBTa0NhbnZhcyogc2tDYW52YXMoU2tEZXZpY2UqKTsKKyAgICBMYXllckNocm9taXVtKiBsYXll
cigpIGNvbnN0OworICAgIHZvaWQgY29udGV4dEFjcXVpcmVkKCk7CisKK3ByaXZhdGU6CisgICAg
Q2FudmFzMkRMYXllckJyaWRnZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgY29uc3Qg
SW50U2l6ZSYsIERlZmVycmFsTW9kZSwgdW5zaWduZWQgdGV4dHVyZUlkKTsKKworICAgIERlZmVy
cmFsTW9kZSBtX2RlZmVycmFsTW9kZTsKKyAgICBib29sIG1fdXNlRG91YmxlQnVmZmVyaW5nOwor
ICAgIHVuc2lnbmVkIG1fZnJvbnRCdWZmZXJUZXh0dXJlOworICAgIHVuc2lnbmVkIG1fYmFja0J1
ZmZlclRleHR1cmU7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgU2tDYW52YXMqIG1fY2FudmFz
OworICAgIFJlZlB0cjxUZXh0dXJlTGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsKKyAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYTQ3OTI5N2I3YjZiOTI1MDg5Njk1OTk2OGVhMzM0YzdhMDQ5NzhkMi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIK
LQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIgLy8gRm9yIHRo
ZSBHTEMoKSBtYWNybwotI2luY2x1ZGUgIlRleHR1cmVDb3BpZXIuaCIKLSNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJjYy9DQ1RleHR1cmVMYXllckltcGwuaCIKLSNp
bmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCi0KLSNpbmNsdWRlICJTa0NhbnZhcy5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVt
PiBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxN
b2RlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzMkRMYXllckNocm9taXVtKGNv
bnRleHQsIHNpemUsIGRlZmVycmFsTW9kZSkpOwotfQotCi1DYW52YXMyRExheWVyQ2hyb21pdW06
OkNhbnZhczJETGF5ZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlKQotICAg
IDogQ2FudmFzTGF5ZXJDaHJvbWl1bSgpCi0gICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICAs
IG1fY29udGV4dExvc3QoZmFsc2UpCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fYmFja1Rl
eHR1cmVJZCgwKQotICAgICwgbV9jYW52YXMoMCkKLSAgICAsIG1fZGVmZXJyYWxNb2RlKGRlZmVy
cmFsTW9kZSkKLXsKLSAgICAvLyBGSVhNRTogV2UgY3VycmVudGx5IHR1cm4gb2ZmIGRvdWJsZSBi
dWZmZXJpbmcgd2hlbiBjYW52YXMgcmVuZGVyaW5nIGlzCi0gICAgLy8gZGVmZXJyZWQuIFdoYXQg
d2Ugc2hvdWxkIGJlIGRvaW5nIGlzIHRvIHVzZSBhIHNtYXJ0ZXIgaGV1cmlzdGljIGJhc2VkCi0g
ICAgLy8gb24gR1BVIHJlc291cmNlIG1vbml0b3JpbmcgYW5kIG90aGVyIGZhY3RvcnMgdG8gY2hv
c2UgYmV0d2VlbiBzaW5nbGUKLSAgICAvLyBhbmQgZG91YmxlIGJ1ZmZlcmluZy4KLSAgICBtX3Vz
ZURvdWJsZUJ1ZmZlcmluZyA9IENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSAmJiBkZWZlcnJhbE1v
ZGUgPT0gTm9uRGVmZXJyZWQ7Ci0KLSAgICAvLyBUaGUgdGhyZWFkZWQgY29tcG9zaXRvciBpcyBz
ZWxmIHJhdGUtbGltaXRpbmcgd2hlbiByZW5kZXJpbmcKLSAgICAvLyB0byBhIHNpbmdsZSBidWZm
ZXJlZCBjYW52YXMgbGF5ZXIuCi0gICAgbV91c2VSYXRlTGltaXRlciA9ICFDQ1Byb3h5OjpoYXNJ
bXBsVGhyZWFkKCkgfHwgbV91c2VEb3VibGVCdWZmZXJpbmc7Ci19Ci0KLUNhbnZhczJETGF5ZXJD
aHJvbWl1bTo6fkNhbnZhczJETGF5ZXJDaHJvbWl1bSgpCi17Ci0gICAgc2V0VGV4dHVyZUlkKDAp
OwotICAgIGlmIChtX2NvbnRleHQgJiYgbV91c2VSYXRlTGltaXRlciAmJiBsYXllclRyZWVIb3N0
KCkpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RvcFJhdGVMaW1pdGVyKG1fY29udGV4dC5n
ZXQoKSk7Ci19Ci0KLWJvb2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpkcmF3aW5nSW50b0ltcGxU
aHJlYWRUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1fdXNlRG91YmxlQnVmZmVyaW5n
ICYmIENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSAmJiBsYXllclRyZWVIb3N0KCk7Ci19Ci0KLXZv
aWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlk
KQotewotICAgIGlmIChtX2JhY2tUZXh0dXJlSWQgPT0gdGV4dHVyZUlkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9iYWNrVGV4dHVyZUlkICYmIGRyYXdpbmdJbnRvSW1wbFRocmVhZFRl
eHR1cmUoKSkgewotICAgICAgICAvLyBUaGUgaW1wbCB0cmVlIG1heSBiZSByZWZlcmVuY2luZyB0
aGUgb2xkIG1fYmFja1RleHR1cmUsIHdoaWNoIG1heQotICAgICAgICAvLyBzb29uIGJlIGRlbGV0
ZWQuIFdlIG11c3QgbWFrZSBzdXJlIHRoZSBsYXllciB0cmVlIG9uIHRoZSBpbXBsIHRocmVhZAot
ICAgICAgICAvLyBpcyBub3QgZHJhd24gdW50aWwgdGhlIG5leHQgY29tbWl0LCB3aGljaCB3aWxs
IHJlLXN5bmNocm9uaXplIHRoZQotICAgICAgICAvLyBsYXllciB0cmVlcy4KLSAgICAgICAgbGF5
ZXJUcmVlSG9zdCgpLT5hY3F1aXJlTGF5ZXJUZXh0dXJlcygpOwotICAgIH0KLSAgICBtX2JhY2tU
ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKLX0KLQotdm9pZCBD
YW52YXMyRExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheVJlY3QoY29uc3QgRmxvYXRSZWN0
JiBkaXJ0eVJlY3QpCi17Ci0gICAgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5UmVjdChk
aXJ0eVJlY3QpOwotCi0gICAgaWYgKG1fdXNlUmF0ZUxpbWl0ZXIgJiYgbGF5ZXJUcmVlSG9zdCgp
KQotICAgICAgICBsYXllclRyZWVIb3N0KCktPnN0YXJ0UmF0ZUxpbWl0ZXIobV9jb250ZXh0Lmdl
dCgpKTsKLX0KLQotYm9vbCBDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpICYmIG1fYmFj
a1RleHR1cmVJZCAmJiAhbV9zaXplLmlzRW1wdHkoKQotICAgICAgICAmJiAhbV9jb250ZXh0TG9z
dDsKLX0KLQotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnNldENhbnZhcyhTa0NhbnZhcyog
Y2FudmFzKQotewotICAgIG1fY2FudmFzID0gY2FudmFzOwotfQotCi12b2lkIENhbnZhczJETGF5
ZXJDaHJvbWl1bTo6dXBkYXRlKENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIsIGNvbnN0IENDT2Nj
bHVzaW9uVHJhY2tlciopCi17Ci0gICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDYW52YXMyRExheWVy
Q2hyb21pdW06OnVwZGF0ZSIpOwotICAgIGlmICghZHJhd3NDb250ZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX3VzZURvdWJsZUJ1ZmZlcmluZyAmJiBsYXllclRyZWVIb3N0KCkp
IHsKLSAgICAgICAgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyID0gbGF5ZXJUcmVlSG9z
dCgpLT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCk7Ci0gICAgICAgIGlmIChtX2Zyb250VGV4dHVy
ZSkKLSAgICAgICAgICAgIG1fZnJvbnRUZXh0dXJlLT5zZXRUZXh0dXJlTWFuYWdlcih0ZXh0dXJl
TWFuYWdlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZnJvbnRUZXh0dXJlID0gTWFu
YWdlZFRleHR1cmU6OmNyZWF0ZSh0ZXh0dXJlTWFuYWdlcik7Ci0gICAgICAgIGlmIChtX2Zyb250
VGV4dHVyZS0+cmVzZXJ2ZShtX3NpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKLSAgICAg
ICAgICAgIHVwZGF0ZXIuYXBwZW5kTWFuYWdlZENvcHkobV9iYWNrVGV4dHVyZUlkLCBtX2Zyb250
VGV4dHVyZS5nZXQoKSwgbV9zaXplKTsKLSAgICB9Ci0KLSAgICBpZiAoIW5lZWRzRGlzcGxheSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwotCi0gICAg
Ym9vbCBzdWNjZXNzID0gbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NF
UlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgbV9jb250ZXh0TG9zdCA9IG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotICAgIGlmIChtX2NvbnRleHRMb3N0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9jYW52YXMpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJj
YyIsICJTa0NhbnZhczo6Zmx1c2giKTsKLSAgICAgICAgbV9jYW52YXMtPmZsdXNoKCk7Ci0gICAg
fQotCi0gICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2giKTsK
LSAgICBtX2NvbnRleHQtPmZsdXNoKCk7Ci19Ci0KLXZvaWQgQ2FudmFzMkRMYXllckNocm9taXVt
OjpsYXllcldpbGxEcmF3KFdpbGxEcmF3Q29uZGl0aW9uIGNvbmRpdGlvbikgY29uc3QKLXsKLSAg
ICBpZiAoZHJhd2luZ0ludG9JbXBsVGhyZWFkVGV4dHVyZSgpKSB7Ci0gICAgICAgIGlmIChjb25k
aXRpb24gPT0gV2lsbERyYXdVbmNvbmRpdGlvbmFsbHkgfHwgbV9kZWZlcnJhbE1vZGUgPT0gTm9u
RGVmZXJyZWQpCi0gICAgICAgICAgICBsYXllclRyZWVIb3N0KCktPmFjcXVpcmVMYXllclRleHR1
cmVzKCk7Ci0gICAgfQotfQotCi0KLXZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpwdXNoUHJv
cGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKLXsKLSAgICBDYW52YXNMYXllckNocm9taXVt
OjpwdXNoUHJvcGVydGllc1RvKGxheWVyKTsKLQotICAgIENDVGV4dHVyZUxheWVySW1wbCogdGV4
dHVyZUxheWVyID0gc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlTGF5ZXJJbXBsKj4obGF5ZXIpOwotICAg
IGlmIChtX3VzZURvdWJsZUJ1ZmZlcmluZykgewotICAgICAgICBpZiAobV9mcm9udFRleHR1cmUg
JiYgbV9mcm9udFRleHR1cmUtPmlzVmFsaWQobV9zaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSkpCi0gICAgICAgICAgICB0ZXh0dXJlTGF5ZXItPnNldFRleHR1cmVJZChtX2Zyb250VGV4dHVy
ZS0+dGV4dHVyZUlkKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0ZXh0dXJlTGF5ZXIt
PnNldFRleHR1cmVJZCgwKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdGV4dHVyZUxheWVyLT5zZXRU
ZXh0dXJlSWQobV9iYWNrVGV4dHVyZUlkKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQzYzY4NjVhZjRhZmRjMTJlMzY0NjllZWZlY2Nl
OGU5NjMyNmI2OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
Q2hyb21pdW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5kZWYgQ2FudmFz
MkRMYXllckNocm9taXVtX2gKLSNkZWZpbmUgQ2FudmFzMkRMYXllckNocm9taXVtX2gKLQotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hy
b21pdW0uaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIk1hbmFnZWRUZXh0
dXJlLmgiCi0KLWNsYXNzIFNrQ2FudmFzOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgUmVnaW9uOwotCi0vLyBBIGxheWVyIGNvbnRhaW5p
bmcgYW4gYWNjZWxlcmF0ZWQgMmQgY2FudmFzCi1jbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW0g
OiBwdWJsaWMgQ2FudmFzTGF5ZXJDaHJvbWl1bSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBXaWxsRHJh
d0NvbmRpdGlvbiB7Ci0gICAgICAgIFdpbGxEcmF3VW5jb25kaXRpb25hbGx5LAotICAgICAgICBX
aWxsRHJhd0lmTGF5ZXJOb3REZWZlcnJlZCwKLSAgICB9OwotCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4sIGNvbnN0IEludFNpemUmLCBEZWZlcnJhbE1vZGUpOwotICAgIHZpcnR1YWwgfkNhbnZh
czJETGF5ZXJDaHJvbWl1bSgpOwotCi0gICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQpOwot
Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheVJlY3QoY29uc3QgRmxvYXRSZWN0Jikg
T1ZFUlJJREU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShDQ1RleHR1cmVVcGRhdGVyJiwgY29uc3QgQ0NP
Y2NsdXNpb25UcmFja2VyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0
aWVzVG8oQ0NMYXllckltcGwqKSBPVkVSUklERTsKLQotICAgIHZvaWQgc2V0Q2FudmFzKFNrQ2Fu
dmFzKik7Ci0gICAgdm9pZCBsYXllcldpbGxEcmF3KFdpbGxEcmF3Q29uZGl0aW9uKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBDYW52YXMyRExheWVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4sIGNvbnN0IEludFNpemUmLCBEZWZlcnJhbE1vZGUpOwotICAgIGJvb2wgZHJh
d2luZ0ludG9JbXBsVGhyZWFkVGV4dHVyZSgpIGNvbnN0OwotCi0gICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBtX2NvbnRleHQ7Ci0gICAgYm9vbCBtX2NvbnRleHRMb3N0OwotICAgIEludFNp
emUgbV9zaXplOwotICAgIHVuc2lnbmVkIG1fYmFja1RleHR1cmVJZDsKLSAgICAvLyBXaGVuIG1f
dXNlRG91YmxlQnVmZmVyaW5nIGlzIHRydWUsIHRoZSBjb21wb3NpdG9yIHdpbGwgZHJhdyB1c2lu
ZyBhIGNvcHkgb2YgdGhlCi0gICAgLy8gY2FudmFzJyBiYWNraW5nIHRleHR1cmUuIFRoaXMgb3B0
aW9uIHNob3VsZCBiZSB1c2VkIHdpdGggdGhlIGNvbXBvc2l0b3IgZG9lc24ndAotICAgIC8vIHN5
bmNocm9uaXplIGl0cyBkcmF3cyB3aXRoIHRoZSBjYW52YXMgdXBkYXRlcy4KLSAgICBib29sIG1f
dXNlRG91YmxlQnVmZmVyaW5nOwotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9mcm9udFRl
eHR1cmU7Ci0gICAgU2tDYW52YXMqIG1fY2FudmFzOwotICAgIGJvb2wgbV91c2VSYXRlTGltaXRl
cjsKLSAgICBEZWZlcnJhbE1vZGUgbV9kZWZlcnJhbE1vZGU7Ci19OwotCi19Ci0jZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDllZjMxYjI1YmMzZmMxNjBiYmRjMDk2OTJiNzI5NWQz
ZDk2OTA0ZDAuLmI4NzQzNGIzNmYyYzNiODI4NmM4YWY2ZGI2ZTQ2ODM4OTljZTQwYTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNDYsNyArNDYsNiBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiQW5pbWF0aW9uSWRW
ZW5kb3IuaCIKLSNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJD
b250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oCmluZGV4IGM5
MDkzMDRjZTVlNWJjNDA3ZWE1MGM2ZDNiYTJkNmUwOGViNTJkYmUuLjZkNDljNTU3ODdmOGQ2MGQ2
ZjBiZGI0ZjYxODlmYzRiMDhhYWFiNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmgK
QEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKLWNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bTsKK2NsYXNzIENh
bnZhczJETGF5ZXJCcmlkZ2U7CiAjZW5kaWYKIAogY2xhc3MgSW1hZ2VCdWZmZXJEYXRhIHsKQEAg
LTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIE93blB0cjxTa0NhbnZhcz4gbV9jYW52YXM7CiAg
ICAgUGxhdGZvcm1Db250ZXh0U2tpYSBtX3BsYXRmb3JtQ29udGV4dDsKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0gICAgUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gbV9w
bGF0Zm9ybUxheWVyOworICAgIE93blB0cjxDYW52YXMyRExheWVyQnJpZGdlPiBtX2xheWVyQnJp
ZGdlOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggYjBhMWVjNGM2NTNiZjY1NzNlMTU1YzRjMjI0Y2EzYzVlMjY1YThiNi4uZDU4MGYxMDUxYTQ4
ZTk5YWU2MTFhYTQyYTBkYzIxNTI0ZjhhNjk3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVMYXllckNo
cm9taXVtLmNwcApAQCAtOTUsNiArOTUsMTIgQEAgdm9pZCBUZXh0dXJlTGF5ZXJDaHJvbWl1bTo6
c2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKQogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKK3Zv
aWQgVGV4dHVyZUxheWVyQ2hyb21pdW06OndpbGxNb2RpZnlUZXh0dXJlKCkKK3sKKyAgICBpZiAo
bGF5ZXJUcmVlSG9zdCgpKQorICAgICAgICBsYXllclRyZWVIb3N0KCktPmFjcXVpcmVMYXllclRl
eHR1cmVzKCk7Cit9CisKIHZvaWQgVGV4dHVyZUxheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxh
eVJlY3QoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgTGF5ZXJDaHJvbWl1bTo6
c2V0TmVlZHNEaXNwbGF5UmVjdChkaXJ0eVJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxheWVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVMYXllckNocm9t
aXVtLmgKaW5kZXggYTMwNjAxMmYwYWViNzcwMmNhMzgyMjM5ZGExYzVhOTU0M2MwODcyYS4uOGU1
ZTJkMzY4MTA4NGYxZjk5Y2I3OTc5NTFhOTBlNjA5YzhmNTMxNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJl
TGF5ZXJDaHJvbWl1bS5oCkBAIC03Nyw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICAvLyBDb2RlIHBh
dGggZm9yIHBsdWdpbnMgd2hpY2ggc3VwcGx5IHRoZWlyIG93biB0ZXh0dXJlIElELgogICAgIHZv
aWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkKTsKIAorICAgIHZvaWQgd2lsbE1vZGlmeVRleHR1cmUo
KTsKKwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IE9W
RVJSSURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAppbmRleCBhYjU2ZDFmMzc3
YTJjNmY4Y2U1YjcyM2NjZDY1MWFhZWUxNGJlOWExLi40ZmQ0MDJmOGIyYjMzZjlkMzRkY2U2MGMy
NDk2Y2MyZTQ3ZDAxZjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcApAQCAt
MzEsNyArMzEsNiBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRl
ICJMYXllclRleHR1cmVVcGRhdGVyLmgiCi0jaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNp
bmNsdWRlICJUZXh0dXJlQ29waWVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZVVwbG9hZGVyLmgiCiAK
QEAgLTc4LDE4ICs3Nyw5IEBAIHZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kQ29weSh1bnNp
Z25lZCBzb3VyY2VUZXh0dXJlLCB1bnNpZ25lZCBkZXN0VGV4dHVyZSwKICAgICBtX2NvcHlFbnRy
aWVzLmFwcGVuZChjb3B5KTsKIH0KIAotdm9pZCBDQ1RleHR1cmVVcGRhdGVyOjphcHBlbmRNYW5h
Z2VkQ29weSh1bnNpZ25lZCBzb3VyY2VUZXh0dXJlLCBNYW5hZ2VkVGV4dHVyZSogZGVzdFRleHR1
cmUsIGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgTWFuYWdlZENvcHlFbnRyeSBjb3B5Owot
ICAgIGNvcHkuc291cmNlVGV4dHVyZSA9IHNvdXJjZVRleHR1cmU7Ci0gICAgY29weS5kZXN0VGV4
dHVyZSA9IGRlc3RUZXh0dXJlOwotICAgIGNvcHkuc2l6ZSA9IHNpemU7Ci0gICAgbV9tYW5hZ2Vk
Q29weUVudHJpZXMuYXBwZW5kKGNvcHkpOwotfQotCiBib29sIENDVGV4dHVyZVVwZGF0ZXI6Omhh
c01vcmVVcGRhdGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9lbnRyaWVzLnNpemUoKSB8fCBt
X3BhcnRpYWxFbnRyaWVzLnNpemUoKSB8fCBtX2NvcHlFbnRyaWVzLnNpemUoKSB8fCBtX21hbmFn
ZWRDb3B5RW50cmllcy5zaXplKCk7CisgICAgcmV0dXJuIG1fZW50cmllcy5zaXplKCkgfHwgbV9w
YXJ0aWFsRW50cmllcy5zaXplKCkgfHwgbV9jb3B5RW50cmllcy5zaXplKCk7CiB9CiAKIHZvaWQg
Q0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0
dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIFRleHR1cmVDb3BpZXIqIGNvcGllciwgVGV4dHVyZVVw
bG9hZGVyKiB1cGxvYWRlciwgc2l6ZV90IGNvdW50KQpAQCAtMTM0LDE1ICsxMjQsMTEgQEAgdm9p
ZCBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRl
eHR1cmVBbGxvY2F0b3IqIGFsbG8KICAgICAgICAgQ29weUVudHJ5JiBjb3B5RW50cnkgPSBtX2Nv
cHlFbnRyaWVzW2luZGV4XTsKICAgICAgICAgY29waWVyLT5jb3B5VGV4dHVyZShjb250ZXh0LCBj
b3B5RW50cnkuc291cmNlVGV4dHVyZSwgY29weUVudHJ5LmRlc3RUZXh0dXJlLCBjb3B5RW50cnku
c2l6ZSk7CiAgICAgfQotICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1fbWFuYWdlZENvcHlF
bnRyaWVzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBNYW5hZ2VkQ29weUVudHJ5JiBtYW5h
Z2VkQ29weUVudHJ5ID0gbV9tYW5hZ2VkQ29weUVudHJpZXNbaW5kZXhdOwotICAgICAgICBtYW5h
Z2VkQ29weUVudHJ5LmRlc3RUZXh0dXJlLT5hbGxvY2F0ZShhbGxvY2F0b3IpOwotICAgICAgICBj
b3BpZXItPmNvcHlUZXh0dXJlKGNvbnRleHQsIG1hbmFnZWRDb3B5RW50cnkuc291cmNlVGV4dHVy
ZSwgbWFuYWdlZENvcHlFbnRyeS5kZXN0VGV4dHVyZS0+dGV4dHVyZUlkKCksIG1hbmFnZWRDb3B5
RW50cnkuc2l6ZSk7Ci0gICAgfQorCiAgICAgLy8gSWYgd2UndmUgcGVyZm9ybWVkIGFueSB0ZXh0
dXJlIGNvcGllcywgd2UgbmVlZCB0byBpbnNlcnQgYSBmbHVzaCBoZXJlIGludG8gdGhlIGNvbXBv
c2l0b3IgY29udGV4dAogICAgIC8vIGJlZm9yZSBsZXR0aW5nIHRoZSBtYWluIHRocmVhZCBwcm9j
ZWVkIGFzIGl0IG1heSBtYWtlIGRyYXcgY2FsbHMgdG8gdGhlIHNvdXJjZSB0ZXh0dXJlIG9mIG9u
ZSBvZgogICAgIC8vIG91ciBjb3B5IG9wZXJhdGlvbnMuCi0gICAgaWYgKG1fY29weUVudHJpZXMu
c2l6ZSgpIHx8IG1fbWFuYWdlZENvcHlFbnRyaWVzLnNpemUoKSkKKyAgICBpZiAobV9jb3B5RW50
cmllcy5zaXplKCkpCiAgICAgICAgIGNvbnRleHQtPmZsdXNoKCk7CiAKICAgICAvLyBJZiBubyBl
bnRyaWVzIGxlZnQgdG8gcHJvY2VzcywgYXV0by1jbGVhci4KQEAgLTE1NSw3ICsxNDEsNiBAQCB2
b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmNsZWFyKCkKICAgICBtX2VudHJpZXMuY2xlYXIoKTsKICAg
ICBtX3BhcnRpYWxFbnRyaWVzLmNsZWFyKCk7CiAgICAgbV9jb3B5RW50cmllcy5jbGVhcigpOwot
ICAgIG1fbWFuYWdlZENvcHlFbnRyaWVzLmNsZWFyKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4
dHVyZVVwZGF0ZXIuaAppbmRleCAyNGQ4OTZmMmI1OTEyMDkwMDQxYTQzM2YxNjY1MWQ2MjNjMGRi
NjJmLi4zZjNhOTRkZDk5ZmIwMGRlODc5ZWQ4YjgyNzZkYzJhYTU3NGQwMTAwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVV
cGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUZXh0dXJlVXBkYXRlci5oCkBAIC00NSw3ICs0NSw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFwcGVuZFVwZGF0ZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwogICAgIHZvaWQgYXBwZW5k
UGFydGlhbFVwZGF0ZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwogICAgIHZvaWQgYXBwZW5k
Q29weSh1bnNpZ25lZCBzb3VyY2VUZXh0dXJlLCB1bnNpZ25lZCBkZXN0VGV4dHVyZSwgY29uc3Qg
SW50U2l6ZSYpOwotICAgIHZvaWQgYXBwZW5kTWFuYWdlZENvcHkodW5zaWduZWQgc291cmNlVGV4
dHVyZSwgTWFuYWdlZFRleHR1cmUqIGRlc3RUZXh0dXJlLCBjb25zdCBJbnRTaXplJik7CiAKICAg
ICBib29sIGhhc01vcmVVcGRhdGVzKCkgY29uc3Q7CiAKQEAgLTY3LDE5ICs2NiwxMiBAQCBwcml2
YXRlOgogICAgICAgICB1bnNpZ25lZCBkZXN0VGV4dHVyZTsKICAgICB9OwogCi0gICAgc3RydWN0
IE1hbmFnZWRDb3B5RW50cnkgewotICAgICAgICBJbnRTaXplIHNpemU7Ci0gICAgICAgIHVuc2ln
bmVkIHNvdXJjZVRleHR1cmU7Ci0gICAgICAgIE1hbmFnZWRUZXh0dXJlKiBkZXN0VGV4dHVyZTsK
LSAgICB9OwotCiAgICAgc3RhdGljIHZvaWQgYXBwZW5kVXBkYXRlKExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCwgVmVjdG9yPFVwZGF0ZUVudHJ5PiYpOwogCiAgICAgc2l6ZV90IG1fZW50cnlJbmRl
eDsKICAgICBWZWN0b3I8VXBkYXRlRW50cnk+IG1fZW50cmllczsKICAgICBWZWN0b3I8VXBkYXRl
RW50cnk+IG1fcGFydGlhbEVudHJpZXM7CiAgICAgVmVjdG9yPENvcHlFbnRyeT4gbV9jb3B5RW50
cmllczsKLSAgICBWZWN0b3I8TWFuYWdlZENvcHlFbnRyeT4gbV9tYW5hZ2VkQ29weUVudHJpZXM7
CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKaW5kZXggOGIwODZhMDc5OGI2NDZmODA1ZjEwYTM0
MTA0NTk0NzNlM2FkZGJjZC4uMjJjM2NmZmFkYWM4MmMxODFlZTE2MGE5NzFjOGE0NTkxZDRiN2My
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZUJ1ZmZlclNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VCdWZmZXJTa2lhLmNwcApAQCAtNTEsNyArNTEsNyBAQAogI2luY2x1ZGUgIldFQlBJ
bWFnZUVuY29kZXIuaCIKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNpbmNs
dWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJDYW52YXMyRExheWVyQnJp
ZGdlLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjks
MzAgKzY5LDYgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKIHsKIH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLWNsYXNz
IEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dCA6IHB1YmxpYyBTa0RlZmVycmVkQ2FudmFzOjpEZXZp
Y2VDb250ZXh0IHsKLXB1YmxpYzoKLSAgICBBY2NlbGVyYXRlZERldmljZUNvbnRleHQoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQzRCwgQ2FudmFzMkRMYXllckNocm9taXVtKiBsYXllcikKLSAg
ICAgICAgOiBtX3BsYXRmb3JtTGF5ZXIobGF5ZXIpCi0gICAgICAgICwgbV9jb250ZXh0M0QoKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGNvbnRleHQzRCk7Ci0gICAgICAgIEFTU0VSVChsYXllcik7
Ci0gICAgICAgIG1fY29udGV4dDNEID0gY29udGV4dDNEOwotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlRm9yRHJhdygpCi0gICAgewotICAgICAgICBtX3BsYXRmb3JtTGF5ZXItPmxh
eWVyV2lsbERyYXcoQ2FudmFzMkRMYXllckNocm9taXVtOjpXaWxsRHJhd1VuY29uZGl0aW9uYWxs
eSk7Ci0gICAgICAgIG1fY29udGV4dDNELT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgQ2FudmFzMkRMYXllckNocm9taXVtKiBtX3BsYXRmb3JtTGF5ZXI7Ci0g
ICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDNEOwotfTsKLSNlbmRpZgotCiBzdGF0aWMg
U2tDYW52YXMqIGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKGNvbnN0IEludFNpemUmIHNpemUsIElt
YWdlQnVmZmVyRGF0YSogZGF0YSwgRGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSkKIHsKICAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQzRCA9IFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEOjpnZXQoKTsKQEAgLTExNCwyMCArOTAsMTIgQEAgc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVB
Y2NlbGVyYXRlZENhbnZhcyhjb25zdCBJbnRTaXplJiBzaXplLCBJbWFnZUJ1ZmZlckRhdGEqIGQK
ICAgICBTa0NhbnZhcyogY2FudmFzOwogICAgIFNrQXV0b1RVbnJlZjxTa0RldmljZT4gZGV2aWNl
KG5ldyBTa0dwdURldmljZShnciwgdGV4dHVyZS5nZXQoKSkpOwogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLSAgICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXIgPSBDYW52YXMyRExheWVy
Q2hyb21pdW06OmNyZWF0ZShjb250ZXh0M0QsIHNpemUsIGRlZmVycmFsTW9kZSk7Ci0gICAgaWYg
KGRlZmVycmFsTW9kZSA9PSBEZWZlcnJlZCkgewotICAgICAgICBTa0F1dG9UVW5yZWY8QWNjZWxl
cmF0ZWREZXZpY2VDb250ZXh0PiBkZXZpY2VDb250ZXh0KG5ldyBBY2NlbGVyYXRlZERldmljZUNv
bnRleHQoY29udGV4dDNELmdldCgpLCBkYXRhLT5tX3BsYXRmb3JtTGF5ZXIuZ2V0KCkpKTsKLSAg
ICAgICAgY2FudmFzID0gbmV3IFNrRGVmZXJyZWRDYW52YXMoZGV2aWNlLmdldCgpLCBkZXZpY2VD
b250ZXh0LmdldCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FudmFzID0gbmV3IFNrQ2FudmFz
KGRldmljZS5nZXQoKSk7CisgICAgZGF0YS0+bV9sYXllckJyaWRnZSA9IENhbnZhczJETGF5ZXJC
cmlkZ2U6OmNyZWF0ZShjb250ZXh0M0QucmVsZWFzZSgpLCBzaXplLCBkZWZlcnJhbE1vZGUsIHRl
eHR1cmUuZ2V0KCktPmdldFRleHR1cmVIYW5kbGUoKSk7CisgICAgY2FudmFzID0gZGF0YS0+bV9s
YXllckJyaWRnZS0+c2tDYW52YXMoZGV2aWNlLmdldCgpKTsKICNlbHNlCiAgICAgY2FudmFzID0g
bmV3IFNrQ2FudmFzKGRldmljZS5nZXQoKSk7CiAjZW5kaWYKICAgICBkYXRhLT5tX3BsYXRmb3Jt
Q29udGV4dC5zZXRBY2NlbGVyYXRlZCh0cnVlKTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCi0gICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyLT5zZXRUZXh0dXJlSWQodGV4dHVyZS5n
ZXQoKS0+Z2V0VGV4dHVyZUhhbmRsZSgpKTsKLSAgICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXItPnNl
dENhbnZhcyhjYW52YXMpOwotI2VuZGlmCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIApAQCAtMTc0
LDE3ICsxNDIsMTYgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNp
emUsIGZsb2F0IC8qIHJlc29sdXRpb25TY2FsZSAqLywgQ29sb3IKIAogSW1hZ2VCdWZmZXI6On5J
bWFnZUJ1ZmZlcigpCiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlm
IChtX2RhdGEubV9wbGF0Zm9ybUxheWVyKQotICAgICAgICBtX2RhdGEubV9wbGF0Zm9ybUxheWVy
LT5zZXRUZXh0dXJlSWQoMCk7Ci0jZW5kaWYKIH0KIAogR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1
ZmZlcjo6Y29udGV4dCgpIGNvbnN0CiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIGlmIChtX2RhdGEubV9wbGF0Zm9ybUxheWVyKQotICAgICAgICBtX2RhdGEubV9wbGF0
Zm9ybUxheWVyLT5sYXllcldpbGxEcmF3KENhbnZhczJETGF5ZXJDaHJvbWl1bTo6V2lsbERyYXdJ
ZkxheWVyTm90RGVmZXJyZWQpOworICAgIGlmIChtX2RhdGEubV9sYXllckJyaWRnZSkgeworICAg
ICAgICAvLyBXZSdyZSB1c2luZyBjb250ZXh0IGFjcXVpc2l0aW9uIGFzIGEgc2lnbmFsIHRoYXQg
c29tZW9uZSBpcyBhYm91dCB0byByZW5kZXIgaW50byBvdXIgYnVmZmVyIGFuZCB3ZSBuZWVkCisg
ICAgICAgIC8vIHRvIGJlIHJlYWR5LiBUaGlzIGlzbid0IGxvZ2ljYWxseSBjb25zdC1jb3JyZWN0
LCBoZW5jZSB0aGUgY2FzdC4KKyAgICAgICAgY29uc3RfY2FzdDxDYW52YXMyRExheWVyQnJpZGdl
Kj4obV9kYXRhLm1fbGF5ZXJCcmlkZ2UuZ2V0KCkpLT5jb250ZXh0QWNxdWlyZWQoKTsKKyAgICB9
CiAjZW5kaWYKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQpAQCAtMTk2LDcgKzE2Myw3
IEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSBjb3B5QmVoYXZpb3IpIGNvbnN0CiAKIFBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLm1fcGxhdGZvcm1MYXll
ci5nZXQoKTsKKyAgICByZXR1cm4gbV9kYXRhLm1fbGF5ZXJCcmlkZ2UgPyBtX2RhdGEubV9sYXll
ckJyaWRnZS0+bGF5ZXIoKSA6IDA7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBiMmNjY2VhZDY4ZjJiNjFiZmVkODZjMDQ4ODg5Nzg4
Mjc4ODkyNzllLi40ZWM4ZDhjODE2MTQ4Y2U3NWZiYzU2ZTdmZmY3ZTViYzhmMmYxMmYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgJ3dl
YmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAgICAgICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxw
ZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0Fzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcs
Ci0gICAgICAgICAgICAndGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAnLAorICAg
ICAgICAgICAgJ3Rlc3RzL0NhbnZhczJETGF5ZXJCcmlkZ2VUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NBbmltYXRp
b25UZXN0Q29tbW9uLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DYW52YXMyRExheWVyQnJpZGdlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NhbnZhczJETGF5ZXJCcmlkZ2VUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYjhlMDQ2NWM3MmU3
MDYyYzFiNzU1N2RlNjg2NTE5ZWRmZTU3NDJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQnJpZGdlVGVzdC5jcHAKQEAgLTAsMCAr
MSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkNhbnZhczJETGF5ZXJCcmlkZ2UuaCIKKworI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRl
eHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgorI2luY2x1ZGUgIlRl
eHR1cmVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIldl
YktpdC5oIgorI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJUaHJl
YWQuaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIHRlc3Rpbmc6OkluU2VxdWVuY2U7Cit1c2lu
ZyB0ZXN0aW5nOjpSZXR1cm47Cit1c2luZyB0ZXN0aW5nOjpUZXN0OworCituYW1lc3BhY2Ugewor
CitjbGFzcyBNb2NrQ2FudmFzQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0
M0QgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9EMChmbHVzaCwgdm9pZCh2b2lkKSk7CisgICAg
TU9DS19NRVRIT0QwKGNyZWF0ZVRleHR1cmUsIHVuc2lnbmVkKHZvaWQpKTsKKyAgICBNT0NLX01F
VEhPRDEoZGVsZXRlVGV4dHVyZSwgdm9pZCh1bnNpZ25lZCkpOworCisgICAgdmlydHVhbCBHckNv
bnRleHQqIGdyQ29udGV4dCgpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KK307CisKK2NsYXNzIE1v
Y2tUZXh0dXJlQ29waWVyIDogcHVibGljIFRleHR1cmVDb3BpZXIgeworcHVibGljOgorICAgIE1P
Q0tfTUVUSE9ENChjb3B5VGV4dHVyZSwgdm9pZChHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVk
LCB1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYpKSBPVkVSUklERTsKK307CisKK30gLy8gbmFtZXNw
YWNlCisKK2VudW0gVGhyZWFkTW9kZSB7CisgICAgU2luZ2xlVGhyZWFkZWQsIFRocmVhZGVkCit9
OworCitjbGFzcyBDYW52YXMyRExheWVyQnJpZGdlVGVzdCA6IHB1YmxpYyBUZXN0IHsKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGZ1bGxMaWZlY3ljbGVUZXN0KFRocmVhZE1vZGUgdGhyZWFkTW9kZSwg
RGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSkKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOworCisgICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gbWFpbkNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNz
Q29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ2FudmFzQ29udGV4dCgpKSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICAgICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBpbXBsQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3
IE1vY2tDYW52YXNDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpOworCisgICAgICAgIE1vY2tDYW52YXNDb250ZXh0JiBtYWluTW9jayA9ICpz
dGF0aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1haW5Db250ZXh0LmdldCgpKSk7CisgICAgICAg
IE1vY2tDYW52YXNDb250ZXh0JiBpbXBsTW9jayA9ICpzdGF0aWNfY2FzdDxNb2NrQ2FudmFzQ29u
dGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4
dDNEKGltcGxDb250ZXh0LmdldCgpKSk7CisKKyAgICAgICAgTW9ja1RleHR1cmVDb3BpZXIgY29w
aWVyTW9jazsKKyAgICAgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyOworCisgICAgICAgIGNv
bnN0IEludFNpemUgc2l6ZSgzMDAsIDE1MCk7CisKKyAgICAgICAgT3duUHRyPFdlYlRocmVhZD4g
dGhyZWFkOworICAgICAgICBpZiAodGhyZWFkTW9kZSA9PSBUaHJlYWRlZCkKKyAgICAgICAgICAg
IHRocmVhZCA9IGFkb3B0UHRyKFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3JlYXRlVGhy
ZWFkKCJDYW52YXMyRExheWVyQnJpZGdlVGVzdCIpKTsKKyAgICAgICAgV2ViQ29tcG9zaXRvcjo6
aW5pdGlhbGl6ZSh0aHJlYWQuZ2V0KCkpOworCisgICAgICAgIFdlYkdMSWQgYmFja1RleHR1cmVJ
ZCA9IDE7CisgICAgICAgIFdlYkdMSWQgZnJvbnRUZXh0dXJlSWQgPSAxOworCisgICAgICAgIC8v
IFRocmVhZGVkIGFuZCBub24gZGVmZXJyZWQgY2FudmFzZXMgYXJlIGRvdWJsZSBidWZmZXJlZC4K
KyAgICAgICAgaWYgKHRocmVhZE1vZGUgPT0gVGhyZWFkZWQgJiYgZGVmZXJyYWxNb2RlID09IE5v
bkRlZmVycmVkKSB7CisgICAgICAgICAgICBmcm9udFRleHR1cmVJZCA9IDI7CisgICAgICAgICAg
ICAvLyBDcmVhdGUgdGV4dHVyZSAob24gdGhlIG1haW4gdGhyZWFkKSBhbmQgZG8gdGhlIGNvcHkg
KG9uIHRoZSBpbXBsIHRocmVhZCkuCisgICAgICAgICAgICBFWFBFQ1RfQ0FMTChtYWluTW9jaywg
Y3JlYXRlVGV4dHVyZSgpKS5XaWxsT25jZShSZXR1cm4oZnJvbnRUZXh0dXJlSWQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIE93blB0cjxDYW52YXMyRExheWVyQnJpZGdlPiBicmlkZ2UgPSBDYW52
YXMyRExheWVyQnJpZGdlOjpjcmVhdGUobWFpbkNvbnRleHQuZ2V0KCksIHNpemUsIGRlZmVycmFs
TW9kZSwgYmFja1RleHR1cmVJZCk7CisKKyAgICAgICAgOjp0ZXN0aW5nOjpNb2NrOjpWZXJpZnlB
bmRDbGVhckV4cGVjdGF0aW9ucygmbWFpbk1vY2spOworCisgICAgICAgIEVYUEVDVF9DQUxMKG1h
aW5Nb2NrLCBmbHVzaCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGZyb250VGV4dHVyZUlkLCBicmlk
Z2UtPnByZXBhcmVUZXh0dXJlKHVwZGF0ZXIpKTsKKyAgICAgICAgOjp0ZXN0aW5nOjpNb2NrOjpW
ZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbWFpbk1vY2spOworCisgICAgICAgIGlmICh0aHJl
YWRNb2RlID09IFRocmVhZGVkICYmIGRlZmVycmFsTW9kZSA9PSBOb25EZWZlcnJlZCkgeworICAg
ICAgICAgICAgRVhQRUNUX0NBTEwoY29waWVyTW9jaywgY29weVRleHR1cmUoaW1wbENvbnRleHQu
Z2V0KCksIGJhY2tUZXh0dXJlSWQsIGZyb250VGV4dHVyZUlkLCBzaXplKSk7CisgICAgICAgICAg
ICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywgZmx1c2goKSk7CisgICAgICAgIH0KKyAgICAgICAgdXBk
YXRlci51cGRhdGUoaW1wbENvbnRleHQuZ2V0KCksIDAsICZjb3BpZXJNb2NrLCAwLCAxMDApOwor
ICAgICAgICA6OnRlc3Rpbmc6Ok1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZpbXBs
TW9jayk7CisKKyAgICAgICAgaWYgKHRocmVhZE1vZGUgPT0gVGhyZWFkZWQgJiYgZGVmZXJyYWxN
b2RlID09IE5vbkRlZmVycmVkKSB7CisgICAgICAgICAgICBFWFBFQ1RfQ0FMTChtYWluTW9jaywg
ZGVsZXRlVGV4dHVyZShmcm9udFRleHR1cmVJZCkpOworICAgICAgICAgICAgRVhQRUNUX0NBTEwo
bWFpbk1vY2ssIGZsdXNoKCkpOworICAgICAgICB9CisgICAgICAgIGJyaWRnZS5jbGVhcigpOwor
ICAgICAgICA6OnRlc3Rpbmc6Ok1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZpbXBs
TW9jayk7CisKKyAgICAgICAgV2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKKyAgICB9Cit9Owor
CituYW1lc3BhY2UgeworCitURVNUX0YoQ2FudmFzMkRMYXllckJyaWRnZVRlc3QsIHRlc3RGdWxs
TGlmZWN5Y2xlU2luZ2xlVGhyZWFkZWREZWZlcnJlZCkKK3sKKyAgICBmdWxsTGlmZWN5Y2xlVGVz
dChTaW5nbGVUaHJlYWRlZCwgTm9uRGVmZXJyZWQpOworfQorCitURVNUX0YoQ2FudmFzMkRMYXll
ckJyaWRnZVRlc3QsIHRlc3RGdWxsTGlmZWN5Y2xlU2luZ2xlVGhyZWFkZWROb25EZWZlcnJlZCkK
K3sKKyAgICBmdWxsTGlmZWN5Y2xlVGVzdChTaW5nbGVUaHJlYWRlZCwgRGVmZXJyZWQpOworfQor
CitURVNUX0YoQ2FudmFzMkRMYXllckJyaWRnZVRlc3QsIHRlc3RGdWxsTGlmZWN5Y2xlVGhyZWFk
ZWROb25EZWZlcnJlZCkKK3sKKyAgICBmdWxsTGlmZWN5Y2xlVGVzdChUaHJlYWRlZCwgTm9uRGVm
ZXJyZWQpOworfQorCitURVNUX0YoQ2FudmFzMkRMYXllckJyaWRnZVRlc3QsIHRlc3RGdWxsTGlm
ZWN5Y2xlVGhyZWFkZWREZWZlcnJlZCkKK3sKKyAgICBmdWxsTGlmZWN5Y2xlVGVzdChUaHJlYWRl
ZCwgRGVmZXJyZWQpOworfQorCit9IC8vIG5hbWVzcGFjZQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQyNDg1YjcxOGYwOGE1NjlmMGYxMjZkNDlj
ZmY2MDBiNWJjZDc1Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRl
c3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgot
Ci0jaW5jbHVkZSAiQ0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSAiRmFrZUNDTGF5
ZXJUcmVlSG9zdENsaWVudC5oIgotI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgotI2luY2x1ZGUgIlJlZ2lv
bi5oIgotI2luY2x1ZGUgIlRleHR1cmVDb3BpZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFuYWdl
ci5oIgotI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKLSNpbmNsdWRlICJXZWJLaXQuaCIKLSNp
bmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCi0jaW5jbHVkZSAiY2MvQ0NUZXh0dXJl
TGF5ZXJJbXBsLmgiCi0jaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgotI2luY2x1ZGUg
InBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dl
YlRocmVhZC5oIgotCi0jaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KLSNpbmNsdWRlIDxndGVzdC9n
dGVzdC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3Rz
OwotdXNpbmcgdGVzdGluZzo6SW5TZXF1ZW5jZTsKLXVzaW5nIHRlc3Rpbmc6OlJldHVybjsKLXVz
aW5nIHRlc3Rpbmc6OlRlc3Q7Ci0KLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIEZha2VDQ0xheWVyVHJl
ZUhvc3QgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxGYWtlQ0NMYXllclRyZWVIb3N0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgT3du
UHRyPEZha2VDQ0xheWVyVHJlZUhvc3Q+IGhvc3QoYWRvcHRQdHIobmV3IEZha2VDQ0xheWVyVHJl
ZUhvc3QpKTsKLSAgICAgICAgaG9zdC0+aW5pdGlhbGl6ZSgpOwotICAgICAgICByZXR1cm4gaG9z
dC5yZWxlYXNlKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEZha2VDQ0xheWVyVHJlZUhvc3Qo
KQotICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdCgmbV9jbGllbnQsIENDU2V0dGluZ3MoKSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudCBtX2NsaWVudDsKLX07
Ci0KLWNsYXNzIE1vY2tDYW52YXNDb250ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRl
eHQzRCB7Ci1wdWJsaWM6Ci0gICAgTU9DS19NRVRIT0QwKGZsdXNoLCB2b2lkKHZvaWQpKTsKLX07
Ci0KLWNsYXNzIE1vY2tUZXh0dXJlQWxsb2NhdG9yIDogcHVibGljIFRleHR1cmVBbGxvY2F0b3Ig
ewotcHVibGljOgotICAgIE1PQ0tfTUVUSE9EMihjcmVhdGVUZXh0dXJlLCB1bnNpZ25lZChjb25z
dCBJbnRTaXplJiwgR0MzRGVudW0pKTsKLSAgICBNT0NLX01FVEhPRDMoZGVsZXRlVGV4dHVyZSwg
dm9pZCh1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtKSk7Ci19OwotCi1jbGFzcyBN
b2NrVGV4dHVyZUNvcGllciA6IHB1YmxpYyBUZXh0dXJlQ29waWVyIHsKLXB1YmxpYzoKLSAgICBN
T0NLX01FVEhPRDQoY29weVRleHR1cmUsIHZvaWQoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25l
ZCwgdW5zaWduZWQsIGNvbnN0IEludFNpemUmKSk7Ci19OwotCi1jbGFzcyBNb2NrVGV4dHVyZVVw
bG9hZGVyIDogcHVibGljIFRleHR1cmVVcGxvYWRlciB7Ci1wdWJsaWM6Ci0gICAgTU9DS19NRVRI
T0QwKGlzQnVzeSwgYm9vbCgpKTsKLSAgICBNT0NLX01FVEhPRDAoYmVnaW5VcGxvYWRzLCB2b2lk
KCkpOwotICAgIE1PQ0tfTUVUSE9EMChlbmRVcGxvYWRzLCB2b2lkKCkpOwotICAgIE1PQ0tfTUVU
SE9ENSh1cGxvYWRUZXh0dXJlLCB2b2lkKEdyYXBoaWNzQ29udGV4dDNEKiwgTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6VGV4dHVyZSosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0LCBjb25z
dCBJbnRSZWN0KSk7Ci19OwotCi19IC8vIG5hbWVzcGFjZQotCi1jbGFzcyBDYW52YXMyRExheWVy
Q2hyb21pdW1UZXN0IDogcHVibGljIFRlc3QgewotcHJvdGVjdGVkOgotICAgIHZvaWQgZnVsbExp
ZmVjeWNsZVRlc3QoYm9vbCB0aHJlYWRlZCwgYm9vbCBkZWZlcnJlZCkKLSAgICB7Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOwotCi0gICAgICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gbWFpbkNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ2Fu
dmFzQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KTsKLSAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBpbXBsQ29udGV4dCA9IEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRl
eHQoYWRvcHRQdHIobmV3IE1vY2tDYW52YXNDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6
UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwotCi0gICAgICAgIE1vY2tDYW52YXNDb250ZXh0
JiBtYWluTW9jayA9ICpzdGF0aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4dCo+KEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1haW5Db250ZXh0Lmdl
dCgpKSk7Ci0gICAgICAgIE1vY2tDYW52YXNDb250ZXh0JiBpbXBsTW9jayA9ICpzdGF0aWNfY2Fz
dDxNb2NrQ2FudmFzQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdl
YkdyYXBoaWNzQ29udGV4dDNEKGltcGxDb250ZXh0LmdldCgpKSk7Ci0KLSAgICAgICAgTW9ja1Rl
eHR1cmVBbGxvY2F0b3IgYWxsb2NhdG9yTW9jazsKLSAgICAgICAgTW9ja1RleHR1cmVDb3BpZXIg
Y29waWVyTW9jazsKLSAgICAgICAgTW9ja1RleHR1cmVVcGxvYWRlciB1cGxvYWRlck1vY2s7Ci0g
ICAgICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcjsKLQotICAgICAgICBjb25zdCBJbnRTaXpl
IHNpemUoMzAwLCAxNTApOwotCi0gICAgICAgIE93blB0cjxXZWJUaHJlYWQ+IHRocmVhZDsKLSAg
ICAgICAgaWYgKHRocmVhZGVkKQotICAgICAgICAgICAgdGhyZWFkID0gYWRvcHRQdHIoV2ViS2l0
OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jcmVhdGVUaHJlYWQoIkNhbnZhczJETGF5ZXJDaHJvbWl1
bVRlc3QiKSk7Ci0gICAgICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUodGhyZWFkLmdldCgp
KTsKLQotICAgICAgICBPd25QdHI8RmFrZUNDTGF5ZXJUcmVlSG9zdD4gbGF5ZXJUcmVlSG9zdChG
YWtlQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUoKSk7Ci0gICAgICAgIC8vIEZvcmNlIGFuIHVwZGF0
ZSwgc28gdGhhdCB3ZSBnZXQgYSB2YWxpZCBUZXh0dXJlTWFuYWdlci4KLSAgICAgICAgbGF5ZXJU
cmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHVwZGF0ZXIpOwotCi0gICAgICAgIGNvbnN0IFdlYkdMSWQg
YmFja1RleHR1cmVJZCA9IDE7Ci0gICAgICAgIGNvbnN0IFdlYkdMSWQgZnJvbnRUZXh0dXJlSWQg
PSAyOwotICAgICAgICB7Ci0gICAgICAgICAgICBJblNlcXVlbmNlIHNlcXVlbmNlOwotCi0gICAg
ICAgICAgICAvLyBQYWludCBjYW52YXMgY29udGVudHMgb24gdGhlIG1haW4gdGhyZWFkLgotICAg
ICAgICAgICAgRVhQRUNUX0NBTEwobWFpbk1vY2ssIGZsdXNoKCkpOwotCi0gICAgICAgICAgICAv
LyBOb3RlIHRoYXQgdGhlIGNhbnZhcyBiYWNraW5nIHRleHR1cmUgaXMgZG91YmxlYnVmZmVyZWQg
b25seSB3aGVuIHVzaW5nIHRoZSB0aHJlYWRlZAotICAgICAgICAgICAgLy8gY29tcG9zaXRvciBh
bmQgbm90IHVzaW5nIGRlZmVycmVkIGNhbnZhcyByZW5kZXJpbmcKLSAgICAgICAgICAgIGlmICh0
aHJlYWRlZCAmJiAhZGVmZXJyZWQpIHsKLSAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGV4dHVy
ZSBhbmQgZG8gdGhlIGNvcHkgKG9uIHRoZSBpbXBsIHRocmVhZCkuCi0gICAgICAgICAgICAgICAg
RVhQRUNUX0NBTEwoYWxsb2NhdG9yTW9jaywgY3JlYXRlVGV4dHVyZShzaXplLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSkpCi0gICAgICAgICAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4oZnJv
bnRUZXh0dXJlSWQpKTsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChjb3BpZXJNb2NrLCBj
b3B5VGV4dHVyZShpbXBsQ29udGV4dC5nZXQoKSwgYmFja1RleHR1cmVJZCwgZnJvbnRUZXh0dXJl
SWQsIHNpemUpKTsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywgZmx1c2go
KSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBUZWFyZG93biBUZXh0dXJlTWFuYWdlci4KLSAgICAg
ICAgICAgICAgICBFWFBFQ1RfQ0FMTChhbGxvY2F0b3JNb2NrLCBkZWxldGVUZXh0dXJlKGZyb250
VGV4dHVyZUlkLCBzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gY2Fu
dmFzID0gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUobWFpbkNvbnRleHQuZ2V0KCksIHNp
emUsIGRlZmVycmVkID8gRGVmZXJyZWQgOiBOb25EZWZlcnJlZCk7Ci0gICAgICAgIGNhbnZhcy0+
c2V0SXNEcmF3YWJsZSh0cnVlKTsKLSAgICAgICAgY2FudmFzLT5zZXRMYXllclRyZWVIb3N0KGxh
eWVyVHJlZUhvc3QuZ2V0KCkpOwotICAgICAgICBjYW52YXMtPnNldEJvdW5kcyhJbnRTaXplKDYw
MCwgMzAwKSk7Ci0gICAgICAgIGNhbnZhcy0+c2V0VGV4dHVyZUlkKGJhY2tUZXh0dXJlSWQpOwot
Ci0gICAgICAgIGNhbnZhcy0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KGNhbnZhcy0+bmVlZHNEaXNwbGF5KCkpOwotICAgICAgICBjYW52YXMtPnVwZGF0ZSh1cGRhdGVy
LCAwKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKGNhbnZhcy0+bmVlZHNEaXNwbGF5KCkpOwotICAg
ICAgICB7Ci0gICAgICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRo
cmVhZDsKLQotICAgICAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBsYXllckltcGwgPSBjYW52
YXMtPmNyZWF0ZUNDTGF5ZXJJbXBsKCk7Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoMHUsIHN0YXRp
Y19jYXN0PENDVGV4dHVyZUxheWVySW1wbCo+KGxheWVySW1wbC5nZXQoKSktPnRleHR1cmVJZCgp
KTsKLQotICAgICAgICAgICAgdXBkYXRlci51cGRhdGUoaW1wbENvbnRleHQuZ2V0KCksICZhbGxv
Y2F0b3JNb2NrLCAmY29waWVyTW9jaywgJnVwbG9hZGVyTW9jaywgMSk7Ci0gICAgICAgICAgICBj
YW52YXMtPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKLQotICAgICAgICAgICAg
aWYgKHRocmVhZGVkICYmICFkZWZlcnJlZCkKLSAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoZnJv
bnRUZXh0dXJlSWQsIHN0YXRpY19jYXN0PENDVGV4dHVyZUxheWVySW1wbCo+KGxheWVySW1wbC5n
ZXQoKSktPnRleHR1cmVJZCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBF
WFBFQ1RfRVEoYmFja1RleHR1cmVJZCwgc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlTGF5ZXJJbXBsKj4o
bGF5ZXJJbXBsLmdldCgpKS0+dGV4dHVyZUlkKCkpOwotICAgICAgICB9Ci0gICAgICAgIGNhbnZh
cy5jbGVhcigpOwotICAgICAgICBsYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2Vy
KCktPnJlZHVjZU1lbW9yeVRvTGltaXQoMCk7Ci0gICAgICAgIGxheWVyVHJlZUhvc3QtPmNvbnRl
bnRzVGV4dHVyZU1hbmFnZXIoKS0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKCZhbGxvY2F0b3JNb2Nr
KTsKLSAgICAgICAgbGF5ZXJUcmVlSG9zdC5jbGVhcigpOwotICAgICAgICBXZWJDb21wb3NpdG9y
OjpzaHV0ZG93bigpOwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSB7Ci0KLVRFU1RfRihDYW52YXMy
RExheWVyQ2hyb21pdW1UZXN0LCB0ZXN0RnVsbExpZmVjeWNsZVNpbmdsZVRocmVhZCkKLXsKLSAg
ICBmdWxsTGlmZWN5Y2xlVGVzdChmYWxzZSwgZmFsc2UpOwotfQotCi1URVNUX0YoQ2FudmFzMkRM
YXllckNocm9taXVtVGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVUaHJlYWRlZCkKLXsKLSAgICBmdWxs
TGlmZWN5Y2xlVGVzdCh0cnVlLCBmYWxzZSk7Ci19Ci0KLVRFU1RfRihDYW52YXMyRExheWVyQ2hy
b21pdW1UZXN0LCB0ZXN0RnVsbExpZmVjeWNsZVNpbmdsZVRocmVhZERlZmVycmVkKQotewotICAg
IGZ1bGxMaWZlY3ljbGVUZXN0KGZhbHNlLCB0cnVlKTsKLX0KLQotVEVTVF9GKENhbnZhczJETGF5
ZXJDaHJvbWl1bVRlc3QsIHRlc3RGdWxsTGlmZWN5Y2xlVGhyZWFkZWREZWZlcnJlZCkKLXsKLSAg
ICBmdWxsTGlmZWN5Y2xlVGVzdCh0cnVlLCB0cnVlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142111</attachid>
            <date>2012-05-15 17:53:56 -0700</date>
            <delta_ts>2012-05-17 17:54:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86050-20120515175355.patch</filename>
            <type>text/plain</type>
            <size>50520</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3MTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU3NDc3NWFhOTU0ZjI4
MzRkOWJkNzEzMGNmNzQzMDUwN2VmMzI5My4uMDU1NGE0M2NmNTY4NjZjYWE5NDk2ZDUxNmI5YmEy
MzA5MmVkNTRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEyLTA1LTEwICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBN
b3ZlIGRlZmVycmFsLXJlbGF0ZWQgbG9naWMgb3V0IG9mIENhbnZhczJETGF5ZXJDaHJvbWl1bQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYwNTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHJlbW92
ZXMgQ2FudmFzMkRMYXllckNocm9taXVtIGFuZCBwdXRzIHRoZSBkZWZlcnJhbCBhbmQgZG91Ymxl
LWJ1ZmZlcmluZyByZWxhdGVkIGxvZ2ljIGluIGEgbmV3IGNsYXNzLAorICAgICAgICBDYW52YXMy
RExheWVyQnJpZGdlLCB0aGF0IHVzZXMgVGV4dHVyZUxheWVyQ2hyb21pdW0gZm9yIGNvbXBvc2l0
aW5nLiAgVGhlIGJyaWRnZSBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlCisgICAgICAg
IGZyb250IHRleHR1cmUgd2hlbiBkb3VibGUgYnVmZmVyaW5nIGlzIGFjdGl2ZSwgaW5zZXJ0aW5n
IHRoZSBjb3JyZWN0IG1ha2VDb250ZXh0Q3VycmVudCgpIGFuZCBmbHVzaCgpIGNhbGxzIG9uCisg
ICAgICAgIHRoZSBHcmFwaGljc0NvbnRleHQzRCBhbmQgU2tDYW52YXMgd2hlbiBhcHByb3ByaWF0
ZSwgYW5kIG93bmluZyB0aGUgbGlmZXRpbWUgb2YgdGhlIGxheWVyLgorCisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJCcmlkZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJC
cmlkZ2U6OkNhbnZhczJETGF5ZXJCcmlkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllckJyaWRnZTo6fkNhbnZhczJETGF5ZXJCcmlkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzMkRMYXllckJyaWRnZTo6c2V0U2tDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
MkRMYXllckJyaWRnZTo6cHJlcGFyZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
MkRMYXllckJyaWRnZTo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVy
QnJpZGdlOjpsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpj
b250ZXh0QWNxdWlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhczJETGF5ZXJCcmlkZ2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KENhbnZhczJETGF5ZXJCcmlkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJy
aWRnZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXMyRExheWVyQ2hyb21pdW0uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZUJ1ZmZlckRhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVMYXllckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVMYXllckNocm9taXVtOjp3aWxsTW9kaWZ5VGV4dHVy
ZSk6CisgICAgICAgICAgICB3aWxsTW9kaWZ5VGV4dHVyZSgpIGlzIGNhbGxlZCB3aGVuZXZlciB0
aGUgdGV4dHVyZSBjdXJyZW50bHkgb3duZWQgYnkgdGhlIFRleHR1cmVMYXllckNocm9taXVtIHdp
bGwgYmUKKyAgICAgICAgICAgIG1vZGlmaWVkIGJ5IGEgc3lzdGVtIG91dCBvZiB0aGUgY29tcG9z
aXRvcidzIGNvbnRyb2wuIEl0IG1ha2VzIHN1cmUgdGhhdCB0aGUgY29tcG9zaXRvciBkb2VzIG5v
dCBhdHRlbXB0IHRvCisgICAgICAgICAgICBkcmF3IHdpdGggdGhlIHBvdGVudGlhbGx5LW1vZGlm
aWVkIHRleHR1cmUgdW50aWwgdGhlIG5leHQgY29tbWl0LiBGb3IgY2FudmFzLCB0aGlzIGlzIHVz
ZWQgd2hlbiB0aHJlYWRpbmcgaXMKKyAgICAgICAgICAgIGVuYWJsZWQgYW5kIGEgbm9uLWRlZmVy
cmFibGUgZHJhd2luZyBjb21tYW5kIGlzIGludm9rZWQgZnJvbSBKUy4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVMYXllckNo
cm9taXVtLmg6CisgICAgICAgIChUZXh0dXJlTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjpoYXNNb3JlVXBkYXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
ZXh0dXJlVXBkYXRlcjo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKENDVGV4dHVyZVVwZGF0ZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3Jt
TGF5ZXIpOgorCiAyMDEyLTA1LTE1ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDaHJvbWl1bSBwb3J0IG5ldmVyIHNldHMgVVNFKENH
KSBzbyBjb2RlIGJlaGluZCBpdCBpcyBkZWFkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDRiZjI3OTRmNTYxZWRmMGY1YjEwNDU5NzVjNGI5NWZkNzgxZGVkN2YuLmRmYzNmZjYzYTA4MTgx
MmJkZDgzNzAxNGE0MTIxYzVlMDA5MzBiNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTItMDUtMTAgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUgZGVmZXJyYWwtcmVsYXRlZCBsb2dp
YyBvdXQgb2YgQ2FudmFzMkRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjA1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ2Fu
dmFzMkRMYXllckJyaWRnZVRlc3QuY3BwOiBSZW5hbWVkIGZyb20gdGVzdHMvQ2FudmFzMkRMYXll
ckNocm9taXVtVGVzdAorICAgICAgICAoQ2FudmFzMkRMYXllckJyaWRnZVRlc3QpOgorICAgICAg
ICAoQ2FudmFzMkRMYXllckJyaWRnZVRlc3Q6OmZ1bGxMaWZlY3ljbGVUZXN0KToKKwogMjAxMi0w
NS0xNSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtj
aHJvbWl1bV0gQ2hyb21pdW0gcG9ydCBuZXZlciBzZXRzIFVTRShDRykgc28gY29kZSBiZWhpbmQg
aXQgaXMgZGVhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDkyMjIzNWY4MDExMGU3YjE4N2NmMjM2ZTk4
ZTlkNWM3ZWFhZjE3MDguLjRkN2IyNzQ2Y2EwMTA2OWQwOTZhNDNjZGRkY2RjMGNiZWU1NDAxNWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1NTAsMTAgKzM1NTAsOCBAQAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckNocm9taXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwJywKLSAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJp
ZGdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyQnJpZGdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4ZTFmNWNlNTkwMjRmN2Q0NWYw
NDhmYzExYzgyODUyNTYxNjAxYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcApAQCAtMCww
ICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNhbnZh
czJETGF5ZXJCcmlkZ2UuaCIKKworI2luY2x1ZGUgIkdyQ29udGV4dC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiIC8v
IEZvciBHTEMoKSBtYWNyby4KKyNpbmNsdWRlICJTa0NhbnZhcy5oIgorI2luY2x1ZGUgIlRleHR1
cmVMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgImNj
L0NDVGV4dHVyZVVwZGF0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYW52YXMyRExh
eWVyQnJpZGdlOjpDYW52YXMyRExheWVyQnJpZGdlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIERlZmVycmFsTW9kZSBkZWZlcnJhbE1v
ZGUsIHVuc2lnbmVkIHRleHR1cmVJZCkKKyAgICA6IG1fZGVmZXJyYWxNb2RlKGRlZmVycmFsTW9k
ZSkKKyAgICAvLyBGSVhNRTogV2UgY3VycmVudGx5IHR1cm4gb2ZmIGRvdWJsZSBidWZmZXJpbmcg
d2hlbiBjYW52YXMgcmVuZGVyaW5nIGlzCisgICAgLy8gZGVmZXJyZWQuIFdoYXQgd2Ugc2hvdWxk
IGJlIGRvaW5nIGlzIHRvIHVzZSBhIHNtYXJ0ZXIgaGV1cmlzdGljIGJhc2VkCisgICAgLy8gb24g
R1BVIHJlc291cmNlIG1vbml0b3JpbmcgYW5kIG90aGVyIGZhY3RvcnMgdG8gY2hvc2UgYmV0d2Vl
biBzaW5nbGUKKyAgICAvLyBhbmQgZG91YmxlIGJ1ZmZlcmluZy4KKyAgICAsIG1fdXNlRG91Ymxl
QnVmZmVyaW5nKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSAmJiBkZWZlcnJhbE1vZGUgPT0gTm9u
RGVmZXJyZWQpCisgICAgLCBtX2Zyb250QnVmZmVyVGV4dHVyZSgwKQorICAgICwgbV9iYWNrQnVm
ZmVyVGV4dHVyZSh0ZXh0dXJlSWQpCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fY2FudmFz
KDApCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKK3sKKyAgICBpZiAobV91c2VEb3VibGVCdWZm
ZXJpbmcpIHsKKyAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAg
ICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9mcm9udEJ1ZmZlclRleHR1cmUgPSBtX2NvbnRleHQt
PmNyZWF0ZVRleHR1cmUoKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fZnJvbnRCdWZm
ZXJUZXh0dXJlKSk7CisgICAgICAgIC8vIERvIGJhc2ljIGxpbmVhciBmaWx0ZXJpbmcgb24gcmVz
aXplLgorICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgR0xD
KG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBH
cmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgICAgIC8vIE5QT1QgdGV4dHVyZXMgaW4g
R0wgRVMgb25seSB3b3JrIHdoZW4gdGhlIHdyYXAgbW9kZSBpcyBzZXQgdG8gR3JhcGhpY3NDb250
ZXh0M0Q6OkNMQU1QX1RPX0VER0UuCisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29u
dGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9f
RURHRSkpOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKKyAgICAg
ICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKTsKKyAgICAgICAgaWYgKEdyQ29u
dGV4dCogZ3JDb250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKSkKKyAgICAgICAgICAgIGdy
Q29udGV4dC0+cmVzZXRDb250ZXh0KCk7CisgICAgfQorCisgICAgbV9sYXllciA9IFRleHR1cmVM
YXllckNocm9taXVtOjpjcmVhdGUodGhpcyk7CisgICAgbV9sYXllci0+c2V0VGV4dHVyZUlkKHRl
eHR1cmVJZCk7CisgICAgbV9sYXllci0+c2V0UmF0ZUxpbWl0Q29udGV4dCghQ0NQcm94eTo6aGFz
SW1wbFRocmVhZCgpIHx8IG1fdXNlRG91YmxlQnVmZmVyaW5nKTsKK30KKworCitDYW52YXMyRExh
eWVyQnJpZGdlOjp+Q2FudmFzMkRMYXllckJyaWRnZSgpCit7CisgICAgbV9sYXllci0+c2V0VGV4
dHVyZUlkKDApOworICAgIGlmIChtX3VzZURvdWJsZUJ1ZmZlcmluZykgeworICAgICAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9mcm9udEJ1ZmZlclRleHR1cmUpKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5mbHVzaCgpOworICAgIH0KK30KKwordW5zaWduZWQgQ2FudmFzMkRMYXll
ckJyaWRnZTo6cHJlcGFyZVRleHR1cmUoQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlcikKK3sKKyAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaWYgKG1fY2FudmFzKSB7
CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ2FudmFzMkRMYXllckJyaWRnZTo6U2tDYW52
YXM6OmZsdXNoIik7CisgICAgICAgIG1fY2FudmFzLT5mbHVzaCgpOworICAgIH0KKworICAgIG1f
Y29udGV4dC0+Zmx1c2goKTsKKworICAgIGlmIChtX3VzZURvdWJsZUJ1ZmZlcmluZykgeworICAg
ICAgICB1cGRhdGVyLmFwcGVuZENvcHkobV9iYWNrQnVmZmVyVGV4dHVyZSwgbV9mcm9udEJ1ZmZl
clRleHR1cmUsIG1fc2l6ZSk7CisgICAgICAgIHJldHVybiBtX2Zyb250QnVmZmVyVGV4dHVyZTsK
KyAgICB9CisKKyAgICByZXR1cm4gbV9iYWNrQnVmZmVyVGV4dHVyZTsKK30KKworR3JhcGhpY3ND
b250ZXh0M0QqIENhbnZhczJETGF5ZXJCcmlkZ2U6OmNvbnRleHQoKQoreworICAgIHJldHVybiBt
X2NvbnRleHQuZ2V0KCk7Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6cHJlcGFyZUZv
ckRyYXcoKQoreworICAgIGlmICghbV91c2VEb3VibGVCdWZmZXJpbmcpCisgICAgICAgIG1fbGF5
ZXItPndpbGxNb2RpZnlUZXh0dXJlKCk7CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpzZXRTa0NhbnZhcyhTa0NhbnZh
cyogY2FudmFzKQoreworICAgIG1fY2FudmFzID0gY2FudmFzOworfQorCitMYXllckNocm9taXVt
KiBDYW52YXMyRExheWVyQnJpZGdlOjpsYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5
ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6Y29udGV4dEFjcXVpcmVk
KCkKK3sKKyAgICBpZiAobV9kZWZlcnJhbE1vZGUgPT0gTm9uRGVmZXJyZWQgJiYgIW1fdXNlRG91
YmxlQnVmZmVyaW5nKQorICAgICAgICBtX2xheWVyLT53aWxsTW9kaWZ5VGV4dHVyZSgpOworfQor
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YjRlMDg2YTg1
Y2JmNjI3ZDQ0NGQzNjFmMDYwNGU2ZDM2ZDY1ZGM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5o
CkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhbnZhczJETGF5ZXJCcmlkZ2VfaAor
I2RlZmluZSBDYW52YXMyRExheWVyQnJpZGdlX2gKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
IC8vIEZvciBEZWZlcnJhbE1vZGUgZW51bS4KKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAiU2tEZWZlcnJlZENhbnZhcy5oIgorI2luY2x1ZGUgIlRleHR1cmVMYXllckNocm9taXVtLmgi
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitjbGFzcyBTa0NhbnZhczsKK2NsYXNzIFNrRGV2
aWNlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyQ2hyb21pdW07CitjbGFz
cyBUZXh0dXJlTGF5ZXJDaHJvbWl1bTsKKworY2xhc3MgQ2FudmFzMkRMYXllckJyaWRnZSA6IHB1
YmxpYyBUZXh0dXJlTGF5ZXJDaHJvbWl1bUNsaWVudCwgcHVibGljIFNrRGVmZXJyZWRDYW52YXM6
OkRldmljZUNvbnRleHQgeworcHVibGljOgorICAgIC8vIFRoaXMgY2xhc3MgZGVyaXZlcyBmcm9t
IFNrUmVmQ250ICh2aWEgU2tEZWZlcnJlZENhbnZhczo6RGV2aWNlQ29udGV4dCkgYW5kIHNvIHNo
b3VsZAorICAgIC8vIGFsd2F5cyBiZSByZXRhaW5lZCBpbiBhbiBTa0F1dG9UVW5yZWYgb3Igc2lt
aWxhciAoYnV0IG5vdCBhIFdURiBzbWFydCBwb2ludGVyIHR5cGUpLgorICAgIENhbnZhczJETGF5
ZXJCcmlkZ2UoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIGNvbnN0IEludFNpemUmLCBE
ZWZlcnJhbE1vZGUsIHVuc2lnbmVkIHRleHR1cmVJZCk7CisKKyAgICB2aXJ0dWFsIH5DYW52YXMy
RExheWVyQnJpZGdlKCk7CisKKyAgICAvLyBUZXh0dXJlTGF5ZXJDaHJvbWl1bUNsaWVudCBpbXBs
ZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHByZXBhcmVUZXh0dXJlKENDVGV4dHVy
ZVVwZGF0ZXImKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KCkgT1ZFUlJJREU7CisKKyAgICAvLyBTa0RlZmVycmVkQ2FudmFzOjpEZXZpY2VDb250ZXh0
IGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEcmF3KCk7CisKKyAg
ICB2b2lkIHNldFNrQ2FudmFzKFNrQ2FudmFzKik7CisgICAgTGF5ZXJDaHJvbWl1bSogbGF5ZXIo
KSBjb25zdDsKKyAgICB2b2lkIGNvbnRleHRBY3F1aXJlZCgpOworCitwcml2YXRlOgorCisgICAg
RGVmZXJyYWxNb2RlIG1fZGVmZXJyYWxNb2RlOworICAgIGJvb2wgbV91c2VEb3VibGVCdWZmZXJp
bmc7CisgICAgdW5zaWduZWQgbV9mcm9udEJ1ZmZlclRleHR1cmU7CisgICAgdW5zaWduZWQgbV9i
YWNrQnVmZmVyVGV4dHVyZTsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBTa0NhbnZhcyogbV9j
YW52YXM7CisgICAgUmVmUHRyPFRleHR1cmVMYXllckNocm9taXVtPiBtX2xheWVyOworICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworfTsKKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhNDc5Mjk3YjdiNmI5MjUwODk2OTU5OTY4ZWEzMzRjN2EwNDk3OGQyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1
bS5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIiAvLyBG
b3IgdGhlIEdMQygpIG1hY3JvCi0jaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgotI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgotI2luY2x1ZGUgImNjL0NDVGV4dHVyZUxheWVySW1wbC5o
IgotI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKLQotI2luY2x1ZGUgIlNrQ2FudmFz
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hy
b21pdW0+IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIERlZmVycmFsTW9kZSBkZWZl
cnJhbE1vZGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXMyRExheWVyQ2hyb21p
dW0oY29udGV4dCwgc2l6ZSwgZGVmZXJyYWxNb2RlKSk7Ci19Ci0KLUNhbnZhczJETGF5ZXJDaHJv
bWl1bTo6Q2FudmFzMkRMYXllckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIERlZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUp
Ci0gICAgOiBDYW52YXNMYXllckNocm9taXVtKCkKLSAgICAsIG1fY29udGV4dChjb250ZXh0KQot
ICAgICwgbV9jb250ZXh0TG9zdChmYWxzZSkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9i
YWNrVGV4dHVyZUlkKDApCi0gICAgLCBtX2NhbnZhcygwKQotICAgICwgbV9kZWZlcnJhbE1vZGUo
ZGVmZXJyYWxNb2RlKQotewotICAgIC8vIEZJWE1FOiBXZSBjdXJyZW50bHkgdHVybiBvZmYgZG91
YmxlIGJ1ZmZlcmluZyB3aGVuIGNhbnZhcyByZW5kZXJpbmcgaXMKLSAgICAvLyBkZWZlcnJlZC4g
V2hhdCB3ZSBzaG91bGQgYmUgZG9pbmcgaXMgdG8gdXNlIGEgc21hcnRlciBoZXVyaXN0aWMgYmFz
ZWQKLSAgICAvLyBvbiBHUFUgcmVzb3VyY2UgbW9uaXRvcmluZyBhbmQgb3RoZXIgZmFjdG9ycyB0
byBjaG9zZSBiZXR3ZWVuIHNpbmdsZQotICAgIC8vIGFuZCBkb3VibGUgYnVmZmVyaW5nLgotICAg
IG1fdXNlRG91YmxlQnVmZmVyaW5nID0gQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpICYmIGRlZmVy
cmFsTW9kZSA9PSBOb25EZWZlcnJlZDsKLQotICAgIC8vIFRoZSB0aHJlYWRlZCBjb21wb3NpdG9y
IGlzIHNlbGYgcmF0ZS1saW1pdGluZyB3aGVuIHJlbmRlcmluZwotICAgIC8vIHRvIGEgc2luZ2xl
IGJ1ZmZlcmVkIGNhbnZhcyBsYXllci4KLSAgICBtX3VzZVJhdGVMaW1pdGVyID0gIUNDUHJveHk6
Omhhc0ltcGxUaHJlYWQoKSB8fCBtX3VzZURvdWJsZUJ1ZmZlcmluZzsKLX0KLQotQ2FudmFzMkRM
YXllckNocm9taXVtOjp+Q2FudmFzMkRMYXllckNocm9taXVtKCkKLXsKLSAgICBzZXRUZXh0dXJl
SWQoMCk7Ci0gICAgaWYgKG1fY29udGV4dCAmJiBtX3VzZVJhdGVMaW1pdGVyICYmIGxheWVyVHJl
ZUhvc3QoKSkKLSAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdG9wUmF0ZUxpbWl0ZXIobV9jb250
ZXh0LmdldCgpKTsKLX0KLQotYm9vbCBDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdpbmdJbnRv
SW1wbFRocmVhZFRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiAhbV91c2VEb3VibGVCdWZm
ZXJpbmcgJiYgQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpICYmIGxheWVyVHJlZUhvc3QoKTsKLX0K
LQotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnNldFRleHR1cmVJZCh1bnNpZ25lZCB0ZXh0
dXJlSWQpCi17Ci0gICAgaWYgKG1fYmFja1RleHR1cmVJZCA9PSB0ZXh0dXJlSWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2JhY2tUZXh0dXJlSWQgJiYgZHJhd2luZ0ludG9JbXBsVGhy
ZWFkVGV4dHVyZSgpKSB7Ci0gICAgICAgIC8vIFRoZSBpbXBsIHRyZWUgbWF5IGJlIHJlZmVyZW5j
aW5nIHRoZSBvbGQgbV9iYWNrVGV4dHVyZSwgd2hpY2ggbWF5Ci0gICAgICAgIC8vIHNvb24gYmUg
ZGVsZXRlZC4gV2UgbXVzdCBtYWtlIHN1cmUgdGhlIGxheWVyIHRyZWUgb24gdGhlIGltcGwgdGhy
ZWFkCi0gICAgICAgIC8vIGlzIG5vdCBkcmF3biB1bnRpbCB0aGUgbmV4dCBjb21taXQsIHdoaWNo
IHdpbGwgcmUtc3luY2hyb25pemUgdGhlCi0gICAgICAgIC8vIGxheWVyIHRyZWVzLgotICAgICAg
ICBsYXllclRyZWVIb3N0KCktPmFjcXVpcmVMYXllclRleHR1cmVzKCk7Ci0gICAgfQotICAgIG1f
YmFja1RleHR1cmVJZCA9IHRleHR1cmVJZDsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12
b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5UmVjdChjb25zdCBGbG9h
dFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXlS
ZWN0KGRpcnR5UmVjdCk7Ci0KLSAgICBpZiAobV91c2VSYXRlTGltaXRlciAmJiBsYXllclRyZWVI
b3N0KCkpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RhcnRSYXRlTGltaXRlcihtX2NvbnRl
eHQuZ2V0KCkpOwotfQotCi1ib29sIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgJiYg
bV9iYWNrVGV4dHVyZUlkICYmICFtX3NpemUuaXNFbXB0eSgpCi0gICAgICAgICYmICFtX2NvbnRl
eHRMb3N0OwotfQotCi12b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6c2V0Q2FudmFzKFNrQ2Fu
dmFzKiBjYW52YXMpCi17Ci0gICAgbV9jYW52YXMgPSBjYW52YXM7Ci19Ci0KLXZvaWQgQ2FudmFz
MkRMYXllckNocm9taXVtOjp1cGRhdGUoQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlciwgY29uc3Qg
Q0NPY2NsdXNpb25UcmFja2VyKikKLXsKLSAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlIik7Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fdXNlRG91YmxlQnVmZmVyaW5nICYmIGxheWVyVHJlZUhv
c3QoKSkgewotICAgICAgICBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIgPSBsYXllclRy
ZWVIb3N0KCktPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsKLSAgICAgICAgaWYgKG1fZnJvbnRU
ZXh0dXJlKQotICAgICAgICAgICAgbV9mcm9udFRleHR1cmUtPnNldFRleHR1cmVNYW5hZ2VyKHRl
eHR1cmVNYW5hZ2VyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9mcm9udFRleHR1cmUg
PSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKHRleHR1cmVNYW5hZ2VyKTsKLSAgICAgICAgaWYgKG1f
ZnJvbnRUZXh0dXJlLT5yZXNlcnZlKG1fc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQot
ICAgICAgICAgICAgdXBkYXRlci5hcHBlbmRNYW5hZ2VkQ29weShtX2JhY2tUZXh0dXJlSWQsIG1f
ZnJvbnRUZXh0dXJlLmdldCgpLCBtX3NpemUpOwotICAgIH0KLQotICAgIGlmICghbmVlZHNEaXNw
bGF5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0K
LSAgICBib29sIHN1Y2Nlc3MgPSBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0KLSAgICBtX2NvbnRleHRMb3N0ID0g
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7Ci0gICAgaWYgKG1fY29udGV4dExvc3QpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2NhbnZhcykgewotICAgICAgICBUUkFDRV9FVkVO
VDAoImNjIiwgIlNrQ2FudmFzOjpmbHVzaCIpOwotICAgICAgICBtX2NhbnZhcy0+Zmx1c2goKTsK
LSAgICB9Ci0KLSAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkdyYXBoaWNzQ29udGV4dDNEOjpmbHVz
aCIpOwotICAgIG1fY29udGV4dC0+Zmx1c2goKTsKLX0KLQotdm9pZCBDYW52YXMyRExheWVyQ2hy
b21pdW06OmxheWVyV2lsbERyYXcoV2lsbERyYXdDb25kaXRpb24gY29uZGl0aW9uKSBjb25zdAot
ewotICAgIGlmIChkcmF3aW5nSW50b0ltcGxUaHJlYWRUZXh0dXJlKCkpIHsKLSAgICAgICAgaWYg
KGNvbmRpdGlvbiA9PSBXaWxsRHJhd1VuY29uZGl0aW9uYWxseSB8fCBtX2RlZmVycmFsTW9kZSA9
PSBOb25EZWZlcnJlZCkKLSAgICAgICAgICAgIGxheWVyVHJlZUhvc3QoKS0+YWNxdWlyZUxheWVy
VGV4dHVyZXMoKTsKLSAgICB9Ci19Ci0KLQotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnB1
c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQotewotICAgIENhbnZhc0xheWVyQ2hy
b21pdW06OnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIpOwotCi0gICAgQ0NUZXh0dXJlTGF5ZXJJbXBs
KiB0ZXh0dXJlTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1RleHR1cmVMYXllckltcGwqPihsYXllcik7
Ci0gICAgaWYgKG1fdXNlRG91YmxlQnVmZmVyaW5nKSB7Ci0gICAgICAgIGlmIChtX2Zyb250VGV4
dHVyZSAmJiBtX2Zyb250VGV4dHVyZS0+aXNWYWxpZChtX3NpemUsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBKSkKLSAgICAgICAgICAgIHRleHR1cmVMYXllci0+c2V0VGV4dHVyZUlkKG1fZnJvbnRU
ZXh0dXJlLT50ZXh0dXJlSWQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRleHR1cmVM
YXllci0+c2V0VGV4dHVyZUlkKDApOwotICAgIH0gZWxzZQotICAgICAgICB0ZXh0dXJlTGF5ZXIt
PnNldFRleHR1cmVJZChtX2JhY2tUZXh0dXJlSWQpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDNjNjg2NWFmNGFmZGMxMmUzNjQ2OWVl
ZmVjY2U4ZTk2MzI2YjY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBD
YW52YXMyRExheWVyQ2hyb21pdW1faAotI2RlZmluZSBDYW52YXMyRExheWVyQ2hyb21pdW1faAot
Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiQ2FudmFzTGF5
ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiTWFuYWdl
ZFRleHR1cmUuaCIKLQotY2xhc3MgU2tDYW52YXM7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBSZWdpb247Ci0KLS8vIEEgbGF5ZXIgY29u
dGFpbmluZyBhbiBhY2NlbGVyYXRlZCAyZCBjYW52YXMKLWNsYXNzIENhbnZhczJETGF5ZXJDaHJv
bWl1bSA6IHB1YmxpYyBDYW52YXNMYXllckNocm9taXVtIHsKLXB1YmxpYzoKLSAgICBlbnVtIFdp
bGxEcmF3Q29uZGl0aW9uIHsKLSAgICAgICAgV2lsbERyYXdVbmNvbmRpdGlvbmFsbHksCi0gICAg
ICAgIFdpbGxEcmF3SWZMYXllck5vdERlZmVycmVkLAotICAgIH07Ci0KLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiwgY29uc3QgSW50U2l6ZSYsIERlZmVycmFsTW9kZSk7Ci0gICAgdmlydHVhbCB+
Q2FudmFzMkRMYXllckNocm9taXVtKCk7Ci0KLSAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25l
ZCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5UmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKENDVGV4dHVyZVVwZGF0ZXImLCBjb25z
dCBDQ09jY2x1c2lvblRyYWNrZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcHVzaFBy
b3BlcnRpZXNUbyhDQ0xheWVySW1wbCopIE9WRVJSSURFOwotCi0gICAgdm9pZCBzZXRDYW52YXMo
U2tDYW52YXMqKTsKLSAgICB2b2lkIGxheWVyV2lsbERyYXcoV2lsbERyYXdDb25kaXRpb24pIGNv
bnN0OwotCi1wcml2YXRlOgotICAgIENhbnZhczJETGF5ZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiwgY29uc3QgSW50U2l6ZSYsIERlZmVycmFsTW9kZSk7Ci0gICAgYm9v
bCBkcmF3aW5nSW50b0ltcGxUaHJlYWRUZXh0dXJlKCkgY29uc3Q7Ci0KLSAgICBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKLSAgICBib29sIG1fY29udGV4dExvc3Q7Ci0gICAg
SW50U2l6ZSBtX3NpemU7Ci0gICAgdW5zaWduZWQgbV9iYWNrVGV4dHVyZUlkOwotICAgIC8vIFdo
ZW4gbV91c2VEb3VibGVCdWZmZXJpbmcgaXMgdHJ1ZSwgdGhlIGNvbXBvc2l0b3Igd2lsbCBkcmF3
IHVzaW5nIGEgY29weSBvZiB0aGUKLSAgICAvLyBjYW52YXMnIGJhY2tpbmcgdGV4dHVyZS4gVGhp
cyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgd2l0aCB0aGUgY29tcG9zaXRvciBkb2Vzbid0Ci0gICAg
Ly8gc3luY2hyb25pemUgaXRzIGRyYXdzIHdpdGggdGhlIGNhbnZhcyB1cGRhdGVzLgotICAgIGJv
b2wgbV91c2VEb3VibGVCdWZmZXJpbmc7Ci0gICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX2Zy
b250VGV4dHVyZTsKLSAgICBTa0NhbnZhcyogbV9jYW52YXM7Ci0gICAgYm9vbCBtX3VzZVJhdGVM
aW1pdGVyOwotICAgIERlZmVycmFsTW9kZSBtX2RlZmVycmFsTW9kZTsKLX07Ci0KLX0KLSNlbmRp
ZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOTQzMTczNTA0YmI0ZDVhNTI5ZWEzYzZmYTVk
NTllM2I0ZTZiYTI3Ni4uMWFlYjNjNjJmNTZkNmI0Njg3NTQ0YmVhMWQ5OTBhNzAwMDQyMWQwOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC00Niw3ICs0Niw2IEBA
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCiAKICNpbmNsdWRlICJBbmltYXRp
b25JZFZlbmRvci5oIgotI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmgKaW5k
ZXggYzkwOTMwNGNlNWU1YmM0MDdlYTUwYzZkM2JhMmQ2ZTA4ZWI1MmRiZS4uZjNlMTU5OTRhMmE0
MmMyZWVhYjdhNTc5N2U5ZmY2NjdkZGY4MjAyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNr
aWEuaApAQCAtMzAsMTIgKzMwLDEzIEBACiAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lh
LmgiCiAKKyNpbmNsdWRlICJTa1JlZkNudC5oIgogI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3Jt
X2NhbnZhcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi1jbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW07CitjbGFzcyBDYW52YXMy
RExheWVyQnJpZGdlOwogI2VuZGlmCiAKIGNsYXNzIEltYWdlQnVmZmVyRGF0YSB7CkBAIC00NSw3
ICs0Niw3IEBAIHB1YmxpYzoKICAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFzOwogICAgIFBs
YXRmb3JtQ29udGV4dFNraWEgbV9wbGF0Zm9ybUNvbnRleHQ7CiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotICAgIFJlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IG1fcGxhdGZv
cm1MYXllcjsKKyAgICBTa0F1dG9UVW5yZWY8Q2FudmFzMkRMYXllckJyaWRnZT4gbV9sYXllckJy
aWRnZTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDczODQ0OTI2NDE3Y2NjZjE2YzYxYzU1MGU0Mjk5MWJlMWJmZWE0ZjkuLjYzZWQyNDRiMDNh
MjM4Zjk4MzdlMTA2Y2VlZmE4OWI3OGFkYjQ5Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVMYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTEwMyw2ICsxMDMsMTIgQEAgdm9pZCBUZXh0dXJlTGF5ZXJDaHJvbWl1
bTo6c2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKQogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAK
K3ZvaWQgVGV4dHVyZUxheWVyQ2hyb21pdW06OndpbGxNb2RpZnlUZXh0dXJlKCkKK3sKKyAgICBp
ZiAobGF5ZXJUcmVlSG9zdCgpKQorICAgICAgICBsYXllclRyZWVIb3N0KCktPmFjcXVpcmVMYXll
clRleHR1cmVzKCk7Cit9CisKIHZvaWQgVGV4dHVyZUxheWVyQ2hyb21pdW06OnNldE5lZWRzRGlz
cGxheVJlY3QoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgTGF5ZXJDaHJvbWl1
bTo6c2V0TmVlZHNEaXNwbGF5UmVjdChkaXJ0eVJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxheWVyQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVMYXllckNo
cm9taXVtLmgKaW5kZXggNDNmNDkyNzAzZWQ5M2NkNWMzMWMwMWU3NDVlNjUzZDQxM2MwNGY5Yi4u
YTMzZDEwMGE0ZDUwYzQ1MDBhM2EyZGEzODIzYmUwNmY5YmFjYWNkNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxheWVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0
dXJlTGF5ZXJDaHJvbWl1bS5oCkBAIC03Nyw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICAvLyBDb2Rl
IHBhdGggZm9yIHBsdWdpbnMgd2hpY2ggc3VwcGx5IHRoZWlyIG93biB0ZXh0dXJlIElELgogICAg
IHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkKTsKIAorICAgIHZvaWQgd2lsbE1vZGlmeVRleHR1
cmUoKTsKKwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIHNldExheWVyVHJlZUhvc3QoQ0NM
YXllclRyZWVIb3N0KikgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3Bw
CmluZGV4IGFiNTZkMWYzNzdhMmM2ZjhjZTViNzIzY2NkNjUxYWFlZTE0YmU5YTEuLjRmZDQwMmY4
YjJiMzNmOWQzNGRjZTYwYzI0OTZjYzJlNDdkMDFmNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVy
ZVVwZGF0ZXIuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKLSNpbmNsdWRlICJNYW5h
Z2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIlRleHR1cmVDb3BpZXIuaCIKICNpbmNsdWRlICJUZXh0
dXJlVXBsb2FkZXIuaCIKIApAQCAtNzgsMTggKzc3LDkgQEAgdm9pZCBDQ1RleHR1cmVVcGRhdGVy
OjphcHBlbmRDb3B5KHVuc2lnbmVkIHNvdXJjZVRleHR1cmUsIHVuc2lnbmVkIGRlc3RUZXh0dXJl
LAogICAgIG1fY29weUVudHJpZXMuYXBwZW5kKGNvcHkpOwogfQogCi12b2lkIENDVGV4dHVyZVVw
ZGF0ZXI6OmFwcGVuZE1hbmFnZWRDb3B5KHVuc2lnbmVkIHNvdXJjZVRleHR1cmUsIE1hbmFnZWRU
ZXh0dXJlKiBkZXN0VGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBNYW5hZ2Vk
Q29weUVudHJ5IGNvcHk7Ci0gICAgY29weS5zb3VyY2VUZXh0dXJlID0gc291cmNlVGV4dHVyZTsK
LSAgICBjb3B5LmRlc3RUZXh0dXJlID0gZGVzdFRleHR1cmU7Ci0gICAgY29weS5zaXplID0gc2l6
ZTsKLSAgICBtX21hbmFnZWRDb3B5RW50cmllcy5hcHBlbmQoY29weSk7Ci19Ci0KIGJvb2wgQ0NU
ZXh0dXJlVXBkYXRlcjo6aGFzTW9yZVVwZGF0ZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX2Vu
dHJpZXMuc2l6ZSgpIHx8IG1fcGFydGlhbEVudHJpZXMuc2l6ZSgpIHx8IG1fY29weUVudHJpZXMu
c2l6ZSgpIHx8IG1fbWFuYWdlZENvcHlFbnRyaWVzLnNpemUoKTsKKyAgICByZXR1cm4gbV9lbnRy
aWVzLnNpemUoKSB8fCBtX3BhcnRpYWxFbnRyaWVzLnNpemUoKSB8fCBtX2NvcHlFbnRyaWVzLnNp
emUoKTsKIH0KIAogdm9pZCBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgVGV4dHVyZUNvcGllciog
Y29waWVyLCBUZXh0dXJlVXBsb2FkZXIqIHVwbG9hZGVyLCBzaXplX3QgY291bnQpCkBAIC0xMzQs
MTUgKzEyNCwxMSBAQCB2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsbwogICAgICAgICBDb3B5RW50cnkm
IGNvcHlFbnRyeSA9IG1fY29weUVudHJpZXNbaW5kZXhdOwogICAgICAgICBjb3BpZXItPmNvcHlU
ZXh0dXJlKGNvbnRleHQsIGNvcHlFbnRyeS5zb3VyY2VUZXh0dXJlLCBjb3B5RW50cnkuZGVzdFRl
eHR1cmUsIGNvcHlFbnRyeS5zaXplKTsKICAgICB9Ci0gICAgZm9yIChpbmRleCA9IDA7IGluZGV4
IDwgbV9tYW5hZ2VkQ29weUVudHJpZXMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIE1hbmFn
ZWRDb3B5RW50cnkmIG1hbmFnZWRDb3B5RW50cnkgPSBtX21hbmFnZWRDb3B5RW50cmllc1tpbmRl
eF07Ci0gICAgICAgIG1hbmFnZWRDb3B5RW50cnkuZGVzdFRleHR1cmUtPmFsbG9jYXRlKGFsbG9j
YXRvcik7Ci0gICAgICAgIGNvcGllci0+Y29weVRleHR1cmUoY29udGV4dCwgbWFuYWdlZENvcHlF
bnRyeS5zb3VyY2VUZXh0dXJlLCBtYW5hZ2VkQ29weUVudHJ5LmRlc3RUZXh0dXJlLT50ZXh0dXJl
SWQoKSwgbWFuYWdlZENvcHlFbnRyeS5zaXplKTsKLSAgICB9CisKICAgICAvLyBJZiB3ZSd2ZSBw
ZXJmb3JtZWQgYW55IHRleHR1cmUgY29waWVzLCB3ZSBuZWVkIHRvIGluc2VydCBhIGZsdXNoIGhl
cmUgaW50byB0aGUgY29tcG9zaXRvciBjb250ZXh0CiAgICAgLy8gYmVmb3JlIGxldHRpbmcgdGhl
IG1haW4gdGhyZWFkIHByb2NlZWQgYXMgaXQgbWF5IG1ha2UgZHJhdyBjYWxscyB0byB0aGUgc291
cmNlIHRleHR1cmUgb2Ygb25lIG9mCiAgICAgLy8gb3VyIGNvcHkgb3BlcmF0aW9ucy4KLSAgICBp
ZiAobV9jb3B5RW50cmllcy5zaXplKCkgfHwgbV9tYW5hZ2VkQ29weUVudHJpZXMuc2l6ZSgpKQor
ICAgIGlmIChtX2NvcHlFbnRyaWVzLnNpemUoKSkKICAgICAgICAgY29udGV4dC0+Zmx1c2goKTsK
IAogICAgIC8vIElmIG5vIGVudHJpZXMgbGVmdCB0byBwcm9jZXNzLCBhdXRvLWNsZWFyLgpAQCAt
MTU1LDcgKzE0MSw2IEBAIHZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6Y2xlYXIoKQogICAgIG1fZW50
cmllcy5jbGVhcigpOwogICAgIG1fcGFydGlhbEVudHJpZXMuY2xlYXIoKTsKICAgICBtX2NvcHlF
bnRyaWVzLmNsZWFyKCk7Ci0gICAgbV9tYW5hZ2VkQ29weUVudHJpZXMuY2xlYXIoKTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCmluZGV4IDI0ZDg5NmYyYjU5MTIwOTAwNDFh
NDMzZjE2NjUxZDYyM2MwZGI2MmYuLjNmM2E5NGRkOTlmYjAwZGU4NzllZDhiODI3NmRjMmFhNTc0
ZDAxMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKQEAgLTQ1LDcgKzQ1LDYgQEAg
cHVibGljOgogICAgIHZvaWQgYXBwZW5kVXBkYXRlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7
CiAgICAgdm9pZCBhcHBlbmRQYXJ0aWFsVXBkYXRlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7
CiAgICAgdm9pZCBhcHBlbmRDb3B5KHVuc2lnbmVkIHNvdXJjZVRleHR1cmUsIHVuc2lnbmVkIGRl
c3RUZXh0dXJlLCBjb25zdCBJbnRTaXplJik7Ci0gICAgdm9pZCBhcHBlbmRNYW5hZ2VkQ29weSh1
bnNpZ25lZCBzb3VyY2VUZXh0dXJlLCBNYW5hZ2VkVGV4dHVyZSogZGVzdFRleHR1cmUsIGNvbnN0
IEludFNpemUmKTsKIAogICAgIGJvb2wgaGFzTW9yZVVwZGF0ZXMoKSBjb25zdDsKIApAQCAtNjcs
MTkgKzY2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGRlc3RUZXh0dXJlOwogICAg
IH07CiAKLSAgICBzdHJ1Y3QgTWFuYWdlZENvcHlFbnRyeSB7Ci0gICAgICAgIEludFNpemUgc2l6
ZTsKLSAgICAgICAgdW5zaWduZWQgc291cmNlVGV4dHVyZTsKLSAgICAgICAgTWFuYWdlZFRleHR1
cmUqIGRlc3RUZXh0dXJlOwotICAgIH07Ci0KICAgICBzdGF0aWMgdm9pZCBhcHBlbmRVcGRhdGUo
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBWZWN0b3I8VXBkYXRlRW50cnk+Jik7CiAKICAgICBz
aXplX3QgbV9lbnRyeUluZGV4OwogICAgIFZlY3RvcjxVcGRhdGVFbnRyeT4gbV9lbnRyaWVzOwog
ICAgIFZlY3RvcjxVcGRhdGVFbnRyeT4gbV9wYXJ0aWFsRW50cmllczsKICAgICBWZWN0b3I8Q29w
eUVudHJ5PiBtX2NvcHlFbnRyaWVzOwotICAgIFZlY3RvcjxNYW5hZ2VkQ29weUVudHJ5PiBtX21h
bmFnZWRDb3B5RW50cmllczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAppbmRleCA4YjA4NmEw
Nzk4YjY0NmY4MDVmMTBhMzQxMDQ1OTQ3M2UzYWRkYmNkLi5jYzkzOGJlMmRiMGU2ZTU3MjUxZjFk
Y2NlMWU1MTUwOGFmMTk4YjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCkBAIC01MSw3ICs1MSw3IEBA
CiAjaW5jbHVkZSAiV0VCUEltYWdlRW5jb2Rlci5oIgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUg
IkNhbnZhczJETGF5ZXJCcmlkZ2UuaCIKICNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CkBAIC02OSwzMCArNjksNiBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVy
RGF0YShjb25zdCBJbnRTaXplJiBzaXplKQogewogfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotY2xhc3MgQWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0IDogcHVibGljIFNrRGVm
ZXJyZWRDYW52YXM6OkRldmljZUNvbnRleHQgewotcHVibGljOgotICAgIEFjY2VsZXJhdGVkRGV2
aWNlQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNELCBDYW52YXMyRExheWVyQ2hy
b21pdW0qIGxheWVyKQotICAgICAgICA6IG1fcGxhdGZvcm1MYXllcihsYXllcikKLSAgICAgICAg
LCBtX2NvbnRleHQzRCgpCi0gICAgewotICAgICAgICBBU1NFUlQoY29udGV4dDNEKTsKLSAgICAg
ICAgQVNTRVJUKGxheWVyKTsKLSAgICAgICAgbV9jb250ZXh0M0QgPSBjb250ZXh0M0Q7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEcmF3KCkKLSAgICB7Ci0gICAgICAgIG1f
cGxhdGZvcm1MYXllci0+bGF5ZXJXaWxsRHJhdyhDYW52YXMyRExheWVyQ2hyb21pdW06OldpbGxE
cmF3VW5jb25kaXRpb25hbGx5KTsKLSAgICAgICAgbV9jb250ZXh0M0QtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBDYW52YXMyRExheWVyQ2hyb21pdW0qIG1f
cGxhdGZvcm1MYXllcjsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0M0Q7Ci19Owot
I2VuZGlmCi0KIHN0YXRpYyBTa0NhbnZhcyogY3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgSW1hZ2VCdWZmZXJEYXRhKiBkYXRhLCBEZWZlcnJhbE1vZGUgZGVmZXJy
YWxNb2RlKQogewogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dDNEID0gU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpOwpAQCAtMTE0LDIwICs5MCwxNiBAQCBzdGF0aWMg
U2tDYW52YXMqIGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKGNvbnN0IEludFNpemUmIHNpemUsIElt
YWdlQnVmZmVyRGF0YSogZAogICAgIFNrQ2FudmFzKiBjYW52YXM7CiAgICAgU2tBdXRvVFVucmVm
PFNrRGV2aWNlPiBkZXZpY2UobmV3IFNrR3B1RGV2aWNlKGdyLCB0ZXh0dXJlLmdldCgpKSk7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGRhdGEtPm1fcGxhdGZvcm1MYXll
ciA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRleHQzRCwgc2l6ZSwgZGVmZXJy
YWxNb2RlKTsKLSAgICBpZiAoZGVmZXJyYWxNb2RlID09IERlZmVycmVkKSB7Ci0gICAgICAgIFNr
QXV0b1RVbnJlZjxBY2NlbGVyYXRlZERldmljZUNvbnRleHQ+IGRldmljZUNvbnRleHQobmV3IEFj
Y2VsZXJhdGVkRGV2aWNlQ29udGV4dChjb250ZXh0M0QuZ2V0KCksIGRhdGEtPm1fcGxhdGZvcm1M
YXllci5nZXQoKSkpOwotICAgICAgICBjYW52YXMgPSBuZXcgU2tEZWZlcnJlZENhbnZhcyhkZXZp
Y2UuZ2V0KCksIGRldmljZUNvbnRleHQuZ2V0KCkpOwotICAgIH0gZWxzZQotICAgICAgICBjYW52
YXMgPSBuZXcgU2tDYW52YXMoZGV2aWNlLmdldCgpKTsKKyAgICBkYXRhLT5tX2xheWVyQnJpZGdl
LnJlc2V0KG5ldyBDYW52YXMyRExheWVyQnJpZGdlKGNvbnRleHQzRC5yZWxlYXNlKCksIHNpemUs
IGRlZmVycmFsTW9kZSwgdGV4dHVyZS5nZXQoKS0+Z2V0VGV4dHVyZUhhbmRsZSgpKSk7CisgICAg
aWYgKGRlZmVycmFsTW9kZSA9PSBEZWZlcnJlZCkKKyAgICAgICAgY2FudmFzID0gbmV3IFNrRGVm
ZXJyZWRDYW52YXMoZGV2aWNlLCBkYXRhLT5tX2xheWVyQnJpZGdlLmdldCgpKTsKKyAgICBlbHNl
CisgICAgICAgIGNhbnZhcyA9IG5ldyBTa0NhbnZhcyhkZXZpY2UpOworICAgIGRhdGEtPm1fbGF5
ZXJCcmlkZ2UuZ2V0KCktPnNldFNrQ2FudmFzKGNhbnZhcyk7CiAjZWxzZQogICAgIGNhbnZhcyA9
IG5ldyBTa0NhbnZhcyhkZXZpY2UuZ2V0KCkpOwogI2VuZGlmCiAgICAgZGF0YS0+bV9wbGF0Zm9y
bUNvbnRleHQuc2V0QWNjZWxlcmF0ZWQodHJ1ZSk7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllci0+c2V0VGV4dHVyZUlkKHRleHR1cmUu
Z2V0KCktPmdldFRleHR1cmVIYW5kbGUoKSk7Ci0gICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyLT5z
ZXRDYW52YXMoY2FudmFzKTsKLSNlbmRpZgogICAgIHJldHVybiBjYW52YXM7CiB9CiAKQEAgLTE3
NCwxNyArMTQ2LDE2IEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBz
aXplLCBmbG9hdCAvKiByZXNvbHV0aW9uU2NhbGUgKi8sIENvbG9yCiAKIEltYWdlQnVmZmVyOjp+
SW1hZ2VCdWZmZXIoKQogewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBp
ZiAobV9kYXRhLm1fcGxhdGZvcm1MYXllcikKLSAgICAgICAgbV9kYXRhLm1fcGxhdGZvcm1MYXll
ci0+c2V0VGV4dHVyZUlkKDApOwotI2VuZGlmCiB9CiAKIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VC
dWZmZXI6OmNvbnRleHQoKSBjb25zdAogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLSAgICBpZiAobV9kYXRhLm1fcGxhdGZvcm1MYXllcikKLSAgICAgICAgbV9kYXRhLm1fcGxh
dGZvcm1MYXllci0+bGF5ZXJXaWxsRHJhdyhDYW52YXMyRExheWVyQ2hyb21pdW06OldpbGxEcmF3
SWZMYXllck5vdERlZmVycmVkKTsKKyAgICBpZiAobV9kYXRhLm1fbGF5ZXJCcmlkZ2UuZ2V0KCkp
IHsKKyAgICAgICAgLy8gV2UncmUgdXNpbmcgY29udGV4dCBhY3F1aXNpdGlvbiBhcyBhIHNpZ25h
bCB0aGF0IHNvbWVvbmUgaXMgYWJvdXQgdG8gcmVuZGVyIGludG8gb3VyIGJ1ZmZlciBhbmQgd2Ug
bmVlZAorICAgICAgICAvLyB0byBiZSByZWFkeS4gVGhpcyBpc24ndCBsb2dpY2FsbHkgY29uc3Qt
Y29ycmVjdCwgaGVuY2UgdGhlIGNhc3QuCisgICAgICAgIGNvbnN0X2Nhc3Q8Q2FudmFzMkRMYXll
ckJyaWRnZSo+KG1fZGF0YS5tX2xheWVyQnJpZGdlLmdldCgpKS0+Y29udGV4dEFjcXVpcmVkKCk7
CisgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KQEAgLTE5Niw3
ICsxNjcsNyBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tp
bmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAogCiBQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1
ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS5tX3BsYXRm
b3JtTGF5ZXIuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGF0YS5tX2xheWVyQnJpZGdlLmdldCgpID8g
bV9kYXRhLm1fbGF5ZXJCcmlkZ2UuZ2V0KCktPmxheWVyKCkgOiAwOwogfQogCiB2b2lkIEltYWdl
QnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggYmIyZTNiZDMyYzhh
NWQyNmZhM2Q0YjJmYTVlZjc2YjRlN2M2MjkzZC4uZDYxZDE3YjAzZDUwZmMyOGYwYTk0NWM3M2Fm
ZjdjYzgyODFhNjI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC01OSw3ICs1
OSw3IEBACiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAgICAgICAgICAn
dGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKICAgICAgICAgICAgICd0ZXN0cy9Bc3NvY2lhdGVk
VVJMTG9hZGVyVGVzdC5jcHAnLAotICAgICAgICAgICAgJ3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJv
bWl1bVRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQnJpZGdlVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckJyaWRnZVRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQnJpZGdlVGVzdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYmRhZTBhYmYwMjBmZGM5YzEwMmUxMDQxZTdjYWI3NDgyMjhmMjEzZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckJyaWRn
ZVRlc3QuY3BwCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJDYW52YXMyRExheWVyQnJpZGdlLmgiCisKKyNpbmNsdWRlICJG
YWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVDb3Bp
ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgorI2luY2x1ZGUgIldlYkNvbXBvc2l0
b3IuaCIKKyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVy
LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVk
ZSAicGxhdGZvcm0vV2ViVGhyZWFkLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyB0ZXN0aW5n
OjpJblNlcXVlbmNlOwordXNpbmcgdGVzdGluZzo6UmV0dXJuOwordXNpbmcgdGVzdGluZzo6VGVz
dDsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTW9ja0NhbnZhc0NvbnRleHQgOiBwdWJsaWMgRmFr
ZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDAoZmx1c2gs
IHZvaWQodm9pZCkpOworICAgIE1PQ0tfTUVUSE9EMChjcmVhdGVUZXh0dXJlLCB1bnNpZ25lZCh2
b2lkKSk7CisgICAgTU9DS19NRVRIT0QxKGRlbGV0ZVRleHR1cmUsIHZvaWQodW5zaWduZWQpKTsK
KworICAgIHZpcnR1YWwgR3JDb250ZXh0KiBnckNvbnRleHQoKSBPVkVSUklERSB7IHJldHVybiAw
OyB9Cit9OworCitjbGFzcyBNb2NrVGV4dHVyZUNvcGllciA6IHB1YmxpYyBUZXh0dXJlQ29waWVy
IHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDQoY29weVRleHR1cmUsIHZvaWQoR3JhcGhpY3ND
b250ZXh0M0QqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IEludFNpemUmKSkgT1ZFUlJJREU7
Cit9OworCit9IC8vIG5hbWVzcGFjZQorCitlbnVtIFRocmVhZE1vZGUgeworICAgIFNpbmdsZVRo
cmVhZGVkLCBUaHJlYWRlZAorfTsKKworY2xhc3MgQ2FudmFzMkRMYXllckJyaWRnZVRlc3QgOiBw
dWJsaWMgVGVzdCB7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBmdWxsTGlmZWN5Y2xlVGVzdChUaHJl
YWRNb2RlIHRocmVhZE1vZGUsIERlZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUpCisgICAgeworICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKKworICAgICAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1haW5Db250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgTW9j
a0NhbnZhc0NvbnRleHQoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdyk7CisgICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gaW1wbENvbnRleHQg
PSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJD
b250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ2FudmFzQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKworICAgICAgICBNb2NrQ2FudmFzQ29u
dGV4dCYgbWFpbk1vY2sgPSAqc3RhdGljX2Nhc3Q8TW9ja0NhbnZhc0NvbnRleHQqPihHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChtYWluQ29udGV4
dC5nZXQoKSkpOworICAgICAgICBNb2NrQ2FudmFzQ29udGV4dCYgaW1wbE1vY2sgPSAqc3RhdGlj
X2Nhc3Q8TW9ja0NhbnZhc0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJh
Y3RXZWJHcmFwaGljc0NvbnRleHQzRChpbXBsQ29udGV4dC5nZXQoKSkpOworCisgICAgICAgIE1v
Y2tUZXh0dXJlQ29waWVyIGNvcGllck1vY2s7CisgICAgICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBk
YXRlcjsKKworICAgICAgICBjb25zdCBJbnRTaXplIHNpemUoMzAwLCAxNTApOworCisgICAgICAg
IE93blB0cjxXZWJUaHJlYWQ+IHRocmVhZDsKKyAgICAgICAgaWYgKHRocmVhZE1vZGUgPT0gVGhy
ZWFkZWQpCisgICAgICAgICAgICB0aHJlYWQgPSBhZG9wdFB0cihXZWJLaXQ6OlBsYXRmb3JtOjpj
dXJyZW50KCktPmNyZWF0ZVRocmVhZCgiQ2FudmFzMkRMYXllckJyaWRnZVRlc3QiKSk7CisgICAg
ICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUodGhyZWFkLmdldCgpKTsKKworICAgICAgICBX
ZWJHTElkIGJhY2tUZXh0dXJlSWQgPSAxOworICAgICAgICBXZWJHTElkIGZyb250VGV4dHVyZUlk
ID0gMTsKKworICAgICAgICAvLyBUaHJlYWRlZCBhbmQgbm9uIGRlZmVycmVkIGNhbnZhc2VzIGFy
ZSBkb3VibGUgYnVmZmVyZWQuCisgICAgICAgIGlmICh0aHJlYWRNb2RlID09IFRocmVhZGVkICYm
IGRlZmVycmFsTW9kZSA9PSBOb25EZWZlcnJlZCkgeworICAgICAgICAgICAgZnJvbnRUZXh0dXJl
SWQgPSAyOworICAgICAgICAgICAgLy8gQ3JlYXRlIHRleHR1cmUgKG9uIHRoZSBtYWluIHRocmVh
ZCkgYW5kIGRvIHRoZSBjb3B5IChvbiB0aGUgaW1wbCB0aHJlYWQpLgorICAgICAgICAgICAgRVhQ
RUNUX0NBTEwobWFpbk1vY2ssIGNyZWF0ZVRleHR1cmUoKSkuV2lsbE9uY2UoUmV0dXJuKGZyb250
VGV4dHVyZUlkKSk7CisgICAgICAgIH0KKworICAgICAgICBTa0F1dG9UVW5yZWY8Q2FudmFzMkRM
YXllckJyaWRnZT4gYnJpZGdlKG5ldyBDYW52YXMyRExheWVyQnJpZGdlKG1haW5Db250ZXh0Lmdl
dCgpLCBzaXplLCBkZWZlcnJhbE1vZGUsIGJhY2tUZXh0dXJlSWQpKTsKKworICAgICAgICA6OnRl
c3Rpbmc6Ok1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtYWluTW9jayk7CisKKyAg
ICAgICAgRVhQRUNUX0NBTEwobWFpbk1vY2ssIGZsdXNoKCkpOworICAgICAgICBFWFBFQ1RfRVEo
ZnJvbnRUZXh0dXJlSWQsIGJyaWRnZS0+cHJlcGFyZVRleHR1cmUodXBkYXRlcikpOworICAgICAg
ICA6OnRlc3Rpbmc6Ok1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtYWluTW9jayk7
CisKKyAgICAgICAgaWYgKHRocmVhZE1vZGUgPT0gVGhyZWFkZWQgJiYgZGVmZXJyYWxNb2RlID09
IE5vbkRlZmVycmVkKSB7CisgICAgICAgICAgICBFWFBFQ1RfQ0FMTChjb3BpZXJNb2NrLCBjb3B5
VGV4dHVyZShpbXBsQ29udGV4dC5nZXQoKSwgYmFja1RleHR1cmVJZCwgZnJvbnRUZXh0dXJlSWQs
IHNpemUpKTsKKyAgICAgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBmbHVzaCgpKTsKKyAg
ICAgICAgfQorICAgICAgICB1cGRhdGVyLnVwZGF0ZShpbXBsQ29udGV4dC5nZXQoKSwgMCwgJmNv
cGllck1vY2ssIDAsIDEwMCk7CisgICAgICAgIDo6dGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xl
YXJFeHBlY3RhdGlvbnMoJmltcGxNb2NrKTsKKworICAgICAgICBpZiAodGhyZWFkTW9kZSA9PSBU
aHJlYWRlZCAmJiBkZWZlcnJhbE1vZGUgPT0gTm9uRGVmZXJyZWQpIHsKKyAgICAgICAgICAgIEVY
UEVDVF9DQUxMKG1haW5Nb2NrLCBkZWxldGVUZXh0dXJlKGZyb250VGV4dHVyZUlkKSk7CisgICAg
ICAgICAgICBFWFBFQ1RfQ0FMTChtYWluTW9jaywgZmx1c2goKSk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJpZGdlLnJlc2V0KDApOworICAgICAgICA6OnRlc3Rpbmc6Ok1vY2s6OlZlcmlmeUFuZENs
ZWFyRXhwZWN0YXRpb25zKCZpbXBsTW9jayk7CisKKyAgICAgICAgV2ViQ29tcG9zaXRvcjo6c2h1
dGRvd24oKTsKKyAgICB9Cit9OworCituYW1lc3BhY2UgeworCitURVNUX0YoQ2FudmFzMkRMYXll
ckJyaWRnZVRlc3QsIHRlc3RGdWxsTGlmZWN5Y2xlU2luZ2xlVGhyZWFkZWREZWZlcnJlZCkKK3sK
KyAgICBmdWxsTGlmZWN5Y2xlVGVzdChTaW5nbGVUaHJlYWRlZCwgTm9uRGVmZXJyZWQpOworfQor
CitURVNUX0YoQ2FudmFzMkRMYXllckJyaWRnZVRlc3QsIHRlc3RGdWxsTGlmZWN5Y2xlU2luZ2xl
VGhyZWFkZWROb25EZWZlcnJlZCkKK3sKKyAgICBmdWxsTGlmZWN5Y2xlVGVzdChTaW5nbGVUaHJl
YWRlZCwgRGVmZXJyZWQpOworfQorCitURVNUX0YoQ2FudmFzMkRMYXllckJyaWRnZVRlc3QsIHRl
c3RGdWxsTGlmZWN5Y2xlVGhyZWFkZWROb25EZWZlcnJlZCkKK3sKKyAgICBmdWxsTGlmZWN5Y2xl
VGVzdChUaHJlYWRlZCwgTm9uRGVmZXJyZWQpOworfQorCitURVNUX0YoQ2FudmFzMkRMYXllckJy
aWRnZVRlc3QsIHRlc3RGdWxsTGlmZWN5Y2xlVGhyZWFkZWREZWZlcnJlZCkKK3sKKyAgICBmdWxs
TGlmZWN5Y2xlVGVzdChUaHJlYWRlZCwgRGVmZXJyZWQpOworfQorCit9IC8vIG5hbWVzcGFjZQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJD
aHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExh
eWVyQ2hyb21pdW1UZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQyNDg1
YjcxOGYwOGE1NjlmMGYxMjZkNDljZmY2MDBiNWJjZDc1Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkNhbnZh
czJETGF5ZXJDaHJvbWl1bS5oIgotCi0jaW5jbHVkZSAiQ0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgi
Ci0jaW5jbHVkZSAiRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudC5oIgotI2luY2x1ZGUgIkZha2VX
ZWJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5oIgotI2luY2x1ZGUgIlJlZ2lvbi5oIgotI2luY2x1ZGUgIlRleHR1cmVDb3BpZXIuaCIKLSNp
bmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgotI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKLSNp
bmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCi0j
aW5jbHVkZSAiY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmgiCi0jaW5jbHVkZSAiY2MvQ0NUZXh0dXJl
VXBkYXRlci5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgot
I2luY2x1ZGUgInBsYXRmb3JtL1dlYlRocmVhZC5oIgotCi0jaW5jbHVkZSA8Z21vY2svZ21vY2su
aD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNpbmcg
bmFtZXNwYWNlIFdlYktpdFRlc3RzOwotdXNpbmcgdGVzdGluZzo6SW5TZXF1ZW5jZTsKLXVzaW5n
IHRlc3Rpbmc6OlJldHVybjsKLXVzaW5nIHRlc3Rpbmc6OlRlc3Q7Ci0KLW5hbWVzcGFjZSB7Ci0K
LWNsYXNzIEZha2VDQ0xheWVyVHJlZUhvc3QgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxGYWtlQ0NMYXllclRyZWVIb3N0PiBjcmVhdGUo
KQotICAgIHsKLSAgICAgICAgT3duUHRyPEZha2VDQ0xheWVyVHJlZUhvc3Q+IGhvc3QoYWRvcHRQ
dHIobmV3IEZha2VDQ0xheWVyVHJlZUhvc3QpKTsKLSAgICAgICAgaG9zdC0+aW5pdGlhbGl6ZSgp
OwotICAgICAgICByZXR1cm4gaG9zdC5yZWxlYXNlKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IEZha2VDQ0xheWVyVHJlZUhvc3QoKQotICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdCgmbV9jbGll
bnQsIENDU2V0dGluZ3MoKSkKLSAgICB7Ci0gICAgfQotCi0gICAgRmFrZUNDTGF5ZXJUcmVlSG9z
dENsaWVudCBtX2NsaWVudDsKLX07Ci0KLWNsYXNzIE1vY2tDYW52YXNDb250ZXh0IDogcHVibGlj
IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7Ci1wdWJsaWM6Ci0gICAgTU9DS19NRVRIT0QwKGZs
dXNoLCB2b2lkKHZvaWQpKTsKLX07Ci0KLWNsYXNzIE1vY2tUZXh0dXJlQWxsb2NhdG9yIDogcHVi
bGljIFRleHR1cmVBbGxvY2F0b3IgewotcHVibGljOgotICAgIE1PQ0tfTUVUSE9EMihjcmVhdGVU
ZXh0dXJlLCB1bnNpZ25lZChjb25zdCBJbnRTaXplJiwgR0MzRGVudW0pKTsKLSAgICBNT0NLX01F
VEhPRDMoZGVsZXRlVGV4dHVyZSwgdm9pZCh1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYsIEdDM0Rl
bnVtKSk7Ci19OwotCi1jbGFzcyBNb2NrVGV4dHVyZUNvcGllciA6IHB1YmxpYyBUZXh0dXJlQ29w
aWVyIHsKLXB1YmxpYzoKLSAgICBNT0NLX01FVEhPRDQoY29weVRleHR1cmUsIHZvaWQoR3JhcGhp
Y3NDb250ZXh0M0QqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IEludFNpemUmKSk7Ci19Owot
Ci1jbGFzcyBNb2NrVGV4dHVyZVVwbG9hZGVyIDogcHVibGljIFRleHR1cmVVcGxvYWRlciB7Ci1w
dWJsaWM6Ci0gICAgTU9DS19NRVRIT0QwKGlzQnVzeSwgYm9vbCgpKTsKLSAgICBNT0NLX01FVEhP
RDAoYmVnaW5VcGxvYWRzLCB2b2lkKCkpOwotICAgIE1PQ0tfTUVUSE9EMChlbmRVcGxvYWRzLCB2
b2lkKCkpOwotICAgIE1PQ0tfTUVUSE9ENSh1cGxvYWRUZXh0dXJlLCB2b2lkKEdyYXBoaWNzQ29u
dGV4dDNEKiwgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIFRleHR1cmVBbGxvY2F0b3Iq
LCBjb25zdCBJbnRSZWN0LCBjb25zdCBJbnRSZWN0KSk7Ci19OwotCi19IC8vIG5hbWVzcGFjZQot
Ci1jbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0IDogcHVibGljIFRlc3QgewotcHJvdGVj
dGVkOgotICAgIHZvaWQgZnVsbExpZmVjeWNsZVRlc3QoYm9vbCB0aHJlYWRlZCwgYm9vbCBkZWZl
cnJlZCkKLSAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJz
OwotCi0gICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbWFpbkNvbnRleHQgPSBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0
KGFkb3B0UHRyKG5ldyBNb2NrQ2FudmFzQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJl
bmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKLSAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBpbXBsQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IE1vY2tDYW52YXNDb250ZXh0KCkp
LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwotCi0gICAg
ICAgIE1vY2tDYW52YXNDb250ZXh0JiBtYWluTW9jayA9ICpzdGF0aWNfY2FzdDxNb2NrQ2FudmFz
Q29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29u
dGV4dDNEKG1haW5Db250ZXh0LmdldCgpKSk7Ci0gICAgICAgIE1vY2tDYW52YXNDb250ZXh0JiBp
bXBsTW9jayA9ICpzdGF0aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGltcGxDb250ZXh0LmdldCgp
KSk7Ci0KLSAgICAgICAgTW9ja1RleHR1cmVBbGxvY2F0b3IgYWxsb2NhdG9yTW9jazsKLSAgICAg
ICAgTW9ja1RleHR1cmVDb3BpZXIgY29waWVyTW9jazsKLSAgICAgICAgTW9ja1RleHR1cmVVcGxv
YWRlciB1cGxvYWRlck1vY2s7Ci0gICAgICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcjsKLQot
ICAgICAgICBjb25zdCBJbnRTaXplIHNpemUoMzAwLCAxNTApOwotCi0gICAgICAgIE93blB0cjxX
ZWJUaHJlYWQ+IHRocmVhZDsKLSAgICAgICAgaWYgKHRocmVhZGVkKQotICAgICAgICAgICAgdGhy
ZWFkID0gYWRvcHRQdHIoV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jcmVhdGVUaHJlYWQo
IkNhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QiKSk7Ci0gICAgICAgIFdlYkNvbXBvc2l0b3I6Omlu
aXRpYWxpemUodGhyZWFkLmdldCgpKTsKLQotICAgICAgICBPd25QdHI8RmFrZUNDTGF5ZXJUcmVl
SG9zdD4gbGF5ZXJUcmVlSG9zdChGYWtlQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUoKSk7Ci0gICAg
ICAgIC8vIEZvcmNlIGFuIHVwZGF0ZSwgc28gdGhhdCB3ZSBnZXQgYSB2YWxpZCBUZXh0dXJlTWFu
YWdlci4KLSAgICAgICAgbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHVwZGF0ZXIpOwotCi0g
ICAgICAgIGNvbnN0IFdlYkdMSWQgYmFja1RleHR1cmVJZCA9IDE7Ci0gICAgICAgIGNvbnN0IFdl
YkdMSWQgZnJvbnRUZXh0dXJlSWQgPSAyOwotICAgICAgICB7Ci0gICAgICAgICAgICBJblNlcXVl
bmNlIHNlcXVlbmNlOwotCi0gICAgICAgICAgICAvLyBQYWludCBjYW52YXMgY29udGVudHMgb24g
dGhlIG1haW4gdGhyZWFkLgotICAgICAgICAgICAgRVhQRUNUX0NBTEwobWFpbk1vY2ssIGZsdXNo
KCkpOwotCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGNhbnZhcyBiYWNraW5nIHRleHR1
cmUgaXMgZG91YmxlYnVmZmVyZWQgb25seSB3aGVuIHVzaW5nIHRoZSB0aHJlYWRlZAotICAgICAg
ICAgICAgLy8gY29tcG9zaXRvciBhbmQgbm90IHVzaW5nIGRlZmVycmVkIGNhbnZhcyByZW5kZXJp
bmcKLSAgICAgICAgICAgIGlmICh0aHJlYWRlZCAmJiAhZGVmZXJyZWQpIHsKLSAgICAgICAgICAg
ICAgICAvLyBDcmVhdGUgdGV4dHVyZSBhbmQgZG8gdGhlIGNvcHkgKG9uIHRoZSBpbXBsIHRocmVh
ZCkuCi0gICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwoYWxsb2NhdG9yTW9jaywgY3JlYXRlVGV4
dHVyZShzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCi0gICAgICAgICAgICAgICAgICAg
IC5XaWxsT25jZShSZXR1cm4oZnJvbnRUZXh0dXJlSWQpKTsKLSAgICAgICAgICAgICAgICBFWFBF
Q1RfQ0FMTChjb3BpZXJNb2NrLCBjb3B5VGV4dHVyZShpbXBsQ29udGV4dC5nZXQoKSwgYmFja1Rl
eHR1cmVJZCwgZnJvbnRUZXh0dXJlSWQsIHNpemUpKTsKLSAgICAgICAgICAgICAgICBFWFBFQ1Rf
Q0FMTChpbXBsTW9jaywgZmx1c2goKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBUZWFyZG93biBU
ZXh0dXJlTWFuYWdlci4KLSAgICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChhbGxvY2F0b3JNb2Nr
LCBkZWxldGVUZXh0dXJlKGZyb250VGV4dHVyZUlkLCBzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPENhbnZh
czJETGF5ZXJDaHJvbWl1bT4gY2FudmFzID0gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUo
bWFpbkNvbnRleHQuZ2V0KCksIHNpemUsIGRlZmVycmVkID8gRGVmZXJyZWQgOiBOb25EZWZlcnJl
ZCk7Ci0gICAgICAgIGNhbnZhcy0+c2V0SXNEcmF3YWJsZSh0cnVlKTsKLSAgICAgICAgY2FudmFz
LT5zZXRMYXllclRyZWVIb3N0KGxheWVyVHJlZUhvc3QuZ2V0KCkpOwotICAgICAgICBjYW52YXMt
PnNldEJvdW5kcyhJbnRTaXplKDYwMCwgMzAwKSk7Ci0gICAgICAgIGNhbnZhcy0+c2V0VGV4dHVy
ZUlkKGJhY2tUZXh0dXJlSWQpOwotCi0gICAgICAgIGNhbnZhcy0+c2V0TmVlZHNEaXNwbGF5KCk7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKGNhbnZhcy0+bmVlZHNEaXNwbGF5KCkpOwotICAgICAgICBj
YW52YXMtPnVwZGF0ZSh1cGRhdGVyLCAwKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKGNhbnZhcy0+
bmVlZHNEaXNwbGF5KCkpOwotICAgICAgICB7Ci0gICAgICAgICAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgc2NvcGVkSW1wbFRocmVhZDsKLQotICAgICAgICAgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiBsYXllckltcGwgPSBjYW52YXMtPmNyZWF0ZUNDTGF5ZXJJbXBsKCk7Ci0gICAgICAgICAg
ICBFWFBFQ1RfRVEoMHUsIHN0YXRpY19jYXN0PENDVGV4dHVyZUxheWVySW1wbCo+KGxheWVySW1w
bC5nZXQoKSktPnRleHR1cmVJZCgpKTsKLQotICAgICAgICAgICAgdXBkYXRlci51cGRhdGUoaW1w
bENvbnRleHQuZ2V0KCksICZhbGxvY2F0b3JNb2NrLCAmY29waWVyTW9jaywgJnVwbG9hZGVyTW9j
aywgMSk7Ci0gICAgICAgICAgICBjYW52YXMtPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdl
dCgpKTsKLQotICAgICAgICAgICAgaWYgKHRocmVhZGVkICYmICFkZWZlcnJlZCkKLSAgICAgICAg
ICAgICAgICBFWFBFQ1RfRVEoZnJvbnRUZXh0dXJlSWQsIHN0YXRpY19jYXN0PENDVGV4dHVyZUxh
eWVySW1wbCo+KGxheWVySW1wbC5nZXQoKSktPnRleHR1cmVJZCgpKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoYmFja1RleHR1cmVJZCwgc3RhdGljX2Nhc3Q8
Q0NUZXh0dXJlTGF5ZXJJbXBsKj4obGF5ZXJJbXBsLmdldCgpKS0+dGV4dHVyZUlkKCkpOwotICAg
ICAgICB9Ci0gICAgICAgIGNhbnZhcy5jbGVhcigpOwotICAgICAgICBsYXllclRyZWVIb3N0LT5j
b250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRvTGltaXQoMCk7Ci0gICAgICAg
IGxheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+ZGVsZXRlRXZpY3RlZFRl
eHR1cmVzKCZhbGxvY2F0b3JNb2NrKTsKLSAgICAgICAgbGF5ZXJUcmVlSG9zdC5jbGVhcigpOwot
ICAgICAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOwotICAgIH0KLX07Ci0KLW5hbWVzcGFj
ZSB7Ci0KLVRFU1RfRihDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LCB0ZXN0RnVsbExpZmVjeWNs
ZVNpbmdsZVRocmVhZCkKLXsKLSAgICBmdWxsTGlmZWN5Y2xlVGVzdChmYWxzZSwgZmFsc2UpOwot
fQotCi1URVNUX0YoQ2FudmFzMkRMYXllckNocm9taXVtVGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVU
aHJlYWRlZCkKLXsKLSAgICBmdWxsTGlmZWN5Y2xlVGVzdCh0cnVlLCBmYWxzZSk7Ci19Ci0KLVRF
U1RfRihDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LCB0ZXN0RnVsbExpZmVjeWNsZVNpbmdsZVRo
cmVhZERlZmVycmVkKQotewotICAgIGZ1bGxMaWZlY3ljbGVUZXN0KGZhbHNlLCB0cnVlKTsKLX0K
LQotVEVTVF9GKENhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QsIHRlc3RGdWxsTGlmZWN5Y2xlVGhy
ZWFkZWREZWZlcnJlZCkKLXsKLSAgICBmdWxsTGlmZWN5Y2xlVGVzdCh0cnVlLCB0cnVlKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142597</attachid>
            <date>2012-05-17 17:54:50 -0700</date>
            <delta_ts>2012-05-23 16:56:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86050-20120517175449.patch</filename>
            <type>text/plain</type>
            <size>51404</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3NDgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjBkM2NiNjYzN2FmMDdk
NDkyOTZkYzU2OWY4MDQ5NjE1ZjVmNzA0ZS4uM2ZmZjVmMTFlNDIwMTNmNmViZjBkZDdjOWQwMTU4
MmViOWVhOTE1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEyLTA1LTE3ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBN
b3ZlIGRlZmVycmFsLXJlbGF0ZWQgbG9naWMgb3V0IG9mIENhbnZhczJETGF5ZXJDaHJvbWl1bQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYwNTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBTdGVwaGVuIFdoaXRlLgorCisgICAgICAgIFRoaXMgcmVtb3Zl
cyBDYW52YXMyRExheWVyQ2hyb21pdW0gYW5kIHB1dHMgdGhlIGRlZmVycmFsIGFuZCBkb3VibGUt
YnVmZmVyaW5nIHJlbGF0ZWQgbG9naWMgaW4gYSBuZXcgY2xhc3MsCisgICAgICAgIENhbnZhczJE
TGF5ZXJCcmlkZ2UsIHRoYXQgdXNlcyBUZXh0dXJlTGF5ZXJDaHJvbWl1bSBmb3IgY29tcG9zaXRp
bmcuICBUaGUgYnJpZGdlIGlzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGUKKyAgICAgICAg
ZnJvbnQgdGV4dHVyZSB3aGVuIGRvdWJsZSBidWZmZXJpbmcgaXMgYWN0aXZlLCBpbnNlcnRpbmcg
dGhlIGNvcnJlY3QgbWFrZUNvbnRleHRDdXJyZW50KCkgYW5kIGZsdXNoKCkgY2FsbHMgb24KKyAg
ICAgICAgdGhlIEdyYXBoaWNzQ29udGV4dDNEIGFuZCBTa0NhbnZhcyB3aGVuIGFwcHJvcHJpYXRl
LCBhbmQgb3duaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgbGF5ZXIuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckJyaWRnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJy
aWRnZTo6Q2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyQnJpZGdlOjp+Q2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXMyRExheWVyQnJpZGdlOjpzZXRTa0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMy
RExheWVyQnJpZGdlOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMy
RExheWVyQnJpZGdlOjpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJC
cmlkZ2U6OmxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmNv
bnRleHRBY3F1aXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllckJyaWRnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
Q2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJp
ZGdlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlQnVmZmVyRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZUxheWVyQ2hyb21pdW06OndpbGxNb2RpZnlUZXh0dXJl
KToKKyAgICAgICAgICAgIHdpbGxNb2RpZnlUZXh0dXJlKCkgaXMgY2FsbGVkIHdoZW5ldmVyIHRo
ZSB0ZXh0dXJlIGN1cnJlbnRseSBvd25lZCBieSB0aGUgVGV4dHVyZUxheWVyQ2hyb21pdW0gd2ls
bCBiZQorICAgICAgICAgICAgbW9kaWZpZWQgYnkgYSBzeXN0ZW0gb3V0IG9mIHRoZSBjb21wb3Np
dG9yJ3MgY29udHJvbC4gSXQgbWFrZXMgc3VyZSB0aGF0IHRoZSBjb21wb3NpdG9yIGRvZXMgbm90
IGF0dGVtcHQgdG8KKyAgICAgICAgICAgIGRyYXcgd2l0aCB0aGUgcG90ZW50aWFsbHktbW9kaWZp
ZWQgdGV4dHVyZSB1bnRpbCB0aGUgbmV4dCBjb21taXQuIEZvciBjYW52YXMsIHRoaXMgaXMgdXNl
ZCB3aGVuIHRocmVhZGluZyBpcworICAgICAgICAgICAgZW5hYmxlZCBhbmQgYSBub24tZGVmZXJy
YWJsZSBkcmF3aW5nIGNvbW1hbmQgaXMgaW52b2tlZCBmcm9tIEpTLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKFRleHR1cmVMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6Omhhc01vcmVVcGRhdGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Rl
eHR1cmVVcGRhdGVyOjpjbGVhcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAoQ0NUZXh0dXJlVXBkYXRlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1M
YXllcik6CisKIDIwMTItMDUtMTcgIEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBNb3ZlIHJ1bi1pbiBoYW5kbGluZyB0byBhZGRDaGlsZCwgaW5zdGVhZCBv
ZiBpbiBsYXlvdXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDljNGYwZWM5MWQwM2Vi
N2YyMGUyOTczYzcwOGRhYzI0MGU1NzFhNDguLjhmMzViMzQ1YWY1NjcxYTg0OTlkYzVjOTE4YmZm
MTgxMWExYmU0OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMDUtMTcgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbY2hyb21pdW1dIE1vdmUgZGVmZXJyYWwtcmVsYXRlZCBsb2dpYyBvdXQgb2YgQ2FudmFz
MkRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NjA1MAorCisgICAgICAgIFJldmlld2VkIGJ5IFN0ZXBoZW4gV2hpdGUuCisKKyAg
ICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DYW52YXMyRExheWVyQnJpZGdl
VGVzdC5jcHA6IFJlbmFtZWQgZnJvbSB0ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0Cisg
ICAgICAgIChDYW52YXMyRExheWVyQnJpZGdlVGVzdCk6CisgICAgICAgIChDYW52YXMyRExheWVy
QnJpZGdlVGVzdDo6ZnVsbExpZmVjeWNsZVRlc3QpOgorCiAyMDEyLTA1LTE3ICBNaWtoYWlsIE5h
Z2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3VwcG9ydCBDb3B5IC4u
LiBhY3Rpb25zIGZvciB0aGUgV2ViIEluc3BlY3RvciByZW1vdGUgZGVidWdnaW5nIG1vZGUuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggMWI3MGQwYjRjZmIyZGQ1ZDc5YTFhNjYwNGM0MThkZTEzYzMwZWQ0
MC4uOGM4NTNhODU4NDRkYzYzNWRkNmY4MTU0ZjMwY2E4YThjODM4YmZjMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMzU1NCwxMCArMzU1NCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
Y3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyQ2hyb21pdW0uaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckJyaWRnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWMxMmRlNDkzYTg4NmJmNDJhNWZjYTVjNTA5YjJjOWUx
NDc2NmQ0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwCkBAIC0wLDAgKzEsMTYwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ2FudmFzMkRMYXllckJyaWRn
ZS5oIgorCisjaW5jbHVkZSAiR3JDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIgLy8gRm9yIEdMQygpIG1h
Y3JvLgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiVGV4dHVyZUxheWVyQ2hyb21p
dW0uaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBk
YXRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFjY2VsZXJhdGVkRGV2aWNl
Q29udGV4dCA6IHB1YmxpYyBTa0RlZmVycmVkQ2FudmFzOjpEZXZpY2VDb250ZXh0IHsKK3B1Ymxp
YzoKKyAgICBBY2NlbGVyYXRlZERldmljZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQzRCwgVGV4dHVyZUxheWVyQ2hyb21pdW0qIGxheWVyLCBib29sIHVzZURvdWJsZUJ1ZmZlcmlu
ZykKKyAgICAgICAgOiBtX2xheWVyKGxheWVyKQorICAgICAgICAsIG1fY29udGV4dDNEKGNvbnRl
eHQzRCkKKyAgICAgICAgLCBtX3VzZURvdWJsZUJ1ZmZlcmluZyh1c2VEb3VibGVCdWZmZXJpbmcp
CisgICAgeworICAgICAgICBBU1NFUlQoY29udGV4dDNEKTsKKyAgICAgICAgQVNTRVJUKGxheWVy
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRyYXcoKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX3VzZURvdWJsZUJ1ZmZlcmluZykKKyAgICAgICAgICAgIG1fbGF5ZXItPndp
bGxNb2RpZnlUZXh0dXJlKCk7CisgICAgICAgIG1fY29udGV4dDNELT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFRleHR1cmVMYXllckNocm9taXVt
PiBtX2xheWVyOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7Cisg
ICAgYm9vbCBtX3VzZURvdWJsZUJ1ZmZlcmluZzsKK307CisKKworQ2FudmFzMkRMYXllckJyaWRn
ZTo6Q2FudmFzMkRMYXllckJyaWRnZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlLCB1bnNp
Z25lZCB0ZXh0dXJlSWQpCisgICAgOiBtX2RlZmVycmFsTW9kZShkZWZlcnJhbE1vZGUpCisgICAg
Ly8gRklYTUU6IFdlIGN1cnJlbnRseSB0dXJuIG9mZiBkb3VibGUgYnVmZmVyaW5nIHdoZW4gY2Fu
dmFzIHJlbmRlcmluZyBpcworICAgIC8vIGRlZmVycmVkLiBXaGF0IHdlIHNob3VsZCBiZSBkb2lu
ZyBpcyB0byB1c2UgYSBzbWFydGVyIGhldXJpc3RpYyBiYXNlZAorICAgIC8vIG9uIEdQVSByZXNv
dXJjZSBtb25pdG9yaW5nIGFuZCBvdGhlciBmYWN0b3JzIHRvIGNob3NlIGJldHdlZW4gc2luZ2xl
CisgICAgLy8gYW5kIGRvdWJsZSBidWZmZXJpbmcuCisgICAgLCBtX3VzZURvdWJsZUJ1ZmZlcmlu
ZyhDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkgJiYgZGVmZXJyYWxNb2RlID09IE5vbkRlZmVycmVk
KQorICAgICwgbV9mcm9udEJ1ZmZlclRleHR1cmUoMCkKKyAgICAsIG1fYmFja0J1ZmZlclRleHR1
cmUodGV4dHVyZUlkKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX2NhbnZhcygwKQorICAg
ICwgbV9jb250ZXh0KGNvbnRleHQpCit7CisgICAgaWYgKG1fdXNlRG91YmxlQnVmZmVyaW5nKSB7
CisgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgIEdMQyht
X2NvbnRleHQuZ2V0KCksIG1fZnJvbnRCdWZmZXJUZXh0dXJlID0gbV9jb250ZXh0LT5jcmVhdGVU
ZXh0dXJlKCkpOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2Zyb250QnVmZmVyVGV4dHVy
ZSkpOworICAgICAgICAvLyBEbyBiYXNpYyBsaW5lYXIgZmlsdGVyaW5nIG9uIHJlc2l6ZS4KKyAg
ICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5f
RklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgICAgIEdMQyhtX2NvbnRl
eHQuZ2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUikpOworICAgICAgICAvLyBOUE9UIHRleHR1cmVzIGluIEdMIEVTIG9u
bHkgd29yayB3aGVuIHRoZSB3cmFwIG1vZGUgaXMgc2V0IHRvIEdyYXBoaWNzQ29udGV4dDNEOjpD
TEFNUF9UT19FREdFLgorICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsK
KyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9X
UkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgICAgIEdMQyht
X2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSk7CisKKyAgICAgICAgaWYgKEdyQ29udGV4dCog
Z3JDb250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKSkKKyAgICAgICAgICAgIGdyQ29udGV4
dC0+cmVzZXRDb250ZXh0KCk7CisgICAgfQorCisgICAgbV9sYXllciA9IFRleHR1cmVMYXllckNo
cm9taXVtOjpjcmVhdGUodGhpcyk7CisgICAgbV9sYXllci0+c2V0VGV4dHVyZUlkKHRleHR1cmVJ
ZCk7CisgICAgbV9sYXllci0+c2V0UmF0ZUxpbWl0Q29udGV4dCghQ0NQcm94eTo6aGFzSW1wbFRo
cmVhZCgpIHx8IG1fdXNlRG91YmxlQnVmZmVyaW5nKTsKKworICAgIGlmIChkZWZlcnJhbE1vZGUg
PT0gRGVmZXJyZWQpCisgICAgICAgIG1fZGVmZXJyZWREZXZpY2VDb250ZXh0LnJlc2V0KG5ldyBB
Y2NlbGVyYXRlZERldmljZUNvbnRleHQobV9jb250ZXh0LmdldCgpLCBtX2xheWVyLmdldCgpLCBt
X3VzZURvdWJsZUJ1ZmZlcmluZykpOworfQorCisKK0NhbnZhczJETGF5ZXJCcmlkZ2U6On5DYW52
YXMyRExheWVyQnJpZGdlKCkKK3sKKyAgICBtX2xheWVyLT5zZXRUZXh0dXJlSWQoMCk7CisgICAg
aWYgKG1fdXNlRG91YmxlQnVmZmVyaW5nKSB7CisgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGVs
ZXRlVGV4dHVyZShtX2Zyb250QnVmZmVyVGV4dHVyZSkpOworICAgICAgICBtX2NvbnRleHQtPmZs
dXNoKCk7CisgICAgfQorICAgIG1fbGF5ZXItPmNsZWFyQ2xpZW50KCk7Cit9CisKK3Vuc2lnbmVk
IENhbnZhczJETGF5ZXJCcmlkZ2U6OnByZXBhcmVUZXh0dXJlKENDVGV4dHVyZVVwZGF0ZXImIHVw
ZGF0ZXIpCit7CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlm
IChtX2NhbnZhcykgeworICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNhbnZhczJETGF5ZXJC
cmlkZ2U6OlNrQ2FudmFzOjpmbHVzaCIpOworICAgICAgICBtX2NhbnZhcy0+Zmx1c2goKTsKKyAg
ICB9CisKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7CisKKyAgICBpZiAobV91c2VEb3VibGVCdWZm
ZXJpbmcpIHsKKyAgICAgICAgdXBkYXRlci5hcHBlbmRDb3B5KG1fYmFja0J1ZmZlclRleHR1cmUs
IG1fZnJvbnRCdWZmZXJUZXh0dXJlLCBtX3NpemUpOworICAgICAgICByZXR1cm4gbV9mcm9udEJ1
ZmZlclRleHR1cmU7CisgICAgfQorCisgICAgcmV0dXJuIG1fYmFja0J1ZmZlclRleHR1cmU7Cit9
CisKK0dyYXBoaWNzQ29udGV4dDNEKiBDYW52YXMyRExheWVyQnJpZGdlOjpjb250ZXh0KCkKK3sK
KyAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworfQorCitTa0RlZmVycmVkQ2FudmFzOjpEZXZp
Y2VDb250ZXh0KiBDYW52YXMyRExheWVyQnJpZGdlOjpkZWZlcnJlZERldmljZUNvbnRleHQoKSBj
b25zdAoreworICAgIHJldHVybiBtX2RlZmVycmVkRGV2aWNlQ29udGV4dC5nZXQoKTsKK30KKwor
dm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpzZXRTa0NhbnZhcyhTa0NhbnZhcyogY2FudmFzKQor
eworICAgIG1fY2FudmFzID0gY2FudmFzOworfQorCitMYXllckNocm9taXVtKiBDYW52YXMyRExh
eWVyQnJpZGdlOjpsYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuZ2V0KCk7Cit9
CisKK3ZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6Y29udGV4dEFjcXVpcmVkKCkKK3sKKyAgICBp
ZiAobV9kZWZlcnJhbE1vZGUgPT0gTm9uRGVmZXJyZWQgJiYgIW1fdXNlRG91YmxlQnVmZmVyaW5n
KQorICAgICAgICBtX2xheWVyLT53aWxsTW9kaWZ5VGV4dHVyZSgpOworfQorCit9CisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJCcmlkZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJCcmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDA5NmQyZGM0OGE1NTgzMDk4MWU0
MTdlMDA5MDMzYjVmNDM3NjgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oCkBAIC0wLDAgKzEs
NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENhbnZhczJETGF5ZXJCcmlkZ2VfaAorI2RlZmluZSBDYW52
YXMyRExheWVyQnJpZGdlX2gKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiIC8vIEZvciBEZWZl
cnJhbE1vZGUgZW51bS4KKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2tEZWZlcnJl
ZENhbnZhcy5oIgorI2luY2x1ZGUgIlRleHR1cmVMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCitjbGFzcyBTa0NhbnZhczsKK2NsYXNzIFNrRGV2aWNlOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dDsKK2NsYXNz
IExheWVyQ2hyb21pdW07CitjbGFzcyBUZXh0dXJlTGF5ZXJDaHJvbWl1bTsKKworY2xhc3MgQ2Fu
dmFzMkRMYXllckJyaWRnZSA6IHB1YmxpYyBUZXh0dXJlTGF5ZXJDaHJvbWl1bUNsaWVudCB7Citw
dWJsaWM6CisgICAgLy8gVGhpcyBjbGFzcyBkZXJpdmVzIGZyb20gU2tSZWZDbnQgKHZpYSBTa0Rl
ZmVycmVkQ2FudmFzOjpEZXZpY2VDb250ZXh0KSBhbmQgc28gc2hvdWxkCisgICAgLy8gYWx3YXlz
IGJlIHJldGFpbmVkIGluIGFuIFNrQXV0b1RVbnJlZiBvciBzaW1pbGFyIChidXQgbm90IGEgV1RG
IHNtYXJ0IHBvaW50ZXIgdHlwZSkuCisgICAgQ2FudmFzMkRMYXllckJyaWRnZShQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiwgY29uc3QgSW50U2l6ZSYsIERlZmVycmFsTW9kZSwgdW5zaWdu
ZWQgdGV4dHVyZUlkKTsKKworICAgIHZpcnR1YWwgfkNhbnZhczJETGF5ZXJCcmlkZ2UoKTsKKwor
ICAgIC8vIFRleHR1cmVMYXllckNocm9taXVtQ2xpZW50IGltcGxlbWVudGF0aW9uLgorICAgIHZp
cnR1YWwgdW5zaWduZWQgcHJlcGFyZVRleHR1cmUoQ0NUZXh0dXJlVXBkYXRlciYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSBPVkVSUklERTsKKwor
ICAgIFNrRGVmZXJyZWRDYW52YXM6OkRldmljZUNvbnRleHQqIGRlZmVycmVkRGV2aWNlQ29udGV4
dCgpIGNvbnN0OworICAgIHZvaWQgc2V0U2tDYW52YXMoU2tDYW52YXMqKTsKKyAgICBMYXllckNo
cm9taXVtKiBsYXllcigpIGNvbnN0OworICAgIHZvaWQgY29udGV4dEFjcXVpcmVkKCk7CisKK3By
aXZhdGU6CisKKyAgICBEZWZlcnJhbE1vZGUgbV9kZWZlcnJhbE1vZGU7CisgICAgYm9vbCBtX3Vz
ZURvdWJsZUJ1ZmZlcmluZzsKKyAgICB1bnNpZ25lZCBtX2Zyb250QnVmZmVyVGV4dHVyZTsKKyAg
ICB1bnNpZ25lZCBtX2JhY2tCdWZmZXJUZXh0dXJlOworICAgIEludFNpemUgbV9zaXplOworICAg
IFNrQ2FudmFzKiBtX2NhbnZhczsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29u
dGV4dDsKKyAgICBSZWZQdHI8VGV4dHVyZUxheWVyQ2hyb21pdW0+IG1fbGF5ZXI7CisgICAgU2tB
dXRvVFVucmVmPEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dD4gbV9kZWZlcnJlZERldmljZUNvbnRl
eHQ7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NzkyOTdiN2I2YjkyNTA4OTY5NTk5
NjhlYTMzNGM3YTA0OTc4ZDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5j
bHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RD
aHJvbWl1bS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgiIC8vIEZvciB0aGUgR0xDKCkgbWFjcm8KLSNpbmNsdWRlICJU
ZXh0dXJlQ29waWVyLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVk
ZSAiY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmgiCi0jaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRl
ci5oIgotCi0jaW5jbHVkZSAiU2tDYW52YXMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Q
YXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gQ2FudmFzMkRMYXllckNocm9taXVtOjpj
cmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgRGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSkKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENhbnZhczJETGF5ZXJDaHJvbWl1bShjb250ZXh0LCBzaXplLCBkZWZlcnJhbE1vZGUp
KTsKLX0KLQotQ2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0oUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwg
RGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSkKLSAgICA6IENhbnZhc0xheWVyQ2hyb21pdW0oKQot
ICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2NvbnRleHRMb3N0KGZhbHNlKQotICAg
ICwgbV9zaXplKHNpemUpCi0gICAgLCBtX2JhY2tUZXh0dXJlSWQoMCkKLSAgICAsIG1fY2FudmFz
KDApCi0gICAgLCBtX2RlZmVycmFsTW9kZShkZWZlcnJhbE1vZGUpCi17Ci0gICAgLy8gRklYTUU6
IFdlIGN1cnJlbnRseSB0dXJuIG9mZiBkb3VibGUgYnVmZmVyaW5nIHdoZW4gY2FudmFzIHJlbmRl
cmluZyBpcwotICAgIC8vIGRlZmVycmVkLiBXaGF0IHdlIHNob3VsZCBiZSBkb2luZyBpcyB0byB1
c2UgYSBzbWFydGVyIGhldXJpc3RpYyBiYXNlZAotICAgIC8vIG9uIEdQVSByZXNvdXJjZSBtb25p
dG9yaW5nIGFuZCBvdGhlciBmYWN0b3JzIHRvIGNob3NlIGJldHdlZW4gc2luZ2xlCi0gICAgLy8g
YW5kIGRvdWJsZSBidWZmZXJpbmcuCi0gICAgbV91c2VEb3VibGVCdWZmZXJpbmcgPSBDQ1Byb3h5
OjpoYXNJbXBsVGhyZWFkKCkgJiYgZGVmZXJyYWxNb2RlID09IE5vbkRlZmVycmVkOwotCi0gICAg
Ly8gVGhlIHRocmVhZGVkIGNvbXBvc2l0b3IgaXMgc2VsZiByYXRlLWxpbWl0aW5nIHdoZW4gcmVu
ZGVyaW5nCi0gICAgLy8gdG8gYSBzaW5nbGUgYnVmZmVyZWQgY2FudmFzIGxheWVyLgotICAgIG1f
dXNlUmF0ZUxpbWl0ZXIgPSAhQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpIHx8IG1fdXNlRG91Ymxl
QnVmZmVyaW5nOwotfQotCi1DYW52YXMyRExheWVyQ2hyb21pdW06On5DYW52YXMyRExheWVyQ2hy
b21pdW0oKQotewotICAgIHNldFRleHR1cmVJZCgwKTsKLSAgICBpZiAobV9jb250ZXh0ICYmIG1f
dXNlUmF0ZUxpbWl0ZXIgJiYgbGF5ZXJUcmVlSG9zdCgpKQotICAgICAgICBsYXllclRyZWVIb3N0
KCktPnN0b3BSYXRlTGltaXRlcihtX2NvbnRleHQuZ2V0KCkpOwotfQotCi1ib29sIENhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6ZHJhd2luZ0ludG9JbXBsVGhyZWFkVGV4dHVyZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICFtX3VzZURvdWJsZUJ1ZmZlcmluZyAmJiBDQ1Byb3h5OjpoYXNJbXBsVGhyZWFk
KCkgJiYgbGF5ZXJUcmVlSG9zdCgpOwotfQotCi12b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6
c2V0VGV4dHVyZUlkKHVuc2lnbmVkIHRleHR1cmVJZCkKLXsKLSAgICBpZiAobV9iYWNrVGV4dHVy
ZUlkID09IHRleHR1cmVJZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fYmFja1RleHR1
cmVJZCAmJiBkcmF3aW5nSW50b0ltcGxUaHJlYWRUZXh0dXJlKCkpIHsKLSAgICAgICAgLy8gVGhl
IGltcGwgdHJlZSBtYXkgYmUgcmVmZXJlbmNpbmcgdGhlIG9sZCBtX2JhY2tUZXh0dXJlLCB3aGlj
aCBtYXkKLSAgICAgICAgLy8gc29vbiBiZSBkZWxldGVkLiBXZSBtdXN0IG1ha2Ugc3VyZSB0aGUg
bGF5ZXIgdHJlZSBvbiB0aGUgaW1wbCB0aHJlYWQKLSAgICAgICAgLy8gaXMgbm90IGRyYXduIHVu
dGlsIHRoZSBuZXh0IGNvbW1pdCwgd2hpY2ggd2lsbCByZS1zeW5jaHJvbml6ZSB0aGUKLSAgICAg
ICAgLy8gbGF5ZXIgdHJlZXMuCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+YWNxdWlyZUxheWVy
VGV4dHVyZXMoKTsKLSAgICB9Ci0gICAgbV9iYWNrVGV4dHVyZUlkID0gdGV4dHVyZUlkOwotICAg
IHNldE5lZWRzQ29tbWl0KCk7Ci19Ci0KLXZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpzZXRO
ZWVkc0Rpc3BsYXlSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KQotewotICAgIExheWVy
Q2hyb21pdW06OnNldE5lZWRzRGlzcGxheVJlY3QoZGlydHlSZWN0KTsKLQotICAgIGlmIChtX3Vz
ZVJhdGVMaW1pdGVyICYmIGxheWVyVHJlZUhvc3QoKSkKLSAgICAgICAgbGF5ZXJUcmVlSG9zdCgp
LT5zdGFydFJhdGVMaW1pdGVyKG1fY29udGV4dC5nZXQoKSk7Ci19Ci0KLWJvb2wgQ2FudmFzMkRM
YXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAotewotICAgIHJldHVybiBMYXllckNo
cm9taXVtOjpkcmF3c0NvbnRlbnQoKSAmJiBtX2JhY2tUZXh0dXJlSWQgJiYgIW1fc2l6ZS5pc0Vt
cHR5KCkKLSAgICAgICAgJiYgIW1fY29udGV4dExvc3Q7Ci19Ci0KLXZvaWQgQ2FudmFzMkRMYXll
ckNocm9taXVtOjpzZXRDYW52YXMoU2tDYW52YXMqIGNhbnZhcykKLXsKLSAgICBtX2NhbnZhcyA9
IGNhbnZhczsKLX0KLQotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZShDQ1RleHR1
cmVVcGRhdGVyJiB1cGRhdGVyLCBjb25zdCBDQ09jY2x1c2lvblRyYWNrZXIqKQotewotICAgIFRS
QUNFX0VWRU5UMCgiY2MiLCAiQ2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGUiKTsKLSAgICBp
ZiAoIWRyYXdzQ29udGVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV91c2VEb3Vi
bGVCdWZmZXJpbmcgJiYgbGF5ZXJUcmVlSG9zdCgpKSB7Ci0gICAgICAgIFRleHR1cmVNYW5hZ2Vy
KiB0ZXh0dXJlTWFuYWdlciA9IGxheWVyVHJlZUhvc3QoKS0+Y29udGVudHNUZXh0dXJlTWFuYWdl
cigpOwotICAgICAgICBpZiAobV9mcm9udFRleHR1cmUpCi0gICAgICAgICAgICBtX2Zyb250VGV4
dHVyZS0+c2V0VGV4dHVyZU1hbmFnZXIodGV4dHVyZU1hbmFnZXIpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX2Zyb250VGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUodGV4dHVy
ZU1hbmFnZXIpOwotICAgICAgICBpZiAobV9mcm9udFRleHR1cmUtPnJlc2VydmUobV9zaXplLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCi0gICAgICAgICAgICB1cGRhdGVyLmFwcGVuZE1hbmFn
ZWRDb3B5KG1fYmFja1RleHR1cmVJZCwgbV9mcm9udFRleHR1cmUuZ2V0KCksIG1fc2l6ZSk7Ci0g
ICAgfQotCi0gICAgaWYgKCFuZWVkc0Rpc3BsYXkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLQotICAgIGJvb2wgc3VjY2VzcyA9IG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNz
KTsKLQotICAgIG1fY29udGV4dExvc3QgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0
R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsK
LSAgICBpZiAobV9jb250ZXh0TG9zdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY2Fu
dmFzKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiU2tDYW52YXM6OmZsdXNoIik7Ci0g
ICAgICAgIG1fY2FudmFzLT5mbHVzaCgpOwotICAgIH0KLQotICAgIFRSQUNFX0VWRU5UMCgiY2Mi
LCAiR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoIik7Ci0gICAgbV9jb250ZXh0LT5mbHVzaCgpOwot
fQotCi12b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6bGF5ZXJXaWxsRHJhdyhXaWxsRHJhd0Nv
bmRpdGlvbiBjb25kaXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGRyYXdpbmdJbnRvSW1wbFRocmVh
ZFRleHR1cmUoKSkgewotICAgICAgICBpZiAoY29uZGl0aW9uID09IFdpbGxEcmF3VW5jb25kaXRp
b25hbGx5IHx8IG1fZGVmZXJyYWxNb2RlID09IE5vbkRlZmVycmVkKQotICAgICAgICAgICAgbGF5
ZXJUcmVlSG9zdCgpLT5hY3F1aXJlTGF5ZXJUZXh0dXJlcygpOwotICAgIH0KLX0KLQotCi12b2lk
IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5
ZXIpCi17Ci0gICAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhsYXllcik7
Ci0KLSAgICBDQ1RleHR1cmVMYXllckltcGwqIHRleHR1cmVMYXllciA9IHN0YXRpY19jYXN0PEND
VGV4dHVyZUxheWVySW1wbCo+KGxheWVyKTsKLSAgICBpZiAobV91c2VEb3VibGVCdWZmZXJpbmcp
IHsKLSAgICAgICAgaWYgKG1fZnJvbnRUZXh0dXJlICYmIG1fZnJvbnRUZXh0dXJlLT5pc1ZhbGlk
KG1fc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQotICAgICAgICAgICAgdGV4dHVyZUxh
eWVyLT5zZXRUZXh0dXJlSWQobV9mcm9udFRleHR1cmUtPnRleHR1cmVJZCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdGV4dHVyZUxheWVyLT5zZXRUZXh0dXJlSWQoMCk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHRleHR1cmVMYXllci0+c2V0VGV4dHVyZUlkKG1fYmFja1RleHR1cmVJZCk7
Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGFkM2M2ODY1YWY0YWZkYzEyZTM2NDY5ZWVmZWNjZThlOTYzMjZiNjguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotCi0jaWZuZGVmIENhbnZhczJETGF5ZXJDaHJvbWl1bV9oCi0jZGVmaW5l
IENhbnZhczJETGF5ZXJDaHJvbWl1bV9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0KLSNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgotCi1jbGFzcyBTa0NhbnZhczsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNz
IFJlZ2lvbjsKLQotLy8gQSBsYXllciBjb250YWluaW5nIGFuIGFjY2VsZXJhdGVkIDJkIGNhbnZh
cwotY2xhc3MgQ2FudmFzMkRMYXllckNocm9taXVtIDogcHVibGljIENhbnZhc0xheWVyQ2hyb21p
dW0gewotcHVibGljOgotICAgIGVudW0gV2lsbERyYXdDb25kaXRpb24gewotICAgICAgICBXaWxs
RHJhd1VuY29uZGl0aW9uYWxseSwKLSAgICAgICAgV2lsbERyYXdJZkxheWVyTm90RGVmZXJyZWQs
Ci0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4g
Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBjb25zdCBJbnRTaXplJiwgRGVm
ZXJyYWxNb2RlKTsKLSAgICB2aXJ0dWFsIH5DYW52YXMyRExheWVyQ2hyb21pdW0oKTsKLQotICAg
IHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c0Rpc3BsYXlSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOwotCi0gICAgdmlydHVhbCBi
b29sIGRyYXdzQ29udGVudCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGUoQ0NUZXh0dXJlVXBkYXRlciYsIGNvbnN0IENDT2NjbHVzaW9uVHJhY2tlciopIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKikgT1ZFUlJJ
REU7Ci0KLSAgICB2b2lkIHNldENhbnZhcyhTa0NhbnZhcyopOwotICAgIHZvaWQgbGF5ZXJXaWxs
RHJhdyhXaWxsRHJhd0NvbmRpdGlvbikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgQ2FudmFzMkRM
YXllckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBjb25zdCBJbnRTaXpl
JiwgRGVmZXJyYWxNb2RlKTsKLSAgICBib29sIGRyYXdpbmdJbnRvSW1wbFRocmVhZFRleHR1cmUo
KSBjb25zdDsKLQotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwotICAg
IGJvb2wgbV9jb250ZXh0TG9zdDsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICB1bnNpZ25lZCBt
X2JhY2tUZXh0dXJlSWQ7Ci0gICAgLy8gV2hlbiBtX3VzZURvdWJsZUJ1ZmZlcmluZyBpcyB0cnVl
LCB0aGUgY29tcG9zaXRvciB3aWxsIGRyYXcgdXNpbmcgYSBjb3B5IG9mIHRoZQotICAgIC8vIGNh
bnZhcycgYmFja2luZyB0ZXh0dXJlLiBUaGlzIG9wdGlvbiBzaG91bGQgYmUgdXNlZCB3aXRoIHRo
ZSBjb21wb3NpdG9yIGRvZXNuJ3QKLSAgICAvLyBzeW5jaHJvbml6ZSBpdHMgZHJhd3Mgd2l0aCB0
aGUgY2FudmFzIHVwZGF0ZXMuCi0gICAgYm9vbCBtX3VzZURvdWJsZUJ1ZmZlcmluZzsKLSAgICBP
d25QdHI8TWFuYWdlZFRleHR1cmU+IG1fZnJvbnRUZXh0dXJlOwotICAgIFNrQ2FudmFzKiBtX2Nh
bnZhczsKLSAgICBib29sIG1fdXNlUmF0ZUxpbWl0ZXI7Ci0gICAgRGVmZXJyYWxNb2RlIG1fZGVm
ZXJyYWxNb2RlOwotfTsKLQotfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCA5
YWEyN2NjMzNiNjRmYmYyYjZkMjJkMDI0YTkyNzk3MzljYWEyNjc5Li5lYWFjNDYyOTE0MDQxMjUy
Y2UxZTNkOTgxMWM2Nzc5ODQyZjZhZDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21p
dW0uaCIKIAogI2luY2x1ZGUgIkFuaW1hdGlvbklkVmVuZG9yLmgiCi0jaW5jbHVkZSAiQ2FudmFz
MkRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVm
ZmVyRGF0YVNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlQnVmZmVyRGF0YVNraWEuaAppbmRleCBjOTA5MzA0Y2U1ZTViYzQwN2VhNTBjNmQzYmEy
ZDZlMDhlYjUyZGJlLi4wYTkwNzQ4YWM2ZjQ3NmRlMmQyNTYyNDgxOTIxYTNjMjAyMjQzODYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUJ1ZmZlckRhdGFTa2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oCkBAIC0zMCwxMiArMzAsMTMgQEAKIAogI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKIAorI2luY2x1ZGUgIlNrUmVmQ250LmgiCiAj
aW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLWNsYXNzIENhbnZhczJETGF5
ZXJDaHJvbWl1bTsKK2NsYXNzIENhbnZhczJETGF5ZXJCcmlkZ2U7CiAjZW5kaWYKIAogY2xhc3Mg
SW1hZ2VCdWZmZXJEYXRhIHsKQEAgLTQ1LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIE93blB0cjxT
a0NhbnZhcz4gbV9jYW52YXM7CiAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBtX3BsYXRmb3JtQ29u
dGV4dDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgUmVmUHRyPENhbnZh
czJETGF5ZXJDaHJvbWl1bT4gbV9wbGF0Zm9ybUxheWVyOworICAgIE93blB0cjxDYW52YXMyRExh
eWVyQnJpZGdlPiBtX2xheWVyQnJpZGdlOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJl
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNzM4NDQ5MjY0MTdjY2NmMTZjNjFjNTUwZTQyOTkxYmUx
YmZlYTRmOS4uNjNlZDI0NGIwM2EyMzhmOTgzN2UxMDZjZWVmYTg5Yjc4YWRiNDljYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxh
eWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVMYXllckNocm9taXVtLmNwcApAQCAtMTAzLDYgKzEwMywxMiBAQCB2b2lk
IFRleHR1cmVMYXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpCiAgICAgc2V0
TmVlZHNDb21taXQoKTsKIH0KIAordm9pZCBUZXh0dXJlTGF5ZXJDaHJvbWl1bTo6d2lsbE1vZGlm
eVRleHR1cmUoKQoreworICAgIGlmIChsYXllclRyZWVIb3N0KCkpCisgICAgICAgIGxheWVyVHJl
ZUhvc3QoKS0+YWNxdWlyZUxheWVyVGV4dHVyZXMoKTsKK30KKwogdm9pZCBUZXh0dXJlTGF5ZXJD
aHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5UmVjdChjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkK
IHsKICAgICBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXlSZWN0KGRpcnR5UmVjdCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0
dXJlTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZUxheWVyQ2hyb21pdW0uaAppbmRleCA0M2Y0OTI3MDNlZDkzY2Q1YzMxYzAx
ZTc0NWU2NTNkNDEzYzA0ZjliLi5hMzNkMTAwYTRkNTBjNDUwMGEzYTJkYTM4MjNiZTA2ZjliYWNh
Y2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UZXh0dXJlTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RleHR1cmVMYXllckNocm9taXVtLmgKQEAgLTc3LDYgKzc3LDggQEAg
cHVibGljOgogICAgIC8vIENvZGUgcGF0aCBmb3IgcGx1Z2lucyB3aGljaCBzdXBwbHkgdGhlaXIg
b3duIHRleHR1cmUgSUQuCiAgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQpOwogCisgICAg
dm9pZCB3aWxsTW9kaWZ5VGV4dHVyZSgpOworCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlz
cGxheVJlY3QoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqKSBPVkVSUklERTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVw
ZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggYWI1NmQxZjM3N2EyYzZmOGNlNWI3MjNjY2Q2NTFh
YWVlMTRiZTlhMS4uNGZkNDAyZjhiMmIzM2Y5ZDM0ZGNlNjBjMjQ5NmNjMmU0N2QwMWY3NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
ZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oIgotI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiVGV4dHVyZUNvcGll
ci5oIgogI2luY2x1ZGUgIlRleHR1cmVVcGxvYWRlci5oIgogCkBAIC03OCwxOCArNzcsOSBAQCB2
b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZENvcHkodW5zaWduZWQgc291cmNlVGV4dHVyZSwg
dW5zaWduZWQgZGVzdFRleHR1cmUsCiAgICAgbV9jb3B5RW50cmllcy5hcHBlbmQoY29weSk7CiB9
CiAKLXZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kTWFuYWdlZENvcHkodW5zaWduZWQgc291
cmNlVGV4dHVyZSwgTWFuYWdlZFRleHR1cmUqIGRlc3RUZXh0dXJlLCBjb25zdCBJbnRTaXplJiBz
aXplKQotewotICAgIE1hbmFnZWRDb3B5RW50cnkgY29weTsKLSAgICBjb3B5LnNvdXJjZVRleHR1
cmUgPSBzb3VyY2VUZXh0dXJlOwotICAgIGNvcHkuZGVzdFRleHR1cmUgPSBkZXN0VGV4dHVyZTsK
LSAgICBjb3B5LnNpemUgPSBzaXplOwotICAgIG1fbWFuYWdlZENvcHlFbnRyaWVzLmFwcGVuZChj
b3B5KTsKLX0KLQogYm9vbCBDQ1RleHR1cmVVcGRhdGVyOjpoYXNNb3JlVXBkYXRlcygpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fZW50cmllcy5zaXplKCkgfHwgbV9wYXJ0aWFsRW50cmllcy5zaXpl
KCkgfHwgbV9jb3B5RW50cmllcy5zaXplKCkgfHwgbV9tYW5hZ2VkQ29weUVudHJpZXMuc2l6ZSgp
OworICAgIHJldHVybiBtX2VudHJpZXMuc2l6ZSgpIHx8IG1fcGFydGlhbEVudHJpZXMuc2l6ZSgp
IHx8IG1fY29weUVudHJpZXMuc2l6ZSgpOwogfQogCiB2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OnVw
ZGF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2Nh
dG9yLCBUZXh0dXJlQ29waWVyKiBjb3BpZXIsIFRleHR1cmVVcGxvYWRlciogdXBsb2FkZXIsIHNp
emVfdCBjb3VudCkKQEAgLTEzNCwxNSArMTI0LDExIEBAIHZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6
dXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxv
CiAgICAgICAgIENvcHlFbnRyeSYgY29weUVudHJ5ID0gbV9jb3B5RW50cmllc1tpbmRleF07CiAg
ICAgICAgIGNvcGllci0+Y29weVRleHR1cmUoY29udGV4dCwgY29weUVudHJ5LnNvdXJjZVRleHR1
cmUsIGNvcHlFbnRyeS5kZXN0VGV4dHVyZSwgY29weUVudHJ5LnNpemUpOwogICAgIH0KLSAgICBm
b3IgKGluZGV4ID0gMDsgaW5kZXggPCBtX21hbmFnZWRDb3B5RW50cmllcy5zaXplKCk7ICsraW5k
ZXgpIHsKLSAgICAgICAgTWFuYWdlZENvcHlFbnRyeSYgbWFuYWdlZENvcHlFbnRyeSA9IG1fbWFu
YWdlZENvcHlFbnRyaWVzW2luZGV4XTsKLSAgICAgICAgbWFuYWdlZENvcHlFbnRyeS5kZXN0VGV4
dHVyZS0+YWxsb2NhdGUoYWxsb2NhdG9yKTsKLSAgICAgICAgY29waWVyLT5jb3B5VGV4dHVyZShj
b250ZXh0LCBtYW5hZ2VkQ29weUVudHJ5LnNvdXJjZVRleHR1cmUsIG1hbmFnZWRDb3B5RW50cnku
ZGVzdFRleHR1cmUtPnRleHR1cmVJZCgpLCBtYW5hZ2VkQ29weUVudHJ5LnNpemUpOwotICAgIH0K
KwogICAgIC8vIElmIHdlJ3ZlIHBlcmZvcm1lZCBhbnkgdGV4dHVyZSBjb3BpZXMsIHdlIG5lZWQg
dG8gaW5zZXJ0IGEgZmx1c2ggaGVyZSBpbnRvIHRoZSBjb21wb3NpdG9yIGNvbnRleHQKICAgICAv
LyBiZWZvcmUgbGV0dGluZyB0aGUgbWFpbiB0aHJlYWQgcHJvY2VlZCBhcyBpdCBtYXkgbWFrZSBk
cmF3IGNhbGxzIHRvIHRoZSBzb3VyY2UgdGV4dHVyZSBvZiBvbmUgb2YKICAgICAvLyBvdXIgY29w
eSBvcGVyYXRpb25zLgotICAgIGlmIChtX2NvcHlFbnRyaWVzLnNpemUoKSB8fCBtX21hbmFnZWRD
b3B5RW50cmllcy5zaXplKCkpCisgICAgaWYgKG1fY29weUVudHJpZXMuc2l6ZSgpKQogICAgICAg
ICBjb250ZXh0LT5mbHVzaCgpOwogCiAgICAgLy8gSWYgbm8gZW50cmllcyBsZWZ0IHRvIHByb2Nl
c3MsIGF1dG8tY2xlYXIuCkBAIC0xNTUsNyArMTQxLDYgQEAgdm9pZCBDQ1RleHR1cmVVcGRhdGVy
OjpjbGVhcigpCiAgICAgbV9lbnRyaWVzLmNsZWFyKCk7CiAgICAgbV9wYXJ0aWFsRW50cmllcy5j
bGVhcigpOwogICAgIG1fY29weUVudHJpZXMuY2xlYXIoKTsKLSAgICBtX21hbmFnZWRDb3B5RW50
cmllcy5jbGVhcigpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKaW5kZXgg
MjRkODk2ZjJiNTkxMjA5MDA0MWE0MzNmMTY2NTFkNjIzYzBkYjYyZi4uM2YzYTk0ZGQ5OWZiMDBk
ZTg3OWVkOGI4Mjc2ZGMyYWE1NzRkMDEwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIu
aApAQCAtNDUsNyArNDUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRVcGRhdGUoTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFJlY3QmIGRlc3RSZWN0KTsKICAgICB2b2lkIGFwcGVuZFBhcnRpYWxVcGRhdGUoTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFJlY3QmIGRlc3RSZWN0KTsKICAgICB2b2lkIGFwcGVuZENvcHkodW5zaWduZWQgc291cmNl
VGV4dHVyZSwgdW5zaWduZWQgZGVzdFRleHR1cmUsIGNvbnN0IEludFNpemUmKTsKLSAgICB2b2lk
IGFwcGVuZE1hbmFnZWRDb3B5KHVuc2lnbmVkIHNvdXJjZVRleHR1cmUsIE1hbmFnZWRUZXh0dXJl
KiBkZXN0VGV4dHVyZSwgY29uc3QgSW50U2l6ZSYpOwogCiAgICAgYm9vbCBoYXNNb3JlVXBkYXRl
cygpIGNvbnN0OwogCkBAIC02NywxOSArNjYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWdu
ZWQgZGVzdFRleHR1cmU7CiAgICAgfTsKIAotICAgIHN0cnVjdCBNYW5hZ2VkQ29weUVudHJ5IHsK
LSAgICAgICAgSW50U2l6ZSBzaXplOwotICAgICAgICB1bnNpZ25lZCBzb3VyY2VUZXh0dXJlOwot
ICAgICAgICBNYW5hZ2VkVGV4dHVyZSogZGVzdFRleHR1cmU7Ci0gICAgfTsKLQogICAgIHN0YXRp
YyB2b2lkIGFwcGVuZFVwZGF0ZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIFZlY3RvcjxVcGRh
dGVFbnRyeT4mKTsKIAogICAgIHNpemVfdCBtX2VudHJ5SW5kZXg7CiAgICAgVmVjdG9yPFVwZGF0
ZUVudHJ5PiBtX2VudHJpZXM7CiAgICAgVmVjdG9yPFVwZGF0ZUVudHJ5PiBtX3BhcnRpYWxFbnRy
aWVzOwogICAgIFZlY3RvcjxDb3B5RW50cnk+IG1fY29weUVudHJpZXM7Ci0gICAgVmVjdG9yPE1h
bmFnZWRDb3B5RW50cnk+IG1fbWFuYWdlZENvcHlFbnRyaWVzOwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNr
aWEuY3BwCmluZGV4IDhiMDg2YTA3OThiNjQ2ZjgwNWYxMGEzNDEwNDU5NDczZTNhZGRiY2QuLmQ4
MDRmN2E3NGRjZGE2OTkyZDRmZDg4OGE5NDRkN2VkOTY3ZjI3MzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5j
cHAKQEAgLTUxLDcgKzUxLDcgQEAKICNpbmNsdWRlICJXRUJQSW1hZ2VFbmNvZGVyLmgiCiAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiQ2FudmFzMkRMYXllckNo
cm9taXVtLmgiCisjaW5jbHVkZSAiQ2FudmFzMkRMYXllckJyaWRnZS5oIgogI2VuZGlmCiAKICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTY5LDMwICs2OSw2IEBAIEltYWdlQnVm
ZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiB9CiAKLSNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1jbGFzcyBBY2NlbGVyYXRlZERldmljZUNv
bnRleHQgOiBwdWJsaWMgU2tEZWZlcnJlZENhbnZhczo6RGV2aWNlQ29udGV4dCB7Ci1wdWJsaWM6
Ci0gICAgQWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
M0QsIENhbnZhczJETGF5ZXJDaHJvbWl1bSogbGF5ZXIpCi0gICAgICAgIDogbV9wbGF0Zm9ybUxh
eWVyKGxheWVyKQotICAgICAgICAsIG1fY29udGV4dDNEKCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChjb250ZXh0M0QpOwotICAgICAgICBBU1NFUlQobGF5ZXIpOwotICAgICAgICBtX2NvbnRleHQz
RCA9IGNvbnRleHQzRDsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRyYXco
KQotICAgIHsKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyLT5sYXllcldpbGxEcmF3KENhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6V2lsbERyYXdVbmNvbmRpdGlvbmFsbHkpOwotICAgICAgICBtX2NvbnRl
eHQzRC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhbnZh
czJETGF5ZXJDaHJvbWl1bSogbV9wbGF0Zm9ybUxheWVyOwotICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBtX2NvbnRleHQzRDsKLX07Ci0jZW5kaWYKLQogc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVBY2Nl
bGVyYXRlZENhbnZhcyhjb25zdCBJbnRTaXplJiBzaXplLCBJbWFnZUJ1ZmZlckRhdGEqIGRhdGEs
IERlZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUpCiB7CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0M0QgPSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0KCk7CkBAIC0xMTQs
MjAgKzkwLDE2IEBAIHN0YXRpYyBTa0NhbnZhcyogY3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgSW1hZ2VCdWZmZXJEYXRhKiBkCiAgICAgU2tDYW52YXMqIGNhbnZh
czsKICAgICBTa0F1dG9UVW5yZWY8U2tEZXZpY2U+IGRldmljZShuZXcgU2tHcHVEZXZpY2UoZ3Is
IHRleHR1cmUuZ2V0KCkpKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAg
ZGF0YS0+bV9wbGF0Zm9ybUxheWVyID0gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUoY29u
dGV4dDNELCBzaXplLCBkZWZlcnJhbE1vZGUpOwotICAgIGlmIChkZWZlcnJhbE1vZGUgPT0gRGVm
ZXJyZWQpIHsKLSAgICAgICAgU2tBdXRvVFVucmVmPEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dD4g
ZGV2aWNlQ29udGV4dChuZXcgQWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0KGNvbnRleHQzRC5nZXQo
KSwgZGF0YS0+bV9wbGF0Zm9ybUxheWVyLmdldCgpKSk7Ci0gICAgICAgIGNhbnZhcyA9IG5ldyBT
a0RlZmVycmVkQ2FudmFzKGRldmljZS5nZXQoKSwgZGV2aWNlQ29udGV4dC5nZXQoKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGNhbnZhcyA9IG5ldyBTa0NhbnZhcyhkZXZpY2UuZ2V0KCkpOworICAg
IGRhdGEtPm1fbGF5ZXJCcmlkZ2UgPSBhZG9wdFB0cihuZXcgQ2FudmFzMkRMYXllckJyaWRnZShj
b250ZXh0M0QucmVsZWFzZSgpLCBzaXplLCBkZWZlcnJhbE1vZGUsIHRleHR1cmUuZ2V0KCktPmdl
dFRleHR1cmVIYW5kbGUoKSkpOworICAgIGlmIChkZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpCisg
ICAgICAgIGNhbnZhcyA9IG5ldyBTa0RlZmVycmVkQ2FudmFzKGRldmljZSwgZGF0YS0+bV9sYXll
ckJyaWRnZS0+ZGVmZXJyZWREZXZpY2VDb250ZXh0KCkpOworICAgIGVsc2UKKyAgICAgICAgY2Fu
dmFzID0gbmV3IFNrQ2FudmFzKGRldmljZSk7CisgICAgZGF0YS0+bV9sYXllckJyaWRnZS0+c2V0
U2tDYW52YXMoY2FudmFzKTsKICNlbHNlCiAgICAgY2FudmFzID0gbmV3IFNrQ2FudmFzKGRldmlj
ZS5nZXQoKSk7CiAjZW5kaWYKICAgICBkYXRhLT5tX3BsYXRmb3JtQ29udGV4dC5zZXRBY2NlbGVy
YXRlZCh0cnVlKTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgZGF0YS0+
bV9wbGF0Zm9ybUxheWVyLT5zZXRUZXh0dXJlSWQodGV4dHVyZS5nZXQoKS0+Z2V0VGV4dHVyZUhh
bmRsZSgpKTsKLSAgICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXItPnNldENhbnZhcyhjYW52YXMpOwot
I2VuZGlmCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIApAQCAtMTc0LDE3ICsxNDYsMTYgQEAgSW1h
Z2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIGZsb2F0IC8qIHJlc29s
dXRpb25TY2FsZSAqLywgQ29sb3IKIAogSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpCiB7Ci0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX2RhdGEubV9wbGF0Zm9y
bUxheWVyKQotICAgICAgICBtX2RhdGEubV9wbGF0Zm9ybUxheWVyLT5zZXRUZXh0dXJlSWQoMCk7
Ci0jZW5kaWYKIH0KIAogR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNv
bnN0CiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX2RhdGEu
bV9wbGF0Zm9ybUxheWVyKQotICAgICAgICBtX2RhdGEubV9wbGF0Zm9ybUxheWVyLT5sYXllcldp
bGxEcmF3KENhbnZhczJETGF5ZXJDaHJvbWl1bTo6V2lsbERyYXdJZkxheWVyTm90RGVmZXJyZWQp
OworICAgIGlmIChtX2RhdGEubV9sYXllckJyaWRnZSkgeworICAgICAgICAvLyBXZSdyZSB1c2lu
ZyBjb250ZXh0IGFjcXVpc2l0aW9uIGFzIGEgc2lnbmFsIHRoYXQgc29tZW9uZSBpcyBhYm91dCB0
byByZW5kZXIgaW50byBvdXIgYnVmZmVyIGFuZCB3ZSBuZWVkCisgICAgICAgIC8vIHRvIGJlIHJl
YWR5LiBUaGlzIGlzbid0IGxvZ2ljYWxseSBjb25zdC1jb3JyZWN0LCBoZW5jZSB0aGUgY2FzdC4K
KyAgICAgICAgY29uc3RfY2FzdDxDYW52YXMyRExheWVyQnJpZGdlKj4obV9kYXRhLm1fbGF5ZXJC
cmlkZ2UuZ2V0KCkpLT5jb250ZXh0QWNxdWlyZWQoKTsKKyAgICB9CiAjZW5kaWYKICAgICByZXR1
cm4gbV9jb250ZXh0LmdldCgpOwogfQpAQCAtMTk2LDcgKzE2Nyw3IEBAIFBhc3NSZWZQdHI8SW1h
Z2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3Ip
IGNvbnN0CiAKIFBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLm1fcGxhdGZvcm1MYXllci5nZXQoKTsKKyAgICByZXR1
cm4gbV9kYXRhLm1fbGF5ZXJCcmlkZ2UgPyBtX2RhdGEubV9sYXllckJyaWRnZS5nZXQoKS0+bGF5
ZXIoKSA6IDA7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQppbmRleCBjZmIxZDdiNGUyNWI5ZTk4MTQyNjM1YjA3YjNkNjA5YThmMDI2ZWFjLi4w
Y2U2YTM0NjRhNTU4MzQ3NmQyNzY0OWRlNjQwYTZlNDBlMDE1ODIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgJ3dlYmtpdF91bml0dGVz
dF9maWxlcyc6IFsKICAgICAgICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0Fzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcsCi0gICAgICAgICAg
ICAndGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rl
c3RzL0NhbnZhczJETGF5ZXJCcmlkZ2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NB
Y3RpdmVBbmltYXRpb25UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NBbmltYXRpb25U
ZXN0Q29tbW9uLmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9u
LmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExh
eWVyQnJpZGdlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJE
TGF5ZXJCcmlkZ2VUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDkyNTlmMWVhOWRjYTM4M2M1M2U2OGVm
M2YyYWUyYjY1YjZmM2YxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DYW52YXMyRExheWVyQnJpZGdlVGVzdC5jcHAKQEAgLTAsMCArMSwxNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNhbnZhczJETGF5
ZXJCcmlkZ2UuaCIKKworI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCisjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2Vy
LmgiCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2lu
Y2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJUaHJlYWQuaCIKKworI2lu
Y2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKK3VzaW5nIHRlc3Rpbmc6OkluU2VxdWVuY2U7Cit1c2luZyB0ZXN0aW5nOjpS
ZXR1cm47Cit1c2luZyB0ZXN0aW5nOjpUZXN0OworCituYW1lc3BhY2UgeworCitjbGFzcyBNb2Nr
Q2FudmFzQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVibGlj
OgorICAgIE1PQ0tfTUVUSE9EMChmbHVzaCwgdm9pZCh2b2lkKSk7CisgICAgTU9DS19NRVRIT0Qw
KGNyZWF0ZVRleHR1cmUsIHVuc2lnbmVkKHZvaWQpKTsKKyAgICBNT0NLX01FVEhPRDEoZGVsZXRl
VGV4dHVyZSwgdm9pZCh1bnNpZ25lZCkpOworCisgICAgdmlydHVhbCBHckNvbnRleHQqIGdyQ29u
dGV4dCgpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KK307CisKK2NsYXNzIE1vY2tUZXh0dXJlQ29w
aWVyIDogcHVibGljIFRleHR1cmVDb3BpZXIgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9ENChj
b3B5VGV4dHVyZSwgdm9pZChHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkLCB1bnNpZ25lZCwg
Y29uc3QgSW50U2l6ZSYpKSBPVkVSUklERTsKK307CisKK30gLy8gbmFtZXNwYWNlCisKK2VudW0g
VGhyZWFkTW9kZSB7CisgICAgU2luZ2xlVGhyZWFkZWQsIFRocmVhZGVkCit9OworCitjbGFzcyBD
YW52YXMyRExheWVyQnJpZGdlVGVzdCA6IHB1YmxpYyBUZXN0IHsKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIGZ1bGxMaWZlY3ljbGVUZXN0KFRocmVhZE1vZGUgdGhyZWFkTW9kZSwgRGVmZXJyYWxNb2Rl
IGRlZmVycmFsTW9kZSkKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJzOworCisgICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbWFpbkNvbnRl
eHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21X
ZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ2FudmFzQ29udGV4dCgpKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICAgICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBpbXBsQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3Jl
YXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IE1vY2tDYW52YXND
b250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cp
OworCisgICAgICAgIE1vY2tDYW52YXNDb250ZXh0JiBtYWluTW9jayA9ICpzdGF0aWNfY2FzdDxN
b2NrQ2FudmFzQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdy
YXBoaWNzQ29udGV4dDNEKG1haW5Db250ZXh0LmdldCgpKSk7CisgICAgICAgIE1vY2tDYW52YXND
b250ZXh0JiBpbXBsTW9jayA9ICpzdGF0aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4dCo+KEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGltcGxDb250
ZXh0LmdldCgpKSk7CisKKyAgICAgICAgTW9ja1RleHR1cmVDb3BpZXIgY29waWVyTW9jazsKKyAg
ICAgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyOworCisgICAgICAgIGNvbnN0IEludFNpemUg
c2l6ZSgzMDAsIDE1MCk7CisKKyAgICAgICAgT3duUHRyPFdlYlRocmVhZD4gdGhyZWFkOworICAg
ICAgICBpZiAodGhyZWFkTW9kZSA9PSBUaHJlYWRlZCkKKyAgICAgICAgICAgIHRocmVhZCA9IGFk
b3B0UHRyKFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3JlYXRlVGhyZWFkKCJDYW52YXMy
RExheWVyQnJpZGdlVGVzdCIpKTsKKyAgICAgICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSh0
aHJlYWQuZ2V0KCkpOworCisgICAgICAgIFdlYkdMSWQgYmFja1RleHR1cmVJZCA9IDE7CisgICAg
ICAgIFdlYkdMSWQgZnJvbnRUZXh0dXJlSWQgPSAxOworCisgICAgICAgIC8vIFRocmVhZGVkIGFu
ZCBub24gZGVmZXJyZWQgY2FudmFzZXMgYXJlIGRvdWJsZSBidWZmZXJlZC4KKyAgICAgICAgaWYg
KHRocmVhZE1vZGUgPT0gVGhyZWFkZWQgJiYgZGVmZXJyYWxNb2RlID09IE5vbkRlZmVycmVkKSB7
CisgICAgICAgICAgICBmcm9udFRleHR1cmVJZCA9IDI7CisgICAgICAgICAgICAvLyBDcmVhdGUg
dGV4dHVyZSAob24gdGhlIG1haW4gdGhyZWFkKSBhbmQgZG8gdGhlIGNvcHkgKG9uIHRoZSBpbXBs
IHRocmVhZCkuCisgICAgICAgICAgICBFWFBFQ1RfQ0FMTChtYWluTW9jaywgY3JlYXRlVGV4dHVy
ZSgpKS5XaWxsT25jZShSZXR1cm4oZnJvbnRUZXh0dXJlSWQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIE93blB0cjxDYW52YXMyRExheWVyQnJpZGdlPiBicmlkZ2UoYWRvcHRQdHIobmV3IENhbnZh
czJETGF5ZXJCcmlkZ2UobWFpbkNvbnRleHQuZ2V0KCksIHNpemUsIGRlZmVycmFsTW9kZSwgYmFj
a1RleHR1cmVJZCkpKTsKKworICAgICAgICA6OnRlc3Rpbmc6Ok1vY2s6OlZlcmlmeUFuZENsZWFy
RXhwZWN0YXRpb25zKCZtYWluTW9jayk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwobWFpbk1vY2ss
IGZsdXNoKCkpOworICAgICAgICBFWFBFQ1RfRVEoZnJvbnRUZXh0dXJlSWQsIGJyaWRnZS0+cHJl
cGFyZVRleHR1cmUodXBkYXRlcikpOworICAgICAgICA6OnRlc3Rpbmc6Ok1vY2s6OlZlcmlmeUFu
ZENsZWFyRXhwZWN0YXRpb25zKCZtYWluTW9jayk7CisKKyAgICAgICAgaWYgKHRocmVhZE1vZGUg
PT0gVGhyZWFkZWQgJiYgZGVmZXJyYWxNb2RlID09IE5vbkRlZmVycmVkKSB7CisgICAgICAgICAg
ICBFWFBFQ1RfQ0FMTChjb3BpZXJNb2NrLCBjb3B5VGV4dHVyZShpbXBsQ29udGV4dC5nZXQoKSwg
YmFja1RleHR1cmVJZCwgZnJvbnRUZXh0dXJlSWQsIHNpemUpKTsKKyAgICAgICAgICAgIEVYUEVD
VF9DQUxMKGltcGxNb2NrLCBmbHVzaCgpKTsKKyAgICAgICAgfQorICAgICAgICB1cGRhdGVyLnVw
ZGF0ZShpbXBsQ29udGV4dC5nZXQoKSwgMCwgJmNvcGllck1vY2ssIDAsIDEwMCk7CisgICAgICAg
IDo6dGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmltcGxNb2NrKTsK
KworICAgICAgICBpZiAodGhyZWFkTW9kZSA9PSBUaHJlYWRlZCAmJiBkZWZlcnJhbE1vZGUgPT0g
Tm9uRGVmZXJyZWQpIHsKKyAgICAgICAgICAgIEVYUEVDVF9DQUxMKG1haW5Nb2NrLCBkZWxldGVU
ZXh0dXJlKGZyb250VGV4dHVyZUlkKSk7CisgICAgICAgICAgICBFWFBFQ1RfQ0FMTChtYWluTW9j
aywgZmx1c2goKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJpZGdlLmNsZWFyKCk7CisgICAgICAg
IDo6dGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmltcGxNb2NrKTsK
KworICAgICAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworICAgIH0KK307CisKK25hbWVz
cGFjZSB7CisKK1RFU1RfRihDYW52YXMyRExheWVyQnJpZGdlVGVzdCwgdGVzdEZ1bGxMaWZlY3lj
bGVTaW5nbGVUaHJlYWRlZERlZmVycmVkKQoreworICAgIGZ1bGxMaWZlY3ljbGVUZXN0KFNpbmds
ZVRocmVhZGVkLCBOb25EZWZlcnJlZCk7Cit9CisKK1RFU1RfRihDYW52YXMyRExheWVyQnJpZGdl
VGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVTaW5nbGVUaHJlYWRlZE5vbkRlZmVycmVkKQoreworICAg
IGZ1bGxMaWZlY3ljbGVUZXN0KFNpbmdsZVRocmVhZGVkLCBEZWZlcnJlZCk7Cit9CisKK1RFU1Rf
RihDYW52YXMyRExheWVyQnJpZGdlVGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVUaHJlYWRlZE5vbkRl
ZmVycmVkKQoreworICAgIGZ1bGxMaWZlY3ljbGVUZXN0KFRocmVhZGVkLCBOb25EZWZlcnJlZCk7
Cit9CisKK1RFU1RfRihDYW52YXMyRExheWVyQnJpZGdlVGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVU
aHJlYWRlZERlZmVycmVkKQoreworICAgIGZ1bGxMaWZlY3ljbGVUZXN0KFRocmVhZGVkLCBEZWZl
cnJlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDI0ODViNzE4ZjA4YTU2OWYwZjEyNmQ0OWNmZjYwMGI1
YmNkNzViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCi0KLSNpbmNs
dWRlICJDQ1NjaGVkdWxlclRlc3RDb21tb24uaCIKLSNpbmNsdWRlICJGYWtlQ0NMYXllclRyZWVI
b3N0Q2xpZW50LmgiCi0jaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCi0j
aW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCi0j
aW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgotI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUg
ImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKLSNpbmNsdWRlICJjYy9DQ1RleHR1cmVMYXllcklt
cGwuaCIKLSNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCi0jaW5jbHVkZSAicGxhdGZv
cm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViVGhyZWFk
LmgiCi0KLSNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7Ci11c2lu
ZyB0ZXN0aW5nOjpJblNlcXVlbmNlOwotdXNpbmcgdGVzdGluZzo6UmV0dXJuOwotdXNpbmcgdGVz
dGluZzo6VGVzdDsKLQotbmFtZXNwYWNlIHsKLQotY2xhc3MgRmFrZUNDTGF5ZXJUcmVlSG9zdCA6
IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PEZha2VDQ0xheWVyVHJlZUhvc3Q+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICBPd25QdHI8RmFr
ZUNDTGF5ZXJUcmVlSG9zdD4gaG9zdChhZG9wdFB0cihuZXcgRmFrZUNDTGF5ZXJUcmVlSG9zdCkp
OwotICAgICAgICBob3N0LT5pbml0aWFsaXplKCk7Ci0gICAgICAgIHJldHVybiBob3N0LnJlbGVh
c2UoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRmFrZUNDTGF5ZXJUcmVlSG9zdCgpCi0gICAg
ICAgIDogQ0NMYXllclRyZWVIb3N0KCZtX2NsaWVudCwgQ0NTZXR0aW5ncygpKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBGYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50IG1fY2xpZW50OwotfTsKLQotY2xh
c3MgTW9ja0NhbnZhc0NvbnRleHQgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsK
LXB1YmxpYzoKLSAgICBNT0NLX01FVEhPRDAoZmx1c2gsIHZvaWQodm9pZCkpOwotfTsKLQotY2xh
c3MgTW9ja1RleHR1cmVBbGxvY2F0b3IgOiBwdWJsaWMgVGV4dHVyZUFsbG9jYXRvciB7Ci1wdWJs
aWM6Ci0gICAgTU9DS19NRVRIT0QyKGNyZWF0ZVRleHR1cmUsIHVuc2lnbmVkKGNvbnN0IEludFNp
emUmLCBHQzNEZW51bSkpOwotICAgIE1PQ0tfTUVUSE9EMyhkZWxldGVUZXh0dXJlLCB2b2lkKHVu
c2lnbmVkLCBjb25zdCBJbnRTaXplJiwgR0MzRGVudW0pKTsKLX07Ci0KLWNsYXNzIE1vY2tUZXh0
dXJlQ29waWVyIDogcHVibGljIFRleHR1cmVDb3BpZXIgewotcHVibGljOgotICAgIE1PQ0tfTUVU
SE9ENChjb3B5VGV4dHVyZSwgdm9pZChHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkLCB1bnNp
Z25lZCwgY29uc3QgSW50U2l6ZSYpKTsKLX07Ci0KLWNsYXNzIE1vY2tUZXh0dXJlVXBsb2FkZXIg
OiBwdWJsaWMgVGV4dHVyZVVwbG9hZGVyIHsKLXB1YmxpYzoKLSAgICBNT0NLX01FVEhPRDAoaXNC
dXN5LCBib29sKCkpOwotICAgIE1PQ0tfTUVUSE9EMChiZWdpblVwbG9hZHMsIHZvaWQoKSk7Ci0g
ICAgTU9DS19NRVRIT0QwKGVuZFVwbG9hZHMsIHZvaWQoKSk7Ci0gICAgTU9DS19NRVRIT0Q1KHVw
bG9hZFRleHR1cmUsIHZvaWQoR3JhcGhpY3NDb250ZXh0M0QqLCBMYXllclRleHR1cmVVcGRhdGVy
OjpUZXh0dXJlKiwgVGV4dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QsIGNvbnN0IEludFJl
Y3QpKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLWNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1
bVRlc3QgOiBwdWJsaWMgVGVzdCB7Ci1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBmdWxsTGlmZWN5Y2xl
VGVzdChib29sIHRocmVhZGVkLCBib29sIGRlZmVycmVkKQotICAgIHsKLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Ci0KLSAgICAgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBtYWluQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRl
R3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IE1vY2tDYW52YXNDb250
ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwot
ICAgICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGltcGxDb250ZXh0ID0gR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9w
dFB0cihuZXcgTW9ja0NhbnZhc0NvbnRleHQoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJE
aXJlY3RseVRvSG9zdFdpbmRvdyk7Ci0KLSAgICAgICAgTW9ja0NhbnZhc0NvbnRleHQmIG1haW5N
b2NrID0gKnN0YXRpY19jYXN0PE1vY2tDYW52YXNDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobWFpbkNvbnRleHQuZ2V0KCkpKTsK
LSAgICAgICAgTW9ja0NhbnZhc0NvbnRleHQmIGltcGxNb2NrID0gKnN0YXRpY19jYXN0PE1vY2tD
YW52YXNDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhp
Y3NDb250ZXh0M0QoaW1wbENvbnRleHQuZ2V0KCkpKTsKLQotICAgICAgICBNb2NrVGV4dHVyZUFs
bG9jYXRvciBhbGxvY2F0b3JNb2NrOwotICAgICAgICBNb2NrVGV4dHVyZUNvcGllciBjb3BpZXJN
b2NrOwotICAgICAgICBNb2NrVGV4dHVyZVVwbG9hZGVyIHVwbG9hZGVyTW9jazsKLSAgICAgICAg
Q0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyOwotCi0gICAgICAgIGNvbnN0IEludFNpemUgc2l6ZSgz
MDAsIDE1MCk7Ci0KLSAgICAgICAgT3duUHRyPFdlYlRocmVhZD4gdGhyZWFkOwotICAgICAgICBp
ZiAodGhyZWFkZWQpCi0gICAgICAgICAgICB0aHJlYWQgPSBhZG9wdFB0cihXZWJLaXQ6OlBsYXRm
b3JtOjpjdXJyZW50KCktPmNyZWF0ZVRocmVhZCgiQ2FudmFzMkRMYXllckNocm9taXVtVGVzdCIp
KTsKLSAgICAgICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSh0aHJlYWQuZ2V0KCkpOwotCi0g
ICAgICAgIE93blB0cjxGYWtlQ0NMYXllclRyZWVIb3N0PiBsYXllclRyZWVIb3N0KEZha2VDQ0xh
eWVyVHJlZUhvc3Q6OmNyZWF0ZSgpKTsKLSAgICAgICAgLy8gRm9yY2UgYW4gdXBkYXRlLCBzbyB0
aGF0IHdlIGdldCBhIHZhbGlkIFRleHR1cmVNYW5hZ2VyLgotICAgICAgICBsYXllclRyZWVIb3N0
LT51cGRhdGVMYXllcnModXBkYXRlcik7Ci0KLSAgICAgICAgY29uc3QgV2ViR0xJZCBiYWNrVGV4
dHVyZUlkID0gMTsKLSAgICAgICAgY29uc3QgV2ViR0xJZCBmcm9udFRleHR1cmVJZCA9IDI7Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIEluU2VxdWVuY2Ugc2VxdWVuY2U7Ci0KLSAgICAgICAgICAg
IC8vIFBhaW50IGNhbnZhcyBjb250ZW50cyBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgICAgICAg
ICBFWFBFQ1RfQ0FMTChtYWluTW9jaywgZmx1c2goKSk7Ci0KLSAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCB0aGUgY2FudmFzIGJhY2tpbmcgdGV4dHVyZSBpcyBkb3VibGVidWZmZXJlZCBvbmx5IHdo
ZW4gdXNpbmcgdGhlIHRocmVhZGVkCi0gICAgICAgICAgICAvLyBjb21wb3NpdG9yIGFuZCBub3Qg
dXNpbmcgZGVmZXJyZWQgY2FudmFzIHJlbmRlcmluZwotICAgICAgICAgICAgaWYgKHRocmVhZGVk
ICYmICFkZWZlcnJlZCkgewotICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0ZXh0dXJlIGFuZCBk
byB0aGUgY29weSAob24gdGhlIGltcGwgdGhyZWFkKS4KLSAgICAgICAgICAgICAgICBFWFBFQ1Rf
Q0FMTChhbGxvY2F0b3JNb2NrLCBjcmVhdGVUZXh0dXJlKHNpemUsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBKSkKLSAgICAgICAgICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybihmcm9udFRleHR1
cmVJZCkpOwotICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxMKGNvcGllck1vY2ssIGNvcHlUZXh0
dXJlKGltcGxDb250ZXh0LmdldCgpLCBiYWNrVGV4dHVyZUlkLCBmcm9udFRleHR1cmVJZCwgc2l6
ZSkpOwotICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBmbHVzaCgpKTsKLQot
ICAgICAgICAgICAgICAgIC8vIFRlYXJkb3duIFRleHR1cmVNYW5hZ2VyLgotICAgICAgICAgICAg
ICAgIEVYUEVDVF9DQUxMKGFsbG9jYXRvck1vY2ssIGRlbGV0ZVRleHR1cmUoZnJvbnRUZXh0dXJl
SWQsIHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBjYW52YXMgPSBD
YW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShtYWluQ29udGV4dC5nZXQoKSwgc2l6ZSwgZGVm
ZXJyZWQgPyBEZWZlcnJlZCA6IE5vbkRlZmVycmVkKTsKLSAgICAgICAgY2FudmFzLT5zZXRJc0Ry
YXdhYmxlKHRydWUpOwotICAgICAgICBjYW52YXMtPnNldExheWVyVHJlZUhvc3QobGF5ZXJUcmVl
SG9zdC5nZXQoKSk7Ci0gICAgICAgIGNhbnZhcy0+c2V0Qm91bmRzKEludFNpemUoNjAwLCAzMDAp
KTsKLSAgICAgICAgY2FudmFzLT5zZXRUZXh0dXJlSWQoYmFja1RleHR1cmVJZCk7Ci0KLSAgICAg
ICAgY2FudmFzLT5zZXROZWVkc0Rpc3BsYXkoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoY2FudmFz
LT5uZWVkc0Rpc3BsYXkoKSk7Ci0gICAgICAgIGNhbnZhcy0+dXBkYXRlKHVwZGF0ZXIsIDApOwot
ICAgICAgICBFWFBFQ1RfRkFMU0UoY2FudmFzLT5uZWVkc0Rpc3BsYXkoKSk7Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzY29wZWRJbXBsVGhyZWFkOwot
Ci0gICAgICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGxheWVySW1wbCA9IGNhbnZhcy0+Y3Jl
YXRlQ0NMYXllckltcGwoKTsKLSAgICAgICAgICAgIEVYUEVDVF9FUSgwdSwgc3RhdGljX2Nhc3Q8
Q0NUZXh0dXJlTGF5ZXJJbXBsKj4obGF5ZXJJbXBsLmdldCgpKS0+dGV4dHVyZUlkKCkpOwotCi0g
ICAgICAgICAgICB1cGRhdGVyLnVwZGF0ZShpbXBsQ29udGV4dC5nZXQoKSwgJmFsbG9jYXRvck1v
Y2ssICZjb3BpZXJNb2NrLCAmdXBsb2FkZXJNb2NrLCAxKTsKLSAgICAgICAgICAgIGNhbnZhcy0+
cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwotCi0gICAgICAgICAgICBpZiAodGhy
ZWFkZWQgJiYgIWRlZmVycmVkKQotICAgICAgICAgICAgICAgIEVYUEVDVF9FUShmcm9udFRleHR1
cmVJZCwgc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlTGF5ZXJJbXBsKj4obGF5ZXJJbXBsLmdldCgpKS0+
dGV4dHVyZUlkKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEVYUEVDVF9F
UShiYWNrVGV4dHVyZUlkLCBzdGF0aWNfY2FzdDxDQ1RleHR1cmVMYXllckltcGwqPihsYXllcklt
cGwuZ2V0KCkpLT50ZXh0dXJlSWQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FudmFzLmNsZWFy
KCk7Ci0gICAgICAgIGxheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVk
dWNlTWVtb3J5VG9MaW1pdCgwKTsKLSAgICAgICAgbGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0
dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoJmFsbG9jYXRvck1vY2spOwotICAg
ICAgICBsYXllclRyZWVIb3N0LmNsZWFyKCk7Ci0gICAgICAgIFdlYkNvbXBvc2l0b3I6OnNodXRk
b3duKCk7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIHsKLQotVEVTVF9GKENhbnZhczJETGF5ZXJD
aHJvbWl1bVRlc3QsIHRlc3RGdWxsTGlmZWN5Y2xlU2luZ2xlVGhyZWFkKQotewotICAgIGZ1bGxM
aWZlY3ljbGVUZXN0KGZhbHNlLCBmYWxzZSk7Ci19Ci0KLVRFU1RfRihDYW52YXMyRExheWVyQ2hy
b21pdW1UZXN0LCB0ZXN0RnVsbExpZmVjeWNsZVRocmVhZGVkKQotewotICAgIGZ1bGxMaWZlY3lj
bGVUZXN0KHRydWUsIGZhbHNlKTsKLX0KLQotVEVTVF9GKENhbnZhczJETGF5ZXJDaHJvbWl1bVRl
c3QsIHRlc3RGdWxsTGlmZWN5Y2xlU2luZ2xlVGhyZWFkRGVmZXJyZWQpCi17Ci0gICAgZnVsbExp
ZmVjeWNsZVRlc3QoZmFsc2UsIHRydWUpOwotfQotCi1URVNUX0YoQ2FudmFzMkRMYXllckNocm9t
aXVtVGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVUaHJlYWRlZERlZmVycmVkKQotewotICAgIGZ1bGxM
aWZlY3ljbGVUZXN0KHRydWUsIHRydWUpOwotfQotCi19IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143682</attachid>
            <date>2012-05-23 16:56:43 -0700</date>
            <delta_ts>2012-06-05 17:02:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86050-20120523165643.patch</filename>
            <type>text/plain</type>
            <size>51482</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MjY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjY1ZTJlMTE2NmE5YzBk
MDkyM2E1OTljYWRhMmIzOTU2NjBlNTdjZC4uNWI2YzEzMDBiNTIzZDQ1MGVlNDhjNmUwNTNhZjQ5
ZjkyYTZjNjMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU3IEBACiAyMDEyLTA1LTIzICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW2Nocm9taXVtXSBN
b3ZlIGRlZmVycmFsLXJlbGF0ZWQgbG9naWMgb3V0IG9mIENhbnZhczJETGF5ZXJDaHJvbWl1bQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYwNTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBTdGVwaGVuIFdoaXRlLgorCisgICAgICAgIFRoaXMgcmVtb3Zl
cyBDYW52YXMyRExheWVyQ2hyb21pdW0gYW5kIHB1dHMgdGhlIGRlZmVycmFsIGFuZCBkb3VibGUt
YnVmZmVyaW5nIHJlbGF0ZWQgbG9naWMgaW4gYSBuZXcgY2xhc3MsCisgICAgICAgIENhbnZhczJE
TGF5ZXJCcmlkZ2UsIHRoYXQgdXNlcyBUZXh0dXJlTGF5ZXJDaHJvbWl1bSBmb3IgY29tcG9zaXRp
bmcuICBUaGUgYnJpZGdlIGlzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGUKKyAgICAgICAg
ZnJvbnQgdGV4dHVyZSB3aGVuIGRvdWJsZSBidWZmZXJpbmcgaXMgYWN0aXZlLCBpbnNlcnRpbmcg
dGhlIGNvcnJlY3QgbWFrZUNvbnRleHRDdXJyZW50KCkgYW5kIGZsdXNoKCkgY2FsbHMgb24KKyAg
ICAgICAgdGhlIEdyYXBoaWNzQ29udGV4dDNEIGFuZCBTa0NhbnZhcyB3aGVuIGFwcHJvcHJpYXRl
LCBhbmQgb3duaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgbGF5ZXIuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckJyaWRnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJy
aWRnZTo6Q2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyQnJpZGdlOjp+Q2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXMyRExheWVyQnJpZGdlOjpzZXRTa0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMy
RExheWVyQnJpZGdlOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMy
RExheWVyQnJpZGdlOjpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJC
cmlkZ2U6OmxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmNv
bnRleHRBY3F1aXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllckJyaWRnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
Q2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJp
ZGdlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlQnVmZmVyRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZUxheWVyQ2hyb21pdW06OndpbGxNb2RpZnlUZXh0dXJl
KToKKyAgICAgICAgICAgIHdpbGxNb2RpZnlUZXh0dXJlKCkgaXMgY2FsbGVkIHdoZW5ldmVyIHRo
ZSB0ZXh0dXJlIGN1cnJlbnRseSBvd25lZCBieSB0aGUgVGV4dHVyZUxheWVyQ2hyb21pdW0gd2ls
bCBiZQorICAgICAgICAgICAgbW9kaWZpZWQgYnkgYSBzeXN0ZW0gb3V0IG9mIHRoZSBjb21wb3Np
dG9yJ3MgY29udHJvbC4gSXQgbWFrZXMgc3VyZSB0aGF0IHRoZSBjb21wb3NpdG9yIGRvZXMgbm90
IGF0dGVtcHQgdG8KKyAgICAgICAgICAgIGRyYXcgd2l0aCB0aGUgcG90ZW50aWFsbHktbW9kaWZp
ZWQgdGV4dHVyZSB1bnRpbCB0aGUgbmV4dCBjb21taXQuIEZvciBjYW52YXMsIHRoaXMgaXMgdXNl
ZCB3aGVuIHRocmVhZGluZyBpcworICAgICAgICAgICAgZW5hYmxlZCBhbmQgYSBub24tZGVmZXJy
YWJsZSBkcmF3aW5nIGNvbW1hbmQgaXMgaW52b2tlZCBmcm9tIEpTLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKFRleHR1cmVMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6Omhhc01vcmVVcGRhdGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Rl
eHR1cmVVcGRhdGVyOjpjbGVhcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAoQ0NUZXh0dXJlVXBkYXRlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1M
YXllcik6CisKKzIwMTItMDUtMjMgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9y
Zz4KKwogICAgICAgICBBZGQgYSBTZXR0aW5nIHRvIG1ha2UgcG9zaXRpb246Zml4ZWQgZm9ybSBh
IG5ldyBzdGFja2luZyBjb250ZXh0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04NzE4NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGMzNDM5
MjZkMTM0OTIyNWY2ZmFlOTg1NzcyMjQ1YWQ5MTY2ODE0MjMuLjg0MGVlMGQ2NWNiM2I3NzljNzVm
YTFhZGY0NjgwZGVmZGIyZjdkMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDUg
KzEsMTcgQEAKIDIwMTItMDUtMjMgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9y
Zz4KIAorICAgICAgICBbY2hyb21pdW1dIE1vdmUgZGVmZXJyYWwtcmVsYXRlZCBsb2dpYyBvdXQg
b2YgQ2FudmFzMkRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NjA1MAorCisgICAgICAgIFJldmlld2VkIGJ5IFN0ZXBoZW4gV2hp
dGUuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DYW52YXMyRExh
eWVyQnJpZGdlVGVzdC5jcHA6IFJlbmFtZWQgZnJvbSB0ZXN0cy9DYW52YXMyRExheWVyQ2hyb21p
dW1UZXN0CisgICAgICAgIChDYW52YXMyRExheWVyQnJpZGdlVGVzdCk6CisgICAgICAgIChDYW52
YXMyRExheWVyQnJpZGdlVGVzdDo6ZnVsbExpZmVjeWNsZVRlc3QpOgorCisyMDEyLTA1LTIzICBK
YW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgQWRkIGEgU2V0
dGluZyB0byBtYWtlIHBvc2l0aW9uOmZpeGVkIGZvcm0gYSBuZXcgc3RhY2tpbmcgY29udGV4dAog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcxODYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IGRhZTQxYWY3ZmU2MDFhMmY4OGJlNjI4ODMzYjQ1NDVkOGNhM2Nl
MmUuLjllOGI4ZTNlM2UyYzM5ZDAzNzRjZjVkZGY3ODBmYzhkNDMyOGRjOWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTM1NTksMTAgKzM1NTksOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVt
LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckNocm9taXVtLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5
ZXJCcmlkZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiOTMyNmUxODcxMzVjZWU0MzU5NjI5MTY3YWM3OWM0
NmYzMmMxMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcApAQCAtMCwwICsxLDE1OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJCcmlk
Z2UuaCIKKworI2luY2x1ZGUgIkdyQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiIC8vIEZvciBHTEMoKSBt
YWNyby4KKyNpbmNsdWRlICJTa0NhbnZhcy5oIgorI2luY2x1ZGUgIlRleHR1cmVMYXllckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVw
ZGF0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBY2NlbGVyYXRlZERldmlj
ZUNvbnRleHQgOiBwdWJsaWMgU2tEZWZlcnJlZENhbnZhczo6RGV2aWNlQ29udGV4dCB7CitwdWJs
aWM6CisgICAgQWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0M0QsIFRleHR1cmVMYXllckNocm9taXVtKiBsYXllciwgYm9vbCB1c2VEb3VibGVCdWZmZXJp
bmcpCisgICAgICAgIDogbV9sYXllcihsYXllcikKKyAgICAgICAgLCBtX2NvbnRleHQzRChjb250
ZXh0M0QpCisgICAgICAgICwgbV91c2VEb3VibGVCdWZmZXJpbmcodXNlRG91YmxlQnVmZmVyaW5n
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNvbnRleHQzRCk7CisgICAgICAgIEFTU0VSVChsYXll
cik7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEcmF3KCkKKyAgICB7Cisg
ICAgICAgIGlmICghbV91c2VEb3VibGVCdWZmZXJpbmcpCisgICAgICAgICAgICBtX2xheWVyLT53
aWxsTW9kaWZ5VGV4dHVyZSgpOworICAgICAgICBtX2NvbnRleHQzRC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxUZXh0dXJlTGF5ZXJDaHJvbWl1
bT4gbV9sYXllcjsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOwor
ICAgIGJvb2wgbV91c2VEb3VibGVCdWZmZXJpbmc7Cit9OworCisKK0NhbnZhczJETGF5ZXJCcmlk
Z2U6OkNhbnZhczJETGF5ZXJCcmlkZ2UoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSwgdW5z
aWduZWQgdGV4dHVyZUlkKQorICAgIDogbV9kZWZlcnJhbE1vZGUoZGVmZXJyYWxNb2RlKQorICAg
IC8vIEZJWE1FOiBXZSBjdXJyZW50bHkgdHVybiBvZmYgZG91YmxlIGJ1ZmZlcmluZyB3aGVuIGNh
bnZhcyByZW5kZXJpbmcgaXMKKyAgICAvLyBkZWZlcnJlZC4gV2hhdCB3ZSBzaG91bGQgYmUgZG9p
bmcgaXMgdG8gdXNlIGEgc21hcnRlciBoZXVyaXN0aWMgYmFzZWQKKyAgICAvLyBvbiBHUFUgcmVz
b3VyY2UgbW9uaXRvcmluZyBhbmQgb3RoZXIgZmFjdG9ycyB0byBjaG9zZSBiZXR3ZWVuIHNpbmds
ZQorICAgIC8vIGFuZCBkb3VibGUgYnVmZmVyaW5nLgorICAgICwgbV91c2VEb3VibGVCdWZmZXJp
bmcoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpICYmIGRlZmVycmFsTW9kZSA9PSBOb25EZWZlcnJl
ZCkKKyAgICAsIG1fZnJvbnRCdWZmZXJUZXh0dXJlKDApCisgICAgLCBtX2JhY2tCdWZmZXJUZXh0
dXJlKHRleHR1cmVJZCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9jYW52YXMoMCkKKyAg
ICAsIG1fY29udGV4dChjb250ZXh0KQoreworICAgIGlmIChtX3VzZURvdWJsZUJ1ZmZlcmluZykg
eworICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBHTEMo
bV9jb250ZXh0LmdldCgpLCBtX2Zyb250QnVmZmVyVGV4dHVyZSA9IG1fY29udGV4dC0+Y3JlYXRl
VGV4dHVyZSgpKTsKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9mcm9udEJ1ZmZlclRleHR1
cmUpKTsKKyAgICAgICAgLy8gRG8gYmFzaWMgbGluZWFyIGZpbHRlcmluZyBvbiByZXNpemUuCisg
ICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlO
X0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgICAgICBHTEMobV9jb250
ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgLy8gTlBPVCB0ZXh0dXJlcyBpbiBHTCBFUyBv
bmx5IHdvcmsgd2hlbiB0aGUgd3JhcCBtb2RlIGlzIHNldCB0byBHcmFwaGljc0NvbnRleHQzRDo6
Q0xBTVBfVE9fRURHRS4KKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7
CisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
V1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAgICAgICBHTEMo
bV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpOworCisgICAgICAgIGlmIChHckNvbnRleHQq
IGdyQ29udGV4dCA9IG1fY29udGV4dC0+Z3JDb250ZXh0KCkpCisgICAgICAgICAgICBnckNvbnRl
eHQtPnJlc2V0Q29udGV4dCgpOworICAgIH0KKworICAgIG1fbGF5ZXIgPSBUZXh0dXJlTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKHRoaXMpOworICAgIG1fbGF5ZXItPnNldFRleHR1cmVJZCh0ZXh0dXJl
SWQpOworICAgIG1fbGF5ZXItPnNldFJhdGVMaW1pdENvbnRleHQoIUNDUHJveHk6Omhhc0ltcGxU
aHJlYWQoKSB8fCBtX3VzZURvdWJsZUJ1ZmZlcmluZyk7Cit9CisKKworQ2FudmFzMkRMYXllckJy
aWRnZTo6fkNhbnZhczJETGF5ZXJCcmlkZ2UoKQoreworICAgIG1fbGF5ZXItPnNldFRleHR1cmVJ
ZCgwKTsKKyAgICBpZiAobV91c2VEb3VibGVCdWZmZXJpbmcpIHsKKyAgICAgICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT5kZWxldGVUZXh0dXJlKG1fZnJvbnRCdWZmZXJUZXh0dXJlKSk7CisgICAgICAgIG1f
Y29udGV4dC0+Zmx1c2goKTsKKyAgICB9CisgICAgbV9sYXllci0+Y2xlYXJDbGllbnQoKTsKK30K
KwordW5zaWduZWQgQ2FudmFzMkRMYXllckJyaWRnZTo6cHJlcGFyZVRleHR1cmUoQ0NUZXh0dXJl
VXBkYXRlciYgdXBkYXRlcikKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgaWYgKG1fY2FudmFzKSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ2Fu
dmFzMkRMYXllckJyaWRnZTo6U2tDYW52YXM6OmZsdXNoIik7CisgICAgICAgIG1fY2FudmFzLT5m
bHVzaCgpOworICAgIH0KKworICAgIG1fY29udGV4dC0+Zmx1c2goKTsKKworICAgIGlmIChtX3Vz
ZURvdWJsZUJ1ZmZlcmluZykgeworICAgICAgICB1cGRhdGVyLmFwcGVuZENvcHkobV9iYWNrQnVm
ZmVyVGV4dHVyZSwgbV9mcm9udEJ1ZmZlclRleHR1cmUsIG1fc2l6ZSk7CisgICAgICAgIHJldHVy
biBtX2Zyb250QnVmZmVyVGV4dHVyZTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9iYWNrQnVmZmVy
VGV4dHVyZTsKK30KKworR3JhcGhpY3NDb250ZXh0M0QqIENhbnZhczJETGF5ZXJCcmlkZ2U6OmNv
bnRleHQoKQoreworICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Cit9CisKK1NrRGVmZXJyZWRD
YW52YXM6OkRldmljZUNvbnRleHQqIENhbnZhczJETGF5ZXJCcmlkZ2U6OmNyZWF0ZURlZmVycmVk
RGV2aWNlQ29udGV4dCgpCit7CisgICAgQVNTRVJUKG1fZGVmZXJyYWxNb2RlID09IERlZmVycmVk
KTsKKyAgICByZXR1cm4gbmV3IEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dChtX2NvbnRleHQuZ2V0
KCksIG1fbGF5ZXIuZ2V0KCksIG1fdXNlRG91YmxlQnVmZmVyaW5nKTsKK30KKwordm9pZCBDYW52
YXMyRExheWVyQnJpZGdlOjpzZXRTa0NhbnZhcyhTa0NhbnZhcyogY2FudmFzKQoreworICAgIG1f
Y2FudmFzID0gY2FudmFzOworfQorCitMYXllckNocm9taXVtKiBDYW52YXMyRExheWVyQnJpZGdl
OjpsYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuZ2V0KCk7Cit9CisKK3ZvaWQg
Q2FudmFzMkRMYXllckJyaWRnZTo6Y29udGV4dEFjcXVpcmVkKCkKK3sKKyAgICBpZiAobV9kZWZl
cnJhbE1vZGUgPT0gTm9uRGVmZXJyZWQgJiYgIW1fdXNlRG91YmxlQnVmZmVyaW5nKQorICAgICAg
ICBtX2xheWVyLT53aWxsTW9kaWZ5VGV4dHVyZSgpOworfQorCit9CisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlk
Z2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJCcmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2JjZTRhYjllMDBiMmFjMDQ5OGUwZGQwY2ZkYzhl
Y2RkMzczNDE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oCkBAIC0wLDAgKzEsNzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENhbnZhczJETGF5ZXJCcmlkZ2VfaAorI2RlZmluZSBDYW52YXMyRExheWVy
QnJpZGdlX2gKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiIC8vIEZvciBEZWZlcnJhbE1vZGUg
ZW51bS4KKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2tEZWZlcnJlZENhbnZhcy5o
IgorI2luY2x1ZGUgIlRleHR1cmVMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK2NsYXNzIFNrQ2FudmFzOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyQ2hyb21pdW07CitjbGFzcyBUZXh0dXJl
TGF5ZXJDaHJvbWl1bTsKKworY2xhc3MgQ2FudmFzMkRMYXllckJyaWRnZSA6IHB1YmxpYyBUZXh0
dXJlTGF5ZXJDaHJvbWl1bUNsaWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FudmFz
MkRMYXllckJyaWRnZSk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q2FudmFzMkRM
YXllckJyaWRnZT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQs
IGNvbnN0IEludFNpemUmIHNpemUsIERlZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUsIHVuc2lnbmVk
IHRleHR1cmVJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ2FudmFzMkRM
YXllckJyaWRnZShjb250ZXh0LCBzaXplLCBkZWZlcnJhbE1vZGUsIHRleHR1cmVJZCkpOworICAg
IH0KKworICAgIHZpcnR1YWwgfkNhbnZhczJETGF5ZXJCcmlkZ2UoKTsKKworICAgIC8vIFRleHR1
cmVMYXllckNocm9taXVtQ2xpZW50IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdW5zaWdu
ZWQgcHJlcGFyZVRleHR1cmUoQ0NUZXh0dXJlVXBkYXRlciYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSBPVkVSUklERTsKKworICAgIFNrRGVmZXJy
ZWRDYW52YXM6OkRldmljZUNvbnRleHQqIGNyZWF0ZURlZmVycmVkRGV2aWNlQ29udGV4dCgpOwor
ICAgIHZvaWQgc2V0U2tDYW52YXMoU2tDYW52YXMqKTsKKyAgICBMYXllckNocm9taXVtKiBsYXll
cigpIGNvbnN0OworICAgIHZvaWQgY29udGV4dEFjcXVpcmVkKCk7CisKK3ByaXZhdGU6CisgICAg
Q2FudmFzMkRMYXllckJyaWRnZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgY29uc3Qg
SW50U2l6ZSYsIERlZmVycmFsTW9kZSwgdW5zaWduZWQgdGV4dHVyZUlkKTsKKworICAgIERlZmVy
cmFsTW9kZSBtX2RlZmVycmFsTW9kZTsKKyAgICBib29sIG1fdXNlRG91YmxlQnVmZmVyaW5nOwor
ICAgIHVuc2lnbmVkIG1fZnJvbnRCdWZmZXJUZXh0dXJlOworICAgIHVuc2lnbmVkIG1fYmFja0J1
ZmZlclRleHR1cmU7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgU2tDYW52YXMqIG1fY2FudmFz
OworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworICAgIFJlZlB0cjxU
ZXh0dXJlTGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYTQ3OTI5N2I3YjZiOTI1MDg5Njk1OTk2OGVhMzM0YzdhMDQ5NzhkMi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIK
LQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIgLy8gRm9yIHRo
ZSBHTEMoKSBtYWNybwotI2luY2x1ZGUgIlRleHR1cmVDb3BpZXIuaCIKLSNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJjYy9DQ1RleHR1cmVMYXllckltcGwuaCIKLSNp
bmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCi0KLSNpbmNsdWRlICJTa0NhbnZhcy5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVt
PiBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxN
b2RlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzMkRMYXllckNocm9taXVtKGNv
bnRleHQsIHNpemUsIGRlZmVycmFsTW9kZSkpOwotfQotCi1DYW52YXMyRExheWVyQ2hyb21pdW06
OkNhbnZhczJETGF5ZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlKQotICAg
IDogQ2FudmFzTGF5ZXJDaHJvbWl1bSgpCi0gICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICAs
IG1fY29udGV4dExvc3QoZmFsc2UpCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fYmFja1Rl
eHR1cmVJZCgwKQotICAgICwgbV9jYW52YXMoMCkKLSAgICAsIG1fZGVmZXJyYWxNb2RlKGRlZmVy
cmFsTW9kZSkKLXsKLSAgICAvLyBGSVhNRTogV2UgY3VycmVudGx5IHR1cm4gb2ZmIGRvdWJsZSBi
dWZmZXJpbmcgd2hlbiBjYW52YXMgcmVuZGVyaW5nIGlzCi0gICAgLy8gZGVmZXJyZWQuIFdoYXQg
d2Ugc2hvdWxkIGJlIGRvaW5nIGlzIHRvIHVzZSBhIHNtYXJ0ZXIgaGV1cmlzdGljIGJhc2VkCi0g
ICAgLy8gb24gR1BVIHJlc291cmNlIG1vbml0b3JpbmcgYW5kIG90aGVyIGZhY3RvcnMgdG8gY2hv
c2UgYmV0d2VlbiBzaW5nbGUKLSAgICAvLyBhbmQgZG91YmxlIGJ1ZmZlcmluZy4KLSAgICBtX3Vz
ZURvdWJsZUJ1ZmZlcmluZyA9IENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSAmJiBkZWZlcnJhbE1v
ZGUgPT0gTm9uRGVmZXJyZWQ7Ci0KLSAgICAvLyBUaGUgdGhyZWFkZWQgY29tcG9zaXRvciBpcyBz
ZWxmIHJhdGUtbGltaXRpbmcgd2hlbiByZW5kZXJpbmcKLSAgICAvLyB0byBhIHNpbmdsZSBidWZm
ZXJlZCBjYW52YXMgbGF5ZXIuCi0gICAgbV91c2VSYXRlTGltaXRlciA9ICFDQ1Byb3h5OjpoYXNJ
bXBsVGhyZWFkKCkgfHwgbV91c2VEb3VibGVCdWZmZXJpbmc7Ci19Ci0KLUNhbnZhczJETGF5ZXJD
aHJvbWl1bTo6fkNhbnZhczJETGF5ZXJDaHJvbWl1bSgpCi17Ci0gICAgc2V0VGV4dHVyZUlkKDAp
OwotICAgIGlmIChtX2NvbnRleHQgJiYgbV91c2VSYXRlTGltaXRlciAmJiBsYXllclRyZWVIb3N0
KCkpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RvcFJhdGVMaW1pdGVyKG1fY29udGV4dC5n
ZXQoKSk7Ci19Ci0KLWJvb2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpkcmF3aW5nSW50b0ltcGxU
aHJlYWRUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1fdXNlRG91YmxlQnVmZmVyaW5n
ICYmIENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSAmJiBsYXllclRyZWVIb3N0KCk7Ci19Ci0KLXZv
aWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlk
KQotewotICAgIGlmIChtX2JhY2tUZXh0dXJlSWQgPT0gdGV4dHVyZUlkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9iYWNrVGV4dHVyZUlkICYmIGRyYXdpbmdJbnRvSW1wbFRocmVhZFRl
eHR1cmUoKSkgewotICAgICAgICAvLyBUaGUgaW1wbCB0cmVlIG1heSBiZSByZWZlcmVuY2luZyB0
aGUgb2xkIG1fYmFja1RleHR1cmUsIHdoaWNoIG1heQotICAgICAgICAvLyBzb29uIGJlIGRlbGV0
ZWQuIFdlIG11c3QgbWFrZSBzdXJlIHRoZSBsYXllciB0cmVlIG9uIHRoZSBpbXBsIHRocmVhZAot
ICAgICAgICAvLyBpcyBub3QgZHJhd24gdW50aWwgdGhlIG5leHQgY29tbWl0LCB3aGljaCB3aWxs
IHJlLXN5bmNocm9uaXplIHRoZQotICAgICAgICAvLyBsYXllciB0cmVlcy4KLSAgICAgICAgbGF5
ZXJUcmVlSG9zdCgpLT5hY3F1aXJlTGF5ZXJUZXh0dXJlcygpOwotICAgIH0KLSAgICBtX2JhY2tU
ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKLX0KLQotdm9pZCBD
YW52YXMyRExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheVJlY3QoY29uc3QgRmxvYXRSZWN0
JiBkaXJ0eVJlY3QpCi17Ci0gICAgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5UmVjdChk
aXJ0eVJlY3QpOwotCi0gICAgaWYgKG1fdXNlUmF0ZUxpbWl0ZXIgJiYgbGF5ZXJUcmVlSG9zdCgp
KQotICAgICAgICBsYXllclRyZWVIb3N0KCktPnN0YXJ0UmF0ZUxpbWl0ZXIobV9jb250ZXh0Lmdl
dCgpKTsKLX0KLQotYm9vbCBDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpICYmIG1fYmFj
a1RleHR1cmVJZCAmJiAhbV9zaXplLmlzRW1wdHkoKQotICAgICAgICAmJiAhbV9jb250ZXh0TG9z
dDsKLX0KLQotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnNldENhbnZhcyhTa0NhbnZhcyog
Y2FudmFzKQotewotICAgIG1fY2FudmFzID0gY2FudmFzOwotfQotCi12b2lkIENhbnZhczJETGF5
ZXJDaHJvbWl1bTo6dXBkYXRlKENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIsIGNvbnN0IENDT2Nj
bHVzaW9uVHJhY2tlciopCi17Ci0gICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDYW52YXMyRExheWVy
Q2hyb21pdW06OnVwZGF0ZSIpOwotICAgIGlmICghZHJhd3NDb250ZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX3VzZURvdWJsZUJ1ZmZlcmluZyAmJiBsYXllclRyZWVIb3N0KCkp
IHsKLSAgICAgICAgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyID0gbGF5ZXJUcmVlSG9z
dCgpLT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCk7Ci0gICAgICAgIGlmIChtX2Zyb250VGV4dHVy
ZSkKLSAgICAgICAgICAgIG1fZnJvbnRUZXh0dXJlLT5zZXRUZXh0dXJlTWFuYWdlcih0ZXh0dXJl
TWFuYWdlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZnJvbnRUZXh0dXJlID0gTWFu
YWdlZFRleHR1cmU6OmNyZWF0ZSh0ZXh0dXJlTWFuYWdlcik7Ci0gICAgICAgIGlmIChtX2Zyb250
VGV4dHVyZS0+cmVzZXJ2ZShtX3NpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKLSAgICAg
ICAgICAgIHVwZGF0ZXIuYXBwZW5kTWFuYWdlZENvcHkobV9iYWNrVGV4dHVyZUlkLCBtX2Zyb250
VGV4dHVyZS5nZXQoKSwgbV9zaXplKTsKLSAgICB9Ci0KLSAgICBpZiAoIW5lZWRzRGlzcGxheSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwotCi0gICAg
Ym9vbCBzdWNjZXNzID0gbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NF
UlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotCi0gICAgbV9jb250ZXh0TG9zdCA9IG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotICAgIGlmIChtX2NvbnRleHRMb3N0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9jYW52YXMpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJj
YyIsICJTa0NhbnZhczo6Zmx1c2giKTsKLSAgICAgICAgbV9jYW52YXMtPmZsdXNoKCk7Ci0gICAg
fQotCi0gICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2giKTsK
LSAgICBtX2NvbnRleHQtPmZsdXNoKCk7Ci19Ci0KLXZvaWQgQ2FudmFzMkRMYXllckNocm9taXVt
OjpsYXllcldpbGxEcmF3KFdpbGxEcmF3Q29uZGl0aW9uIGNvbmRpdGlvbikgY29uc3QKLXsKLSAg
ICBpZiAoZHJhd2luZ0ludG9JbXBsVGhyZWFkVGV4dHVyZSgpKSB7Ci0gICAgICAgIGlmIChjb25k
aXRpb24gPT0gV2lsbERyYXdVbmNvbmRpdGlvbmFsbHkgfHwgbV9kZWZlcnJhbE1vZGUgPT0gTm9u
RGVmZXJyZWQpCi0gICAgICAgICAgICBsYXllclRyZWVIb3N0KCktPmFjcXVpcmVMYXllclRleHR1
cmVzKCk7Ci0gICAgfQotfQotCi0KLXZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpwdXNoUHJv
cGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKLXsKLSAgICBDYW52YXNMYXllckNocm9taXVt
OjpwdXNoUHJvcGVydGllc1RvKGxheWVyKTsKLQotICAgIENDVGV4dHVyZUxheWVySW1wbCogdGV4
dHVyZUxheWVyID0gc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlTGF5ZXJJbXBsKj4obGF5ZXIpOwotICAg
IGlmIChtX3VzZURvdWJsZUJ1ZmZlcmluZykgewotICAgICAgICBpZiAobV9mcm9udFRleHR1cmUg
JiYgbV9mcm9udFRleHR1cmUtPmlzVmFsaWQobV9zaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSkpCi0gICAgICAgICAgICB0ZXh0dXJlTGF5ZXItPnNldFRleHR1cmVJZChtX2Zyb250VGV4dHVy
ZS0+dGV4dHVyZUlkKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0ZXh0dXJlTGF5ZXIt
PnNldFRleHR1cmVJZCgwKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdGV4dHVyZUxheWVyLT5zZXRU
ZXh0dXJlSWQobV9iYWNrVGV4dHVyZUlkKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQzYzY4NjVhZjRhZmRjMTJlMzY0NjllZWZlY2Nl
OGU5NjMyNmI2OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
Q2hyb21pdW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5kZWYgQ2FudmFz
MkRMYXllckNocm9taXVtX2gKLSNkZWZpbmUgQ2FudmFzMkRMYXllckNocm9taXVtX2gKLQotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hy
b21pdW0uaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIk1hbmFnZWRUZXh0
dXJlLmgiCi0KLWNsYXNzIFNrQ2FudmFzOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgUmVnaW9uOwotCi0vLyBBIGxheWVyIGNvbnRhaW5p
bmcgYW4gYWNjZWxlcmF0ZWQgMmQgY2FudmFzCi1jbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW0g
OiBwdWJsaWMgQ2FudmFzTGF5ZXJDaHJvbWl1bSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBXaWxsRHJh
d0NvbmRpdGlvbiB7Ci0gICAgICAgIFdpbGxEcmF3VW5jb25kaXRpb25hbGx5LAotICAgICAgICBX
aWxsRHJhd0lmTGF5ZXJOb3REZWZlcnJlZCwKLSAgICB9OwotCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4sIGNvbnN0IEludFNpemUmLCBEZWZlcnJhbE1vZGUpOwotICAgIHZpcnR1YWwgfkNhbnZh
czJETGF5ZXJDaHJvbWl1bSgpOwotCi0gICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQpOwot
Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheVJlY3QoY29uc3QgRmxvYXRSZWN0Jikg
T1ZFUlJJREU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShDQ1RleHR1cmVVcGRhdGVyJiwgY29uc3QgQ0NP
Y2NsdXNpb25UcmFja2VyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0
aWVzVG8oQ0NMYXllckltcGwqKSBPVkVSUklERTsKLQotICAgIHZvaWQgc2V0Q2FudmFzKFNrQ2Fu
dmFzKik7Ci0gICAgdm9pZCBsYXllcldpbGxEcmF3KFdpbGxEcmF3Q29uZGl0aW9uKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBDYW52YXMyRExheWVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4sIGNvbnN0IEludFNpemUmLCBEZWZlcnJhbE1vZGUpOwotICAgIGJvb2wgZHJh
d2luZ0ludG9JbXBsVGhyZWFkVGV4dHVyZSgpIGNvbnN0OwotCi0gICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBtX2NvbnRleHQ7Ci0gICAgYm9vbCBtX2NvbnRleHRMb3N0OwotICAgIEludFNp
emUgbV9zaXplOwotICAgIHVuc2lnbmVkIG1fYmFja1RleHR1cmVJZDsKLSAgICAvLyBXaGVuIG1f
dXNlRG91YmxlQnVmZmVyaW5nIGlzIHRydWUsIHRoZSBjb21wb3NpdG9yIHdpbGwgZHJhdyB1c2lu
ZyBhIGNvcHkgb2YgdGhlCi0gICAgLy8gY2FudmFzJyBiYWNraW5nIHRleHR1cmUuIFRoaXMgb3B0
aW9uIHNob3VsZCBiZSB1c2VkIHdpdGggdGhlIGNvbXBvc2l0b3IgZG9lc24ndAotICAgIC8vIHN5
bmNocm9uaXplIGl0cyBkcmF3cyB3aXRoIHRoZSBjYW52YXMgdXBkYXRlcy4KLSAgICBib29sIG1f
dXNlRG91YmxlQnVmZmVyaW5nOwotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9mcm9udFRl
eHR1cmU7Ci0gICAgU2tDYW52YXMqIG1fY2FudmFzOwotICAgIGJvb2wgbV91c2VSYXRlTGltaXRl
cjsKLSAgICBEZWZlcnJhbE1vZGUgbV9kZWZlcnJhbE1vZGU7Ci19OwotCi19Ci0jZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDE4NDMzMzYwOTUxYjJiZmNlYTdjYjExYmJlOTAwMWVh
OTg1ZjRlMDEuLjFlMGUxMzQ2ZmU2NDg1OWJmMzM5ZjM5ZWNjNzcyN2EzMDQ5ZjZhNzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNDYsNyArNDYsNiBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiQW5pbWF0aW9uSWRW
ZW5kb3IuaCIKLSNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJD
b250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oCmluZGV4IGM5
MDkzMDRjZTVlNWJjNDA3ZWE1MGM2ZDNiYTJkNmUwOGViNTJkYmUuLjBhOTA3NDhhYzZmNDc2ZGUy
ZDI1NjI0ODE5MjFhM2MyMDIyNDM4NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmgK
QEAgLTMwLDEyICszMCwxMyBAQAogCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgog
CisjaW5jbHVkZSAiU2tSZWZDbnQuaCIKICNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52
YXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotY2xhc3MgQ2FudmFzMkRMYXllckNocm9taXVtOworY2xhc3MgQ2FudmFzMkRMYXll
ckJyaWRnZTsKICNlbmRpZgogCiBjbGFzcyBJbWFnZUJ1ZmZlckRhdGEgewpAQCAtNDUsNyArNDYs
NyBAQCBwdWJsaWM6CiAgICAgT3duUHRyPFNrQ2FudmFzPiBtX2NhbnZhczsKICAgICBQbGF0Zm9y
bUNvbnRleHRTa2lhIG1fcGxhdGZvcm1Db250ZXh0OwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICBSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBtX3BsYXRmb3JtTGF5
ZXI7CisgICAgT3duUHRyPENhbnZhczJETGF5ZXJCcmlkZ2U+IG1fbGF5ZXJCcmlkZ2U7CiAjZW5k
aWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVMYXllckNocm9taXVtLmNwcAppbmRleCA3Mzg0NDky
NjQxN2NjY2YxNmM2MWM1NTBlNDI5OTFiZTFiZmVhNGY5Li42M2VkMjQ0YjAzYTIzOGY5ODM3ZTEw
NmNlZWZhODliNzhhZGI0OWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxheWVyQ2hyb21pdW0uY3Bw
CkBAIC0xMDMsNiArMTAzLDEyIEBAIHZvaWQgVGV4dHVyZUxheWVyQ2hyb21pdW06OnNldFRleHR1
cmVJZCh1bnNpZ25lZCBpZCkKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCit2b2lkIFRleHR1
cmVMYXllckNocm9taXVtOjp3aWxsTW9kaWZ5VGV4dHVyZSgpCit7CisgICAgaWYgKGxheWVyVHJl
ZUhvc3QoKSkKKyAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5hY3F1aXJlTGF5ZXJUZXh0dXJlcygp
OworfQorCiB2b2lkIFRleHR1cmVMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXlSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KQogewogICAgIExheWVyQ2hyb21pdW06OnNldE5lZWRz
RGlzcGxheVJlY3QoZGlydHlSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTGF5ZXJDaHJvbWl1bS5oCmlu
ZGV4IDQzZjQ5MjcwM2VkOTNjZDVjMzFjMDFlNzQ1ZTY1M2Q0MTNjMDRmOWIuLmEzM2QxMDBhNGQ1
MGM0NTAwYTNhMmRhMzgyM2JlMDZmOWJhY2FjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVMYXllckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxheWVyQ2hy
b21pdW0uaApAQCAtNzcsNiArNzcsOCBAQCBwdWJsaWM6CiAgICAgLy8gQ29kZSBwYXRoIGZvciBw
bHVnaW5zIHdoaWNoIHN1cHBseSB0aGVpciBvd24gdGV4dHVyZSBJRC4KICAgICB2b2lkIHNldFRl
eHR1cmVJZCh1bnNpZ25lZCk7CiAKKyAgICB2b2lkIHdpbGxNb2RpZnlUZXh0dXJlKCk7CisKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5UmVjdChjb25zdCBGbG9hdFJlY3QmKSBPVkVS
UklERTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9z
dCopIE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAppbmRleCBhYjU2
ZDFmMzc3YTJjNmY4Y2U1YjcyM2NjZDY1MWFhZWUxNGJlOWExLi40ZmQ0MDJmOGIyYjMzZjlkMzRk
Y2U2MGMyNDk2Y2MyZTQ3ZDAxZjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNw
cApAQCAtMzEsNyArMzEsNiBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNp
bmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCi0jaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUu
aCIKICNpbmNsdWRlICJUZXh0dXJlQ29waWVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZVVwbG9hZGVy
LmgiCiAKQEAgLTc4LDE4ICs3Nyw5IEBAIHZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kQ29w
eSh1bnNpZ25lZCBzb3VyY2VUZXh0dXJlLCB1bnNpZ25lZCBkZXN0VGV4dHVyZSwKICAgICBtX2Nv
cHlFbnRyaWVzLmFwcGVuZChjb3B5KTsKIH0KIAotdm9pZCBDQ1RleHR1cmVVcGRhdGVyOjphcHBl
bmRNYW5hZ2VkQ29weSh1bnNpZ25lZCBzb3VyY2VUZXh0dXJlLCBNYW5hZ2VkVGV4dHVyZSogZGVz
dFRleHR1cmUsIGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgTWFuYWdlZENvcHlFbnRyeSBj
b3B5OwotICAgIGNvcHkuc291cmNlVGV4dHVyZSA9IHNvdXJjZVRleHR1cmU7Ci0gICAgY29weS5k
ZXN0VGV4dHVyZSA9IGRlc3RUZXh0dXJlOwotICAgIGNvcHkuc2l6ZSA9IHNpemU7Ci0gICAgbV9t
YW5hZ2VkQ29weUVudHJpZXMuYXBwZW5kKGNvcHkpOwotfQotCiBib29sIENDVGV4dHVyZVVwZGF0
ZXI6Omhhc01vcmVVcGRhdGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9lbnRyaWVzLnNpemUo
KSB8fCBtX3BhcnRpYWxFbnRyaWVzLnNpemUoKSB8fCBtX2NvcHlFbnRyaWVzLnNpemUoKSB8fCBt
X21hbmFnZWRDb3B5RW50cmllcy5zaXplKCk7CisgICAgcmV0dXJuIG1fZW50cmllcy5zaXplKCkg
fHwgbV9wYXJ0aWFsRW50cmllcy5zaXplKCkgfHwgbV9jb3B5RW50cmllcy5zaXplKCk7CiB9CiAK
IHZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIFRleHR1cmVDb3BpZXIqIGNvcGllciwgVGV4
dHVyZVVwbG9hZGVyKiB1cGxvYWRlciwgc2l6ZV90IGNvdW50KQpAQCAtMTM0LDE1ICsxMjQsMTEg
QEAgdm9pZCBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG8KICAgICAgICAgQ29weUVudHJ5JiBjb3B5RW50cnkg
PSBtX2NvcHlFbnRyaWVzW2luZGV4XTsKICAgICAgICAgY29waWVyLT5jb3B5VGV4dHVyZShjb250
ZXh0LCBjb3B5RW50cnkuc291cmNlVGV4dHVyZSwgY29weUVudHJ5LmRlc3RUZXh0dXJlLCBjb3B5
RW50cnkuc2l6ZSk7CiAgICAgfQotICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1fbWFuYWdl
ZENvcHlFbnRyaWVzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBNYW5hZ2VkQ29weUVudHJ5
JiBtYW5hZ2VkQ29weUVudHJ5ID0gbV9tYW5hZ2VkQ29weUVudHJpZXNbaW5kZXhdOwotICAgICAg
ICBtYW5hZ2VkQ29weUVudHJ5LmRlc3RUZXh0dXJlLT5hbGxvY2F0ZShhbGxvY2F0b3IpOwotICAg
ICAgICBjb3BpZXItPmNvcHlUZXh0dXJlKGNvbnRleHQsIG1hbmFnZWRDb3B5RW50cnkuc291cmNl
VGV4dHVyZSwgbWFuYWdlZENvcHlFbnRyeS5kZXN0VGV4dHVyZS0+dGV4dHVyZUlkKCksIG1hbmFn
ZWRDb3B5RW50cnkuc2l6ZSk7Ci0gICAgfQorCiAgICAgLy8gSWYgd2UndmUgcGVyZm9ybWVkIGFu
eSB0ZXh0dXJlIGNvcGllcywgd2UgbmVlZCB0byBpbnNlcnQgYSBmbHVzaCBoZXJlIGludG8gdGhl
IGNvbXBvc2l0b3IgY29udGV4dAogICAgIC8vIGJlZm9yZSBsZXR0aW5nIHRoZSBtYWluIHRocmVh
ZCBwcm9jZWVkIGFzIGl0IG1heSBtYWtlIGRyYXcgY2FsbHMgdG8gdGhlIHNvdXJjZSB0ZXh0dXJl
IG9mIG9uZSBvZgogICAgIC8vIG91ciBjb3B5IG9wZXJhdGlvbnMuCi0gICAgaWYgKG1fY29weUVu
dHJpZXMuc2l6ZSgpIHx8IG1fbWFuYWdlZENvcHlFbnRyaWVzLnNpemUoKSkKKyAgICBpZiAobV9j
b3B5RW50cmllcy5zaXplKCkpCiAgICAgICAgIGNvbnRleHQtPmZsdXNoKCk7CiAKICAgICAvLyBJ
ZiBubyBlbnRyaWVzIGxlZnQgdG8gcHJvY2VzcywgYXV0by1jbGVhci4KQEAgLTE1NSw3ICsxNDEs
NiBAQCB2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmNsZWFyKCkKICAgICBtX2VudHJpZXMuY2xlYXIo
KTsKICAgICBtX3BhcnRpYWxFbnRyaWVzLmNsZWFyKCk7CiAgICAgbV9jb3B5RW50cmllcy5jbGVh
cigpOwotICAgIG1fbWFuYWdlZENvcHlFbnRyaWVzLmNsZWFyKCk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVy
ZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZVVwZGF0ZXIuaAppbmRleCAyNGQ4OTZmMmI1OTEyMDkwMDQxYTQzM2YxNjY1MWQ2
MjNjMGRiNjJmLi4zZjNhOTRkZDk5ZmIwMGRlODc5ZWQ4YjgyNzZkYzJhYTU3NGQwMTAwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rl
eHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCkBAIC00NSw3ICs0NSw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGFwcGVuZFVwZGF0ZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwogICAgIHZvaWQg
YXBwZW5kUGFydGlhbFVwZGF0ZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwogICAgIHZvaWQg
YXBwZW5kQ29weSh1bnNpZ25lZCBzb3VyY2VUZXh0dXJlLCB1bnNpZ25lZCBkZXN0VGV4dHVyZSwg
Y29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQgYXBwZW5kTWFuYWdlZENvcHkodW5zaWduZWQgc291
cmNlVGV4dHVyZSwgTWFuYWdlZFRleHR1cmUqIGRlc3RUZXh0dXJlLCBjb25zdCBJbnRTaXplJik7
CiAKICAgICBib29sIGhhc01vcmVVcGRhdGVzKCkgY29uc3Q7CiAKQEAgLTY3LDE5ICs2NiwxMiBA
QCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBkZXN0VGV4dHVyZTsKICAgICB9OwogCi0gICAg
c3RydWN0IE1hbmFnZWRDb3B5RW50cnkgewotICAgICAgICBJbnRTaXplIHNpemU7Ci0gICAgICAg
IHVuc2lnbmVkIHNvdXJjZVRleHR1cmU7Ci0gICAgICAgIE1hbmFnZWRUZXh0dXJlKiBkZXN0VGV4
dHVyZTsKLSAgICB9OwotCiAgICAgc3RhdGljIHZvaWQgYXBwZW5kVXBkYXRlKExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCwgVmVjdG9yPFVwZGF0ZUVudHJ5PiYpOwogCiAgICAgc2l6ZV90IG1fZW50
cnlJbmRleDsKICAgICBWZWN0b3I8VXBkYXRlRW50cnk+IG1fZW50cmllczsKICAgICBWZWN0b3I8
VXBkYXRlRW50cnk+IG1fcGFydGlhbEVudHJpZXM7CiAgICAgVmVjdG9yPENvcHlFbnRyeT4gbV9j
b3B5RW50cmllczsKLSAgICBWZWN0b3I8TWFuYWdlZENvcHlFbnRyeT4gbV9tYW5hZ2VkQ29weUVu
dHJpZXM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKaW5kZXggOGIwODZhMDc5OGI2NDZmODA1
ZjEwYTM0MTA0NTk0NzNlM2FkZGJjZC4uYWQyNjUxZWVkNjk0ZTVkYzUyYTg0MTUyMmNlODQxZGY3
ZTY5MTVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9JbWFnZUJ1ZmZlclNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcApAQCAtNTEsNyArNTEsNyBAQAogI2luY2x1ZGUg
IldFQlBJbWFnZUVuY29kZXIuaCIKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJDYW52YXMyRExh
eWVyQnJpZGdlLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpA
QCAtNjksMzAgKzY5LDYgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKIHsKIH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LWNsYXNzIEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dCA6IHB1YmxpYyBTa0RlZmVycmVkQ2FudmFz
OjpEZXZpY2VDb250ZXh0IHsKLXB1YmxpYzoKLSAgICBBY2NlbGVyYXRlZERldmljZUNvbnRleHQo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCwgQ2FudmFzMkRMYXllckNocm9taXVtKiBsYXll
cikKLSAgICAgICAgOiBtX3BsYXRmb3JtTGF5ZXIobGF5ZXIpCi0gICAgICAgICwgbV9jb250ZXh0
M0QoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNvbnRleHQzRCk7Ci0gICAgICAgIEFTU0VSVChs
YXllcik7Ci0gICAgICAgIG1fY29udGV4dDNEID0gY29udGV4dDNEOwotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCBwcmVwYXJlRm9yRHJhdygpCi0gICAgewotICAgICAgICBtX3BsYXRmb3JtTGF5
ZXItPmxheWVyV2lsbERyYXcoQ2FudmFzMkRMYXllckNocm9taXVtOjpXaWxsRHJhd1VuY29uZGl0
aW9uYWxseSk7Ci0gICAgICAgIG1fY29udGV4dDNELT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgQ2FudmFzMkRMYXllckNocm9taXVtKiBtX3BsYXRmb3JtTGF5
ZXI7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDNEOwotfTsKLSNlbmRpZgotCiBz
dGF0aWMgU2tDYW52YXMqIGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKGNvbnN0IEludFNpemUmIHNp
emUsIEltYWdlQnVmZmVyRGF0YSogZGF0YSwgRGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSkKIHsK
ICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQzRCA9IFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEOjpnZXQoKTsKQEAgLTExNCwyMCArOTAsMTYgQEAgc3RhdGljIFNrQ2FudmFzKiBj
cmVhdGVBY2NlbGVyYXRlZENhbnZhcyhjb25zdCBJbnRTaXplJiBzaXplLCBJbWFnZUJ1ZmZlckRh
dGEqIGQKICAgICBTa0NhbnZhcyogY2FudmFzOwogICAgIFNrQXV0b1RVbnJlZjxTa0RldmljZT4g
ZGV2aWNlKG5ldyBTa0dwdURldmljZShnciwgdGV4dHVyZS5nZXQoKSkpOwogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXIgPSBDYW52YXMy
RExheWVyQ2hyb21pdW06OmNyZWF0ZShjb250ZXh0M0QsIHNpemUsIGRlZmVycmFsTW9kZSk7Ci0g
ICAgaWYgKGRlZmVycmFsTW9kZSA9PSBEZWZlcnJlZCkgewotICAgICAgICBTa0F1dG9UVW5yZWY8
QWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0PiBkZXZpY2VDb250ZXh0KG5ldyBBY2NlbGVyYXRlZERl
dmljZUNvbnRleHQoY29udGV4dDNELmdldCgpLCBkYXRhLT5tX3BsYXRmb3JtTGF5ZXIuZ2V0KCkp
KTsKLSAgICAgICAgY2FudmFzID0gbmV3IFNrRGVmZXJyZWRDYW52YXMoZGV2aWNlLmdldCgpLCBk
ZXZpY2VDb250ZXh0LmdldCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FudmFzID0gbmV3IFNr
Q2FudmFzKGRldmljZS5nZXQoKSk7CisgICAgZGF0YS0+bV9sYXllckJyaWRnZSA9IENhbnZhczJE
TGF5ZXJCcmlkZ2U6OmNyZWF0ZShjb250ZXh0M0QucmVsZWFzZSgpLCBzaXplLCBkZWZlcnJhbE1v
ZGUsIHRleHR1cmUuZ2V0KCktPmdldFRleHR1cmVIYW5kbGUoKSk7CisgICAgaWYgKGRlZmVycmFs
TW9kZSA9PSBEZWZlcnJlZCkKKyAgICAgICAgY2FudmFzID0gbmV3IFNrRGVmZXJyZWRDYW52YXMo
ZGV2aWNlLCBkYXRhLT5tX2xheWVyQnJpZGdlLT5jcmVhdGVEZWZlcnJlZERldmljZUNvbnRleHQo
KSk7CisgICAgZWxzZQorICAgICAgICBjYW52YXMgPSBuZXcgU2tDYW52YXMoZGV2aWNlKTsKKyAg
ICBkYXRhLT5tX2xheWVyQnJpZGdlLT5zZXRTa0NhbnZhcyhjYW52YXMpOwogI2Vsc2UKICAgICBj
YW52YXMgPSBuZXcgU2tDYW52YXMoZGV2aWNlLmdldCgpKTsKICNlbmRpZgogICAgIGRhdGEtPm1f
cGxhdGZvcm1Db250ZXh0LnNldEFjY2VsZXJhdGVkKHRydWUpOwotI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLSAgICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXItPnNldFRleHR1cmVJZCh0
ZXh0dXJlLmdldCgpLT5nZXRUZXh0dXJlSGFuZGxlKCkpOwotICAgIGRhdGEtPm1fcGxhdGZvcm1M
YXllci0+c2V0Q2FudmFzKGNhbnZhcyk7Ci0jZW5kaWYKICAgICByZXR1cm4gY2FudmFzOwogfQog
CkBAIC0xNzQsMTcgKzE0NiwxNiBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgZmxvYXQgLyogcmVzb2x1dGlvblNjYWxlICovLCBDb2xvcgogCiBJbWFnZUJ1
ZmZlcjo6fkltYWdlQnVmZmVyKCkKIHsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Ci0gICAgaWYgKG1fZGF0YS5tX3BsYXRmb3JtTGF5ZXIpCi0gICAgICAgIG1fZGF0YS5tX3BsYXRm
b3JtTGF5ZXItPnNldFRleHR1cmVJZCgwKTsKLSNlbmRpZgogfQogCiBHcmFwaGljc0NvbnRleHQq
IEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCi0gICAgaWYgKG1fZGF0YS5tX3BsYXRmb3JtTGF5ZXIpCi0gICAgICAgIG1fZGF0
YS5tX3BsYXRmb3JtTGF5ZXItPmxheWVyV2lsbERyYXcoQ2FudmFzMkRMYXllckNocm9taXVtOjpX
aWxsRHJhd0lmTGF5ZXJOb3REZWZlcnJlZCk7CisgICAgaWYgKG1fZGF0YS5tX2xheWVyQnJpZGdl
KSB7CisgICAgICAgIC8vIFdlJ3JlIHVzaW5nIGNvbnRleHQgYWNxdWlzaXRpb24gYXMgYSBzaWdu
YWwgdGhhdCBzb21lb25lIGlzIGFib3V0IHRvIHJlbmRlciBpbnRvIG91ciBidWZmZXIgYW5kIHdl
IG5lZWQKKyAgICAgICAgLy8gdG8gYmUgcmVhZHkuIFRoaXMgaXNuJ3QgbG9naWNhbGx5IGNvbnN0
LWNvcnJlY3QsIGhlbmNlIHRoZSBjYXN0LgorICAgICAgICBjb25zdF9jYXN0PENhbnZhczJETGF5
ZXJCcmlkZ2UqPihtX2RhdGEubV9sYXllckJyaWRnZS5nZXQoKSktPmNvbnRleHRBY3F1aXJlZCgp
OworICAgIH0KICNlbmRpZgogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CkBAIC0xOTYs
NyArMTY3LDcgQEAgUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKIAogUGxhdGZvcm1MYXllciogSW1hZ2VC
dWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEubV9wbGF0
Zm9ybUxheWVyLmdldCgpOworICAgIHJldHVybiBtX2RhdGEubV9sYXllckJyaWRnZSA/IG1fZGF0
YS5tX2xheWVyQnJpZGdlLmdldCgpLT5sYXllcigpIDogMDsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZl
cjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDc4NTRlZGYwYTk5ZDZjYmQ4
MjE1NzRjZTZmNDE1NGJjMTEwYjAzODQuLmUxMDRhNjFkNjczOGYyMDlkNzY5YWVkNTk0MDdkZGU1
ZTE0NTY0ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTksNyArNTksNyBA
QAogICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3Rlc3Rz
L0FyZW5hVGVzdEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExv
YWRlclRlc3QuY3BwJywKLSAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1U
ZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ2FudmFzMkRMYXllckJyaWRnZVRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJCcmlkZ2VUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckJyaWRnZVRlc3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmNiOGUwNDY1YzcyZTcwNjJjMWI3NTU3ZGU2ODY1MTllZGZlNTc0MmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJCcmlkZ2VUZXN0
LmNwcApAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiQ2FudmFzMkRMYXllckJyaWRnZS5oIgorCisjaW5jbHVkZSAiRmFrZVdl
YkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlQ29waWVyLmgi
CisjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgi
CisjaW5jbHVkZSAiV2ViS2l0LmgiCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgor
I2luY2x1ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1ZGUgInBs
YXRmb3JtL1dlYlRocmVhZC5oIgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRl
IDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgdGVzdGluZzo6SW5T
ZXF1ZW5jZTsKK3VzaW5nIHRlc3Rpbmc6OlJldHVybjsKK3VzaW5nIHRlc3Rpbmc6OlRlc3Q7CisK
K25hbWVzcGFjZSB7CisKK2NsYXNzIE1vY2tDYW52YXNDb250ZXh0IDogcHVibGljIEZha2VXZWJH
cmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0QwKGZsdXNoLCB2b2lk
KHZvaWQpKTsKKyAgICBNT0NLX01FVEhPRDAoY3JlYXRlVGV4dHVyZSwgdW5zaWduZWQodm9pZCkp
OworICAgIE1PQ0tfTUVUSE9EMShkZWxldGVUZXh0dXJlLCB2b2lkKHVuc2lnbmVkKSk7CisKKyAg
ICB2aXJ0dWFsIEdyQ29udGV4dCogZ3JDb250ZXh0KCkgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQor
fTsKKworY2xhc3MgTW9ja1RleHR1cmVDb3BpZXIgOiBwdWJsaWMgVGV4dHVyZUNvcGllciB7Citw
dWJsaWM6CisgICAgTU9DS19NRVRIT0Q0KGNvcHlUZXh0dXJlLCB2b2lkKEdyYXBoaWNzQ29udGV4
dDNEKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBJbnRTaXplJikpIE9WRVJSSURFOworfTsK
KworfSAvLyBuYW1lc3BhY2UKKworZW51bSBUaHJlYWRNb2RlIHsKKyAgICBTaW5nbGVUaHJlYWRl
ZCwgVGhyZWFkZWQKK307CisKK2NsYXNzIENhbnZhczJETGF5ZXJCcmlkZ2VUZXN0IDogcHVibGlj
IFRlc3QgeworcHJvdGVjdGVkOgorICAgIHZvaWQgZnVsbExpZmVjeWNsZVRlc3QoVGhyZWFkTW9k
ZSB0aHJlYWRNb2RlLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlKQorICAgIHsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7CisKKyAgICAgICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBtYWluQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IE1vY2tDYW52
YXNDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5k
b3cpOworICAgICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGltcGxDb250ZXh0ID0gR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4
dChhZG9wdFB0cihuZXcgTW9ja0NhbnZhc0NvbnRleHQoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpS
ZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisKKyAgICAgICAgTW9ja0NhbnZhc0NvbnRleHQm
IG1haW5Nb2NrID0gKnN0YXRpY19jYXN0PE1vY2tDYW52YXNDb250ZXh0Kj4oR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobWFpbkNvbnRleHQuZ2V0
KCkpKTsKKyAgICAgICAgTW9ja0NhbnZhc0NvbnRleHQmIGltcGxNb2NrID0gKnN0YXRpY19jYXN0
PE1vY2tDYW52YXNDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2Vi
R3JhcGhpY3NDb250ZXh0M0QoaW1wbENvbnRleHQuZ2V0KCkpKTsKKworICAgICAgICBNb2NrVGV4
dHVyZUNvcGllciBjb3BpZXJNb2NrOworICAgICAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7
CisKKyAgICAgICAgY29uc3QgSW50U2l6ZSBzaXplKDMwMCwgMTUwKTsKKworICAgICAgICBPd25Q
dHI8V2ViVGhyZWFkPiB0aHJlYWQ7CisgICAgICAgIGlmICh0aHJlYWRNb2RlID09IFRocmVhZGVk
KQorICAgICAgICAgICAgdGhyZWFkID0gYWRvcHRQdHIoV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVu
dCgpLT5jcmVhdGVUaHJlYWQoIkNhbnZhczJETGF5ZXJCcmlkZ2VUZXN0IikpOworICAgICAgICBX
ZWJDb21wb3NpdG9yOjppbml0aWFsaXplKHRocmVhZC5nZXQoKSk7CisKKyAgICAgICAgV2ViR0xJ
ZCBiYWNrVGV4dHVyZUlkID0gMTsKKyAgICAgICAgV2ViR0xJZCBmcm9udFRleHR1cmVJZCA9IDE7
CisKKyAgICAgICAgLy8gVGhyZWFkZWQgYW5kIG5vbiBkZWZlcnJlZCBjYW52YXNlcyBhcmUgZG91
YmxlIGJ1ZmZlcmVkLgorICAgICAgICBpZiAodGhyZWFkTW9kZSA9PSBUaHJlYWRlZCAmJiBkZWZl
cnJhbE1vZGUgPT0gTm9uRGVmZXJyZWQpIHsKKyAgICAgICAgICAgIGZyb250VGV4dHVyZUlkID0g
MjsKKyAgICAgICAgICAgIC8vIENyZWF0ZSB0ZXh0dXJlIChvbiB0aGUgbWFpbiB0aHJlYWQpIGFu
ZCBkbyB0aGUgY29weSAob24gdGhlIGltcGwgdGhyZWFkKS4KKyAgICAgICAgICAgIEVYUEVDVF9D
QUxMKG1haW5Nb2NrLCBjcmVhdGVUZXh0dXJlKCkpLldpbGxPbmNlKFJldHVybihmcm9udFRleHR1
cmVJZCkpOworICAgICAgICB9CisKKyAgICAgICAgT3duUHRyPENhbnZhczJETGF5ZXJCcmlkZ2U+
IGJyaWRnZSA9IENhbnZhczJETGF5ZXJCcmlkZ2U6OmNyZWF0ZShtYWluQ29udGV4dC5nZXQoKSwg
c2l6ZSwgZGVmZXJyYWxNb2RlLCBiYWNrVGV4dHVyZUlkKTsKKworICAgICAgICA6OnRlc3Rpbmc6
Ok1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtYWluTW9jayk7CisKKyAgICAgICAg
RVhQRUNUX0NBTEwobWFpbk1vY2ssIGZsdXNoKCkpOworICAgICAgICBFWFBFQ1RfRVEoZnJvbnRU
ZXh0dXJlSWQsIGJyaWRnZS0+cHJlcGFyZVRleHR1cmUodXBkYXRlcikpOworICAgICAgICA6OnRl
c3Rpbmc6Ok1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtYWluTW9jayk7CisKKyAg
ICAgICAgaWYgKHRocmVhZE1vZGUgPT0gVGhyZWFkZWQgJiYgZGVmZXJyYWxNb2RlID09IE5vbkRl
ZmVycmVkKSB7CisgICAgICAgICAgICBFWFBFQ1RfQ0FMTChjb3BpZXJNb2NrLCBjb3B5VGV4dHVy
ZShpbXBsQ29udGV4dC5nZXQoKSwgYmFja1RleHR1cmVJZCwgZnJvbnRUZXh0dXJlSWQsIHNpemUp
KTsKKyAgICAgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBmbHVzaCgpKTsKKyAgICAgICAg
fQorICAgICAgICB1cGRhdGVyLnVwZGF0ZShpbXBsQ29udGV4dC5nZXQoKSwgMCwgJmNvcGllck1v
Y2ssIDAsIDEwMCk7CisgICAgICAgIDo6dGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBl
Y3RhdGlvbnMoJmltcGxNb2NrKTsKKworICAgICAgICBpZiAodGhyZWFkTW9kZSA9PSBUaHJlYWRl
ZCAmJiBkZWZlcnJhbE1vZGUgPT0gTm9uRGVmZXJyZWQpIHsKKyAgICAgICAgICAgIEVYUEVDVF9D
QUxMKG1haW5Nb2NrLCBkZWxldGVUZXh0dXJlKGZyb250VGV4dHVyZUlkKSk7CisgICAgICAgICAg
ICBFWFBFQ1RfQ0FMTChtYWluTW9jaywgZmx1c2goKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJp
ZGdlLmNsZWFyKCk7CisgICAgICAgIDo6dGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBl
Y3RhdGlvbnMoJmltcGxNb2NrKTsKKworICAgICAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigp
OworICAgIH0KK307CisKK25hbWVzcGFjZSB7CisKK1RFU1RfRihDYW52YXMyRExheWVyQnJpZGdl
VGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVTaW5nbGVUaHJlYWRlZERlZmVycmVkKQoreworICAgIGZ1
bGxMaWZlY3ljbGVUZXN0KFNpbmdsZVRocmVhZGVkLCBOb25EZWZlcnJlZCk7Cit9CisKK1RFU1Rf
RihDYW52YXMyRExheWVyQnJpZGdlVGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVTaW5nbGVUaHJlYWRl
ZE5vbkRlZmVycmVkKQoreworICAgIGZ1bGxMaWZlY3ljbGVUZXN0KFNpbmdsZVRocmVhZGVkLCBE
ZWZlcnJlZCk7Cit9CisKK1RFU1RfRihDYW52YXMyRExheWVyQnJpZGdlVGVzdCwgdGVzdEZ1bGxM
aWZlY3ljbGVUaHJlYWRlZE5vbkRlZmVycmVkKQoreworICAgIGZ1bGxMaWZlY3ljbGVUZXN0KFRo
cmVhZGVkLCBOb25EZWZlcnJlZCk7Cit9CisKK1RFU1RfRihDYW52YXMyRExheWVyQnJpZGdlVGVz
dCwgdGVzdEZ1bGxMaWZlY3ljbGVUaHJlYWRlZERlZmVycmVkKQoreworICAgIGZ1bGxMaWZlY3lj
bGVUZXN0KFRocmVhZGVkLCBEZWZlcnJlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVt
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDI0ODViNzE4ZjA4
YTU2OWYwZjEyNmQ0OWNmZjYwMGI1YmNkNzViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRM
YXllckNocm9taXVtVGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiQ2FudmFzMkRMYXll
ckNocm9taXVtLmgiCi0KLSNpbmNsdWRlICJDQ1NjaGVkdWxlclRlc3RDb21tb24uaCIKLSNpbmNs
dWRlICJGYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LmgiCi0jaW5jbHVkZSAiRmFrZVdlYkdyYXBo
aWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCi0j
aW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgotI2luY2x1ZGUg
IlRleHR1cmVNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgotI2luY2x1ZGUg
IldlYktpdC5oIgotI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKLSNpbmNsdWRl
ICJjYy9DQ1RleHR1cmVMYXllckltcGwuaCIKLSNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVy
LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCi0jaW5jbHVk
ZSAicGxhdGZvcm0vV2ViVGhyZWFkLmgiCi0KLSNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgotI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0VGVzdHM7Ci11c2luZyB0ZXN0aW5nOjpJblNlcXVlbmNlOwotdXNpbmcgdGVzdGlu
Zzo6UmV0dXJuOwotdXNpbmcgdGVzdGluZzo6VGVzdDsKLQotbmFtZXNwYWNlIHsKLQotY2xhc3Mg
RmFrZUNDTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3QgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEZha2VDQ0xheWVyVHJlZUhvc3Q+IGNyZWF0ZSgpCi0gICAg
ewotICAgICAgICBPd25QdHI8RmFrZUNDTGF5ZXJUcmVlSG9zdD4gaG9zdChhZG9wdFB0cihuZXcg
RmFrZUNDTGF5ZXJUcmVlSG9zdCkpOwotICAgICAgICBob3N0LT5pbml0aWFsaXplKCk7Ci0gICAg
ICAgIHJldHVybiBob3N0LnJlbGVhc2UoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRmFrZUND
TGF5ZXJUcmVlSG9zdCgpCi0gICAgICAgIDogQ0NMYXllclRyZWVIb3N0KCZtX2NsaWVudCwgQ0NT
ZXR0aW5ncygpKQotICAgIHsKLSAgICB9Ci0KLSAgICBGYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50
IG1fY2xpZW50OwotfTsKLQotY2xhc3MgTW9ja0NhbnZhc0NvbnRleHQgOiBwdWJsaWMgRmFrZVdl
YkdyYXBoaWNzQ29udGV4dDNEIHsKLXB1YmxpYzoKLSAgICBNT0NLX01FVEhPRDAoZmx1c2gsIHZv
aWQodm9pZCkpOwotfTsKLQotY2xhc3MgTW9ja1RleHR1cmVBbGxvY2F0b3IgOiBwdWJsaWMgVGV4
dHVyZUFsbG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgTU9DS19NRVRIT0QyKGNyZWF0ZVRleHR1cmUs
IHVuc2lnbmVkKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSkpOwotICAgIE1PQ0tfTUVUSE9EMyhk
ZWxldGVUZXh0dXJlLCB2b2lkKHVuc2lnbmVkLCBjb25zdCBJbnRTaXplJiwgR0MzRGVudW0pKTsK
LX07Ci0KLWNsYXNzIE1vY2tUZXh0dXJlQ29waWVyIDogcHVibGljIFRleHR1cmVDb3BpZXIgewot
cHVibGljOgotICAgIE1PQ0tfTUVUSE9ENChjb3B5VGV4dHVyZSwgdm9pZChHcmFwaGljc0NvbnRl
eHQzRCosIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYpKTsKLX07Ci0KLWNsYXNz
IE1vY2tUZXh0dXJlVXBsb2FkZXIgOiBwdWJsaWMgVGV4dHVyZVVwbG9hZGVyIHsKLXB1YmxpYzoK
LSAgICBNT0NLX01FVEhPRDAoaXNCdXN5LCBib29sKCkpOwotICAgIE1PQ0tfTUVUSE9EMChiZWdp
blVwbG9hZHMsIHZvaWQoKSk7Ci0gICAgTU9DS19NRVRIT0QwKGVuZFVwbG9hZHMsIHZvaWQoKSk7
Ci0gICAgTU9DS19NRVRIT0Q1KHVwbG9hZFRleHR1cmUsIHZvaWQoR3JhcGhpY3NDb250ZXh0M0Qq
LCBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgVGV4dHVyZUFsbG9jYXRvciosIGNvbnN0
IEludFJlY3QsIGNvbnN0IEludFJlY3QpKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLWNsYXNz
IENhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QgOiBwdWJsaWMgVGVzdCB7Ci1wcm90ZWN0ZWQ6Ci0g
ICAgdm9pZCBmdWxsTGlmZWN5Y2xlVGVzdChib29sIHRocmVhZGVkLCBib29sIGRlZmVycmVkKQot
ICAgIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Ci0KLSAg
ICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtYWluQ29udGV4dCA9IEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQ
dHIobmV3IE1vY2tDYW52YXNDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGly
ZWN0bHlUb0hvc3RXaW5kb3cpOwotICAgICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGlt
cGxDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRl
eHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgTW9ja0NhbnZhc0NvbnRleHQoKSksIEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7Ci0KLSAgICAgICAgTW9j
a0NhbnZhc0NvbnRleHQmIG1haW5Nb2NrID0gKnN0YXRpY19jYXN0PE1vY2tDYW52YXNDb250ZXh0
Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0Qo
bWFpbkNvbnRleHQuZ2V0KCkpKTsKLSAgICAgICAgTW9ja0NhbnZhc0NvbnRleHQmIGltcGxNb2Nr
ID0gKnN0YXRpY19jYXN0PE1vY2tDYW52YXNDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoaW1wbENvbnRleHQuZ2V0KCkpKTsKLQot
ICAgICAgICBNb2NrVGV4dHVyZUFsbG9jYXRvciBhbGxvY2F0b3JNb2NrOwotICAgICAgICBNb2Nr
VGV4dHVyZUNvcGllciBjb3BpZXJNb2NrOwotICAgICAgICBNb2NrVGV4dHVyZVVwbG9hZGVyIHVw
bG9hZGVyTW9jazsKLSAgICAgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyOwotCi0gICAgICAg
IGNvbnN0IEludFNpemUgc2l6ZSgzMDAsIDE1MCk7Ci0KLSAgICAgICAgT3duUHRyPFdlYlRocmVh
ZD4gdGhyZWFkOwotICAgICAgICBpZiAodGhyZWFkZWQpCi0gICAgICAgICAgICB0aHJlYWQgPSBh
ZG9wdFB0cihXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNyZWF0ZVRocmVhZCgiQ2FudmFz
MkRMYXllckNocm9taXVtVGVzdCIpKTsKLSAgICAgICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6
ZSh0aHJlYWQuZ2V0KCkpOwotCi0gICAgICAgIE93blB0cjxGYWtlQ0NMYXllclRyZWVIb3N0PiBs
YXllclRyZWVIb3N0KEZha2VDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgpKTsKLSAgICAgICAgLy8g
Rm9yY2UgYW4gdXBkYXRlLCBzbyB0aGF0IHdlIGdldCBhIHZhbGlkIFRleHR1cmVNYW5hZ2VyLgot
ICAgICAgICBsYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnModXBkYXRlcik7Ci0KLSAgICAgICAg
Y29uc3QgV2ViR0xJZCBiYWNrVGV4dHVyZUlkID0gMTsKLSAgICAgICAgY29uc3QgV2ViR0xJZCBm
cm9udFRleHR1cmVJZCA9IDI7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEluU2VxdWVuY2Ugc2Vx
dWVuY2U7Ci0KLSAgICAgICAgICAgIC8vIFBhaW50IGNhbnZhcyBjb250ZW50cyBvbiB0aGUgbWFp
biB0aHJlYWQuCi0gICAgICAgICAgICBFWFBFQ1RfQ0FMTChtYWluTW9jaywgZmx1c2goKSk7Ci0K
LSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgY2FudmFzIGJhY2tpbmcgdGV4dHVyZSBpcyBk
b3VibGVidWZmZXJlZCBvbmx5IHdoZW4gdXNpbmcgdGhlIHRocmVhZGVkCi0gICAgICAgICAgICAv
LyBjb21wb3NpdG9yIGFuZCBub3QgdXNpbmcgZGVmZXJyZWQgY2FudmFzIHJlbmRlcmluZwotICAg
ICAgICAgICAgaWYgKHRocmVhZGVkICYmICFkZWZlcnJlZCkgewotICAgICAgICAgICAgICAgIC8v
IENyZWF0ZSB0ZXh0dXJlIGFuZCBkbyB0aGUgY29weSAob24gdGhlIGltcGwgdGhyZWFkKS4KLSAg
ICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChhbGxvY2F0b3JNb2NrLCBjcmVhdGVUZXh0dXJlKHNp
emUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKLSAgICAgICAgICAgICAgICAgICAgLldpbGxP
bmNlKFJldHVybihmcm9udFRleHR1cmVJZCkpOwotICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxM
KGNvcGllck1vY2ssIGNvcHlUZXh0dXJlKGltcGxDb250ZXh0LmdldCgpLCBiYWNrVGV4dHVyZUlk
LCBmcm9udFRleHR1cmVJZCwgc2l6ZSkpOwotICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxMKGlt
cGxNb2NrLCBmbHVzaCgpKTsKLQotICAgICAgICAgICAgICAgIC8vIFRlYXJkb3duIFRleHR1cmVN
YW5hZ2VyLgotICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxMKGFsbG9jYXRvck1vY2ssIGRlbGV0
ZVRleHR1cmUoZnJvbnRUZXh0dXJlSWQsIHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8Q2FudmFzMkRMYXll
ckNocm9taXVtPiBjYW52YXMgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShtYWluQ29u
dGV4dC5nZXQoKSwgc2l6ZSwgZGVmZXJyZWQgPyBEZWZlcnJlZCA6IE5vbkRlZmVycmVkKTsKLSAg
ICAgICAgY2FudmFzLT5zZXRJc0RyYXdhYmxlKHRydWUpOwotICAgICAgICBjYW52YXMtPnNldExh
eWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdC5nZXQoKSk7Ci0gICAgICAgIGNhbnZhcy0+c2V0Qm91
bmRzKEludFNpemUoNjAwLCAzMDApKTsKLSAgICAgICAgY2FudmFzLT5zZXRUZXh0dXJlSWQoYmFj
a1RleHR1cmVJZCk7Ci0KLSAgICAgICAgY2FudmFzLT5zZXROZWVkc0Rpc3BsYXkoKTsKLSAgICAg
ICAgRVhQRUNUX1RSVUUoY2FudmFzLT5uZWVkc0Rpc3BsYXkoKSk7Ci0gICAgICAgIGNhbnZhcy0+
dXBkYXRlKHVwZGF0ZXIsIDApOwotICAgICAgICBFWFBFQ1RfRkFMU0UoY2FudmFzLT5uZWVkc0Rp
c3BsYXkoKSk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBzY29wZWRJbXBsVGhyZWFkOwotCi0gICAgICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGxh
eWVySW1wbCA9IGNhbnZhcy0+Y3JlYXRlQ0NMYXllckltcGwoKTsKLSAgICAgICAgICAgIEVYUEVD
VF9FUSgwdSwgc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlTGF5ZXJJbXBsKj4obGF5ZXJJbXBsLmdldCgp
KS0+dGV4dHVyZUlkKCkpOwotCi0gICAgICAgICAgICB1cGRhdGVyLnVwZGF0ZShpbXBsQ29udGV4
dC5nZXQoKSwgJmFsbG9jYXRvck1vY2ssICZjb3BpZXJNb2NrLCAmdXBsb2FkZXJNb2NrLCAxKTsK
LSAgICAgICAgICAgIGNhbnZhcy0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwot
Ci0gICAgICAgICAgICBpZiAodGhyZWFkZWQgJiYgIWRlZmVycmVkKQotICAgICAgICAgICAgICAg
IEVYUEVDVF9FUShmcm9udFRleHR1cmVJZCwgc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlTGF5ZXJJbXBs
Kj4obGF5ZXJJbXBsLmdldCgpKS0+dGV4dHVyZUlkKCkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIEVYUEVDVF9FUShiYWNrVGV4dHVyZUlkLCBzdGF0aWNfY2FzdDxDQ1RleHR1
cmVMYXllckltcGwqPihsYXllckltcGwuZ2V0KCkpLT50ZXh0dXJlSWQoKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FudmFzLmNsZWFyKCk7Ci0gICAgICAgIGxheWVyVHJlZUhvc3QtPmNvbnRlbnRz
VGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsKLSAgICAgICAgbGF5ZXJU
cmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMo
JmFsbG9jYXRvck1vY2spOwotICAgICAgICBsYXllclRyZWVIb3N0LmNsZWFyKCk7Ci0gICAgICAg
IFdlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIHsKLQot
VEVTVF9GKENhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QsIHRlc3RGdWxsTGlmZWN5Y2xlU2luZ2xl
VGhyZWFkKQotewotICAgIGZ1bGxMaWZlY3ljbGVUZXN0KGZhbHNlLCBmYWxzZSk7Ci19Ci0KLVRF
U1RfRihDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LCB0ZXN0RnVsbExpZmVjeWNsZVRocmVhZGVk
KQotewotICAgIGZ1bGxMaWZlY3ljbGVUZXN0KHRydWUsIGZhbHNlKTsKLX0KLQotVEVTVF9GKENh
bnZhczJETGF5ZXJDaHJvbWl1bVRlc3QsIHRlc3RGdWxsTGlmZWN5Y2xlU2luZ2xlVGhyZWFkRGVm
ZXJyZWQpCi17Ci0gICAgZnVsbExpZmVjeWNsZVRlc3QoZmFsc2UsIHRydWUpOwotfQotCi1URVNU
X0YoQ2FudmFzMkRMYXllckNocm9taXVtVGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVUaHJlYWRlZERl
ZmVycmVkKQotewotICAgIGZ1bGxMaWZlY3ljbGVUZXN0KHRydWUsIHRydWUpOwotfQotCi19IC8v
IG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145898</attachid>
            <date>2012-06-05 17:02:35 -0700</date>
            <delta_ts>2012-06-06 08:02:17 -0700</delta_ts>
            <desc>updated to ToT</desc>
            <filename>bug-86050-20120605170233.patch</filename>
            <type>text/plain</type>
            <size>51741</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NDQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDc3MjUxNWE0ZjRlYWFk
NDZhOTQ2NjFkOGNhNTI3N2EwZDlhMmNiNS4uNjk1N2MzYmY0NzNlMzhmMzllYzAyNjBhNzVlMzVk
YmVmYWU0N2NmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA2LTA1ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBN
b3ZlIGRlZmVycmFsLXJlbGF0ZWQgbG9naWMgb3V0IG9mIENhbnZhczJETGF5ZXJDaHJvbWl1bQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYwNTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHJlbW92
ZXMgQ2FudmFzMkRMYXllckNocm9taXVtIGFuZCBwdXRzIHRoZSBkZWZlcnJhbCBhbmQgZG91Ymxl
LWJ1ZmZlcmluZyByZWxhdGVkIGxvZ2ljIGluIGEgbmV3IGNsYXNzLAorICAgICAgICBDYW52YXMy
RExheWVyQnJpZGdlLCB0aGF0IHVzZXMgVGV4dHVyZUxheWVyQ2hyb21pdW0gZm9yIGNvbXBvc2l0
aW5nLiAgVGhlIGJyaWRnZSBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlCisgICAgICAg
IGZyb250IHRleHR1cmUgd2hlbiBkb3VibGUgYnVmZmVyaW5nIGlzIGFjdGl2ZSwgaW5zZXJ0aW5n
IHRoZSBjb3JyZWN0IG1ha2VDb250ZXh0Q3VycmVudCgpIGFuZCBmbHVzaCgpIGNhbGxzIG9uCisg
ICAgICAgIHRoZSBHcmFwaGljc0NvbnRleHQzRCBhbmQgU2tDYW52YXMgd2hlbiBhcHByb3ByaWF0
ZSwgYW5kIG93bmluZyB0aGUgbGlmZXRpbWUgb2YgdGhlIGxheWVyLgorCisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJCcmlkZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQWNj
ZWxlcmF0ZWREZXZpY2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVkRGV2
aWNlQ29udGV4dDo6QWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dDo6cHJlcGFyZUZvckRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6Q2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjp+Q2FudmFzMkRMYXllckJyaWRnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpza0NhbnZhcyk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpjb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJCcmlkZ2U6OmNvbnRleHRBY3F1aXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoQ2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyQnJpZGdlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmg6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUJ1ZmZlckRhdGFTa2lhLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlQnVm
ZmVyRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUxh
eWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZUxheWVyQ2hyb21pdW06
OndpbGxNb2RpZnlUZXh0dXJlKToKKyAgICAgICAgICAgIHdpbGxNb2RpZnlUZXh0dXJlKCkgaXMg
Y2FsbGVkIHdoZW5ldmVyIHRoZSB0ZXh0dXJlIGN1cnJlbnRseSBvd25lZCBieSB0aGUgVGV4dHVy
ZUxheWVyQ2hyb21pdW0gd2lsbCBiZQorICAgICAgICAgICAgbW9kaWZpZWQgYnkgYSBzeXN0ZW0g
b3V0IG9mIHRoZSBjb21wb3NpdG9yJ3MgY29udHJvbC4gSXQgbWFrZXMgc3VyZSB0aGF0IHRoZSBj
b21wb3NpdG9yIGRvZXMgbm90IGF0dGVtcHQgdG8KKyAgICAgICAgICAgIGRyYXcgd2l0aCB0aGUg
cG90ZW50aWFsbHktbW9kaWZpZWQgdGV4dHVyZSB1bnRpbCB0aGUgbmV4dCBjb21taXQuIEZvciBj
YW52YXMsIHRoaXMgaXMgdXNlZCB3aGVuIHRocmVhZGluZyBpcworICAgICAgICAgICAgZW5hYmxl
ZCBhbmQgYSBub24tZGVmZXJyYWJsZSBkcmF3aW5nIGNvbW1hbmQgaXMgaW52b2tlZCBmcm9tIEpT
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGV4dHVyZUxheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFRleHR1cmVMYXllckNocm9taXVt
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRh
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6Omhhc01vcmVVcGRh
dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjpjbGVhcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAoQ0NU
ZXh0dXJlVXBkYXRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1
ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcik6CisKIDIwMTItMDYtMDQgIERhbmEgSmFuc2VucyAgPGRh
bmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZW1vdmUgcmVkdW5kYW50
IHNldE5lZWRzQ29tbWl0IHdoZW4gcHJlcGFyZVRvRHJhdyBmYWlscwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCAyMGRjNjZiMTlmOWI4YzQ1ZGM0ZmU2NTJmZjBlZmM1MGZkZDc2ZjhlLi5l
MzFiNzBhOGQ4MjM4NGQwOTIxOTg1NzRkOTQ2NjNkMmFjYzA1ZWYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA2LTA1ICBKYW1lcyBSb2JpbnNvbiAg
PGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBNb3ZlIGRlZmVycmFs
LXJlbGF0ZWQgbG9naWMgb3V0IG9mIENhbnZhczJETGF5ZXJDaHJvbWl1bQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYwNTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAg
ICAqIHRlc3RzL0NhbnZhczJETGF5ZXJCcmlkZ2VUZXN0LmNwcDogUmVuYW1lZCBmcm9tIHRlc3Rz
L0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QKKyAgICAgICAgKENhbnZhczJETGF5ZXJCcmlkZ2VU
ZXN0KToKKyAgICAgICAgKENhbnZhczJETGF5ZXJCcmlkZ2VUZXN0OjpmdWxsTGlmZWN5Y2xlVGVz
dCk6CisKIDIwMTItMDYtMDQgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW2Nocm9taXVtXSBSZW1vdmUgcmVkdW5kYW50IHNldE5lZWRzQ29tbWl0IHdoZW4g
cHJlcGFyZVRvRHJhdyBmYWlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGRhM2QzOGRiZjc3YWJiZmFi
MTJiMjkyOTY5NDFlNDcwOGFhMTliZDIuLjVkZDY5NWRkZGUwMDczMjhlNmZhMTRjNDA0MmRmYWRm
N2FlNTYxOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1NjYsMTAgKzM1NjYsOCBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0
bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllckNocm9taXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwJywKLSAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlk
Z2UuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMy
RExheWVyQnJpZGdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQnJpZGdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2NWE0NDU1Nzc5
NzlhMTY5ODM5MWQwMWZkMjRkNDEzZjkyYmYxNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNw
cApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIkNhbnZhczJETGF5ZXJCcmlkZ2UuaCIKKworI2luY2x1ZGUgIkdyQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiIC8vIEZvciBHTEMoKSBtYWNyby4KKyNpbmNsdWRlICJTa0NhbnZhcy5oIgorI2luY2x1
ZGUgIlNrRGVmZXJyZWRDYW52YXMuaCIKKyNpbmNsdWRlICJUZXh0dXJlTGF5ZXJDaHJvbWl1bS5o
IgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQWNjZWxlcmF0ZWREZXZpY2VDb250
ZXh0IDogcHVibGljIFNrRGVmZXJyZWRDYW52YXM6OkRldmljZUNvbnRleHQgeworcHVibGljOgor
ICAgIEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
VGV4dHVyZUxheWVyQ2hyb21pdW0qIGxheWVyLCBib29sIHVzZURvdWJsZUJ1ZmZlcmluZykKKyAg
ICAgICAgOiBtX2xheWVyKGxheWVyKQorICAgICAgICAsIG1fY29udGV4dCgpCisgICAgICAgICwg
bV91c2VEb3VibGVCdWZmZXJpbmcodXNlRG91YmxlQnVmZmVyaW5nKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGNvbnRleHQpOworICAgICAgICBBU1NFUlQobGF5ZXIpOworICAgICAgICBtX2NvbnRl
eHQgPSBjb250ZXh0OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRHJhdygp
CisgICAgeworICAgICAgICBpZiAoIW1fdXNlRG91YmxlQnVmZmVyaW5nKQorICAgICAgICAgICAg
bV9sYXllci0+d2lsbE1vZGlmeVRleHR1cmUoKTsKKyAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVGV4dHVyZUxheWVyQ2hyb21p
dW0qIG1fbGF5ZXI7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBib29s
IG1fdXNlRG91YmxlQnVmZmVyaW5nOworfTsKKworQ2FudmFzMkRMYXllckJyaWRnZTo6Q2FudmFz
MkRMYXllckJyaWRnZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBjb25z
dCBJbnRTaXplJiBzaXplLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlLCB1bnNpZ25lZCB0ZXh0
dXJlSWQpCisgICAgOiBtX2RlZmVycmFsTW9kZShkZWZlcnJhbE1vZGUpCisgICAgLy8gRklYTUU6
IFdlIGN1cnJlbnRseSB0dXJuIG9mZiBkb3VibGUgYnVmZmVyaW5nIHdoZW4gY2FudmFzIHJlbmRl
cmluZyBpcworICAgIC8vIGRlZmVycmVkLiBXaGF0IHdlIHNob3VsZCBiZSBkb2luZyBpcyB0byB1
c2UgYSBzbWFydGVyIGhldXJpc3RpYyBiYXNlZAorICAgIC8vIG9uIEdQVSByZXNvdXJjZSBtb25p
dG9yaW5nIGFuZCBvdGhlciBmYWN0b3JzIHRvIGNob3NlIGJldHdlZW4gc2luZ2xlCisgICAgLy8g
YW5kIGRvdWJsZSBidWZmZXJpbmcuCisgICAgLCBtX3VzZURvdWJsZUJ1ZmZlcmluZyhDQ1Byb3h5
OjpoYXNJbXBsVGhyZWFkKCkgJiYgZGVmZXJyYWxNb2RlID09IE5vbkRlZmVycmVkKQorICAgICwg
bV9mcm9udEJ1ZmZlclRleHR1cmUoMCkKKyAgICAsIG1fYmFja0J1ZmZlclRleHR1cmUodGV4dHVy
ZUlkKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX2NhbnZhcygwKQorICAgICwgbV9jb250
ZXh0KGNvbnRleHQpCit7CisgICAgaWYgKG1fdXNlRG91YmxlQnVmZmVyaW5nKSB7CisgICAgICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fZnJvbnRCdWZmZXJUZXh0dXJlID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCkp
OworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2Zyb250QnVmZmVyVGV4dHVyZSkpOworICAg
ICAgICAvLyBEbyBiYXNpYyBsaW5lYXIgZmlsdGVyaW5nIG9uIHJlc2l6ZS4KKyAgICAgICAgR0xD
KG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBH
cmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCks
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUikpOworICAgICAgICAvLyBOUE9UIHRleHR1cmVzIGluIEdMIEVTIG9ubHkgd29yayB3
aGVuIHRoZSB3cmFwIG1vZGUgaXMgc2V0IHRvIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19F
REdFLgorICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKKyAgICAgICAg
R0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdy
YXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKSk7CisgICAgICAgIGlmIChHckNvbnRleHQqIGdyQ29udGV4dCA9
IG1fY29udGV4dC0+Z3JDb250ZXh0KCkpCisgICAgICAgICAgICBnckNvbnRleHQtPnJlc2V0Q29u
dGV4dCgpOworICAgIH0KKworICAgIG1fbGF5ZXIgPSBUZXh0dXJlTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKHRoaXMpOworICAgIG1fbGF5ZXItPnNldFRleHR1cmVJZCh0ZXh0dXJlSWQpOworICAgIG1f
bGF5ZXItPnNldFJhdGVMaW1pdENvbnRleHQoIUNDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSB8fCBt
X3VzZURvdWJsZUJ1ZmZlcmluZyk7Cit9CisKKworQ2FudmFzMkRMYXllckJyaWRnZTo6fkNhbnZh
czJETGF5ZXJCcmlkZ2UoKQoreworICAgIG1fbGF5ZXItPnNldFRleHR1cmVJZCgwKTsKKyAgICBp
ZiAobV91c2VEb3VibGVCdWZmZXJpbmcpIHsKKyAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kZWxl
dGVUZXh0dXJlKG1fZnJvbnRCdWZmZXJUZXh0dXJlKSk7CisgICAgICAgIG1fY29udGV4dC0+Zmx1
c2goKTsKKyAgICB9Cit9CisKK1NrQ2FudmFzKiBDYW52YXMyRExheWVyQnJpZGdlOjpza0NhbnZh
cyhTa0RldmljZSogZGV2aWNlKQoreworICAgIGlmIChtX2RlZmVycmFsTW9kZSA9PSBEZWZlcnJl
ZCkgeworICAgICAgICBTa0F1dG9UVW5yZWY8QWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0PiBkZXZp
Y2VDb250ZXh0KG5ldyBBY2NlbGVyYXRlZERldmljZUNvbnRleHQobV9jb250ZXh0LmdldCgpLCBt
X2xheWVyLmdldCgpLCBtX3VzZURvdWJsZUJ1ZmZlcmluZykpOworICAgICAgICBtX2NhbnZhcyA9
IG5ldyBTa0RlZmVycmVkQ2FudmFzKGRldmljZSwgZGV2aWNlQ29udGV4dC5nZXQoKSk7CisgICAg
fSBlbHNlCisgICAgICAgIG1fY2FudmFzID0gbmV3IFNrQ2FudmFzKGRldmljZSk7CisKKyAgICBy
ZXR1cm4gbV9jYW52YXM7Cit9CisKKwordW5zaWduZWQgQ2FudmFzMkRMYXllckJyaWRnZTo6cHJl
cGFyZVRleHR1cmUoQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlcikKK3sKKyAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaWYgKG1fY2FudmFzKSB7CisgICAgICAgIFRS
QUNFX0VWRU5UMCgiY2MiLCAiQ2FudmFzMkRMYXllckJyaWRnZTo6U2tDYW52YXM6OmZsdXNoIik7
CisgICAgICAgIG1fY2FudmFzLT5mbHVzaCgpOworICAgIH0KKworICAgIG1fY29udGV4dC0+Zmx1
c2goKTsKKworICAgIGlmIChtX3VzZURvdWJsZUJ1ZmZlcmluZykgeworICAgICAgICB1cGRhdGVy
LmFwcGVuZENvcHkobV9iYWNrQnVmZmVyVGV4dHVyZSwgbV9mcm9udEJ1ZmZlclRleHR1cmUsIG1f
c2l6ZSk7CisgICAgICAgIHJldHVybiBtX2Zyb250QnVmZmVyVGV4dHVyZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbV9iYWNrQnVmZmVyVGV4dHVyZTsKK30KKworR3JhcGhpY3NDb250ZXh0M0QqIENh
bnZhczJETGF5ZXJCcmlkZ2U6OmNvbnRleHQoKQoreworICAgIHJldHVybiBtX2NvbnRleHQuZ2V0
KCk7Cit9CisKK0xheWVyQ2hyb21pdW0qIENhbnZhczJETGF5ZXJCcmlkZ2U6OmxheWVyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5nZXQoKTsKK30KKwordm9pZCBDYW52YXMyRExheWVy
QnJpZGdlOjpjb250ZXh0QWNxdWlyZWQoKQoreworICAgIGlmIChtX2RlZmVycmFsTW9kZSA9PSBO
b25EZWZlcnJlZCAmJiAhbV91c2VEb3VibGVCdWZmZXJpbmcpCisgICAgICAgIG1fbGF5ZXItPndp
bGxNb2RpZnlUZXh0dXJlKCk7Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjliYTU5MzFlNDI5NWQzOTAxZDliZTA4ZDc2MTU0YjZkNDUyNWEwN2YKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQnJpZGdlLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q2FudmFzMkRMYXllckJyaWRnZV9oCisjZGVmaW5lIENhbnZhczJETGF5ZXJCcmlkZ2VfaAorCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIgLy8gRm9yIERlZmVycmFsTW9kZSBlbnVtLgorI2luY2x1
ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJUZXh0dXJlTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitjbGFzcyBT
a0NhbnZhczsKK2NsYXNzIFNrRGV2aWNlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IExheWVyQ2hyb21pdW07CitjbGFzcyBUZXh0dXJlTGF5ZXJDaHJvbWl1bTsKKworY2xhc3MgQ2Fu
dmFzMkRMYXllckJyaWRnZSA6IHB1YmxpYyBUZXh0dXJlTGF5ZXJDaHJvbWl1bUNsaWVudCB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FudmFzMkRMYXllckJyaWRnZSk7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8Q2FudmFzMkRMYXllckJyaWRnZT4gY3JlYXRlKFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIERlZmVy
cmFsTW9kZSBkZWZlcnJhbE1vZGUsIHVuc2lnbmVkIHRleHR1cmVJZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ2FudmFzMkRMYXllckJyaWRnZShjb250ZXh0LCBzaXplLCBk
ZWZlcnJhbE1vZGUsIHRleHR1cmVJZCkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNhbnZhczJE
TGF5ZXJCcmlkZ2UoKTsKKworICAgIC8vIFRleHR1cmVMYXllckNocm9taXVtQ2xpZW50IGltcGxl
bWVudGF0aW9uLgorICAgIHZpcnR1YWwgdW5zaWduZWQgcHJlcGFyZVRleHR1cmUoQ0NUZXh0dXJl
VXBkYXRlciYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQoKSBPVkVSUklERTsKKworICAgIFNrQ2FudmFzKiBza0NhbnZhcyhTa0RldmljZSopOworICAg
IExheWVyQ2hyb21pdW0qIGxheWVyKCkgY29uc3Q7CisgICAgdm9pZCBjb250ZXh0QWNxdWlyZWQo
KTsKKworcHJpdmF0ZToKKyAgICBDYW52YXMyRExheWVyQnJpZGdlKFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+LCBjb25zdCBJbnRTaXplJiwgRGVmZXJyYWxNb2RlLCB1bnNpZ25lZCB0ZXh0
dXJlSWQpOworCisgICAgRGVmZXJyYWxNb2RlIG1fZGVmZXJyYWxNb2RlOworICAgIGJvb2wgbV91
c2VEb3VibGVCdWZmZXJpbmc7CisgICAgdW5zaWduZWQgbV9mcm9udEJ1ZmZlclRleHR1cmU7Cisg
ICAgdW5zaWduZWQgbV9iYWNrQnVmZmVyVGV4dHVyZTsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAg
ICBTa0NhbnZhcyogbV9jYW52YXM7CisgICAgUmVmUHRyPFRleHR1cmVMYXllckNocm9taXVtPiBt
X2xheWVyOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworfTsKKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDc5Mjk3YjdiNmI5MjUwODk2OTU5OTY4ZWEzMzRjN2Ew
NDk3OGQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkNhbnZh
czJETGF5ZXJDaHJvbWl1bS5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIiAvLyBGb3IgdGhlIEdMQygpIG1hY3JvCi0jaW5jbHVkZSAiVGV4dHVyZUNvcGll
ci5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgotI2luY2x1ZGUgImNjL0NDVGV4
dHVyZUxheWVySW1wbC5oIgotI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKLQotI2lu
Y2x1ZGUgIlNrQ2FudmFzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxD
YW52YXMyRExheWVyQ2hyb21pdW0+IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIERl
ZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52
YXMyRExheWVyQ2hyb21pdW0oY29udGV4dCwgc2l6ZSwgZGVmZXJyYWxNb2RlKSk7Ci19Ci0KLUNh
bnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNocm9taXVtKFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIERlZmVycmFsTW9k
ZSBkZWZlcnJhbE1vZGUpCi0gICAgOiBDYW52YXNMYXllckNocm9taXVtKCkKLSAgICAsIG1fY29u
dGV4dChjb250ZXh0KQotICAgICwgbV9jb250ZXh0TG9zdChmYWxzZSkKLSAgICAsIG1fc2l6ZShz
aXplKQotICAgICwgbV9iYWNrVGV4dHVyZUlkKDApCi0gICAgLCBtX2NhbnZhcygwKQotICAgICwg
bV9kZWZlcnJhbE1vZGUoZGVmZXJyYWxNb2RlKQotewotICAgIC8vIEZJWE1FOiBXZSBjdXJyZW50
bHkgdHVybiBvZmYgZG91YmxlIGJ1ZmZlcmluZyB3aGVuIGNhbnZhcyByZW5kZXJpbmcgaXMKLSAg
ICAvLyBkZWZlcnJlZC4gV2hhdCB3ZSBzaG91bGQgYmUgZG9pbmcgaXMgdG8gdXNlIGEgc21hcnRl
ciBoZXVyaXN0aWMgYmFzZWQKLSAgICAvLyBvbiBHUFUgcmVzb3VyY2UgbW9uaXRvcmluZyBhbmQg
b3RoZXIgZmFjdG9ycyB0byBjaG9zZSBiZXR3ZWVuIHNpbmdsZQotICAgIC8vIGFuZCBkb3VibGUg
YnVmZmVyaW5nLgotICAgIG1fdXNlRG91YmxlQnVmZmVyaW5nID0gQ0NQcm94eTo6aGFzSW1wbFRo
cmVhZCgpICYmIGRlZmVycmFsTW9kZSA9PSBOb25EZWZlcnJlZDsKLQotICAgIC8vIFRoZSB0aHJl
YWRlZCBjb21wb3NpdG9yIGlzIHNlbGYgcmF0ZS1saW1pdGluZyB3aGVuIHJlbmRlcmluZwotICAg
IC8vIHRvIGEgc2luZ2xlIGJ1ZmZlcmVkIGNhbnZhcyBsYXllci4KLSAgICBtX3VzZVJhdGVMaW1p
dGVyID0gIUNDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSB8fCBtX3VzZURvdWJsZUJ1ZmZlcmluZzsK
LX0KLQotQ2FudmFzMkRMYXllckNocm9taXVtOjp+Q2FudmFzMkRMYXllckNocm9taXVtKCkKLXsK
LSAgICBzZXRUZXh0dXJlSWQoMCk7Ci0gICAgaWYgKG1fY29udGV4dCAmJiBtX3VzZVJhdGVMaW1p
dGVyICYmIGxheWVyVHJlZUhvc3QoKSkKLSAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdG9wUmF0
ZUxpbWl0ZXIobV9jb250ZXh0LmdldCgpKTsKLX0KLQotYm9vbCBDYW52YXMyRExheWVyQ2hyb21p
dW06OmRyYXdpbmdJbnRvSW1wbFRocmVhZFRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiAh
bV91c2VEb3VibGVCdWZmZXJpbmcgJiYgQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpICYmIGxheWVy
VHJlZUhvc3QoKTsKLX0KLQotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnNldFRleHR1cmVJ
ZCh1bnNpZ25lZCB0ZXh0dXJlSWQpCi17Ci0gICAgaWYgKG1fYmFja1RleHR1cmVJZCA9PSB0ZXh0
dXJlSWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2JhY2tUZXh0dXJlSWQgJiYgZHJh
d2luZ0ludG9JbXBsVGhyZWFkVGV4dHVyZSgpKSB7Ci0gICAgICAgIC8vIFRoZSBpbXBsIHRyZWUg
bWF5IGJlIHJlZmVyZW5jaW5nIHRoZSBvbGQgbV9iYWNrVGV4dHVyZSwgd2hpY2ggbWF5Ci0gICAg
ICAgIC8vIHNvb24gYmUgZGVsZXRlZC4gV2UgbXVzdCBtYWtlIHN1cmUgdGhlIGxheWVyIHRyZWUg
b24gdGhlIGltcGwgdGhyZWFkCi0gICAgICAgIC8vIGlzIG5vdCBkcmF3biB1bnRpbCB0aGUgbmV4
dCBjb21taXQsIHdoaWNoIHdpbGwgcmUtc3luY2hyb25pemUgdGhlCi0gICAgICAgIC8vIGxheWVy
IHRyZWVzLgotICAgICAgICBsYXllclRyZWVIb3N0KCktPmFjcXVpcmVMYXllclRleHR1cmVzKCk7
Ci0gICAgfQotICAgIG1fYmFja1RleHR1cmVJZCA9IHRleHR1cmVJZDsKLSAgICBzZXROZWVkc0Nv
bW1pdCgpOwotfQotCi12b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5
UmVjdChjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBMYXllckNocm9taXVtOjpz
ZXROZWVkc0Rpc3BsYXlSZWN0KGRpcnR5UmVjdCk7Ci0KLSAgICBpZiAobV91c2VSYXRlTGltaXRl
ciAmJiBsYXllclRyZWVIb3N0KCkpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RhcnRSYXRl
TGltaXRlcihtX2NvbnRleHQuZ2V0KCkpOwotfQotCi1ib29sIENhbnZhczJETGF5ZXJDaHJvbWl1
bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gTGF5ZXJDaHJvbWl1bTo6ZHJh
d3NDb250ZW50KCkgJiYgbV9iYWNrVGV4dHVyZUlkICYmICFtX3NpemUuaXNFbXB0eSgpCi0gICAg
ICAgICYmICFtX2NvbnRleHRMb3N0OwotfQotCi12b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6
c2V0Q2FudmFzKFNrQ2FudmFzKiBjYW52YXMpCi17Ci0gICAgbV9jYW52YXMgPSBjYW52YXM7Ci19
Ci0KLXZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGUoQ0NUZXh0dXJlVXBkYXRlciYg
dXBkYXRlciwgY29uc3QgQ0NPY2NsdXNpb25UcmFja2VyKikKLXsKLSAgICBUUkFDRV9FVkVOVDAo
ImNjIiwgIkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlIik7Ci0gICAgaWYgKCFkcmF3c0Nv
bnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fdXNlRG91YmxlQnVmZmVyaW5n
ICYmIGxheWVyVHJlZUhvc3QoKSkgewotICAgICAgICBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1h
bmFnZXIgPSBsYXllclRyZWVIb3N0KCktPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsKLSAgICAg
ICAgaWYgKG1fZnJvbnRUZXh0dXJlKQotICAgICAgICAgICAgbV9mcm9udFRleHR1cmUtPnNldFRl
eHR1cmVNYW5hZ2VyKHRleHR1cmVNYW5hZ2VyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9mcm9udFRleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKHRleHR1cmVNYW5hZ2VyKTsK
LSAgICAgICAgaWYgKG1fZnJvbnRUZXh0dXJlLT5yZXNlcnZlKG1fc2l6ZSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEpKQotICAgICAgICAgICAgdXBkYXRlci5hcHBlbmRNYW5hZ2VkQ29weShtX2Jh
Y2tUZXh0dXJlSWQsIG1fZnJvbnRUZXh0dXJlLmdldCgpLCBtX3NpemUpOwotICAgIH0KLQotICAg
IGlmICghbmVlZHNEaXNwbGF5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmVlZHNEaXNw
bGF5ID0gZmFsc2U7Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0KLSAgICBt
X2NvbnRleHRMb3N0ID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7Ci0gICAgaWYgKG1f
Y29udGV4dExvc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2NhbnZhcykgewotICAg
ICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIlNrQ2FudmFzOjpmbHVzaCIpOwotICAgICAgICBtX2Nh
bnZhcy0+Zmx1c2goKTsKLSAgICB9Ci0KLSAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkdyYXBoaWNz
Q29udGV4dDNEOjpmbHVzaCIpOwotICAgIG1fY29udGV4dC0+Zmx1c2goKTsKLX0KLQotdm9pZCBD
YW52YXMyRExheWVyQ2hyb21pdW06OmxheWVyV2lsbERyYXcoV2lsbERyYXdDb25kaXRpb24gY29u
ZGl0aW9uKSBjb25zdAotewotICAgIGlmIChkcmF3aW5nSW50b0ltcGxUaHJlYWRUZXh0dXJlKCkp
IHsKLSAgICAgICAgaWYgKGNvbmRpdGlvbiA9PSBXaWxsRHJhd1VuY29uZGl0aW9uYWxseSB8fCBt
X2RlZmVycmFsTW9kZSA9PSBOb25EZWZlcnJlZCkKLSAgICAgICAgICAgIGxheWVyVHJlZUhvc3Qo
KS0+YWNxdWlyZUxheWVyVGV4dHVyZXMoKTsKLSAgICB9Ci19Ci0KLQotdm9pZCBDYW52YXMyRExh
eWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQotewotICAg
IENhbnZhc0xheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIpOwotCi0gICAgQ0NU
ZXh0dXJlTGF5ZXJJbXBsKiB0ZXh0dXJlTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1RleHR1cmVMYXll
ckltcGwqPihsYXllcik7Ci0gICAgaWYgKG1fdXNlRG91YmxlQnVmZmVyaW5nKSB7Ci0gICAgICAg
IGlmIChtX2Zyb250VGV4dHVyZSAmJiBtX2Zyb250VGV4dHVyZS0+aXNWYWxpZChtX3NpemUsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKLSAgICAgICAgICAgIHRleHR1cmVMYXllci0+c2V0VGV4
dHVyZUlkKG1fZnJvbnRUZXh0dXJlLT50ZXh0dXJlSWQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHRleHR1cmVMYXllci0+c2V0VGV4dHVyZUlkKDApOwotICAgIH0gZWxzZQotICAgICAg
ICB0ZXh0dXJlTGF5ZXItPnNldFRleHR1cmVJZChtX2JhY2tUZXh0dXJlSWQpOwotfQotCi19Ci0K
LSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDNjNjg2NWFm
NGFmZGMxMmUzNjQ2OWVlZmVjY2U4ZTk2MzI2YjY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLQotI2lmbmRlZiBDYW52YXMyRExheWVyQ2hyb21pdW1faAotI2RlZmluZSBDYW52YXMyRExh
eWVyQ2hyb21pdW1faAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5j
bHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0j
aW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKLQotY2xhc3MgU2tDYW52YXM7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBSZWdpb247Ci0K
LS8vIEEgbGF5ZXIgY29udGFpbmluZyBhbiBhY2NlbGVyYXRlZCAyZCBjYW52YXMKLWNsYXNzIENh
bnZhczJETGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNMYXllckNocm9taXVtIHsKLXB1Ymxp
YzoKLSAgICBlbnVtIFdpbGxEcmF3Q29uZGl0aW9uIHsKLSAgICAgICAgV2lsbERyYXdVbmNvbmRp
dGlvbmFsbHksCi0gICAgICAgIFdpbGxEcmF3SWZMYXllck5vdERlZmVycmVkLAotICAgIH07Ci0K
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgY29uc3QgSW50U2l6ZSYsIERlZmVycmFsTW9kZSk7
Ci0gICAgdmlydHVhbCB+Q2FudmFzMkRMYXllckNocm9taXVtKCk7Ci0KLSAgICB2b2lkIHNldFRl
eHR1cmVJZCh1bnNpZ25lZCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5UmVj
dChjb25zdCBGbG9hdFJlY3QmKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0Nv
bnRlbnQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKENDVGV4dHVy
ZVVwZGF0ZXImLCBjb25zdCBDQ09jY2x1c2lvblRyYWNrZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCopIE9WRVJSSURFOwotCi0gICAg
dm9pZCBzZXRDYW52YXMoU2tDYW52YXMqKTsKLSAgICB2b2lkIGxheWVyV2lsbERyYXcoV2lsbERy
YXdDb25kaXRpb24pIGNvbnN0OwotCi1wcml2YXRlOgotICAgIENhbnZhczJETGF5ZXJDaHJvbWl1
bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgY29uc3QgSW50U2l6ZSYsIERlZmVycmFs
TW9kZSk7Ci0gICAgYm9vbCBkcmF3aW5nSW50b0ltcGxUaHJlYWRUZXh0dXJlKCkgY29uc3Q7Ci0K
LSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKLSAgICBib29sIG1fY29u
dGV4dExvc3Q7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgdW5zaWduZWQgbV9iYWNrVGV4dHVy
ZUlkOwotICAgIC8vIFdoZW4gbV91c2VEb3VibGVCdWZmZXJpbmcgaXMgdHJ1ZSwgdGhlIGNvbXBv
c2l0b3Igd2lsbCBkcmF3IHVzaW5nIGEgY29weSBvZiB0aGUKLSAgICAvLyBjYW52YXMnIGJhY2tp
bmcgdGV4dHVyZS4gVGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgd2l0aCB0aGUgY29tcG9zaXRv
ciBkb2Vzbid0Ci0gICAgLy8gc3luY2hyb25pemUgaXRzIGRyYXdzIHdpdGggdGhlIGNhbnZhcyB1
cGRhdGVzLgotICAgIGJvb2wgbV91c2VEb3VibGVCdWZmZXJpbmc7Ci0gICAgT3duUHRyPE1hbmFn
ZWRUZXh0dXJlPiBtX2Zyb250VGV4dHVyZTsKLSAgICBTa0NhbnZhcyogbV9jYW52YXM7Ci0gICAg
Ym9vbCBtX3VzZVJhdGVMaW1pdGVyOwotICAgIERlZmVycmFsTW9kZSBtX2RlZmVycmFsTW9kZTsK
LX07Ci0KLX0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMTg0MzMzNjA5NTFi
MmJmY2VhN2NiMTFiYmU5MDAxZWE5ODVmNGUwMS4uMWUwZTEzNDZmZTY0ODU5YmYzMzlmMzllY2M3
NzI3YTMwNDlmNmE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBA
IC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCiAKICNp
bmNsdWRlICJBbmltYXRpb25JZFZlbmRvci5oIgotI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiRmxv
YXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lh
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZl
ckRhdGFTa2lhLmgKaW5kZXggYzkwOTMwNGNlNWU1YmM0MDdlYTUwYzZkM2JhMmQ2ZTA4ZWI1MmRi
ZS4uNmQ0OWM1NTc4N2Y4ZDYwZDZmMGJkYjRmNjE4OWZjNGIwOGFhYWI2ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRh
U2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlQnVmZmVyRGF0YVNraWEuaApAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotY2xhc3MgQ2FudmFzMkRMYXll
ckNocm9taXVtOworY2xhc3MgQ2FudmFzMkRMYXllckJyaWRnZTsKICNlbmRpZgogCiBjbGFzcyBJ
bWFnZUJ1ZmZlckRhdGEgewpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgT3duUHRyPFNr
Q2FudmFzPiBtX2NhbnZhczsKICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIG1fcGxhdGZvcm1Db250
ZXh0OwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBSZWZQdHI8Q2FudmFz
MkRMYXllckNocm9taXVtPiBtX3BsYXRmb3JtTGF5ZXI7CisgICAgT3duUHRyPENhbnZhczJETGF5
ZXJCcmlkZ2U+IG1fbGF5ZXJCcmlkZ2U7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVMYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVM
YXllckNocm9taXVtLmNwcAppbmRleCA3Mzg0NDkyNjQxN2NjY2YxNmM2MWM1NTBlNDI5OTFiZTFi
ZmVhNGY5Li42M2VkMjQ0YjAzYTIzOGY5ODM3ZTEwNmNlZWZhODliNzhhZGI0OWNhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xMDMsNiArMTAzLDEyIEBAIHZvaWQg
VGV4dHVyZUxheWVyQ2hyb21pdW06OnNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkKICAgICBzZXRO
ZWVkc0NvbW1pdCgpOwogfQogCit2b2lkIFRleHR1cmVMYXllckNocm9taXVtOjp3aWxsTW9kaWZ5
VGV4dHVyZSgpCit7CisgICAgaWYgKGxheWVyVHJlZUhvc3QoKSkKKyAgICAgICAgbGF5ZXJUcmVl
SG9zdCgpLT5hY3F1aXJlTGF5ZXJUZXh0dXJlcygpOworfQorCiB2b2lkIFRleHR1cmVMYXllckNo
cm9taXVtOjpzZXROZWVkc0Rpc3BsYXlSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KQog
ewogICAgIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheVJlY3QoZGlydHlSZWN0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1
cmVMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UZXh0dXJlTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDQzZjQ5MjcwM2VkOTNjZDVjMzFjMDFl
NzQ1ZTY1M2Q0MTNjMDRmOWIuLmEzM2QxMDBhNGQ1MGM0NTAwYTNhMmRhMzgyM2JlMDZmOWJhY2Fj
ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RleHR1cmVMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGV4dHVyZUxheWVyQ2hyb21pdW0uaApAQCAtNzcsNiArNzcsOCBAQCBw
dWJsaWM6CiAgICAgLy8gQ29kZSBwYXRoIGZvciBwbHVnaW5zIHdoaWNoIHN1cHBseSB0aGVpciBv
d24gdGV4dHVyZSBJRC4KICAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCk7CiAKKyAgICB2
b2lkIHdpbGxNb2RpZnlUZXh0dXJlKCk7CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNw
bGF5UmVjdChjb25zdCBGbG9hdFJlY3QmKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9pZCBz
ZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdCopIE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBk
YXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RleHR1cmVVcGRhdGVyLmNwcAppbmRleCAwNWU5ZjU0ZGRhZWNhYWIyNDFlOWI1YTRhZGM1YmYx
NWM3NDJkMjAyLi4xZmQwYzczNmVlMzQ5Zjc4OGFiYzg5ODRlZmJlNmJmYmE4YjQ2MjczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rl
eHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcApAQCAtMzEsNyArMzEsNiBAQAogCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVy
LmgiCi0jaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJUZXh0dXJlQ29waWVy
LmgiCiAjaW5jbHVkZSAiVGV4dHVyZVVwbG9hZGVyLmgiCiAKQEAgLTc4LDE4ICs3Nyw5IEBAIHZv
aWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kQ29weSh1bnNpZ25lZCBzb3VyY2VUZXh0dXJlLCB1
bnNpZ25lZCBkZXN0VGV4dHVyZSwKICAgICBtX2NvcHlFbnRyaWVzLmFwcGVuZChjb3B5KTsKIH0K
IAotdm9pZCBDQ1RleHR1cmVVcGRhdGVyOjphcHBlbmRNYW5hZ2VkQ29weSh1bnNpZ25lZCBzb3Vy
Y2VUZXh0dXJlLCBNYW5hZ2VkVGV4dHVyZSogZGVzdFRleHR1cmUsIGNvbnN0IEludFNpemUmIHNp
emUpCi17Ci0gICAgTWFuYWdlZENvcHlFbnRyeSBjb3B5OwotICAgIGNvcHkuc291cmNlVGV4dHVy
ZSA9IHNvdXJjZVRleHR1cmU7Ci0gICAgY29weS5kZXN0VGV4dHVyZSA9IGRlc3RUZXh0dXJlOwot
ICAgIGNvcHkuc2l6ZSA9IHNpemU7Ci0gICAgbV9tYW5hZ2VkQ29weUVudHJpZXMuYXBwZW5kKGNv
cHkpOwotfQotCiBib29sIENDVGV4dHVyZVVwZGF0ZXI6Omhhc01vcmVVcGRhdGVzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9lbnRyaWVzLnNpemUoKSB8fCBtX3BhcnRpYWxFbnRyaWVzLnNpemUo
KSB8fCBtX2NvcHlFbnRyaWVzLnNpemUoKSB8fCBtX21hbmFnZWRDb3B5RW50cmllcy5zaXplKCk7
CisgICAgcmV0dXJuIG1fZW50cmllcy5zaXplKCkgfHwgbV9wYXJ0aWFsRW50cmllcy5zaXplKCkg
fHwgbV9jb3B5RW50cmllcy5zaXplKCk7CiB9CiAKIHZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6dXBk
YXRlKENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0
b3IsIFRleHR1cmVDb3BpZXIqIGNvcGllciwgVGV4dHVyZVVwbG9hZGVyKiB1cGxvYWRlciwgc2l6
ZV90IGNvdW50KQpAQCAtMTM0LDE1ICsxMjQsMTEgQEAgdm9pZCBDQ1RleHR1cmVVcGRhdGVyOjp1
cGRhdGUoQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG8K
ICAgICAgICAgQ29weUVudHJ5JiBjb3B5RW50cnkgPSBtX2NvcHlFbnRyaWVzW2luZGV4XTsKICAg
ICAgICAgY29waWVyLT5jb3B5VGV4dHVyZShjb250ZXh0LCBjb3B5RW50cnkuc291cmNlVGV4dHVy
ZSwgY29weUVudHJ5LmRlc3RUZXh0dXJlLCBjb3B5RW50cnkuc2l6ZSk7CiAgICAgfQotICAgIGZv
ciAoaW5kZXggPSAwOyBpbmRleCA8IG1fbWFuYWdlZENvcHlFbnRyaWVzLnNpemUoKTsgKytpbmRl
eCkgewotICAgICAgICBNYW5hZ2VkQ29weUVudHJ5JiBtYW5hZ2VkQ29weUVudHJ5ID0gbV9tYW5h
Z2VkQ29weUVudHJpZXNbaW5kZXhdOwotICAgICAgICBtYW5hZ2VkQ29weUVudHJ5LmRlc3RUZXh0
dXJlLT5hbGxvY2F0ZShhbGxvY2F0b3IpOwotICAgICAgICBjb3BpZXItPmNvcHlUZXh0dXJlKGNv
bnRleHQsIG1hbmFnZWRDb3B5RW50cnkuc291cmNlVGV4dHVyZSwgbWFuYWdlZENvcHlFbnRyeS5k
ZXN0VGV4dHVyZS0+dGV4dHVyZUlkKCksIG1hbmFnZWRDb3B5RW50cnkuc2l6ZSk7Ci0gICAgfQor
CiAgICAgLy8gSWYgd2UndmUgcGVyZm9ybWVkIGFueSB0ZXh0dXJlIGNvcGllcywgd2UgbmVlZCB0
byBpbnNlcnQgYSBmbHVzaCBoZXJlIGludG8gdGhlIGNvbXBvc2l0b3IgY29udGV4dAogICAgIC8v
IGJlZm9yZSBsZXR0aW5nIHRoZSBtYWluIHRocmVhZCBwcm9jZWVkIGFzIGl0IG1heSBtYWtlIGRy
YXcgY2FsbHMgdG8gdGhlIHNvdXJjZSB0ZXh0dXJlIG9mIG9uZSBvZgogICAgIC8vIG91ciBjb3B5
IG9wZXJhdGlvbnMuCi0gICAgaWYgKG1fY29weUVudHJpZXMuc2l6ZSgpIHx8IG1fbWFuYWdlZENv
cHlFbnRyaWVzLnNpemUoKSkgeworICAgIGlmIChtX2NvcHlFbnRyaWVzLnNpemUoKSkgewogICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gY29udGV4dC0+Y29udGV4dDNEKCk7
CiAgICAgICAgIGlmIChjb250ZXh0M2QpCiAgICAgICAgICAgICBjb250ZXh0M2QtPmZsdXNoKCk7
CkBAIC0xNTksNyArMTQ1LDYgQEAgdm9pZCBDQ1RleHR1cmVVcGRhdGVyOjpjbGVhcigpCiAgICAg
bV9lbnRyaWVzLmNsZWFyKCk7CiAgICAgbV9wYXJ0aWFsRW50cmllcy5jbGVhcigpOwogICAgIG1f
Y29weUVudHJpZXMuY2xlYXIoKTsKLSAgICBtX21hbmFnZWRDb3B5RW50cmllcy5jbGVhcigpOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKaW5kZXggN2M5ZmUyZTMwOGNhNGYy
NDRjMjY3NjFlODNhODQ1ODJiYzNjZDRkZC4uMGYxMzlmMzg1YzNhMWQ5MGM2NWY1YjJiYTAyZjI4
ZmM3MjZlMjU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaApAQCAtNDQsNyArNDQs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRVcGRhdGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KTsKICAgICB2b2lkIGFwcGVuZFBhcnRpYWxVcGRhdGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KTsKICAgICB2b2lkIGFwcGVuZENvcHkodW5zaWduZWQgc291cmNlVGV4dHVyZSwgdW5zaWdu
ZWQgZGVzdFRleHR1cmUsIGNvbnN0IEludFNpemUmKTsKLSAgICB2b2lkIGFwcGVuZE1hbmFnZWRD
b3B5KHVuc2lnbmVkIHNvdXJjZVRleHR1cmUsIE1hbmFnZWRUZXh0dXJlKiBkZXN0VGV4dHVyZSwg
Y29uc3QgSW50U2l6ZSYpOwogCiAgICAgYm9vbCBoYXNNb3JlVXBkYXRlcygpIGNvbnN0OwogCkBA
IC02NiwxOSArNjUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgZGVzdFRleHR1cmU7
CiAgICAgfTsKIAotICAgIHN0cnVjdCBNYW5hZ2VkQ29weUVudHJ5IHsKLSAgICAgICAgSW50U2l6
ZSBzaXplOwotICAgICAgICB1bnNpZ25lZCBzb3VyY2VUZXh0dXJlOwotICAgICAgICBNYW5hZ2Vk
VGV4dHVyZSogZGVzdFRleHR1cmU7Ci0gICAgfTsKLQogICAgIHN0YXRpYyB2b2lkIGFwcGVuZFVw
ZGF0ZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIFZlY3RvcjxVcGRhdGVFbnRyeT4mKTsKIAog
ICAgIHNpemVfdCBtX2VudHJ5SW5kZXg7CiAgICAgVmVjdG9yPFVwZGF0ZUVudHJ5PiBtX2VudHJp
ZXM7CiAgICAgVmVjdG9yPFVwZGF0ZUVudHJ5PiBtX3BhcnRpYWxFbnRyaWVzOwogICAgIFZlY3Rv
cjxDb3B5RW50cnk+IG1fY29weUVudHJpZXM7Ci0gICAgVmVjdG9yPE1hbmFnZWRDb3B5RW50cnk+
IG1fbWFuYWdlZENvcHlFbnRyaWVzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCmluZGV4IDhi
MDg2YTA3OThiNjQ2ZjgwNWYxMGEzNDEwNDU5NDczZTNhZGRiY2QuLjIyYzNjZmZhZGFjODJjMTgx
ZWUxNjBhOTcxYzhhNDU5MWQ0YjdjMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKQEAgLTUxLDcgKzUx
LDcgQEAKICNpbmNsdWRlICJXRUJQSW1hZ2VFbmNvZGVyLmgiCiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCisjaW5j
bHVkZSAiQ2FudmFzMkRMYXllckJyaWRnZS5oIgogI2VuZGlmCiAKICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KQEAgLTY5LDMwICs2OSw2IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VC
dWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiB9CiAKLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi1jbGFzcyBBY2NlbGVyYXRlZERldmljZUNvbnRleHQgOiBwdWJsaWMg
U2tEZWZlcnJlZENhbnZhczo6RGV2aWNlQ29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgQWNjZWxlcmF0
ZWREZXZpY2VDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QsIENhbnZhczJETGF5
ZXJDaHJvbWl1bSogbGF5ZXIpCi0gICAgICAgIDogbV9wbGF0Zm9ybUxheWVyKGxheWVyKQotICAg
ICAgICAsIG1fY29udGV4dDNEKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChjb250ZXh0M0QpOwot
ICAgICAgICBBU1NFUlQobGF5ZXIpOwotICAgICAgICBtX2NvbnRleHQzRCA9IGNvbnRleHQzRDsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRyYXcoKQotICAgIHsKLSAgICAg
ICAgbV9wbGF0Zm9ybUxheWVyLT5sYXllcldpbGxEcmF3KENhbnZhczJETGF5ZXJDaHJvbWl1bTo6
V2lsbERyYXdVbmNvbmRpdGlvbmFsbHkpOwotICAgICAgICBtX2NvbnRleHQzRC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhbnZhczJETGF5ZXJDaHJvbWl1
bSogbV9wbGF0Zm9ybUxheWVyOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQzRDsK
LX07Ci0jZW5kaWYKLQogc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVBY2NlbGVyYXRlZENhbnZhcyhj
b25zdCBJbnRTaXplJiBzaXplLCBJbWFnZUJ1ZmZlckRhdGEqIGRhdGEsIERlZmVycmFsTW9kZSBk
ZWZlcnJhbE1vZGUpCiB7CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0M0Qg
PSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0KCk7CkBAIC0xMTQsMjAgKzkwLDEyIEBAIHN0
YXRpYyBTa0NhbnZhcyogY3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgSW1hZ2VCdWZmZXJEYXRhKiBkCiAgICAgU2tDYW52YXMqIGNhbnZhczsKICAgICBTa0F1dG9U
VW5yZWY8U2tEZXZpY2U+IGRldmljZShuZXcgU2tHcHVEZXZpY2UoZ3IsIHRleHR1cmUuZ2V0KCkp
KTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgZGF0YS0+bV9wbGF0Zm9y
bUxheWVyID0gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUoY29udGV4dDNELCBzaXplLCBk
ZWZlcnJhbE1vZGUpOwotICAgIGlmIChkZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpIHsKLSAgICAg
ICAgU2tBdXRvVFVucmVmPEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dD4gZGV2aWNlQ29udGV4dChu
ZXcgQWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0KGNvbnRleHQzRC5nZXQoKSwgZGF0YS0+bV9wbGF0
Zm9ybUxheWVyLmdldCgpKSk7Ci0gICAgICAgIGNhbnZhcyA9IG5ldyBTa0RlZmVycmVkQ2FudmFz
KGRldmljZS5nZXQoKSwgZGV2aWNlQ29udGV4dC5nZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGNhbnZhcyA9IG5ldyBTa0NhbnZhcyhkZXZpY2UuZ2V0KCkpOworICAgIGRhdGEtPm1fbGF5ZXJC
cmlkZ2UgPSBDYW52YXMyRExheWVyQnJpZGdlOjpjcmVhdGUoY29udGV4dDNELnJlbGVhc2UoKSwg
c2l6ZSwgZGVmZXJyYWxNb2RlLCB0ZXh0dXJlLmdldCgpLT5nZXRUZXh0dXJlSGFuZGxlKCkpOwor
ICAgIGNhbnZhcyA9IGRhdGEtPm1fbGF5ZXJCcmlkZ2UtPnNrQ2FudmFzKGRldmljZS5nZXQoKSk7
CiAjZWxzZQogICAgIGNhbnZhcyA9IG5ldyBTa0NhbnZhcyhkZXZpY2UuZ2V0KCkpOwogI2VuZGlm
CiAgICAgZGF0YS0+bV9wbGF0Zm9ybUNvbnRleHQuc2V0QWNjZWxlcmF0ZWQodHJ1ZSk7Ci0jaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllci0+
c2V0VGV4dHVyZUlkKHRleHR1cmUuZ2V0KCktPmdldFRleHR1cmVIYW5kbGUoKSk7Ci0gICAgZGF0
YS0+bV9wbGF0Zm9ybUxheWVyLT5zZXRDYW52YXMoY2FudmFzKTsKLSNlbmRpZgogICAgIHJldHVy
biBjYW52YXM7CiB9CiAKQEAgLTE3NCwxNyArMTQyLDE2IEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1
ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCAvKiByZXNvbHV0aW9uU2NhbGUgKi8sIENv
bG9yCiAKIEltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKQogewotI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLSAgICBpZiAobV9kYXRhLm1fcGxhdGZvcm1MYXllcikKLSAgICAgICAg
bV9kYXRhLm1fcGxhdGZvcm1MYXllci0+c2V0VGV4dHVyZUlkKDApOwotI2VuZGlmCiB9CiAKIEdy
YXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAogewogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobV9kYXRhLm1fcGxhdGZvcm1MYXllcikK
LSAgICAgICAgbV9kYXRhLm1fcGxhdGZvcm1MYXllci0+bGF5ZXJXaWxsRHJhdyhDYW52YXMyRExh
eWVyQ2hyb21pdW06OldpbGxEcmF3SWZMYXllck5vdERlZmVycmVkKTsKKyAgICBpZiAobV9kYXRh
Lm1fbGF5ZXJCcmlkZ2UpIHsKKyAgICAgICAgLy8gV2UncmUgdXNpbmcgY29udGV4dCBhY3F1aXNp
dGlvbiBhcyBhIHNpZ25hbCB0aGF0IHNvbWVvbmUgaXMgYWJvdXQgdG8gcmVuZGVyIGludG8gb3Vy
IGJ1ZmZlciBhbmQgd2UgbmVlZAorICAgICAgICAvLyB0byBiZSByZWFkeS4gVGhpcyBpc24ndCBs
b2dpY2FsbHkgY29uc3QtY29ycmVjdCwgaGVuY2UgdGhlIGNhc3QuCisgICAgICAgIGNvbnN0X2Nh
c3Q8Q2FudmFzMkRMYXllckJyaWRnZSo+KG1fZGF0YS5tX2xheWVyQnJpZGdlLmdldCgpKS0+Y29u
dGV4dEFjcXVpcmVkKCk7CisgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQo
KTsKIH0KQEAgLTE5Niw3ICsxNjMsNyBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6
Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAogCiBQbGF0Zm9y
bUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fZGF0YS5tX3BsYXRmb3JtTGF5ZXIuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGF0YS5tX2xheWVy
QnJpZGdlID8gbV9kYXRhLm1fbGF5ZXJCcmlkZ2UtPmxheWVyKCkgOiAwOwogfQogCiB2b2lkIElt
YWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiByZWN0KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMWMxMWYyZDc5
MDZjOTBlMzhhMTg5YmJlNGQzN2IyYjc3Y2NjNzMyMy4uZjIzMTU0YWU0MDQ1N2I3ZTgwNzk5NzM4
NzMxOTRiY2EyMGE2N2I3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC01OSw3
ICs1OSw3IEBACiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAgICAgICAg
ICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKICAgICAgICAgICAgICd0ZXN0cy9Bc3NvY2lh
dGVkVVJMTG9hZGVyVGVzdC5jcHAnLAotICAgICAgICAgICAgJ3Rlc3RzL0NhbnZhczJETGF5ZXJD
aHJvbWl1bVRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQnJpZGdl
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckJyaWRnZVRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQnJpZGdlVGVzdC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGUxZWYyMGJjNjgwZWUyNmQ1YzFmZThmNzI3YjIzNjYxMDU0N2E0OQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckJy
aWRnZVRlc3QuY3BwCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJDYW52YXMyRExheWVyQnJpZGdlLmgiCisKKyNpbmNsdWRl
ICJGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVD
b3BpZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgorI2luY2x1ZGUgIldlYkNvbXBv
c2l0b3IuaCIKKyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJjYy9DQ0dyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJUaHJl
YWQuaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIHRlc3Rpbmc6OkluU2VxdWVuY2U7Cit1c2lu
ZyB0ZXN0aW5nOjpSZXR1cm47Cit1c2luZyB0ZXN0aW5nOjpUZXN0OworCituYW1lc3BhY2Ugewor
CitjbGFzcyBNb2NrQ2FudmFzQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0
M0QgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9EMChmbHVzaCwgdm9pZCh2b2lkKSk7CisgICAg
TU9DS19NRVRIT0QwKGNyZWF0ZVRleHR1cmUsIHVuc2lnbmVkKHZvaWQpKTsKKyAgICBNT0NLX01F
VEhPRDEoZGVsZXRlVGV4dHVyZSwgdm9pZCh1bnNpZ25lZCkpOworCisgICAgdmlydHVhbCBHckdM
SW50ZXJmYWNlKiBvbkNyZWF0ZUdyR0xJbnRlcmZhY2UoKSBPVkVSUklERSB7IHJldHVybiAwOyB9
Cit9OworCitjbGFzcyBNb2NrVGV4dHVyZUNvcGllciA6IHB1YmxpYyBUZXh0dXJlQ29waWVyIHsK
K3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDQoY29weVRleHR1cmUsIHZvaWQoQ0NHcmFwaGljc0Nv
bnRleHQqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IEludFNpemUmKSk7Cit9OworCit9IC8v
IG5hbWVzcGFjZQorCitlbnVtIFRocmVhZE1vZGUgeworICAgIFNpbmdsZVRocmVhZGVkLCBUaHJl
YWRlZAorfTsKKworY2xhc3MgQ2FudmFzMkRMYXllckJyaWRnZVRlc3QgOiBwdWJsaWMgVGVzdCB7
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBmdWxsTGlmZWN5Y2xlVGVzdChUaHJlYWRNb2RlIHRocmVh
ZE1vZGUsIERlZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUpCisgICAgeworICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKKworICAgICAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IG1haW5Db250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVH
cmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgTW9ja0NhbnZhc0NvbnRl
eHQoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7Cisg
ICAgICAgIFJlZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY2NNYWluQ29udGV4dCA9IENDR3JhcGhp
Y3NDb250ZXh0OjpjcmVhdGUzRChtYWluQ29udGV4dCk7CisgICAgICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gaW1wbENvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0
ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ2FudmFzQ29u
dGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsK
KyAgICAgICAgUmVmUHRyPENDR3JhcGhpY3NDb250ZXh0PiBjY0ltcGxDb250ZXh0ID0gQ0NHcmFw
aGljc0NvbnRleHQ6OmNyZWF0ZTNEKGltcGxDb250ZXh0KTsKKworICAgICAgICBNb2NrQ2FudmFz
Q29udGV4dCYgbWFpbk1vY2sgPSAqc3RhdGljX2Nhc3Q8TW9ja0NhbnZhc0NvbnRleHQqPihHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChtYWluQ29u
dGV4dC5nZXQoKSkpOworICAgICAgICBNb2NrQ2FudmFzQ29udGV4dCYgaW1wbE1vY2sgPSAqc3Rh
dGljX2Nhc3Q8TW9ja0NhbnZhc0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4
dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChpbXBsQ29udGV4dC5nZXQoKSkpOworCisgICAgICAg
IE1vY2tUZXh0dXJlQ29waWVyIGNvcGllck1vY2s7CisgICAgICAgIENDVGV4dHVyZVVwZGF0ZXIg
dXBkYXRlcjsKKworICAgICAgICBjb25zdCBJbnRTaXplIHNpemUoMzAwLCAxNTApOworCisgICAg
ICAgIE93blB0cjxXZWJUaHJlYWQ+IHRocmVhZDsKKyAgICAgICAgaWYgKHRocmVhZE1vZGUgPT0g
VGhyZWFkZWQpCisgICAgICAgICAgICB0aHJlYWQgPSBhZG9wdFB0cihXZWJLaXQ6OlBsYXRmb3Jt
OjpjdXJyZW50KCktPmNyZWF0ZVRocmVhZCgiQ2FudmFzMkRMYXllckJyaWRnZVRlc3QiKSk7Cisg
ICAgICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUodGhyZWFkLmdldCgpKTsKKworICAgICAg
ICBXZWJHTElkIGJhY2tUZXh0dXJlSWQgPSAxOworICAgICAgICBXZWJHTElkIGZyb250VGV4dHVy
ZUlkID0gMTsKKworICAgICAgICAvLyBUaHJlYWRlZCBhbmQgbm9uIGRlZmVycmVkIGNhbnZhc2Vz
IGFyZSBkb3VibGUgYnVmZmVyZWQuCisgICAgICAgIGlmICh0aHJlYWRNb2RlID09IFRocmVhZGVk
ICYmIGRlZmVycmFsTW9kZSA9PSBOb25EZWZlcnJlZCkgeworICAgICAgICAgICAgZnJvbnRUZXh0
dXJlSWQgPSAyOworICAgICAgICAgICAgLy8gQ3JlYXRlIHRleHR1cmUgKG9uIHRoZSBtYWluIHRo
cmVhZCkgYW5kIGRvIHRoZSBjb3B5IChvbiB0aGUgaW1wbCB0aHJlYWQpLgorICAgICAgICAgICAg
RVhQRUNUX0NBTEwobWFpbk1vY2ssIGNyZWF0ZVRleHR1cmUoKSkuV2lsbE9uY2UoUmV0dXJuKGZy
b250VGV4dHVyZUlkKSk7CisgICAgICAgIH0KKworICAgICAgICBPd25QdHI8Q2FudmFzMkRMYXll
ckJyaWRnZT4gYnJpZGdlID0gQ2FudmFzMkRMYXllckJyaWRnZTo6Y3JlYXRlKG1haW5Db250ZXh0
LmdldCgpLCBzaXplLCBkZWZlcnJhbE1vZGUsIGJhY2tUZXh0dXJlSWQpOworCisgICAgICAgIDo6
dGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1haW5Nb2NrKTsKKwor
ICAgICAgICBFWFBFQ1RfQ0FMTChtYWluTW9jaywgZmx1c2goKSk7CisgICAgICAgIEVYUEVDVF9F
UShmcm9udFRleHR1cmVJZCwgYnJpZGdlLT5wcmVwYXJlVGV4dHVyZSh1cGRhdGVyKSk7CisgICAg
ICAgIDo6dGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1haW5Nb2Nr
KTsKKworICAgICAgICBpZiAodGhyZWFkTW9kZSA9PSBUaHJlYWRlZCAmJiBkZWZlcnJhbE1vZGUg
PT0gTm9uRGVmZXJyZWQpIHsKKyAgICAgICAgICAgIEVYUEVDVF9DQUxMKGNvcGllck1vY2ssIGNv
cHlUZXh0dXJlKGNjSW1wbENvbnRleHQuZ2V0KCksIGJhY2tUZXh0dXJlSWQsIGZyb250VGV4dHVy
ZUlkLCBzaXplKSk7CisgICAgICAgICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywgZmx1c2goKSk7
CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlci51cGRhdGUoY2NJbXBsQ29udGV4dC5nZXQoKSwg
MCwgJmNvcGllck1vY2ssIDAsIDEwMCk7CisgICAgICAgIDo6dGVzdGluZzo6TW9jazo6VmVyaWZ5
QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmltcGxNb2NrKTsKKworICAgICAgICBpZiAodGhyZWFkTW9k
ZSA9PSBUaHJlYWRlZCAmJiBkZWZlcnJhbE1vZGUgPT0gTm9uRGVmZXJyZWQpIHsKKyAgICAgICAg
ICAgIEVYUEVDVF9DQUxMKG1haW5Nb2NrLCBkZWxldGVUZXh0dXJlKGZyb250VGV4dHVyZUlkKSk7
CisgICAgICAgICAgICBFWFBFQ1RfQ0FMTChtYWluTW9jaywgZmx1c2goKSk7CisgICAgICAgIH0K
KyAgICAgICAgYnJpZGdlLmNsZWFyKCk7CisgICAgICAgIDo6dGVzdGluZzo6TW9jazo6VmVyaWZ5
QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmltcGxNb2NrKTsKKworICAgICAgICBXZWJDb21wb3NpdG9y
OjpzaHV0ZG93bigpOworICAgIH0KK307CisKK25hbWVzcGFjZSB7CisKK1RFU1RfRihDYW52YXMy
RExheWVyQnJpZGdlVGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVTaW5nbGVUaHJlYWRlZERlZmVycmVk
KQoreworICAgIGZ1bGxMaWZlY3ljbGVUZXN0KFNpbmdsZVRocmVhZGVkLCBOb25EZWZlcnJlZCk7
Cit9CisKK1RFU1RfRihDYW52YXMyRExheWVyQnJpZGdlVGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVT
aW5nbGVUaHJlYWRlZE5vbkRlZmVycmVkKQoreworICAgIGZ1bGxMaWZlY3ljbGVUZXN0KFNpbmds
ZVRocmVhZGVkLCBEZWZlcnJlZCk7Cit9CisKK1RFU1RfRihDYW52YXMyRExheWVyQnJpZGdlVGVz
dCwgdGVzdEZ1bGxMaWZlY3ljbGVUaHJlYWRlZE5vbkRlZmVycmVkKQoreworICAgIGZ1bGxMaWZl
Y3ljbGVUZXN0KFRocmVhZGVkLCBOb25EZWZlcnJlZCk7Cit9CisKK1RFU1RfRihDYW52YXMyRExh
eWVyQnJpZGdlVGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVUaHJlYWRlZERlZmVycmVkKQoreworICAg
IGZ1bGxMaWZlY3ljbGVUZXN0KFRocmVhZGVkLCBEZWZlcnJlZCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRM
YXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZh
czJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
NTY1MTQ2YTVkNDkxOTY1YjdiMWFkMjVkNmZlNjljNTE1MTU0MGY5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAi
Q2FudmFzMkRMYXllckNocm9taXVtLmgiCi0KLSNpbmNsdWRlICJDQ1NjaGVkdWxlclRlc3RDb21t
b24uaCIKLSNpbmNsdWRlICJGYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LmgiCi0jaW5jbHVkZSAi
RmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlLmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiVGV4dHVyZUNvcGllci5o
IgotI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5o
IgotI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHku
aCIKLSNpbmNsdWRlICJjYy9DQ1RleHR1cmVMYXllckltcGwuaCIKLSNpbmNsdWRlICJjYy9DQ1Rl
eHR1cmVVcGRhdGVyLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0
LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViVGhyZWFkLmgiCi0KLSNpbmNsdWRlIDxnbW9jay9n
bW9jay5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11
c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7Ci11c2luZyB0ZXN0aW5nOjpJblNlcXVlbmNlOwot
dXNpbmcgdGVzdGluZzo6UmV0dXJuOwotdXNpbmcgdGVzdGluZzo6VGVzdDsKLQotbmFtZXNwYWNl
IHsKLQotY2xhc3MgRmFrZUNDTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3Qg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEZha2VDQ0xheWVyVHJlZUhvc3Q+IGNy
ZWF0ZSgpCi0gICAgewotICAgICAgICBPd25QdHI8RmFrZUNDTGF5ZXJUcmVlSG9zdD4gaG9zdChh
ZG9wdFB0cihuZXcgRmFrZUNDTGF5ZXJUcmVlSG9zdCkpOwotICAgICAgICBob3N0LT5pbml0aWFs
aXplKCk7Ci0gICAgICAgIHJldHVybiBob3N0LnJlbGVhc2UoKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgRmFrZUNDTGF5ZXJUcmVlSG9zdCgpCi0gICAgICAgIDogQ0NMYXllclRyZWVIb3N0KCZt
X2NsaWVudCwgQ0NTZXR0aW5ncygpKQotICAgIHsKLSAgICB9Ci0KLSAgICBGYWtlQ0NMYXllclRy
ZWVIb3N0Q2xpZW50IG1fY2xpZW50OwotfTsKLQotY2xhc3MgTW9ja0NhbnZhc0NvbnRleHQgOiBw
dWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKLXB1YmxpYzoKLSAgICBNT0NLX01FVEhP
RDAoZmx1c2gsIHZvaWQodm9pZCkpOwotfTsKLQotY2xhc3MgTW9ja1RleHR1cmVBbGxvY2F0b3Ig
OiBwdWJsaWMgVGV4dHVyZUFsbG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgTU9DS19NRVRIT0QyKGNy
ZWF0ZVRleHR1cmUsIHVuc2lnbmVkKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSkpOwotICAgIE1P
Q0tfTUVUSE9EMyhkZWxldGVUZXh0dXJlLCB2b2lkKHVuc2lnbmVkLCBjb25zdCBJbnRTaXplJiwg
R0MzRGVudW0pKTsKLX07Ci0KLWNsYXNzIE1vY2tUZXh0dXJlQ29waWVyIDogcHVibGljIFRleHR1
cmVDb3BpZXIgewotcHVibGljOgotICAgIE1PQ0tfTUVUSE9ENChjb3B5VGV4dHVyZSwgdm9pZChD
Q0dyYXBoaWNzQ29udGV4dCosIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYpKTsK
LX07Ci0KLWNsYXNzIE1vY2tUZXh0dXJlVXBsb2FkZXIgOiBwdWJsaWMgVGV4dHVyZVVwbG9hZGVy
IHsKLXB1YmxpYzoKLSAgICBNT0NLX01FVEhPRDAoaXNCdXN5LCBib29sKCkpOwotICAgIE1PQ0tf
TUVUSE9EMChiZWdpblVwbG9hZHMsIHZvaWQoKSk7Ci0gICAgTU9DS19NRVRIT0QwKGVuZFVwbG9h
ZHMsIHZvaWQoKSk7Ci0gICAgTU9DS19NRVRIT0Q1KHVwbG9hZFRleHR1cmUsIHZvaWQoQ0NHcmFw
aGljc0NvbnRleHQqLCBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgVGV4dHVyZUFsbG9j
YXRvciosIGNvbnN0IEludFJlY3QsIGNvbnN0IEludFJlY3QpKTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlCi0KLWNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QgOiBwdWJsaWMgVGVzdCB7Ci1w
cm90ZWN0ZWQ6Ci0gICAgdm9pZCBmdWxsTGlmZWN5Y2xlVGVzdChib29sIHRocmVhZGVkLCBib29s
IGRlZmVycmVkKQotICAgIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMg
YXR0cnM7Ci0KLSAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtYWluQ29udGV4dCA9
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNv
bnRleHQoYWRvcHRQdHIobmV3IE1vY2tDYW52YXNDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQz
RDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwotICAgICAgICBSZWZQdHI8Q0NHcmFwaGlj
c0NvbnRleHQ+IGNjTWFpbkNvbnRleHQgPSBDQ0dyYXBoaWNzQ29udGV4dDo6Y3JlYXRlM0QobWFp
bkNvbnRleHQpOwotICAgICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGltcGxDb250ZXh0
ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2Vi
Q29udGV4dChhZG9wdFB0cihuZXcgTW9ja0NhbnZhc0NvbnRleHQoKSksIEdyYXBoaWNzQ29udGV4
dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7Ci0gICAgICAgIFJlZlB0cjxDQ0dyYXBo
aWNzQ29udGV4dD4gY2NJbXBsQ29udGV4dCA9IENDR3JhcGhpY3NDb250ZXh0OjpjcmVhdGUzRChp
bXBsQ29udGV4dCk7Ci0KLSAgICAgICAgTW9ja0NhbnZhc0NvbnRleHQmIG1haW5Nb2NrID0gKnN0
YXRpY19jYXN0PE1vY2tDYW52YXNDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpl
eHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobWFpbkNvbnRleHQuZ2V0KCkpKTsKLSAgICAgICAg
TW9ja0NhbnZhc0NvbnRleHQmIGltcGxNb2NrID0gKnN0YXRpY19jYXN0PE1vY2tDYW52YXNDb250
ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0
M0QoaW1wbENvbnRleHQuZ2V0KCkpKTsKLQotICAgICAgICBNb2NrVGV4dHVyZUFsbG9jYXRvciBh
bGxvY2F0b3JNb2NrOwotICAgICAgICBNb2NrVGV4dHVyZUNvcGllciBjb3BpZXJNb2NrOwotICAg
ICAgICBNb2NrVGV4dHVyZVVwbG9hZGVyIHVwbG9hZGVyTW9jazsKLSAgICAgICAgQ0NUZXh0dXJl
VXBkYXRlciB1cGRhdGVyOwotCi0gICAgICAgIGNvbnN0IEludFNpemUgc2l6ZSgzMDAsIDE1MCk7
Ci0KLSAgICAgICAgT3duUHRyPFdlYlRocmVhZD4gdGhyZWFkOwotICAgICAgICBpZiAodGhyZWFk
ZWQpCi0gICAgICAgICAgICB0aHJlYWQgPSBhZG9wdFB0cihXZWJLaXQ6OlBsYXRmb3JtOjpjdXJy
ZW50KCktPmNyZWF0ZVRocmVhZCgiQ2FudmFzMkRMYXllckNocm9taXVtVGVzdCIpKTsKLSAgICAg
ICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSh0aHJlYWQuZ2V0KCkpOwotCi0gICAgICAgIE93
blB0cjxGYWtlQ0NMYXllclRyZWVIb3N0PiBsYXllclRyZWVIb3N0KEZha2VDQ0xheWVyVHJlZUhv
c3Q6OmNyZWF0ZSgpKTsKLSAgICAgICAgLy8gRm9yY2UgYW4gdXBkYXRlLCBzbyB0aGF0IHdlIGdl
dCBhIHZhbGlkIFRleHR1cmVNYW5hZ2VyLgotICAgICAgICBsYXllclRyZWVIb3N0LT51cGRhdGVM
YXllcnModXBkYXRlcik7Ci0KLSAgICAgICAgY29uc3QgV2ViR0xJZCBiYWNrVGV4dHVyZUlkID0g
MTsKLSAgICAgICAgY29uc3QgV2ViR0xJZCBmcm9udFRleHR1cmVJZCA9IDI7Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIEluU2VxdWVuY2Ugc2VxdWVuY2U7Ci0KLSAgICAgICAgICAgIC8vIFBhaW50
IGNhbnZhcyBjb250ZW50cyBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgICAgICAgICBFWFBFQ1Rf
Q0FMTChtYWluTW9jaywgZmx1c2goKSk7Ci0KLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUg
Y2FudmFzIGJhY2tpbmcgdGV4dHVyZSBpcyBkb3VibGVidWZmZXJlZCBvbmx5IHdoZW4gdXNpbmcg
dGhlIHRocmVhZGVkCi0gICAgICAgICAgICAvLyBjb21wb3NpdG9yIGFuZCBub3QgdXNpbmcgZGVm
ZXJyZWQgY2FudmFzIHJlbmRlcmluZwotICAgICAgICAgICAgaWYgKHRocmVhZGVkICYmICFkZWZl
cnJlZCkgewotICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0ZXh0dXJlIGFuZCBkbyB0aGUgY29w
eSAob24gdGhlIGltcGwgdGhyZWFkKS4KLSAgICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChhbGxv
Y2F0b3JNb2NrLCBjcmVhdGVUZXh0dXJlKHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkK
LSAgICAgICAgICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybihmcm9udFRleHR1cmVJZCkpOwot
ICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxMKGNvcGllck1vY2ssIGNvcHlUZXh0dXJlKGNjSW1w
bENvbnRleHQuZ2V0KCksIGJhY2tUZXh0dXJlSWQsIGZyb250VGV4dHVyZUlkLCBzaXplKSk7Ci0g
ICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwoaW1wbE1vY2ssIGZsdXNoKCkpOwotCi0gICAgICAg
ICAgICAgICAgLy8gVGVhcmRvd24gVGV4dHVyZU1hbmFnZXIuCi0gICAgICAgICAgICAgICAgRVhQ
RUNUX0NBTEwoYWxsb2NhdG9yTW9jaywgZGVsZXRlVGV4dHVyZShmcm9udFRleHR1cmVJZCwgc2l6
ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIFJlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNhbnZhcyA9IENhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKG1haW5Db250ZXh0LmdldCgpLCBzaXplLCBkZWZlcnJlZCA/
IERlZmVycmVkIDogTm9uRGVmZXJyZWQpOwotICAgICAgICBjYW52YXMtPnNldElzRHJhd2FibGUo
dHJ1ZSk7Ci0gICAgICAgIGNhbnZhcy0+c2V0TGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0Lmdl
dCgpKTsKLSAgICAgICAgY2FudmFzLT5zZXRCb3VuZHMoSW50U2l6ZSg2MDAsIDMwMCkpOwotICAg
ICAgICBjYW52YXMtPnNldFRleHR1cmVJZChiYWNrVGV4dHVyZUlkKTsKLQotICAgICAgICBjYW52
YXMtPnNldE5lZWRzRGlzcGxheSgpOwotICAgICAgICBFWFBFQ1RfVFJVRShjYW52YXMtPm5lZWRz
RGlzcGxheSgpKTsKLSAgICAgICAgY2FudmFzLT51cGRhdGUodXBkYXRlciwgMCk7Ci0gICAgICAg
IEVYUEVDVF9GQUxTRShjYW52YXMtPm5lZWRzRGlzcGxheSgpKTsKLSAgICAgICAgewotICAgICAg
ICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3BlZEltcGxUaHJlYWQ7Ci0KLSAgICAg
ICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gbGF5ZXJJbXBsID0gY2FudmFzLT5jcmVhdGVDQ0xh
eWVySW1wbCgpOwotICAgICAgICAgICAgRVhQRUNUX0VRKDB1LCBzdGF0aWNfY2FzdDxDQ1RleHR1
cmVMYXllckltcGwqPihsYXllckltcGwuZ2V0KCkpLT50ZXh0dXJlSWQoKSk7Ci0KLSAgICAgICAg
ICAgIHVwZGF0ZXIudXBkYXRlKGNjSW1wbENvbnRleHQuZ2V0KCksICZhbGxvY2F0b3JNb2NrLCAm
Y29waWVyTW9jaywgJnVwbG9hZGVyTW9jaywgMSk7Ci0gICAgICAgICAgICBjYW52YXMtPnB1c2hQ
cm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKLQotICAgICAgICAgICAgaWYgKHRocmVhZGVk
ICYmICFkZWZlcnJlZCkKLSAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoZnJvbnRUZXh0dXJlSWQs
IHN0YXRpY19jYXN0PENDVGV4dHVyZUxheWVySW1wbCo+KGxheWVySW1wbC5nZXQoKSktPnRleHR1
cmVJZCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoYmFj
a1RleHR1cmVJZCwgc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlTGF5ZXJJbXBsKj4obGF5ZXJJbXBsLmdl
dCgpKS0+dGV4dHVyZUlkKCkpOwotICAgICAgICB9Ci0gICAgICAgIGNhbnZhcy5jbGVhcigpOwot
ICAgICAgICBsYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1l
bW9yeVRvTGltaXQoMCk7Ci0gICAgICAgIGxheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1h
bmFnZXIoKS0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKCZhbGxvY2F0b3JNb2NrKTsKLSAgICAgICAg
bGF5ZXJUcmVlSG9zdC5jbGVhcigpOwotICAgICAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigp
OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSB7Ci0KLVRFU1RfRihDYW52YXMyRExheWVyQ2hyb21p
dW1UZXN0LCB0ZXN0RnVsbExpZmVjeWNsZVNpbmdsZVRocmVhZCkKLXsKLSAgICBmdWxsTGlmZWN5
Y2xlVGVzdChmYWxzZSwgZmFsc2UpOwotfQotCi1URVNUX0YoQ2FudmFzMkRMYXllckNocm9taXVt
VGVzdCwgdGVzdEZ1bGxMaWZlY3ljbGVUaHJlYWRlZCkKLXsKLSAgICBmdWxsTGlmZWN5Y2xlVGVz
dCh0cnVlLCBmYWxzZSk7Ci19Ci0KLVRFU1RfRihDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LCB0
ZXN0RnVsbExpZmVjeWNsZVNpbmdsZVRocmVhZERlZmVycmVkKQotewotICAgIGZ1bGxMaWZlY3lj
bGVUZXN0KGZhbHNlLCB0cnVlKTsKLX0KLQotVEVTVF9GKENhbnZhczJETGF5ZXJDaHJvbWl1bVRl
c3QsIHRlc3RGdWxsTGlmZWN5Y2xlVGhyZWFkZWREZWZlcnJlZCkKLXsKLSAgICBmdWxsTGlmZWN5
Y2xlVGVzdCh0cnVlLCB0cnVlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UK
</data>
<flag name="review"
          id="153117"
          type_id="1"
          status="+"
          setter="senorblanco"
    />
          </attachment>
      

    </bug>

</bugzilla>