<?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>53201</bug_id>
          
          <creation_ts>2011-01-26 16:26:49 -0800</creation_ts>
          <short_desc>Make GraphicsContext3D use DrawingBuffer</short_desc>
          <delta_ts>2012-01-12 19:12:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>59064</blocked>
    
    <blocked>66903</blocked>
    
    <blocked>76239</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Jeff Timanus">twiz</assigned_to>
          <cc>apatrick</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>jamesr</cc>
    
    <cc>jbauman</cc>
    
    <cc>kbr</cc>
    
    <cc>kevin.cs.oh</cc>
    
    <cc>noam</cc>
    
    <cc>senorblanco</cc>
    
    <cc>twiz</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>340568</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-01-26 16:26:49 -0800</bug_when>
    <thetext>Right now GC3D creates its own layer and manages its own multisample buffers. But this functionality is also done in DrawingBuffer (currently used by Chrome&apos;s accelerated 2D rendering). Getting rid of this code in GC3D and using a DrawingBuffer instead not only cleans up the code, but will make it easier to port WebGL to Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340623</commentid>
    <comment_count>1</comment_count>
      <attachid>80275</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-01-26 17:25:34 -0800</bug_when>
    <thetext>Created attachment 80275
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340632</commentid>
    <comment_count>2</comment_count>
      <attachid>80275</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-01-26 17:29:36 -0800</bug_when>
    <thetext>Comment on attachment 80275
Patch

This code causes 8 WebGL LayoutTests to fail. 6 tests are due to the antialiasing logic, because when AA is turned off they pass. The other 2 seem to have something to do with buffer initialization because they happen in both cases.

The tests that fail in both cases are:

fast/canvas/webgl/context-lost-restored.html
fast/canvas/webgl/uninitialized-test.html

The tests that fail on with AA on are:

fast/canvas/webgl/canvas-test.html
fast/canvas/webgl/copy-tex-image-and-sub-image-2d.html
fast/canvas/webgl/gl-pixelstorei.html
fast/canvas/webgl/invalid-passed-params.html
fast/canvas/webgl/renderbuffer-initialization.html
fast/canvas/webgl/tex-input-validation.html

I will get back to this when there is more time</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429047</commentid>
    <comment_count>3</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-06-28 11:49:36 -0700</bug_when>
    <thetext>Did you ever have time to get back to this issue?  

Were there other issues (than the reported test failures) that blocked this change?

I started to work on a similar patch, but was directed here.  Would it be reasonable for me to pick up your change, and carry it through?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440634</commentid>
    <comment_count>4</comment_count>
      <attachid>101643</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-07-21 14:22:36 -0700</bug_when>
    <thetext>Created attachment 101643
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440647</commentid>
    <comment_count>5</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-07-21 14:46:08 -0700</bug_when>
    <thetext>Patch 101643 continues this work, but only supporting Chromium.

A DrawingBuffer instance is created (only on Chromium platforms) during construction of WebGLRenderingContexts.  WebGLRenderingContext methods   conditionally forward rendering to the DrawingBuffer.

This is more of a prototype/proof of concept patch, as there are still some fairly large inconsistencies in the design:
  - DrawingBuffer has routines for constructing a platformLayer.  In Chromium, these always construct Canvas2DLayerChromium instances, which are not compatible with WebGL.  The WebGL path constructs its platform layer via GraphicsContext3D::platformLayer.  These competing access points for platform-layer construction need to be unified.
  - Because of the dependency on the DrawingBuffer owning a platformLayer (which it does not when constructed for WebGL use), I added a texture-id parameter to publishToPlatformLayer(...) so that WebGLLayerChromium::updateCompositorResources could provide an appropriate value.

I don&apos;t know the history of the design of this class, but I believe that DrawingBuffer should not be responsible for construction/management of platform layer objects.

Please review and comment on these thoughts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440712</commentid>
    <comment_count>6</comment_count>
      <attachid>101643</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-07-21 16:33:54 -0700</bug_when>
    <thetext>Comment on attachment 101643
Patch

This patch produces the following WebGL layout test (chromium-windows) failures:

Regressions: Unexpected text diff mismatch : (4)
  fast/canvas/webgl/canvas-test.html = TEXT
  fast/canvas/webgl/drawingbuffer-test.html = TEXT
  fast/canvas/webgl/gl-pixelstorei.html = TEXT
  fast/canvas/webgl/uninitialized-test.html = TEXT

Regressions: Unexpected image mismatch : (2)
  fast/canvas/webgl/css-webkit-canvas-repaint.html = IMAGE
  fast/canvas/webgl/css-webkit-canvas.html = IMAGE

Regressions: Unexpected tests timed out : (1)
  fast/canvas/webgl/premultiplyalpha-test.html = TIMEOUT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440762</commentid>
    <comment_count>7</comment_count>
      <attachid>101643</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-21 17:56:26 -0700</bug_when>
    <thetext>Comment on attachment 101643
Patch

Attachment 101643 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9208883

New failing tests:
fast/canvas/webgl/premultiplyalpha-test.html
fast/canvas/webgl/uninitialized-test.html
fast/canvas/webgl/drawingbuffer-test.html
fast/canvas/webgl/canvas-test.html
fast/canvas/webgl/css-webkit-canvas.html
fast/canvas/webgl/css-webkit-canvas-repaint.html
fast/canvas/webgl/gl-pixelstorei.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>441754</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-07-25 11:20:22 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Patch 101643 continues this work, but only supporting Chromium.
&gt; 
&gt; A DrawingBuffer instance is created (only on Chromium platforms) during construction of WebGLRenderingContexts.  WebGLRenderingContext methods   conditionally forward rendering to the DrawingBuffer.
&gt; 
&gt; This is more of a prototype/proof of concept patch, as there are still some fairly large inconsistencies in the design:
&gt;   - DrawingBuffer has routines for constructing a platformLayer.  In Chromium, these always construct Canvas2DLayerChromium instances, which are not compatible with WebGL.  The WebGL path constructs its platform layer via GraphicsContext3D::platformLayer.  These competing access points for platform-layer construction need to be unified.
&gt;   - Because of the dependency on the DrawingBuffer owning a platformLayer (which it does not when constructed for WebGL use), I added a texture-id parameter to publishToPlatformLayer(...) so that WebGLLayerChromium::updateCompositorResources could provide an appropriate value.
&gt; 
&gt; I don&apos;t know the history of the design of this class, but I believe that DrawingBuffer should not be responsible for construction/management of platform layer objects.

The fact that both GraphicsContext3D and DrawingBuffer create PlatformLayers is definitely an inconsistency that needs to be unified. The direction I would personally like to see things move is to remove the PlatformLayer from GraphicsContext3D. Conceptually, the buffer that the GraphicsContext3D draws into should be a separate concern from the context (as in true OpenGL). DrawingBuffer seems as good a place as any to host the layer, because any entity (accelerated 2D canvas, WebGL) using a DrawingBuffer will want that DrawingBuffer hosted in its own layer.

Which way would you rather see the platform layer managed?

We could add some information to the DrawingBuffer creation methods to indicate for what purpose it&apos;s being allocated, in the case that we need a different platform layer type depending on whether the DrawingBuffer is being used for the 2D canvas or WebGL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443227</commentid>
    <comment_count>9</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-07-27 17:01:08 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #5)
&gt; &gt; Patch 101643 continues this work, but only supporting Chromium.
&gt; &gt; 
&gt; &gt; A DrawingBuffer instance is created (only on Chromium platforms) during construction of WebGLRenderingContexts.  WebGLRenderingContext methods   conditionally forward rendering to the DrawingBuffer.
&gt; &gt; 
&gt; &gt; This is more of a prototype/proof of concept patch, as there are still some fairly large inconsistencies in the design:
&gt; &gt;   - DrawingBuffer has routines for constructing a platformLayer.  In Chromium, these always construct Canvas2DLayerChromium instances, which are not compatible with WebGL.  The WebGL path constructs its platform layer via GraphicsContext3D::platformLayer.  These competing access points for platform-layer construction need to be unified.
&gt; &gt;   - Because of the dependency on the DrawingBuffer owning a platformLayer (which it does not when constructed for WebGL use), I added a texture-id parameter to publishToPlatformLayer(...) so that WebGLLayerChromium::updateCompositorResources could provide an appropriate value.
&gt; &gt; 
&gt; &gt; I don&apos;t know the history of the design of this class, but I believe that DrawingBuffer should not be responsible for construction/management of platform layer objects.
&gt; 
&gt; The fact that both GraphicsContext3D and DrawingBuffer create PlatformLayers is definitely an inconsistency that needs to be unified. The direction I would personally like to see things move is to remove the PlatformLayer from GraphicsContext3D. Conceptually, the buffer that the GraphicsContext3D draws into should be a separate concern from the context (as in true OpenGL). DrawingBuffer seems as good a place as any to host the layer, because any entity (accelerated 2D canvas, WebGL) using a DrawingBuffer will want that DrawingBuffer hosted in its own layer.
&gt; 
&gt; Which way would you rather see the platform layer managed?
&gt; 
&gt; We could add some information to the DrawingBuffer creation methods to indicate for what purpose it&apos;s being allocated, in the case that we need a different platform layer type depending on whether the DrawingBuffer is being used for the 2D canvas or WebGL.

I agree with your above suggestion.  My thoughts are the following:
  - Remove platformLayer() routine from GraphicsContext3D, and delegate all platformLayer construction, and lifetime management duties to the DrawingBuffer.
  - DrawingBuffer can introduce a new virtual interface, accepted during construction, that can be used as a delegate for constructing the appropriate type of PlatformLayer.  (This should be ok, because a canvas cannot switch from 2D to 3D, so we do not have to worry about a DrawingBuffer being similarly converted.)

My concern at the moment is that this change will be invasive to the other WebKit ports.  Is there an approved work-flow when making changes that require touching multiple ports?  Should the first pass only apply to Chromium builds of WebKit, at the potential expense of clarity of software design?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444247</commentid>
    <comment_count>10</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-07-29 21:23:06 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; Patch 101643 continues this work, but only supporting Chromium.
&gt; &gt; &gt; 
&gt; &gt; &gt; A DrawingBuffer instance is created (only on Chromium platforms) during construction of WebGLRenderingContexts.  WebGLRenderingContext methods   conditionally forward rendering to the DrawingBuffer.
&gt; &gt; &gt; 
&gt; &gt; &gt; This is more of a prototype/proof of concept patch, as there are still some fairly large inconsistencies in the design:
&gt; &gt; &gt;   - DrawingBuffer has routines for constructing a platformLayer.  In Chromium, these always construct Canvas2DLayerChromium instances, which are not compatible with WebGL.  The WebGL path constructs its platform layer via GraphicsContext3D::platformLayer.  These competing access points for platform-layer construction need to be unified.
&gt; &gt; &gt;   - Because of the dependency on the DrawingBuffer owning a platformLayer (which it does not when constructed for WebGL use), I added a texture-id parameter to publishToPlatformLayer(...) so that WebGLLayerChromium::updateCompositorResources could provide an appropriate value.
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t know the history of the design of this class, but I believe that DrawingBuffer should not be responsible for construction/management of platform layer objects.
&gt; &gt; 
&gt; &gt; The fact that both GraphicsContext3D and DrawingBuffer create PlatformLayers is definitely an inconsistency that needs to be unified. The direction I would personally like to see things move is to remove the PlatformLayer from GraphicsContext3D. Conceptually, the buffer that the GraphicsContext3D draws into should be a separate concern from the context (as in true OpenGL). DrawingBuffer seems as good a place as any to host the layer, because any entity (accelerated 2D canvas, WebGL) using a DrawingBuffer will want that DrawingBuffer hosted in its own layer.
&gt; &gt; 
&gt; &gt; Which way would you rather see the platform layer managed?
&gt; &gt; 
&gt; &gt; We could add some information to the DrawingBuffer creation methods to indicate for what purpose it&apos;s being allocated, in the case that we need a different platform layer type depending on whether the DrawingBuffer is being used for the 2D canvas or WebGL.
&gt; 
&gt; I agree with your above suggestion.  My thoughts are the following:
&gt;   - Remove platformLayer() routine from GraphicsContext3D, and delegate all platformLayer construction, and lifetime management duties to the DrawingBuffer.
&gt;   - DrawingBuffer can introduce a new virtual interface, accepted during construction, that can be used as a delegate for constructing the appropriate type of PlatformLayer.  (This should be ok, because a canvas cannot switch from 2D to 3D, so we do not have to worry about a DrawingBuffer being similarly converted.)
&gt; 
&gt; My concern at the moment is that this change will be invasive to the other WebKit ports.  Is there an approved work-flow when making changes that require touching multiple ports?  Should the first pass only apply to Chromium builds of WebKit, at the potential expense of clarity of software design?

That sounds like a good plan. You could #ifndef PLATFORM(CHROMIUM) the removal of platformLayer() from GraphicsContext3D, for example. Once you have everything working you could advertise the new facility to the other ports. DrawingBuffer doesn&apos;t currently have much if any use outside of the Chromium port at the moment, so you don&apos;t need to worry as much about breakage there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446819</commentid>
    <comment_count>11</comment_count>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-08-04 15:12:53 -0700</bug_when>
    <thetext>Jeff, could you also make sure that fast/canvas/buffer-preserve-test.html still works before you check anything in (or at least before you call this project finished)? It doesn&apos;t work properly in DRT (issues with the webgraphicscontext implementation), so you&apos;ll need to run it manually in chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449169</commentid>
    <comment_count>12</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-08-10 08:37:14 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Jeff, could you also make sure that fast/canvas/buffer-preserve-test.html still works before you check anything in (or at least before you call this project finished)? It doesn&apos;t work properly in DRT (issues with the webgraphicscontext implementation), so you&apos;ll need to run it manually in chromium.

I&apos;ve managed to fix all of the layout test failures mentioned above.  I&apos;m looking at the buffer-preserve-test.html, but there is no layout test with that name under fast/canvas.  

Did you mean the following test?
/third_party/webgl_conformance/conformance/buffer-preserve-test.html

Note that it is failing with my change, so I&apos;m investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451870</commentid>
    <comment_count>13</comment_count>
      <attachid>104090</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-08-16 14:33:07 -0700</bug_when>
    <thetext>Created attachment 104090
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451874</commentid>
    <comment_count>14</comment_count>
      <attachid>104090</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-16 14:36:42 -0700</bug_when>
    <thetext>Comment on attachment 104090
Patch

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

There&apos;s lots of code in here behind #if 0.  Is this not quite finished? R- since this isn&apos;t ready to land, but perhaps you were looking for initial feedback?

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:599
&gt; +#if 0  // TODO:  Why is this code here?
&gt;      if (!m_markedCanvasDirty &amp;&amp; !m_layerCleared)
&gt;          return;
&gt; +#endif

you don&apos;t mean to commit this, do you?

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:77
&gt; +
&gt; +#if 0
&gt; +    updatePlatformTexture();
&gt; +#endif
&gt; +

is this meant just for testing or something?

&gt; Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp:89
&gt; +#if 0
&gt; +void CanvasLayerChromium::setTextureChanged()
&gt; +{
&gt; +    m_textureChanged = true;
&gt; +}
&gt; +#endif

why the #if 0?

&gt; Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp:110
&gt; +#if 0

huh?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451884</commentid>
    <comment_count>15</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-08-16 14:51:16 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Created an attachment (id=104090) [details]
&gt; Patch

Note:  This patch isn&apos;t quite complete.  I had all of the layout tests passing, along with the WebGL conformance tests, but the removal of copyTextureToParentTextureCHROMIUM introduced non trivial regressions.

Please do not remark on style issues, as I will resolve them in the next upload.  This patch is just to demonstrate the high level approach.

There are a few points that I&apos;d like to have some feedback on at this point, so I know that I&apos;ve taken things in the right direction.
  - Does the new compositor model of directly rendering from the PlatformLayer&apos;s texture work for WebGL?  Are there constraints that will not allow this model?  I briefly tried removing the explicit m_textureId from WebGLPlatformLayer, but observed regressions.
  - Because I want to remove the call to GraphicsContext3D::prepareTexture, and replace it with DrawingBuffer::publishToPlatformLayer, the WebGL path will now need to follow the same compositing path as Canvas2D.  Since copyTextureToParentTextureCHROMIUM has been removed, is it sufficient to replace the previous copy call with a glCopyTexImage2D from the DrawingBuffer&apos;s fbo to the PlatformLayer&apos;s texture?  This is the approach that I&apos;m considering moving forward with.
  - All of the readBackFramebuffer(...) calls were always reading from fbo 0, which is totally incorrect when the target of the rendering is to a fbo managed by the drawing buffer.  As a stop-gap, I added a bindDefaultBackbuffer argument to this set of routines to specify if the read should be from the true back-buffer, or the currently bound fbo.  This change requires a parallel change in chrome.  See first-pass CL:  http://codereview.chromium.org/7669002

Input on these concerns, or other architectural issues that I haven&apos;t yet observed is much appreciated!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451885</commentid>
    <comment_count>16</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-08-16 14:52:06 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 104090 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104090&amp;action=review
&gt; 
&gt; There&apos;s lots of code in here behind #if 0.  Is this not quite finished? R- since this isn&apos;t ready to land, but perhaps you were looking for initial feedback?

Yes, this patch is just for high-level review and feedback.  I left some #if 0&apos;s in there because I&apos;m not certain if this is the correct final approach.

Will use the --no-review flag the next time I upload a patch like this.

&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:599
&gt; &gt; +#if 0  // TODO:  Why is this code here?
&gt; &gt;      if (!m_markedCanvasDirty &amp;&amp; !m_layerCleared)
&gt; &gt;          return;
&gt; &gt; +#endif
&gt; 
&gt; you don&apos;t mean to commit this, do you?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:77
&gt; &gt; +
&gt; &gt; +#if 0
&gt; &gt; +    updatePlatformTexture();
&gt; &gt; +#endif
&gt; &gt; +
&gt; 
&gt; is this meant just for testing or something?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp:89
&gt; &gt; +#if 0
&gt; &gt; +void CanvasLayerChromium::setTextureChanged()
&gt; &gt; +{
&gt; &gt; +    m_textureChanged = true;
&gt; &gt; +}
&gt; &gt; +#endif
&gt; 
&gt; why the #if 0?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp:110
&gt; &gt; +#if 0
&gt; 
&gt; huh?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452563</commentid>
    <comment_count>17</comment_count>
      <attachid>104090</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-17 14:16:01 -0700</bug_when>
    <thetext>Comment on attachment 104090
Patch

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

The general direction looks good. A couple of high-level comments. First, we need to make sure that WebGL applications can&apos;t query the framebuffer in the DrawingBuffer or any of its framebuffer or renderbuffer attachments. This may involve some more logic in WebGLRenderingContext::getParameter -- not 100% sure. Also, we need to make sure that we are not unnecessarily resizing the command buffer service&apos;s default frame buffer to anything except a size of 1x1. I am pretty sure that more changes will be needed beyond what you&apos;ve got here to avoid this.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:1144
&gt; +            m_drawingBuffer-&gt;commit();

jbauman recently fixed bugs in Chromium&apos;s command buffer service-side code where copyTexImage2D, readPixels and a couple of other entry points were incorrectly committing the frame buffer to the compositor, causing the (cleared) WebGL back buffer to be displayed to the screen after printing. We need to make sure not to regress this functionality. The previously needed fix was to resolve the multisampled frame buffer to a temporary buffer rather than the buffer shared with the compositor. Another part of the fix was to be able to capture the compositor&apos;s copy of the results for printing.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:479
&gt; +    // The Chromium port manages PlatformLayer instaces via the DrawingBuffer
&gt; +    // class.
&gt; +    PlatformLayer* platformLayer() const { return 0; }

Then shouldn&apos;t this change be bracketed with #if PLATFORM(CHROMIUM)?

&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:167
&gt; +            m_platformLayer = WebGLLayerChromium::create(0);

ASSERT that m_usage == DrawingBufferUsageWebGL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453988</commentid>
    <comment_count>18</comment_count>
      <attachid>104090</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-19 12:28:48 -0700</bug_when>
    <thetext>Comment on attachment 104090
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:145
&gt; +        m_context-&gt;activeTexture(GraphicsContext3D::TEXTURE0);
&gt; +        m_context-&gt;bindTexture(GraphicsContext3D::TEXTURE_2D, parentTexture);

Do we need to worry about restoring the formerly-bound and active textures for WebGL here?  Or do they save their own state somewhere else?

&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:146
&gt; +        m_context-&gt;copyTexImage2D(GraphicsContext3D::TEXTURE_2D,

I know it&apos;s not new to this patch, but it&apos;d be really nice to try to eliminate this copy for WebGL, just as we did for 2D canvas.  Not sure how to go about that.

&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:155
&gt; +    if (multisampleBound)

Nit:  could probably call multisample() again here instead of stashing it in a local (it&apos;s cheap).

&gt; Source/WebCore/platform/graphics/chromium/WebGLLayerChromium.cpp:101
&gt; +        context-&gt;finish();

I think flush() may now have fence semantics, and may be usable here.  Check with jbates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454012</commentid>
    <comment_count>19</comment_count>
      <attachid>104090</attachid>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-08-19 13:12:07 -0700</bug_when>
    <thetext>Comment on attachment 104090
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:146
&gt;&gt; +        m_context-&gt;copyTexImage2D(GraphicsContext3D::TEXTURE_2D,
&gt; 
&gt; I know it&apos;s not new to this patch, but it&apos;d be really nice to try to eliminate this copy for WebGL, just as we did for 2D canvas.  Not sure how to go about that.

In theory we don&apos;t need to do a copy when preserveDrawingBuffer=true, and when it&apos;s false we could try flipping the drawing buffer texture with the compositor texture.

However, I&apos;m not sure how this copyTexImage2D is supposed to work. I thought that WebGL contexts are in a different share group from the compositor, so they&apos;re in different namespaces and can&apos;t bind the parent texture to change it. Has that changed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455156</commentid>
    <comment_count>20</comment_count>
      <attachid>104090</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-22 19:19:22 -0700</bug_when>
    <thetext>Comment on attachment 104090
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:146
&gt;&gt;&gt; +        m_context-&gt;copyTexImage2D(GraphicsContext3D::TEXTURE_2D,
&gt;&gt; 
&gt;&gt; I know it&apos;s not new to this patch, but it&apos;d be really nice to try to eliminate this copy for WebGL, just as we did for 2D canvas.  Not sure how to go about that.
&gt; 
&gt; In theory we don&apos;t need to do a copy when preserveDrawingBuffer=true, and when it&apos;s false we could try flipping the drawing buffer texture with the compositor texture.
&gt; 
&gt; However, I&apos;m not sure how this copyTexImage2D is supposed to work. I thought that WebGL contexts are in a different share group from the compositor, so they&apos;re in different namespaces and can&apos;t bind the parent texture to change it. Has that changed?

This is a good point. Nothing has changed in this regard, so there is likely a problem here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455159</commentid>
    <comment_count>21</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-22 19:26:28 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 104090 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104090&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:146
&gt; &gt;&gt;&gt; +        m_context-&gt;copyTexImage2D(GraphicsContext3D::TEXTURE_2D,
&gt; &gt;&gt; 
&gt; &gt;&gt; I know it&apos;s not new to this patch, but it&apos;d be really nice to try to eliminate this copy for WebGL, just as we did for 2D canvas.  Not sure how to go about that.
&gt; &gt; 
&gt; &gt; In theory we don&apos;t need to do a copy when preserveDrawingBuffer=true, and when it&apos;s false we could try flipping the drawing buffer texture with the compositor texture.
&gt; &gt; 
&gt; &gt; However, I&apos;m not sure how this copyTexImage2D is supposed to work. I thought that WebGL contexts are in a different share group from the compositor, so they&apos;re in different namespaces and can&apos;t bind the parent texture to change it. Has that changed?
&gt; 
&gt; This is a good point. Nothing has changed in this regard, so there is likely a problem here.

That matches my understanding.  In chromium, WebGL contexts are not in the same share group as the compositor and so you cannot CopyTexImage2D between them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455161</commentid>
    <comment_count>22</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-22 19:46:57 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 104090 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104090&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:146
&gt; &gt;&gt;&gt; +        m_context-&gt;copyTexImage2D(GraphicsContext3D::TEXTURE_2D,
&gt; &gt;&gt; 
&gt; &gt;&gt; I know it&apos;s not new to this patch, but it&apos;d be really nice to try to eliminate this copy for WebGL, just as we did for 2D canvas.  Not sure how to go about that.
&gt; &gt; 
&gt; &gt; In theory we don&apos;t need to do a copy when preserveDrawingBuffer=true, and when it&apos;s false we could try flipping the drawing buffer texture with the compositor texture.
&gt; &gt; 
&gt; &gt; However, I&apos;m not sure how this copyTexImage2D is supposed to work. I thought that WebGL contexts are in a different share group from the compositor, so they&apos;re in different namespaces and can&apos;t bind the parent texture to change it. Has that changed?
&gt; 
&gt; This is a good point. Nothing has changed in this regard, so there is likely a problem here.

I had thought that there was one &quot;special&quot; texture that was shared by both WebGL and the compositor in the service side of the command buffers.  Isn&apos;t that how the copy in the SwapBuffers implementation works in the current implementation?  Or is there some other magic there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455164</commentid>
    <comment_count>23</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-22 19:53:17 -0700</bug_when>
    <thetext>Right, that&apos;s how GraphicsContext3D::prepareTexture().  That is done using 100% service-side magic, not share groups (which are exposed client side).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456150</commentid>
    <comment_count>24</comment_count>
      <attachid>104090</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-08-24 09:59:08 -0700</bug_when>
    <thetext>Comment on attachment 104090
Patch

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

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:1144
&gt;&gt; +            m_drawingBuffer-&gt;commit();
&gt; 
&gt; jbauman recently fixed bugs in Chromium&apos;s command buffer service-side code where copyTexImage2D, readPixels and a couple of other entry points were incorrectly committing the frame buffer to the compositor, causing the (cleared) WebGL back buffer to be displayed to the screen after printing. We need to make sure not to regress this functionality. The previously needed fix was to resolve the multisampled frame buffer to a temporary buffer rather than the buffer shared with the compositor. Another part of the fix was to be able to capture the compositor&apos;s copy of the results for printing.

The drawing-buffer is doing a commit to a separate FBO that is managed entirely by the the drawing-buffer.  This commit should not be pushing contents to the compositor.

The introduction of these drawing buffer commits should not change the logic present in the service side handling of copyTexImage2D, readPixels or others.

Is there a bug I can look for to double-check the printing repro-steps, just to double check?

&gt;&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:479
&gt;&gt; +    PlatformLayer* platformLayer() const { return 0; }
&gt; 
&gt; Then shouldn&apos;t this change be bracketed with #if PLATFORM(CHROMIUM)?

Yes.  It should be bracketed with the #if. 

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:145
&gt;&gt; +        m_context-&gt;bindTexture(GraphicsContext3D::TEXTURE_2D, parentTexture);
&gt; 
&gt; Do we need to worry about restoring the formerly-bound and active textures for WebGL here?  Or do they save their own state somewhere else?

Good point.

I added this code in an attempt to replace the previous calls to copyTextureToParentTextureCHROMIUM.  

You are right that this code is incorrect in that it does not properly save/restore the active texture.  I do not believe that the state is saved elsewhere.

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:146
&gt;&gt;&gt;&gt;&gt;&gt; +        m_context-&gt;copyTexImage2D(GraphicsContext3D::TEXTURE_2D,
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; I know it&apos;s not new to this patch, but it&apos;d be really nice to try to eliminate this copy for WebGL, just as we did for 2D canvas.  Not sure how to go about that.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; In theory we don&apos;t need to do a copy when preserveDrawingBuffer=true, and when it&apos;s false we could try flipping the drawing buffer texture with the compositor texture.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; However, I&apos;m not sure how this copyTexImage2D is supposed to work. I thought that WebGL contexts are in a different share group from the compositor, so they&apos;re in different namespaces and can&apos;t bind the parent texture to change it. Has that changed?
&gt;&gt;&gt; 
&gt;&gt;&gt; This is a good point. Nothing has changed in this regard, so there is likely a problem here.
&gt;&gt; 
&gt;&gt; That matches my understanding.  In chromium, WebGL contexts are not in the same share group as the compositor and so you cannot CopyTexImage2D between them.
&gt; 
&gt; I had thought that there was one &quot;special&quot; texture that was shared by both WebGL and the compositor in the service side of the command buffers.  Isn&apos;t that how the copy in the SwapBuffers implementation works in the current implementation?  Or is there some other magic there?

If the copyTexImage2D approach is not suitable, would it be reasonable to re-introduce copyTextureToParentTextureCHROMIUM?

If not, what do we need to do to allow either this copyTexImage2D to succeed, or to bypass the copy entirely, and have the compositor read from the DrawingBuffer&apos;s FBO, as presently happens for Canvas2D content?

Just to note, before copyTextureToParentTextureCHROMIUM was deprecated and removed, I had all of the tests (layout + conformance) passing.

&gt;&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:155
&gt;&gt; +    if (multisampleBound)
&gt; 
&gt; Nit:  could probably call multisample() again here instead of stashing it in a local (it&apos;s cheap).

An easy change.  Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:167
&gt;&gt; +            m_platformLayer = WebGLLayerChromium::create(0);
&gt; 
&gt; ASSERT that m_usage == DrawingBufferUsageWebGL?

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/WebGLLayerChromium.cpp:101
&gt;&gt; +        context-&gt;finish();
&gt; 
&gt; I think flush() may now have fence semantics, and may be usable here.  Check with jbates.

This code is in this form because I had initially tried to unify the texture management between Canvas2DLayerChromium, and WebGLLayerChromium.  Both were performing similar operations to prepare the parent texture, except that the Canvas2DLayerChromium implementation performed the extra active texture and flush calls. 

Because the Canvas2DLayer no longer performs any of this setup, and to minimize the changes introduced by this patch, I&apos;ll revert the texture preparation code here to its previous state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456520</commentid>
    <comment_count>25</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-24 16:22:43 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:146
&gt; &gt;&gt;&gt;&gt;&gt;&gt; +        m_context-&gt;copyTexImage2D(GraphicsContext3D::TEXTURE_2D,
&gt; &gt;&gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt;&gt; I know it&apos;s not new to this patch, but it&apos;d be really nice to try to eliminate this copy for WebGL, just as we did for 2D canvas.  Not sure how to go about that.
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt; In theory we don&apos;t need to do a copy when preserveDrawingBuffer=true, and when it&apos;s false we could try flipping the drawing buffer texture with the compositor texture.
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt; However, I&apos;m not sure how this copyTexImage2D is supposed to work. I thought that WebGL contexts are in a different share group from the compositor, so they&apos;re in different namespaces and can&apos;t bind the parent texture to change it. Has that changed?
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; This is a good point. Nothing has changed in this regard, so there is likely a problem here.
&gt; &gt;&gt; 
&gt; &gt;&gt; That matches my understanding.  In chromium, WebGL contexts are not in the same share group as the compositor and so you cannot CopyTexImage2D between them.
&gt; &gt; 
&gt; &gt; I had thought that there was one &quot;special&quot; texture that was shared by both WebGL and the compositor in the service side of the command buffers.  Isn&apos;t that how the copy in the SwapBuffers implementation works in the current implementation?  Or is there some other magic there?
&gt; 
&gt; If the copyTexImage2D approach is not suitable, would it be reasonable to re-introduce copyTextureToParentTextureCHROMIUM?
&gt; 
&gt; If not, what do we need to do to allow either this copyTexImage2D to succeed, or to bypass the copy entirely, and have the compositor read from the DrawingBuffer&apos;s FBO, as presently happens for Canvas2D content?
&gt; 
&gt; Just to note, before copyTextureToParentTextureCHROMIUM was deprecated and removed, I had all of the tests (layout + conformance) passing.
&gt; 

copyTextureToParentTextureCHROMIUM is not ideal since it implies at least one unnecessary texture copy in the multisampled case, and potentially an extra copy in all cases.

To back up a bit, the issue here is all about resource sharing between the WebGL context and the compositor context.  Different implementations of GraphicsContext3D may handle this in different ways, but in chromium today we do not support arbitrary resource sharing between these two.  prepareTexture() is wired up in chromium to do a texture copy (or multisample resolve) to a texture that is exposed to the compositor context.  In that sense, it&apos;s a form of service-side &quot;magic&quot; that allows a very limited form of resource sharing.  copyTextureToParentTextureCHROMIUM() was another form of service-side magic to support sharing (via a copy) a given texture with a texture in the compositor texture.  The approach was fundamentally broken, however, due to fact that it relied on a parent-&gt;child relationship between canvas contexts and compositor contexts, but that doesn&apos;t exist in reality.  A given WebGL &lt;canvas&gt; can migrate between different tabs, or between a window and a popup, which use different compositor contexts.

We could expose another entry point to allow sharing of a specific resource and a given compositor context resource.  For WebGL we only need this for framebuffer 0 so something like prepareTexture() makes sense.  I&apos;m not completely sure what the best form of this API is, but whatever it is it shouldn&apos;t force us to do extra copies and it definitely cannot rely on a fixed parent-child relationship.

HTH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456879</commentid>
    <comment_count>26</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-25 08:46:58 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt;...
&gt; To back up a bit, the issue here is all about resource sharing between the WebGL context and the compositor context.  Different implementations of GraphicsContext3D may handle this in different ways, but in chromium today we do not support arbitrary resource sharing between these two.  prepareTexture() is wired up in chromium to do a texture copy (or multisample resolve) to a texture that is exposed to the compositor context.  In that sense, it&apos;s a form of service-side &quot;magic&quot; that allows a very limited form of resource sharing.  copyTextureToParentTextureCHROMIUM() was another form of service-side magic to support sharing (via a copy) a given texture with a texture in the compositor texture.  The approach was fundamentally broken, however, due to fact that it relied on a parent-&gt;child relationship between canvas contexts and compositor contexts, but that doesn&apos;t exist in reality.  A given WebGL &lt;canvas&gt; can migrate between different tabs, or between a window and a popup, which use different compositor contexts.
&gt; 
&gt; We could expose another entry point to allow sharing of a specific resource and a given compositor context resource.  For WebGL we only need this for framebuffer 0 so something like prepareTexture() makes sense.  I&apos;m not completely sure what the best form of this API is, but whatever it is it shouldn&apos;t force us to do extra copies and it definitely cannot rely on a fixed parent-child relationship.

I&apos;ve never liked the name &quot;prepareTexture&quot;. Prepare it for what? From its use (at least in the Mac implementation), it ids used to get the render buffer into a state where it can be composited. This includes resolving in the AA case. In the Mac implementation, this also includes copying the frame buffer into the shared texture, but that&apos;s all Mac specific and internal. So it seems like we shouldn&apos;t even use the word &quot;texture&quot;. It would probably be better named &quot;prepareDrawingBufferForCompositing&quot; and it should be a method on DrawingBuffer rather than GC3D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456884</commentid>
    <comment_count>27</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-25 08:49:42 -0700</bug_when>
    <thetext>&gt; I&apos;ve never liked the name &quot;prepareTexture&quot;. Prepare it for what? From its use (at least in the Mac implementation), it ids used to get the render buffer into a state where it can be composited. This includes resolving in the AA case. In the Mac implementation, this also includes copying the frame buffer into the shared texture, but that&apos;s all Mac specific and internal. So it seems like we shouldn&apos;t even use the word &quot;texture&quot;. It would probably be better named &quot;prepareDrawingBufferForCompositing&quot; and it should be a method on DrawingBuffer rather than GC3D.

And of course if it&apos;s moved to DrawingBuffer, it might be better named &quot;prepareForCompositing&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456942</commentid>
    <comment_count>28</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-25 10:09:45 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; &gt; I&apos;ve never liked the name &quot;prepareTexture&quot;. Prepare it for what? From its use (at least in the Mac implementation), it ids used to get the render buffer into a state where it can be composited. This includes resolving in the AA case. In the Mac implementation, this also includes copying the frame buffer into the shared texture, but that&apos;s all Mac specific and internal. So it seems like we shouldn&apos;t even use the word &quot;texture&quot;. It would probably be better named &quot;prepareDrawingBufferForCompositing&quot; and it should be a method on DrawingBuffer rather than GC3D.
&gt; 
&gt; And of course if it&apos;s moved to DrawingBuffer, it might be better named &quot;prepareForCompositing&quot;.

That makes more sense.  I&apos;m not sure where the name &apos;prepareTexture&apos; came from, but as I understand it&apos;s a funny way to spell SwapBuffers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457074</commentid>
    <comment_count>29</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-08-25 12:46:26 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; &gt; I&apos;ve never liked the name &quot;prepareTexture&quot;. Prepare it for what? From its use (at least in the Mac implementation), it ids used to get the render buffer into a state where it can be composited. This includes resolving in the AA case. In the Mac implementation, this also includes copying the frame buffer into the shared texture, but that&apos;s all Mac specific and internal. So it seems like we shouldn&apos;t even use the word &quot;texture&quot;. It would probably be better named &quot;prepareDrawingBufferForCompositing&quot; and it should be a method on DrawingBuffer rather than GC3D.
&gt; &gt; 
&gt; &gt; And of course if it&apos;s moved to DrawingBuffer, it might be better named &quot;prepareForCompositing&quot;.
&gt; 
&gt; That makes more sense.  I&apos;m not sure where the name &apos;prepareTexture&apos; came from, but as I understand it&apos;s a funny way to spell SwapBuffers.

(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; &gt; I&apos;ve never liked the name &quot;prepareTexture&quot;. Prepare it for what? From its use (at least in the Mac implementation), it ids used to get the render buffer into a state where it can be composited. This includes resolving in the AA case. In the Mac implementation, this also includes copying the frame buffer into the shared texture, but that&apos;s all Mac specific and internal. So it seems like we shouldn&apos;t even use the word &quot;texture&quot;. It would probably be better named &quot;prepareDrawingBufferForCompositing&quot; and it should be a method on DrawingBuffer rather than GC3D.
&gt; &gt; 
&gt; &gt; And of course if it&apos;s moved to DrawingBuffer, it might be better named &quot;prepareForCompositing&quot;.
&gt; 
&gt; That makes more sense.  I&apos;m not sure where the name &apos;prepareTexture&apos; came from, but as I understand it&apos;s a funny way to spell SwapBuffers.

(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:146
&gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; +        m_context-&gt;copyTexImage2D(GraphicsContext3D::TEXTURE_2D,
&gt; &gt; &gt;&gt;&gt;&gt;&gt; 
&gt; &gt; &gt;&gt;&gt;&gt;&gt; I know it&apos;s not new to this patch, but it&apos;d be really nice to try to eliminate this copy for WebGL, just as we did for 2D canvas.  Not sure how to go about that.
&gt; &gt; &gt;&gt;&gt;&gt; 
&gt; &gt; &gt;&gt;&gt;&gt; In theory we don&apos;t need to do a copy when preserveDrawingBuffer=true, and when it&apos;s false we could try flipping the drawing buffer texture with the compositor texture.
&gt; &gt; &gt;&gt;&gt;&gt; 
&gt; &gt; &gt;&gt;&gt;&gt; However, I&apos;m not sure how this copyTexImage2D is supposed to work. I thought that WebGL contexts are in a different share group from the compositor, so they&apos;re in different namespaces and can&apos;t bind the parent texture to change it. Has that changed?
&gt; &gt; &gt;&gt;&gt; 
&gt; &gt; &gt;&gt;&gt; This is a good point. Nothing has changed in this regard, so there is likely a problem here.
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; That matches my understanding.  In chromium, WebGL contexts are not in the same share group as the compositor and so you cannot CopyTexImage2D between them.
&gt; &gt; &gt; 
&gt; &gt; &gt; I had thought that there was one &quot;special&quot; texture that was shared by both WebGL and the compositor in the service side of the command buffers.  Isn&apos;t that how the copy in the SwapBuffers implementation works in the current implementation?  Or is there some other magic there?
&gt; &gt; 
&gt; &gt; If the copyTexImage2D approach is not suitable, would it be reasonable to re-introduce copyTextureToParentTextureCHROMIUM?
&gt; &gt; 
&gt; &gt; If not, what do we need to do to allow either this copyTexImage2D to succeed, or to bypass the copy entirely, and have the compositor read from the DrawingBuffer&apos;s FBO, as presently happens for Canvas2D content?
&gt; &gt; 
&gt; &gt; Just to note, before copyTextureToParentTextureCHROMIUM was deprecated and removed, I had all of the tests (layout + conformance) passing.
&gt; &gt; 
&gt; 
&gt; copyTextureToParentTextureCHROMIUM is not ideal since it implies at least one unnecessary texture copy in the multisampled case, and potentially an extra copy in all cases.
&gt; 
&gt; To back up a bit, the issue here is all about resource sharing between the WebGL context and the compositor context.  Different implementations of GraphicsContext3D may handle this in different ways, but in chromium today we do not support arbitrary resource sharing between these two.  prepareTexture() is wired up in chromium to do a texture copy (or multisample resolve) to a texture that is exposed to the compositor context.  In that sense, it&apos;s a form of service-side &quot;magic&quot; that allows a very limited form of resource sharing.  copyTextureToParentTextureCHROMIUM() was another form of service-side magic to support sharing (via a copy) a given texture with a texture in the compositor texture.  The approach was fundamentally broken, however, due to fact that it relied on a parent-&gt;child relationship between canvas contexts and compositor contexts, but that doesn&apos;t exist in reality.  A given WebGL &lt;canvas&gt; can migrate between different tabs, or between a window and a popup, which use different compositor contexts.
&gt; 
&gt; We could expose another entry point to allow sharing of a specific resource and a given compositor context resource.  For WebGL we only need this for framebuffer 0 so something like prepareTexture() makes sense.  I&apos;m not completely sure what the best form of this API is, but whatever it is it shouldn&apos;t force us to do extra copies and it definitely cannot rely on a fixed parent-child relationship.

Thanks for the background, James.

I revisited the mechanics of the chromium swap-buffers implementation yesterday, hoping to see a clear way to push the contents from WebGL to the compositor, and I agree with your remarks on the service-side magic of swap-buffers, and the old copyTextureToParentTextureCHROMIUM.

Because I have been nursing this change for some time, I would like to get it in.  I would like to investigate and make a proposal for the sharing entry point that you suggest.  Has existing work already started on this?  Are there concerns relating to how the layer would be structured that haven&apos;t been touched upon already by this patch?  I don&apos;t want to tread on existing work that is already on-going.

On the other hand, I discussed this briefly with Vangelis, and he mentioned that we may want to hold off on making these changes until the threaded compositor is in place.  Can you comment on that suggestion?  Would the conversion to a threaded compositor have an impact on the design of a resource-sharing API/layer?

&gt; 
&gt; HTH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457076</commentid>
    <comment_count>30</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-25 12:52:41 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; To back up a bit, the issue here is all about resource sharing between the WebGL context and the compositor context.  Different implementations of GraphicsContext3D may handle this in different ways, but in chromium today we do not support arbitrary resource sharing between these two.  prepareTexture() is wired up in chromium to do a texture copy (or multisample resolve) to a texture that is exposed to the compositor context.  In that sense, it&apos;s a form of service-side &quot;magic&quot; that allows a very limited form of resource sharing.  copyTextureToParentTextureCHROMIUM() was another form of service-side magic to support sharing (via a copy) a given texture with a texture in the compositor texture.  The approach was fundamentally broken, however, due to fact that it relied on a parent-&gt;child relationship between canvas contexts and compositor contexts, but that doesn&apos;t exist in reality.  A given WebGL &lt;canvas&gt; can migrate between different tabs, or between a window and a popup, which use different compositor contexts.
&gt; &gt; 
&gt; &gt; We could expose another entry point to allow sharing of a specific resource and a given compositor context resource.  For WebGL we only need this for framebuffer 0 so something like prepareTexture() makes sense.  I&apos;m not completely sure what the best form of this API is, but whatever it is it shouldn&apos;t force us to do extra copies and it definitely cannot rely on a fixed parent-child relationship.
&gt; 
&gt; Thanks for the background, James.
&gt; 
&gt; I revisited the mechanics of the chromium swap-buffers implementation yesterday, hoping to see a clear way to push the contents from WebGL to the compositor, and I agree with your remarks on the service-side magic of swap-buffers, and the old copyTextureToParentTextureCHROMIUM.
&gt; 
&gt; Because I have been nursing this change for some time, I would like to get it in.  I would like to investigate and make a proposal for the sharing entry point that you suggest.  Has existing work already started on this?  Are there concerns relating to how the layer would be structured that haven&apos;t been touched upon already by this patch?  I don&apos;t want to tread on existing work that is already on-going.

Well this patch just straight up does not work in chromium today, WebGL and the compositor are not in a share group so you can&apos;t copy a texture to another.  We need a new entry point.  So no, we can not just put this in.

&gt; 
&gt; On the other hand, I discussed this briefly with Vangelis, and he mentioned that we may want to hold off on making these changes until the threaded compositor is in place.  Can you comment on that suggestion?  Would the conversion to a threaded compositor have an impact on the design of a resource-sharing API/layer?

It has implications but I think they are solvable.  The place to start here is to figure out what API we need on GraphicsContext3D to enable resource sharing with the compositor.


&gt; 
&gt; &gt; 
&gt; &gt; HTH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457080</commentid>
    <comment_count>31</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-08-25 13:01:24 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; (In reply to comment #28)
&gt; &gt; &gt; To back up a bit, the issue here is all about resource sharing between the WebGL context and the compositor context.  Different implementations of GraphicsContext3D may handle this in different ways, but in chromium today we do not support arbitrary resource sharing between these two.  prepareTexture() is wired up in chromium to do a texture copy (or multisample resolve) to a texture that is exposed to the compositor context.  In that sense, it&apos;s a form of service-side &quot;magic&quot; that allows a very limited form of resource sharing.  copyTextureToParentTextureCHROMIUM() was another form of service-side magic to support sharing (via a copy) a given texture with a texture in the compositor texture.  The approach was fundamentally broken, however, due to fact that it relied on a parent-&gt;child relationship between canvas contexts and compositor contexts, but that doesn&apos;t exist in reality.  A given WebGL &lt;canvas&gt; can migrate between different tabs, or between a window and a popup, which use different compositor contexts.
&gt; &gt; &gt; 
&gt; &gt; &gt; We could expose another entry point to allow sharing of a specific resource and a given compositor context resource.  For WebGL we only need this for framebuffer 0 so something like prepareTexture() makes sense.  I&apos;m not completely sure what the best form of this API is, but whatever it is it shouldn&apos;t force us to do extra copies and it definitely cannot rely on a fixed parent-child relationship.
&gt; &gt; 
&gt; &gt; Thanks for the background, James.
&gt; &gt; 
&gt; &gt; I revisited the mechanics of the chromium swap-buffers implementation yesterday, hoping to see a clear way to push the contents from WebGL to the compositor, and I agree with your remarks on the service-side magic of swap-buffers, and the old copyTextureToParentTextureCHROMIUM.
&gt; &gt; 
&gt; &gt; Because I have been nursing this change for some time, I would like to get it in.  I would like to investigate and make a proposal for the sharing entry point that you suggest.  Has existing work already started on this?  Are there concerns relating to how the layer would be structured that haven&apos;t been touched upon already by this patch?  I don&apos;t want to tread on existing work that is already on-going.
&gt; 
&gt; Well this patch just straight up does not work in chromium today, WebGL and the compositor are not in a share group so you can&apos;t copy a texture to another.  We need a new entry point.  So no, we can not just put this in.

I think I didn&apos;t state my intent clearly enough.  By getting this change in, I mean that I would like to hold off on submitting it for the short term, so that we can implement the resource sharing mechanism.  After the mechanism is in place, hopefully only small modifications will be required to get this change up and running, at which point it can be submitted.

I&apos;d prefer to not drop this change, if possible.

&gt; 
&gt; &gt; 
&gt; &gt; On the other hand, I discussed this briefly with Vangelis, and he mentioned that we may want to hold off on making these changes until the threaded compositor is in place.  Can you comment on that suggestion?  Would the conversion to a threaded compositor have an impact on the design of a resource-sharing API/layer?
&gt; 
&gt; It has implications but I think they are solvable.  The place to start here is to figure out what API we need on GraphicsContext3D to enable resource sharing with the compositor.

I&apos;ll have a look at the existing mechanisms and submit a proposal in the next few days.

&gt; 
&gt; 
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; HTH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457108</commentid>
    <comment_count>32</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-25 13:35:29 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #30)
&gt; &gt; (In reply to comment #29)
&gt; &gt; &gt; (In reply to comment #28)
&gt; &gt; &gt; &gt; To back up a bit, the issue here is all about resource sharing between the WebGL context and the compositor context.  Different implementations of GraphicsContext3D may handle this in different ways, but in chromium today we do not support arbitrary resource sharing between these two.  prepareTexture() is wired up in chromium to do a texture copy (or multisample resolve) to a texture that is exposed to the compositor context.  In that sense, it&apos;s a form of service-side &quot;magic&quot; that allows a very limited form of resource sharing.  copyTextureToParentTextureCHROMIUM() was another form of service-side magic to support sharing (via a copy) a given texture with a texture in the compositor texture.  The approach was fundamentally broken, however, due to fact that it relied on a parent-&gt;child relationship between canvas contexts and compositor contexts, but that doesn&apos;t exist in reality.  A given WebGL &lt;canvas&gt; can migrate between different tabs, or between a window and a popup, which use different compositor contexts.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; We could expose another entry point to allow sharing of a specific resource and a given compositor context resource.  For WebGL we only need this for framebuffer 0 so something like prepareTexture() makes sense.  I&apos;m not completely sure what the best form of this API is, but whatever it is it shouldn&apos;t force us to do extra copies and it definitely cannot rely on a fixed parent-child relationship.
&gt; &gt; &gt; 
&gt; &gt; &gt; Thanks for the background, James.
&gt; &gt; &gt; 
&gt; &gt; &gt; I revisited the mechanics of the chromium swap-buffers implementation yesterday, hoping to see a clear way to push the contents from WebGL to the compositor, and I agree with your remarks on the service-side magic of swap-buffers, and the old copyTextureToParentTextureCHROMIUM.
&gt; &gt; &gt; 
&gt; &gt; &gt; Because I have been nursing this change for some time, I would like to get it in.  I would like to investigate and make a proposal for the sharing entry point that you suggest.  Has existing work already started on this?  Are there concerns relating to how the layer would be structured that haven&apos;t been touched upon already by this patch?  I don&apos;t want to tread on existing work that is already on-going.
&gt; &gt; 
&gt; &gt; Well this patch just straight up does not work in chromium today, WebGL and the compositor are not in a share group so you can&apos;t copy a texture to another.  We need a new entry point.  So no, we can not just put this in.
&gt; 
&gt; I think I didn&apos;t state my intent clearly enough.  By getting this change in, I mean that I would like to hold off on submitting it for the short term, so that we can implement the resource sharing mechanism.  After the mechanism is in place, hopefully only small modifications will be required to get this change up and running, at which point it can be submitted.
&gt; 
&gt; I&apos;d prefer to not drop this change, if possible.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; On the other hand, I discussed this briefly with Vangelis, and he mentioned that we may want to hold off on making these changes until the threaded compositor is in place.  Can you comment on that suggestion?  Would the conversion to a threaded compositor have an impact on the design of a resource-sharing API/layer?
&gt; &gt; 
&gt; &gt; It has implications but I think they are solvable.  The place to start here is to figure out what API we need on GraphicsContext3D to enable resource sharing with the compositor.
&gt; 
&gt; I&apos;ll have a look at the existing mechanisms and submit a proposal in the next few days.

CC&apos;d apatrick on this bug as he has given this some thought. In an offline discussion with him, we should either provide a way to generate a framebuffer with the needed attachments in the compositor&apos;s context and map that to a client-side ID in the WebGL context, or bite the bullet and just share all resources client-side between WebGL and the compositor. The latter would require careful resource tracking to make sure that any OpenGL resource leaks in WebGL apps can&apos;t cause those resources to stick around for arbitrary periods of time in the compositor&apos;s context (but since they are sharing resources behind the scenes anyway, such bookkeeping is already in place and necessary).

I&apos;d lean toward the latter solution as it would allow the DrawingBuffer class to allocate all of the objects it needs, with no magic going on behind the scenes.

&gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; HTH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457752</commentid>
    <comment_count>33</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-26 13:45:35 -0700</bug_when>
    <thetext>I agree that all the work of dealing with buffers and window system specific interactions should be kept in DrawingBuffer. If DrawingBuffer has a prepareForCompositing (replacement for prepareTexture), then any platform specific work to get the buffer to the compositor should be able to be done there. 

This will allow us to keep GraphicsContext3D concerned with the GL-like API and avoid any window system dependencies</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457754</commentid>
    <comment_count>34</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-26 13:46:10 -0700</bug_when>
    <thetext>At the beginning of next week I&apos;ll have some cycles to devote to this issue and the restructuring of GC3D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457893</commentid>
    <comment_count>35</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-26 18:29:56 -0700</bug_when>
    <thetext>twiz, to be clear, I&apos;d hope that you weren&apos;t blocked making further progress on this patch. The idea is to use the new client-side resource sharing support in the command buffer code to put the WebGL context in the same share group as the compositor&apos;s context. Are you stuck?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458314</commentid>
    <comment_count>36</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-08-29 11:32:10 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; twiz, to be clear, I&apos;d hope that you weren&apos;t blocked making further progress on this patch. The idea is to use the new client-side resource sharing support in the command buffer code to put the WebGL context in the same share group as the compositor&apos;s context. Are you stuck?

I&apos;m not blocked per-se, but this change is blocked on the development of the resource sharing support mentioned above.  I&apos;m looking into the requirements for implementing the resource sharing support.

Hopefully this patch wont bit-rot too much while that support is being built out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458519</commentid>
    <comment_count>37</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-08-29 15:57:12 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; (In reply to comment #35)
&gt; &gt; twiz, to be clear, I&apos;d hope that you weren&apos;t blocked making further progress on this patch. The idea is to use the new client-side resource sharing support in the command buffer code to put the WebGL context in the same share group as the compositor&apos;s context. Are you stuck?
&gt; 
&gt; I&apos;m not blocked per-se, but this change is blocked on the development of the resource sharing support mentioned above.  I&apos;m looking into the requirements for implementing the resource sharing support.
&gt; 
&gt; Hopefully this patch wont bit-rot too much while that support is being built out.

From a discussion with Al Patrick, he thinks that we should be safe to put the WebGL context in the same share group as the compositor, which should unblock this CL.  

I&apos;ll try this suggestion, and get another patch up (pending layout/conformance test success) in the next day.

Chris, this change is an extension of your previous patch on this issue.  Will we collide when you move these changes to the other ports?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460766</commentid>
    <comment_count>38</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-09-01 14:05:31 -0700</bug_when>
    <thetext>(In reply to comment #37)
...
&gt; Chris, this change is an extension of your previous patch on this issue.  Will we collide when you move these changes to the other ports?

I&apos;ve decided to hold off on my changes to https://bugs.webkit.org/show_bug.cgi?id=66903 until after you&apos;ve landed this. I really want all the buffer stuff out of GC3D. So I&apos;m blocking my bug on this. Please let me know when you&apos;re done and we can proceed from there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460768</commentid>
    <comment_count>39</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-09-01 14:06:12 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; (In reply to comment #36)
&gt; &gt; (In reply to comment #35)
&gt; &gt; &gt; twiz, to be clear, I&apos;d hope that you weren&apos;t blocked making further progress on this patch. The idea is to use the new client-side resource sharing support in the command buffer code to put the WebGL context in the same share group as the compositor&apos;s context. Are you stuck?
&gt; &gt; 
&gt; &gt; I&apos;m not blocked per-se, but this change is blocked on the development of the resource sharing support mentioned above.  I&apos;m looking into the requirements for implementing the resource sharing support.
&gt; &gt; 
&gt; &gt; Hopefully this patch wont bit-rot too much while that support is being built out.
&gt; 
&gt; From a discussion with Al Patrick, he thinks that we should be safe to put the WebGL context in the same share group as the compositor, which should unblock this CL.  
&gt; 
&gt; I&apos;ll try this suggestion, and get another patch up (pending layout/conformance test success) in the next day.
&gt; 
&gt; Chris, this change is an extension of your previous patch on this issue.  Will we collide when you move these changes to the other ports?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460778</commentid>
    <comment_count>40</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-09-01 14:20:46 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; (In reply to comment #37)
&gt; ...
&gt; &gt; Chris, this change is an extension of your previous patch on this issue.  Will we collide when you move these changes to the other ports?
&gt; 
&gt; I&apos;ve decided to hold off on my changes to https://bugs.webkit.org/show_bug.cgi?id=66903 until after you&apos;ve landed this. I really want all the buffer stuff out of GC3D. So I&apos;m blocking my bug on this. Please let me know when you&apos;re done and we can proceed from there.

From our discussion offline.  I&apos;m working on reverting the changes of my patch that removed the platform layer handling from GraphicsContext3D.  Some of the recent changes around that code had rotted my change, and the removal of the  prepareTexture call is of higher priority.

Remaining unknown for this patch is testing the applicability of resource sharing between the compositor and the WebGL context.

Will post an update shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462297</commentid>
    <comment_count>41</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-09-05 18:14:33 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; (In reply to comment #38)
&gt; &gt; (In reply to comment #37)
&gt; &gt; ...
&gt; &gt; &gt; Chris, this change is an extension of your previous patch on this issue.  Will we collide when you move these changes to the other ports?
&gt; &gt; 
&gt; &gt; I&apos;ve decided to hold off on my changes to https://bugs.webkit.org/show_bug.cgi?id=66903 until after you&apos;ve landed this. I really want all the buffer stuff out of GC3D. So I&apos;m blocking my bug on this. Please let me know when you&apos;re done and we can proceed from there.
&gt; 
&gt; From our discussion offline.  I&apos;m working on reverting the changes of my patch that removed the platform layer handling from GraphicsContext3D.  Some of the recent changes around that code had rotted my change, and the removal of the  prepareTexture call is of higher priority.
&gt; 
&gt; Remaining unknown for this patch is testing the applicability of resource sharing between the compositor and the WebGL context.
&gt; 
&gt; Will post an update shortly.

An update on this work.  I&apos;ve massaged my change so that it only introduces DrawingBuffer as the management entity for the FBO&apos;s used by the WebGLRenderingContext.

After much debugging, I&apos;ve determined that there is a problem with the interaction of the WebGL context machinery and shared-resource contexts.  When resource sharing is enabled, the compositor&apos;s textures become black.  This happens both with my change, and without.

For example, from a clean Chrome checkout @99168, constructing the graphics context with shared resources (http://goo.gl/XnLrL) causes the compositor to only render black textures.  This is the same behaviour that I&apos;m observing when integrating my DrawingBuffer changes.  My understanding is that making this single-line change should be a no-op.  Is this assumption correct?

I&apos;m debugging this issue further.  Because the sharing works properly for Canvas2D, my gut tells me that this is a symptom of either:
  - A current context mis-match unique to the WebGL path.
  - A bug in the resource sharing code that the WebGL path is triggering.

For background, this entire change is blocked on this problematic behaviour.  The DrawingBuffer path requires resource sharing, as it is no longer using the parent-child &apos;prepareTexture&apos; call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462305</commentid>
    <comment_count>42</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-05 18:21:45 -0700</bug_when>
    <thetext>There&apos;s special logic with WebGL contexts related to the preserveDrawingBuffer attribute (http://www.khronos.org/registry/webgl/specs/latest/#5.2.1), maybe that&apos;s biting you?  You could try different combinations of preserveDrawingBuffer/antialias to see if that makes any difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462310</commentid>
    <comment_count>43</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-09-05 18:31:44 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; There&apos;s special logic with WebGL contexts related to the preserveDrawingBuffer attribute (http://www.khronos.org/registry/webgl/specs/latest/#5.2.1), maybe that&apos;s biting you?  You could try different combinations of preserveDrawingBuffer/antialias to see if that makes any difference.

(In reply to comment #42)
&gt; There&apos;s special logic with WebGL contexts related to the preserveDrawingBuffer attribute (http://www.khronos.org/registry/webgl/specs/latest/#5.2.1), maybe that&apos;s biting you?  You could try different combinations of preserveDrawingBuffer/antialias to see if that makes any difference.

Nope, the problem seems to be elsewhere.  All permutations of preserveDrawingBuffer, and antialias still exhibit the same problem, even on the no-op, single-line change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463369</commentid>
    <comment_count>44</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-09-07 08:50:11 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (In reply to comment #42)
&gt; &gt; There&apos;s special logic with WebGL contexts related to the preserveDrawingBuffer attribute (http://www.khronos.org/registry/webgl/specs/latest/#5.2.1), maybe that&apos;s biting you?  You could try different combinations of preserveDrawingBuffer/antialias to see if that makes any difference.
&gt; 
&gt; (In reply to comment #42)
&gt; &gt; There&apos;s special logic with WebGL contexts related to the preserveDrawingBuffer attribute (http://www.khronos.org/registry/webgl/specs/latest/#5.2.1), maybe that&apos;s biting you?  You could try different combinations of preserveDrawingBuffer/antialias to see if that makes any difference.
&gt; 
&gt; Nope, the problem seems to be elsewhere.  All permutations of preserveDrawingBuffer, and antialias still exhibit the same problem, even on the no-op, single-line change.

Update:  After much debugging, the problem is related to how extensions are handled between multiple contexts that are sharing resources.

Presently, WebGL contexts are created with the attribute noExtensions.  (http://goo.gl/FlJpj)  This turns into requesting the following extensions from GL: 
    &quot;GL_OES_packed_depth_stencil &quot;
    &quot;GL_OES_depth24 &quot;
    &quot;GL_CHROMIUM_webglsl&quot; (http://goo.gl/WGhCy)

The problem is that the compositor context is created after the WebGL context, and, via the resource sharing machinery, it re-uses the same set of validators that were constructed for the WebGL context.  Because the WebGL context did not request BGRA support, all of the TexSubImage2D calls for the compositor textures fail because they are BGRA.

The fix is to add BGRA support to the set of extensions requested by WebGL.

At a higher level, is this a critical problem for resource sharing?  Requiring that both contexts request the same set of extensions seems fragile, and limits the benefit of the explicit specification of requested extensions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478119</commentid>
    <comment_count>45</comment_count>
      <attachid>109732</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-04 19:31:50 -0700</bug_when>
    <thetext>Created attachment 109732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478120</commentid>
    <comment_count>46</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-04 19:36:21 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; Created an attachment (id=109732) [details]
&gt; Patch

Finally an update on this dormant issue.  After lots of back-forth, I submitted a sister-change to Chrome that allowed resource sharing between WebGL and the compositor, which was required to make forward progress here.

See Chrome CL: http://codereview.chromium.org/7782038/

Patch (109732) implements a much simpler version of integrating DrawingBuffer into WebGLRenderingContext.  This patch also removes the texture copy that was performed in GraphicsContext3D::prepareTexture, by sharing the texture used as the colour buffer of the DrawingBuffer directly with the compositor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478122</commentid>
    <comment_count>47</comment_count>
      <attachid>109732</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-04 19:38:07 -0700</bug_when>
    <thetext>Comment on attachment 109732
Patch

Attachment 109732 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9958132</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478123</commentid>
    <comment_count>48</comment_count>
      <attachid>109732</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-04 19:40:27 -0700</bug_when>
    <thetext>Comment on attachment 109732
Patch

Attachment 109732 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9954258</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478127</commentid>
    <comment_count>49</comment_count>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-10-04 19:47:37 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #45)
&gt; &gt; Created an attachment (id=109732) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; Finally an update on this dormant issue.  After lots of back-forth, I submitted a sister-change to Chrome that allowed resource sharing between WebGL and the compositor, which was required to make forward progress here.
&gt; 
&gt; See Chrome CL: http://codereview.chromium.org/7782038/
&gt; 
&gt; Patch (109732) implements a much simpler version of integrating DrawingBuffer into WebGLRenderingContext.  This patch also removes the texture copy that was performed in GraphicsContext3D::prepareTexture, by sharing the texture used as the colour buffer of the DrawingBuffer directly with the compositor.

There need to be two copies of the backing store when preserveDrawingBuffer=false (the default). I don&apos;t see how this patch accounts for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478134</commentid>
    <comment_count>50</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-04 20:20:49 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; (In reply to comment #46)
&gt; &gt; (In reply to comment #45)
&gt; &gt; &gt; Created an attachment (id=109732) [details] [details] [details]
&gt; &gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Finally an update on this dormant issue.  After lots of back-forth, I submitted a sister-change to Chrome that allowed resource sharing between WebGL and the compositor, which was required to make forward progress here.
&gt; &gt; 
&gt; &gt; See Chrome CL: http://codereview.chromium.org/7782038/
&gt; &gt; 
&gt; &gt; Patch (109732) implements a much simpler version of integrating DrawingBuffer into WebGLRenderingContext.  This patch also removes the texture copy that was performed in GraphicsContext3D::prepareTexture, by sharing the texture used as the colour buffer of the DrawingBuffer directly with the compositor.
&gt; 
&gt; There need to be two copies of the backing store when preserveDrawingBuffer=false (the default). I don&apos;t see how this patch accounts for that.

Summary from an offline discussion:
The test that should catch regressions in preserveDrawingBuffer passes with these changes.

https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/tests/conformance/canvas/buffer-preserve-test.html

The test also passes when modified to explicitly disable multisampling.

On windows, several layout tests do fail with this change, but few of them appear directly related to WebGL:

Tests where results did not match expected results:
+media/video-playing-and-pause.html	expected actual diff wdiff 		TEXT	PASS

Flaky tests (failed the first run and got a different result on retry):
+compositing/geometry/object-clip-rects-assertion.html			TIMEOUT PASS	PASS

Tests that crashed:
+fast/canvas/webgl/gl-getshadersource.html	crash log

Tests that timed out:

Tests that had stderr output:
+fast/canvas/webgl/gl-getshadersource.html	stderr

Tests expected to fail but passed:
media/media-document-audio-repaint.html	IMAGE IMAGE+TEXT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478136</commentid>
    <comment_count>51</comment_count>
      <attachid>109737</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-04 20:21:30 -0700</bug_when>
    <thetext>Created attachment 109737
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478137</commentid>
    <comment_count>52</comment_count>
      <attachid>109737</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-04 20:28:05 -0700</bug_when>
    <thetext>Comment on attachment 109737
Patch

Attachment 109737 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9959048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478138</commentid>
    <comment_count>53</comment_count>
      <attachid>109738</attachid>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-10-04 20:31:43 -0700</bug_when>
    <thetext>Created attachment 109738
Modified webgl confomance test

This test dependence on the framework from the webgl conformance tests, so it needs to be copied over or next to the normal buffer-preserve-test.html in the webgl framework. Hopefully we could turn it into a real pixel test at some point.
The square should stay red. If it turns clear, that&apos;s a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478142</commentid>
    <comment_count>54</comment_count>
      <attachid>109737</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-04 20:43:55 -0700</bug_when>
    <thetext>Comment on attachment 109737
Patch

Attachment 109737 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9958140</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478155</commentid>
    <comment_count>55</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-04 21:23:24 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; (In reply to comment #49)
&gt; &gt; (In reply to comment #46)
&gt; &gt; &gt; (In reply to comment #45)
&gt; &gt; &gt; &gt; Created an attachment (id=109732) [details] [details] [details] [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; Finally an update on this dormant issue.  After lots of back-forth, I submitted a sister-change to Chrome that allowed resource sharing between WebGL and the compositor, which was required to make forward progress here.
&gt; &gt; &gt; 
&gt; &gt; &gt; See Chrome CL: http://codereview.chromium.org/7782038/
&gt; &gt; &gt; 
&gt; &gt; &gt; Patch (109732) implements a much simpler version of integrating DrawingBuffer into WebGLRenderingContext.  This patch also removes the texture copy that was performed in GraphicsContext3D::prepareTexture, by sharing the texture used as the colour buffer of the DrawingBuffer directly with the compositor.
&gt; &gt; 
&gt; &gt; There need to be two copies of the backing store when preserveDrawingBuffer=false (the default). I don&apos;t see how this patch accounts for that.
&gt; 
&gt; Summary from an offline discussion:
&gt; The test that should catch regressions in preserveDrawingBuffer passes with these changes.
&gt; 
&gt; https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/tests/conformance/canvas/buffer-preserve-test.html
&gt; 
&gt; The test also passes when modified to explicitly disable multisampling.
&gt; 
&gt; On windows, several layout tests do fail with this change, but few of them appear directly related to WebGL:
&gt; 
&gt; Tests where results did not match expected results:
&gt; +media/video-playing-and-pause.html    expected actual diff wdiff         TEXT    PASS
&gt; 
&gt; Flaky tests (failed the first run and got a different result on retry):
&gt; +compositing/geometry/object-clip-rects-assertion.html            TIMEOUT PASS    PASS
&gt; 
&gt; Tests that crashed:
&gt; +fast/canvas/webgl/gl-getshadersource.html    crash log
&gt; 
&gt; Tests that timed out:
&gt; 
&gt; Tests that had stderr output:
&gt; +fast/canvas/webgl/gl-getshadersource.html    stderr
&gt; 
&gt; Tests expected to fail but passed:
&gt; media/media-document-audio-repaint.html    IMAGE IMAGE+TEXT

Further update:  This change regresses printing WebGL content.  Will investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478399</commentid>
    <comment_count>56</comment_count>
      <attachid>109737</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-10-05 08:51:15 -0700</bug_when>
    <thetext>Comment on attachment 109737
Patch

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

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2956
&gt; +        m_drawingBuffer-&gt;commit();

Since the commit()/do-something/bind() pattern seems to occur a few times, you could consider using a guard class.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:4909
&gt; +    m_drawingBuffer-&gt;resetOnNewContext(context);

If there&apos;s nothing to be preserved from the old DrawingBuffer, might it be a bit safer to just re-create the DrawingBuffer altogether here?  I suppose you might need a function on the DrawingBuffer to discard the old GPU resources without freeing them.

&gt; Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp:319
&gt; +        paintFramebufferToCanvas(drawingBuffer-&gt;framebuffer(), drawingBuffer-&gt;size().width(), drawingBuffer-&gt;size().height(),
&gt; +                                 !m_impl-&gt;getContextAttributes().premultipliedAlpha, imageBuffer);
&gt; +    } else
&gt; +        paintFramebufferToCanvas(0, m_impl-&gt;width(), m_impl-&gt;height(), !m_impl-&gt;getContextAttributes().premultipliedAlpha, imageBuffer);

Could probably refactor this code (and paintRenderingResultsToImageData() below) into one call for both cases, by having width() and height() helper fns in this class that retrieved the appropriate size.  Up to you:  I&apos;d only do it if it actually saved code.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479478</commentid>
    <comment_count>57</comment_count>
      <attachid>110020</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-06 14:21:09 -0700</bug_when>
    <thetext>Created attachment 110020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481644</commentid>
    <comment_count>58</comment_count>
      <attachid>110020</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-11 08:42:41 -0700</bug_when>
    <thetext>Comment on attachment 110020
Patch

Attachment 110020 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10026585</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481795</commentid>
    <comment_count>59</comment_count>
      <attachid>110555</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-11 12:02:36 -0700</bug_when>
    <thetext>Created attachment 110555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481810</commentid>
    <comment_count>60</comment_count>
      <attachid>109737</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-11 12:18:06 -0700</bug_when>
    <thetext>Comment on attachment 109737
Patch

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

Patch corrects order of construction of members in WebGLRenderingContext::WebGLRenderingContext.

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2956
&gt;&gt; +        m_drawingBuffer-&gt;commit();
&gt; 
&gt; Since the commit()/do-something/bind() pattern seems to occur a few times, you could consider using a guard class.

I&apos;d like to consider getting this patch in as is.  Following up with a subsequent patch implementing scope guards in a follow-up CL.

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:4909
&gt;&gt; +    m_drawingBuffer-&gt;resetOnNewContext(context);
&gt; 
&gt; If there&apos;s nothing to be preserved from the old DrawingBuffer, might it be a bit safer to just re-create the DrawingBuffer altogether here?  I suppose you might need a function on the DrawingBuffer to discard the old GPU resources without freeing them.

Done.  I removed DrawingBuffer::resetOnNewContext, and added DrawingBuffer::discardResources(), and construction of a new DrawingBuffer instance on context loss.

&gt;&gt; Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp:319
&gt;&gt; +        paintFramebufferToCanvas(0, m_impl-&gt;width(), m_impl-&gt;height(), !m_impl-&gt;getContextAttributes().premultipliedAlpha, imageBuffer);
&gt; 
&gt; Could probably refactor this code (and paintRenderingResultsToImageData() below) into one call for both cases, by having width() and height() helper fns in this class that retrieved the appropriate size.  Up to you:  I&apos;d only do it if it actually saved code.  :)

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481812</commentid>
    <comment_count>61</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-11 12:19:26 -0700</bug_when>
    <thetext>(In reply to comment #59)
&gt; Created an attachment (id=110555) [details]
&gt; Patch

This patch corrects the preserveDrawingBuffer behaviour, and does not regress printing of WebGL content.

PTAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481823</commentid>
    <comment_count>62</comment_count>
      <attachid>110555</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-11 12:28:56 -0700</bug_when>
    <thetext>Comment on attachment 110555
Patch

Attachment 110555 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10030613</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481866</commentid>
    <comment_count>63</comment_count>
      <attachid>110566</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-11 13:37:14 -0700</bug_when>
    <thetext>Created attachment 110566
Patch

Attempt to correct Qt build issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481878</commentid>
    <comment_count>64</comment_count>
      <attachid>110566</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-11 13:45:41 -0700</bug_when>
    <thetext>Comment on attachment 110566
Patch

Attachment 110566 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10030641</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481899</commentid>
    <comment_count>65</comment_count>
      <attachid>110572</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-11 14:07:28 -0700</bug_when>
    <thetext>Created attachment 110572
Patch

Attempt to correct Qt build issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481912</commentid>
    <comment_count>66</comment_count>
      <attachid>110572</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-11 14:22:07 -0700</bug_when>
    <thetext>Comment on attachment 110572
Patch

Attachment 110572 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10028621</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481928</commentid>
    <comment_count>67</comment_count>
      <attachid>110572</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-11 14:45:47 -0700</bug_when>
    <thetext>Comment on attachment 110572
Patch

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

I like the idea of keeping the compsitor&apos;s texture in an explicit separate copy, if that&apos;s what this patch is going for. It&apos;s a little hard for me to follow exactly what the responsibilities of DrawingBuffer vs WebGLRenderingContext vs compositor data structures are, could you describe at a higher level who&apos;s doing what?

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:66
&gt; +    RefPtr&lt;DrawingBuffer&gt; drawingBuffer(DrawingBuffer::create(this, size, separateBackingBuffer));
&gt; +    m_drawingBuffer = drawingBuffer.get();
&gt; +    return drawingBuffer;

this appears to be creating a RefCounted object, taking a weak pointer to it, then passing ownership to the caller. Who&apos;s responsible for clearing the weak pointer when the DrawingBuffer is destroyed? The object ownership here seems confusing, at least.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:505
&gt; +    DrawingBuffer* getDrawingBuffer() const { return m_drawingBuffer; }

we don&apos;t use &quot;get&quot; for getters in WebKit

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:957
&gt; +    DrawingBuffer* m_drawingBuffer;
&gt; +

what&apos;s the ownership model here?

&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:122
&gt; +        unsigned long colorFormat = m_context-&gt;getContextAttributes().alpha ? GraphicsContext3D::RGBA : GraphicsContext3D::RGB;

you should use either &apos;unsigned&apos; or GC3Denum here, we don&apos;t use &quot;unsigned long&quot; in WebKit

&gt; Source/WebCore/platform/graphics/gpu/DrawingBuffer.h:92
&gt; +    // Immediately releases ownership of all resources. Call upon loss of the
&gt; +    // graphics context to prevent freeing invalid resources.
&gt; +    void discardResources();

I don&apos;t understand the concern here - are you worried that we&apos;ll lose a context, restore it, and then issue delete calls for the old resource IDs?  Our command buffer implementation ASSERT()s if you issue deleteFoo() calls for 0, IIRC.

&gt; Source/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm:45
&gt; +    :  m_separateBackingTexture(separateBackingTexture)
&gt; +    , m_scissorEnabled(false)m_context(context)

something went horribly wrong here when merging it looks like</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482435</commentid>
    <comment_count>68</comment_count>
      <attachid>110572</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-12 08:48:26 -0700</bug_when>
    <thetext>Comment on attachment 110572
Patch

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

Thanks for your review, James.  I will address all of your comments in a forthcoming patch.

Here&apos;s a summary of what this change means:

My sister-change, (crrev.com/103724) prepared the command buffer back-end for resource sharing between WebGL and compositor contexts.  This change uses that to allow a DrawingBuffer instance to entirely manage the target rendering buffers for WebGL content.

Upon initialization, a WebGLRenderingContext will construct a DrawingBuffer instance. The DrawingBuffer will create up to three frame-buffer objects.  Two are optional:  If multi-sampling is requested, then multi-sample buffer is created.  If &apos;preserveDrawingBuffer&apos; is false, then an optional backing store is created.  A non-multi-sampled buffer is always created.  

When the compositor requests the contents of the WebGL contents, it will read directly from the texture backing either the optional backing store, or the non-multi-sampled buffer of the DrawingBuffer.  If multisampling was requested, a multi-sample resolve will also happen at this time.

At a high level:
WebGLRenderingContext:
  - Constructs and owns the lifetime of the DrawingBuffer.
  - Assumes that DrawingBuffer replaces framebuffer-0 for all calls.
  - Has a reference to the GraphicsContext3D instance.

DrawingBuffer:
  - Manages the lifetime of all frame-buffer objects needed for the WebGL context.  (Multi-sample, non-multi-sample, backing store)
  - Provides the texture which the compositor uses to render WebGLContent.  (backing store, or non-multi-sample)
  - Has a reference to the GraphicsContext3D instance.

Compositor:
  - No real change.  Instead of using the texture returned from GraphicsContext3D::platformTexture for WebGL contents, it uses DrawingBuffer::platformColorBuffer().

&gt;&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:66
&gt;&gt; +    return drawingBuffer;
&gt; 
&gt; this appears to be creating a RefCounted object, taking a weak pointer to it, then passing ownership to the caller. Who&apos;s responsible for clearing the weak pointer when the DrawingBuffer is destroyed? The object ownership here seems confusing, at least.

Yes, the ownership model is fairly confusing.  At present, the WebGLRenderingContext should be the hard owner of the DrawingBuffer.  

This is because DrawingBuffer already has a strong ref-counted pointer to the GraphicsContext3D that created it.  I did not want to add another strong pointer in GC3D back to the DrawingBuffer, and create a cycle.  

However, GraphicsContext3D does need access to the DrawingBuffer for the following calls:
  paintRenderingResultsToImageData, paintRenderingResultsToCanvas, and 
  WebGLLayerChromium::updateCompositorResources, and WebGLLayerChromium::setContext.

To remove need for the DrawingBuffer member the first two calls can be altered so that the caller passes the DrawingBuffer instance in.

The second calls are trickier to modify.  The GraphicsContext3D is the shared access point between the WebGLLayerChromium, and the WebGLRenderingContext.  If the WebGLRenderingContext could pass the DrawingBuffer instance to the WebGLLayerChromium directly, then there would be no need for the GraphicsContext3D to hold onto the DrawingBuffer instance.  

After doing some hunting, I think it&apos;s possible to re-structure some of the layer code so that the WebGLRenderingContext can directly pass in the DrawingBuffer instance at construction time.  

I&apos;ll submit a patch demonstrating this approach.

&gt;&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:505
&gt;&gt; +    DrawingBuffer* getDrawingBuffer() const { return m_drawingBuffer; }
&gt; 
&gt; we don&apos;t use &quot;get&quot; for getters in WebKit

Done.

&gt;&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:957
&gt;&gt; +
&gt; 
&gt; what&apos;s the ownership model here?

Mentioned in above note.  DrawingBuffer is owned by WebGLRenderingContext.  Weakly referred to here for access to framebuffer/width/height.

Also needed for access in WebGLLayerChromium.

Will remove in updated patch.

&gt;&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:122
&gt;&gt; +        unsigned long colorFormat = m_context-&gt;getContextAttributes().alpha ? GraphicsContext3D::RGBA : GraphicsContext3D::RGB;
&gt; 
&gt; you should use either &apos;unsigned&apos; or GC3Denum here, we don&apos;t use &quot;unsigned long&quot; in WebKit

I followed the style from DrawingBuffer::reset, which also used unsigned long.  Corrected here, and in the old code.

&gt;&gt; Source/WebCore/platform/graphics/gpu/DrawingBuffer.h:92
&gt;&gt; +    void discardResources();
&gt; 
&gt; I don&apos;t understand the concern here - are you worried that we&apos;ll lose a context, restore it, and then issue delete calls for the old resource IDs?  Our command buffer implementation ASSERT()s if you issue deleteFoo() calls for 0, IIRC.

Yes, that is what I&apos;m worried about.  The DrawingBuffer dtor invokes DrawingBuffer::clear(), which will only free the resources if they are non-null.

After this change, the behaviour of a lost context is to explicitly discard all of the resources on the DrawingBuffer, before assigning a new DrawingBuffer to the WebGLRenderingContext.  If the resources were not discarded, then non-0 ids would be freed in the old context, which is a potential error.  (Or am I wrong?) 

See WebGLRenderingContext::maybeRestore(...)

&gt;&gt; Source/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm:45
&gt;&gt; +    , m_scissorEnabled(false)m_context(context)
&gt; 
&gt; something went horribly wrong here when merging it looks like

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482513</commentid>
    <comment_count>69</comment_count>
      <attachid>110703</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-12 10:47:22 -0700</bug_when>
    <thetext>Created attachment 110703
Patch

Remove GraphicsContext3D member variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482519</commentid>
    <comment_count>70</comment_count>
      <attachid>110703</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-12 10:50:51 -0700</bug_when>
    <thetext>Comment on attachment 110703
Patch

This patch implements the changes suggested by jamesr.

I removed the raw DrawingBuffer pointer from GraphicsContext3D, but in order to do so, I had to expose LayerChromium to WebGLRenderingContext.  At initialization time, the WebGLRenderingContext pushes the DrawingBuffer to the PlatformLayer.

Also, can someone advise on how to fix the qt compile errors?  I believe that I need to change an include path for the other platform builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482523</commentid>
    <comment_count>71</comment_count>
      <attachid>110703</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-12 10:55:13 -0700</bug_when>
    <thetext>Comment on attachment 110703
Patch

Attachment 110703 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10031825</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483341</commentid>
    <comment_count>72</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-13 11:33:34 -0700</bug_when>
    <thetext>(In reply to comment #70)
&gt; Also, can someone advise on how to fix the qt compile errors?  I believe that I need to change an include path for the other platform builds.

I think you need to edit Source/WebCore/WebCore.pri to add this dir to the include path on Qt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484833</commentid>
    <comment_count>73</comment_count>
      <attachid>111188</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-16 15:34:54 -0700</bug_when>
    <thetext>Created attachment 111188
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484834</commentid>
    <comment_count>74</comment_count>
      <attachid>111188</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-16 15:45:07 -0700</bug_when>
    <thetext>Comment on attachment 111188
Patch

Attachment 111188 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10076757</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484835</commentid>
    <comment_count>75</comment_count>
      <attachid>111188</attachid>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-10-16 15:50:57 -0700</bug_when>
    <thetext>Comment on attachment 111188
Patch

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

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:616
&gt; +        m_drawingBuffer-&gt;commit();

If a non-default framebuffer is bound, will that be restored after this set of operations?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484843</commentid>
    <comment_count>76</comment_count>
      <attachid>111188</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-16 17:01:04 -0700</bug_when>
    <thetext>Comment on attachment 111188
Patch

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

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:616
&gt;&gt; +        m_drawingBuffer-&gt;commit();
&gt; 
&gt; If a non-default framebuffer is bound, will that be restored after this set of operations?

Good observation.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484844</commentid>
    <comment_count>77</comment_count>
      <attachid>111190</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-16 17:03:15 -0700</bug_when>
    <thetext>Created attachment 111190
Patch

Address comments &amp; attempt to fix EWS build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484858</commentid>
    <comment_count>78</comment_count>
      <attachid>111190</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-10-16 18:04:36 -0700</bug_when>
    <thetext>Comment on attachment 111190
Patch

PTAL.

I think we&apos;re finally getting very close!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484866</commentid>
    <comment_count>79</comment_count>
      <attachid>111190</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-16 18:42:34 -0700</bug_when>
    <thetext>Comment on attachment 111190
Patch

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

The relationship between DrawingBuffer, GraphicsContext3D, WebGLRenderingContext and the PlatformLayer still doesn&apos;t feel quite right.  With this setup it seems like responsibility for setting up the compositing layer is spread across too many different objects.  Would it make more sense for the DrawingBuffer itself own the PlatformLayer?  That way in Chromium DrawingBufferChromium can handle setting up the correct WebGLLayerChromium objects, on the Mac port DrawingBufferMac can do the right setup, etc.  WebGLRenderingContext wouldn&apos;t need to do any special setup.

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:206
&gt; +    void setDrawingBuffer(PassRefPtr&lt;DrawingBuffer&gt; drawingBuffer) { m_drawingBuffer = drawingBuffer; }
&gt; +    PassRefPtr&lt;DrawingBuffer&gt; drawingBuffer() { return m_drawingBuffer; }
&gt; +

this doesn&apos;t make any sense to have on LayerChromium - it&apos;s only relevant for WebGL layers. I think you need to either downcast at callsites (yuck) or rethink the object responsibilities.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487305</commentid>
    <comment_count>80</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-19 21:20:11 -0700</bug_when>
    <thetext>(In reply to comment #78)
&gt; (From update of attachment 111190 [details])
&gt; PTAL.
&gt; 
&gt; I think we&apos;re finally getting very close!

By the way, I completely agree.  This is shaping up really nicely and I&apos;m looking forward to seeing it completed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498396</commentid>
    <comment_count>81</comment_count>
      <attachid>114144</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-11-08 13:32:33 -0800</bug_when>
    <thetext>Created attachment 114144
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498400</commentid>
    <comment_count>82</comment_count>
      <attachid>114144</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-08 13:40:31 -0800</bug_when>
    <thetext>Comment on attachment 114144
Patch

Attachment 114144 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10370183</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498417</commentid>
    <comment_count>83</comment_count>
      <attachid>114149</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-11-08 14:00:49 -0800</bug_when>
    <thetext>Created attachment 114149
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498446</commentid>
    <comment_count>84</comment_count>
      <attachid>114149</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-08 14:49:13 -0800</bug_when>
    <thetext>Comment on attachment 114149
Patch

Attachment 114149 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10375229</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498476</commentid>
    <comment_count>85</comment_count>
      <attachid>114166</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-11-08 15:49:50 -0800</bug_when>
    <thetext>Created attachment 114166
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498488</commentid>
    <comment_count>86</comment_count>
      <attachid>114166</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-08 16:04:45 -0800</bug_when>
    <thetext>Comment on attachment 114166
Patch

Attachment 114166 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10384002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498523</commentid>
    <comment_count>87</comment_count>
      <attachid>114176</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-11-08 16:50:41 -0800</bug_when>
    <thetext>Created attachment 114176
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498540</commentid>
    <comment_count>88</comment_count>
      <attachid>114176</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-08 17:10:19 -0800</bug_when>
    <thetext>Comment on attachment 114176
Patch

Attachment 114176 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10375282</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498546</commentid>
    <comment_count>89</comment_count>
      <attachid>114180</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-11-08 17:21:24 -0800</bug_when>
    <thetext>Created attachment 114180
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498565</commentid>
    <comment_count>90</comment_count>
      <attachid>114180</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-08 17:48:04 -0800</bug_when>
    <thetext>Comment on attachment 114180
Patch

Attachment 114180 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10378234</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498577</commentid>
    <comment_count>91</comment_count>
      <attachid>114186</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-11-08 18:01:32 -0800</bug_when>
    <thetext>Created attachment 114186
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498607</commentid>
    <comment_count>92</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-08 19:12:58 -0800</bug_when>
    <thetext>Does that last patch need to be rebaselined?

I&apos;d like to help you however I can to get this patch landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498610</commentid>
    <comment_count>93</comment_count>
      <attachid>114198</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-11-08 19:29:19 -0800</bug_when>
    <thetext>Created attachment 114198
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498614</commentid>
    <comment_count>94</comment_count>
      <attachid>114198</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-11-08 19:37:24 -0800</bug_when>
    <thetext>Comment on attachment 114198
Patch

Ok.  One more time.  Where were we, again?

I re-consolidated the relationships between GraphicsContext3D, DrawingBuffer, WebGLRenderingContext, and WebGLLayerChromium.  The Drawing buffer is now the main point of interaction between all of these classes.

- GraphicsContext3D no longer caches the platform layer, and only references DrawingBuffer instances via arguments to the necessary calls.
- WebGLLayerChromium no longer keeps a reference to a GraphicsContext3D.  Instead, it keeps a raw pointer to the DrawingBuffer instance that created it.  A raw pointer is necessary to prevent a reference cycle.  The DrawingBuffer uninstalls itself from the WebGLLayerChromium at destruction.
- WebGLRenderingContext has no interaction with any of the platform layer code.  Only the DrawingBuffer is used to manage the FBO resources used by the context.

I&apos;ve tested this change thoroughly.
 - Printing of WebGL content functions properly.
 - No layout test failures reported on Win7 with platform=chromium-gpu.
 - Of the webgl conformance tests, no new failures are introduced.  However, on my local machine, I do observe failures due to multi-sampling behaviour of my card (HD 5770).
  The following tests fail due to inperceptible pixel differences:
   conformance/glsl/functions/glsl-function-cross.html
   conformance/glsl/functions/glsl-function-dot.html
   conformance/glsl/functions/glsl-function-faceforward.html
   conformance/glsl/functions/glsl-function-reflect.html
   conformance/glsl/functions/glsl-function-smoothstep-float.html
   conformance/glsl/functions/glsl-function-smoothstep-gentype.html 
   
  The following tests are presently failing in the canary (17.0.932.0), and also fail with my change (these may also be related to the hardware AA of my GPU):
   conformance/glsl/functions/glsl-function-atan.html
   conformance/glsl/functions/glsl-function-atan-xy.html
   conformance/glsl/functions/glsl-function-mod-gentype.html
   conformance/glsl/misc/struct-nesting-under-maximum.html
   conformance/limits/gl-min-uniforms.html
   conformance/misc/object-deletion-behaviour.html
   conformance/renderbuffers/framebuffer-object-attachment.html
   conformance/textures/texture-mips.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499122</commentid>
    <comment_count>95</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-11-09 10:36:59 -0800</bug_when>
    <thetext>Great work, Jeff!

Since the mac EWS bot won&apos;t run for you, I&apos;m applying this patch locally and building on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499125</commentid>
    <comment_count>96</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-11-09 10:41:06 -0800</bug_when>
    <thetext>(In reply to comment #95)
&gt; Great work, Jeff!
&gt; 
&gt; Since the mac EWS bot won&apos;t run for you, I&apos;m applying this patch locally and building on Mac.

From Stephen&apos;s build:  The mac version was failing due to warnings about unused arguments in GraphicsContext3DOpenGL.

Uploading a new patch addressing the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499132</commentid>
    <comment_count>97</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-11-09 10:43:57 -0800</bug_when>
    <thetext>(In reply to comment #96)
&gt; (In reply to comment #95)
&gt; &gt; Great work, Jeff!
&gt; &gt; 
&gt; &gt; Since the mac EWS bot won&apos;t run for you, I&apos;m applying this patch locally and building on Mac.
&gt; 
&gt; From Stephen&apos;s build:  The mac version was failing due to warnings about unused arguments in GraphicsContext3DOpenGL.
&gt; 
&gt; Uploading a new patch addressing the problem.

(In reply to comment #95)
&gt; Great work, Jeff!
&gt; 
&gt; Since the mac EWS bot won&apos;t run for you, I&apos;m applying this patch locally and building on Mac.

Since the (Safari) Mac build is currently broken, I had to sync to r99614 to get a working build to apply against.

It gave the following warnings-treated-as-errors:

/Volumes/MacintoshHD2/senorblanco/src/webkit1/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:131: warning: unused parameter ‘drawingBuffer’
/Volumes/MacintoshHD2/senorblanco/src/webkit1/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:167: warning: unused parameter ‘drawingBuffer’
PhaseScriptExecution &quot;Check For Inappropriate Files In Framework&quot; /Volumes/MacintoshHD2/senorblanco/src/webkit1/WebKitBuild/WebCore.build/Release/WebCore.build/Script-5DF50887116F3077005202AB.sh

Removing the parameter and the ASSERT below it allowed it to compile.

Running new-run-webkit-tests, I got 11 unexpected failures both with and without your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499135</commentid>
    <comment_count>98</comment_count>
      <attachid>114312</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-11-09 10:48:39 -0800</bug_when>
    <thetext>Created attachment 114312
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499177</commentid>
    <comment_count>99</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-11-09 11:19:09 -0800</bug_when>
    <thetext>(In reply to comment #98)
&gt; Created an attachment (id=114312) [details]
&gt; Patch

Patch builds successfully @ Webkit rev 99614.

37 layout failures are reported on mac, none of which are related to webgl:

Regressions: Unexpected text diff mismatch : (17)
  animations/animation-direction-normal.html = TEXT
  compositing/reflections/animation-inside-reflection.html = TEXT
  compositing/tiling/crash-reparent-tiled-layer.html = TEXT
  css3/selectors3/xml/css3-modsel-d2.xml = TEXT
  fast/canvas/canvas-composite-canvas.html = TEXT
  fast/canvas/canvas-composite-image.html = TEXT
  fast/css/custom-font-xheight.html = TEXT
  fast/css/font-face-multiple-faces.html = TEXT
  fast/dom/HTMLScriptElement/script-set-src.html = TEXT
  fast/writing-mode/japanese-rl-text-with-broken-font.html = TEXT
  http/tests/inspector/resource-tree/resource-tree-errors-reload.html = TEXT
  http/tests/inspector/resource-tree/resource-tree-non-unique-url.html = TEXT
  http/tests/local/style-access-before-stylesheet-loaded.html = TEXT
  inspector/debugger/debugger-scripts.html = TEXT
  inspector/styles/commit-selector.html = TEXT
  inspector/timeline/timeline-receive-response-event.html = TEXT
  java/lc3/ArrayMethods/byte-001.html = TEXT

Regressions: Unexpected tests timed out : (20)
  fast/css/visited-link-hang.html = TIMEOUT
  fast/dom/NodeList/adoptNode-node-list-cache.html = TIMEOUT
  fast/dom/gc-9.html = TIMEOUT
  fast/dom/object-plugin-hides-properties.html = TIMEOUT
  fast/js/nested-object-gc.html = TIMEOUT
  java/lc3/CallStatic/boolean-001.html = TIMEOUT
  java/lc3/ConvertJSObject/ToBoolean-001.html = TIMEOUT
  java/lc3/ConvertNull/null-001.html = TIMEOUT
  java/lc3/ConvertNumber/number-001.html = TIMEOUT
  java/lc3/ConvertString/string-001.html = TIMEOUT
  java/lc3/ConvertUndefined/undefined-001-n.html = TIMEOUT
  java/lc3/Exceptions/throw_js_types.html = TIMEOUT
  java/lc3/JSBoolean/boolean-001.html = TIMEOUT
  java/lc3/JSNull/ToBoolean-001-n.html = TIMEOUT
  java/lc3/JSNumber/ToByte-001.html = TIMEOUT
  java/lc3/JSObject/ToByte-001.html = TIMEOUT
  java/lc3/JSUndefined/undefined-001.html = TIMEOUT
  jquery/attributes.html = TIMEOUT
  media/adopt-node-crash.html = TIMEOUT
  platform/mac/accessibility/math-alttext.html = TIMEOUT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499212</commentid>
    <comment_count>100</comment_count>
      <attachid>114312</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-11-09 11:53:14 -0800</bug_when>
    <thetext>Comment on attachment 114312
Patch

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

Looks good to me, but I&apos;ll leave for other reviewers.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:607
&gt;          m_context-&gt;paintCompositedResultsToCanvas(this);

As discussed, please check if this call can be removed in a followup patch (if it&apos;s now a no-op on all platforms).   If not, at least for Chromium it should probably be in an #else of the #ifdef below.  It&apos;s a little confusing to see calls to both functions if only one is necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499563</commentid>
    <comment_count>101</comment_count>
      <attachid>114312</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-09 18:12:56 -0800</bug_when>
    <thetext>Comment on attachment 114312
Patch

R=me, looks great.  Not touching cq? - please flip that at your convenience (or ask Stephen if you aren&apos;t a committer) and monitor the bots carefully when this lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499903</commentid>
    <comment_count>102</comment_count>
      <attachid>114312</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-10 07:43:58 -0800</bug_when>
    <thetext>Comment on attachment 114312
Patch

Rejecting attachment 114312 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
): Merge conflict in Source/WebCore/ChangeLog
Auto-merging Tools/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 [GTK] Make the ENABLE(FEATURE) macro work in DRT

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 157.

Full output: http://queues.webkit.org/results/10400338</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499960</commentid>
    <comment_count>103</comment_count>
      <attachid>114511</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-11-10 08:54:58 -0800</bug_when>
    <thetext>Created attachment 114511
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499963</commentid>
    <comment_count>104</comment_count>
      <attachid>114511</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2011-11-10 08:56:50 -0800</bug_when>
    <thetext>Comment on attachment 114511
Patch

Trying this again?  Commit queue, please?

(I updated the change locally, and observed no conflicts on the ChangeLog files.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500012</commentid>
    <comment_count>105</comment_count>
      <attachid>114511</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-11-10 09:51:54 -0800</bug_when>
    <thetext>Comment on attachment 114511
Patch

Done.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501129</commentid>
    <comment_count>106</comment_count>
      <attachid>114511</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-11 14:55:30 -0800</bug_when>
    <thetext>Comment on attachment 114511
Patch

Clearing flags on attachment: 114511

Committed r100032: &lt;http://trac.webkit.org/changeset/100032&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501130</commentid>
    <comment_count>107</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-11 14:55:41 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501172</commentid>
    <comment_count>108</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-11 15:31:56 -0800</bug_when>
    <thetext>This is fantastic. Jeff, thanks for pushing this through.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80275</attachid>
            <date>2011-01-26 17:25:34 -0800</date>
            <delta_ts>2011-07-21 14:22:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20110126172533.patch</filename>
            <type>text/plain</type>
            <size>36519</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2NzQwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTMgQEAKKzIwMTEtMDEtMjYgIENocmlzIE1h
cnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE1ha2UgR3JhcGhpY3NDb250ZXh0M0QgdXNlIERyYXdpbmdCdWZm
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMjAx
CisKKyAgICAgICAgVGhpcyBwYXRjaCBnZXRzIHJpZCBvZiBhbGwgdGhlIGxheWVyIG1hbmFnZW1l
bnQgYW5kIGRyYXdpbmcKKyAgICAgICAgYnVmZmVyIGNyZWF0aW9uIGZyb20gR3JhcGhpY3NDb250
ZXh0M0QsIHJlcGxhY2luZyBpdCB3aXRoCisgICAgICAgIHRoZSBjcmVhdGlvbiBhbmQgbWFuYWdl
bWVudCBvZiBhIERyYXdpbmdCdWZmZXIgd2hpY2ggaXMgCisgICAgICAgIHdoZXJlIGFsbCB0aGUg
cmVtb3ZlZCBjb2RlIG5vdyByZXNpZGVzLgorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3JtTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlcldp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZWJ1ZmZlckhlaWdodCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphdHRyaWJ1
dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNldCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1dlYkdMTGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2Vi
R0xMYXllci5tbToKKyAgICAgICAgKC1bV2ViR0xMYXllciBjb3B5Q0dMUGl4ZWxGb3JtYXRGb3JE
aXNwbGF5TWFzazpdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBjb3B5Q0dMQ29udGV4dEZvclBp
eGVsRm9ybWF0Ol0pOgorICAgICAgICAoLVtXZWJHTExheWVyIGRyYXdJbkNHTENvbnRleHQ6cGl4
ZWxGb3JtYXQ6Zm9yTGF5ZXJUaW1lOmRpc3BsYXlUaW1lOl0pOgorICAgICAgICAoLVtXZWJHTExh
eWVyIGNvcHlJbWFnZVNuYXBzaG90V2l0aENvbG9yU3BhY2U6XSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKwogMjAx
MS0wMS0yNiAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVy
LXN0YW1wZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDc2NjQwKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsOSBAQAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgi
CiAjaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgogI2luY2x1ZGUgIkNoZWNrZWRJbnQuaCIK
LSNpbmNsdWRlICJXZWJLaXRMb3NlQ29udGV4dC5oIgogI2luY2x1ZGUgIkNvbnNvbGUuaCIKICNp
bmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRN
TENhbnZhc0VsZW1lbnQuaCIKQEAgLTU5LDcgKzU5LDcgQEAKICNpbmNsdWRlICJXZWJHTFNoYWRl
ci5oIgogI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5oIgogI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxv
Y2F0aW9uLmgiCi0KKyNpbmNsdWRlICJXZWJLaXRMb3NlQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0
Zi9CeXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc093bkFycmF5UHRyLmg+CkBAIC0zNjUsNiArMzY1LDEyIEBAIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb24KICAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVz
KQogewogICAgIEFTU0VSVChtX2NvbnRleHQpOworCisgICAgLy8gQ3JlYXRlIHRoZSBEcmF3aW5n
QnVmZmVyCisgICAgbV9kcmF3aW5nQnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVEcmF3aW5nQnVm
ZmVyKEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOworICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwor
ICAgIAogICAgIHNldHVwRmxhZ3MoKTsKICAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwogfQpA
QCAtNDE0LDcgKzQyMCw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXpl
TmUKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKICAgICAgICAgaW5pdFZlcnRleEF0dHJp
YjAoKTsKIAotICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFz
KCktPmhlaWdodCgpKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdp
bmdCdWZmZXItPnJlc2V0KEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWln
aHQoKSkpOwogICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCks
IGNhbnZhcygpLT5oZWlnaHQoKSk7CiB9CiAKQEAgLTQ2MSw3ICs0NjgsMTMgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaQogICAgICAgICByZXR1cm47CiAgICAgY2Fu
dmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFs
c2U7CisgICAgCisgICAgaWYgKCFtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybgorICAg
ICAgICAKKyAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwogICAgIG1fY29udGV4dC0+cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhpcyk7CisgICAgbV9kcmF3aW5nQnVmZmVyLT5i
aW5kKCk7CiB9CiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFz
QnVmZmVyKCkgY29uc3QKQEAgLTQ2OSw2ICs0ODIsMTEgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnBhaW50c0ludG9DYQogICAgIHJldHVybiBtX2NvbnRleHQtPnBhaW50c0ludG9DYW52
YXNCdWZmZXIoKTsKIH0KIAorUGxhdGZvcm1MYXllciogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9k
cmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwOworfQorCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgaWYgKG1f
bmVlZHNVcGRhdGUpIHsKQEAgLTQ4Miw3ICs1MDAsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cmVzaGFwZShpbnQgCiAKICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIG1hcmsgdGhlIGNh
bnZhcyBhcyBkaXJ0eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2UgYnVmZmVyIHdpbGwg
YWxzbyBzdGFydCBvZmYKICAgICAvLyBjbGVhciAoYW5kIHRoaXMgbWF0Y2hlcyB3aGF0IHJlc2hh
cGUgd2lsbCBkbykuCi0gICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOworICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiB9CiAKIHVuc2lnbmVkIGludCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpCkBAIC05MDIsOSArOTIxLDIxIEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc1Jlc291cmNl
U2FmZSgpKQotICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGVsc2Ug
eworICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7CisgICAgICAgIC8vIENvbW1pdCBEcmF3aW5n
QnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAgIGlmICgh
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgbV9jb250ZXh0
LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lk
dGgsIGhlaWdodCwgYm9yZGVyKTsKKyAgICAgICAgCisgICAgICAgIC8vIFJlc3RvcmUgRHJhd2lu
Z0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBt
X2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUu
Zy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0
KCk7CisgICAgICAgICAgICAKICAgICAgICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7CiAg
ICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CiAgICAgICAgIGlm
IChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCks
IGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlw
cGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgewpAQCAtOTE2LDYgKzk0NywxMCBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKICAgICB9CiAgICAgLy8gRklYTUU6IGlmIHRoZSBm
cmFtZWJ1ZmZlciBpcyBub3QgY29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93IHNob3VsZCBiZSBl
eGVjdXRlZC4KICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwpA
QCAtMjY4MCw3ICsyNzE1LDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4
ZWxzKEcKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5i
YXNlQWRkcmVzcygpOworCisgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChl
LmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYm
IG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKyAg
ICAgICAgCiAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgZGF0YSk7CisgICAgCisgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlm
IG5lZWRlZAorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVy
KQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKwogI2lmIE9TKERBUldJTikKICAg
ICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVuIEdMIGRyaXZlciBidWcgb24gTWFj
IGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNo
b3VsZCBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KQEAgLTM5NjcsMTQgKzQwMTIsMTQg
QEAgaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZQogewogICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0V2lkdGgoKTsKLSAgICByZXR1
cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7CisgICAg
cmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCkg
OiAwOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVy
SGVpZ2h0KCkKIHsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPm9iamVjdCgpKQogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmct
PmdldEhlaWdodCgpOwotICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2lu
Z0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpIDogMDsKIH0KIAogV2ViR0xUZXh0dXJlKiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoR0MzRGVudW0gdGFyZ2V0LCBi
b29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA3NjY0MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNzQsNyArMjc0LDcgQEAgcHVibGljOgogCiAgICAgR3JhcGhpY3NDb250
ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgp
OyB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC0+cGxhdGZv
cm1MYXllcigpOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkg
Y29uc3Q7CiAjZW5kaWYKIAogICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
OwpAQCAtMzM5LDYgKzMzOSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEltYWdlPiB2aWRl
b0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50Kik7CiAKICAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5n
QnVmZmVyOwogCiAgICAgY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzdG9yZVRpbWVyIDog
cHVibGljIFRpbWVyQmFzZSB7CiAgICAgcHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA3
NjY0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1OSw4ICs0NTksNiBAQCBwdWJsaWM6CiAKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0T2JqOyB9Ci0gICAgUGxhdGZv
cm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0K
LSAgICBDQUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
Q0FMYXllcio+KG1fd2ViR0xMYXllci5nZXQoKSk7IH0KICNlbGlmIFBMQVRGT1JNKENIUk9NSVVN
KQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCgpIGNvbnN0OwogICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Q7
CkBAIC00ODMsMTEgKzQ4MSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKIAogICAgIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gY3JlYXRlRHJhd2luZ0J1ZmZl
cihjb25zdCBJbnRTaXplJiA9IEludFNpemUoKSk7CisgICAgdm9pZCByZW1vdmVEcmF3aW5nQnVm
ZmVyKERyYXdpbmdCdWZmZXIqKTsKKyAgICAKKyAgICBjb25zdCBBdHRyaWJ1dGVzJiBhdHRyaWJ1
dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyczsgfQogICAgIAotI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oQ0hST01JVU0pCi0gICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9uLCBibGl0
IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCi0gICAgdm9pZCBwcmVwYXJlVGV4
dHVyZSgpOwotI2VuZGlmCiAKICAgICAvLyBIZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVs
PT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlhbGl6ZWQgdG8gMC4KICAgICAvLyBSZXR1cm4gdHJ1
ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVzaXplZC4KQEAgLTc1OSw4ICs3NTYsNiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwogCi0gICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwg
aW50IGhlaWdodCk7Ci0KICNpZiBQTEFURk9STShDRykKICAgICB2b2lkIHBhaW50VG9DYW52YXMo
Y29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGludCBpbWFnZVdpZHRoLCBpbnQgaW1h
Z2VIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYW52YXNXaWR0aCwgaW50IGNh
bnZhc0hlaWdodCwgQ0dDb250ZXh0UmVmIGNvbnRleHQpOwpAQCAtODA4LDEwICs4MDMsOCBAQCBw
dWJsaWM6CiAgICAgLy8gZGV0ZXJtaW5lIHRoaXMuCiAgICAgRXh0ZW5zaW9uczNEKiBnZXRFeHRl
bnNpb25zKCk7CiAKLSAgICBJbnRTaXplIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7Ci0K
ICAgcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQzRChBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0
V2luZG93KiBob3N0V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAg
ICBHcmFwaGljc0NvbnRleHQzRChBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiwgUmVuZGVy
U3R5bGUpOwogCiAgICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50
YXRpb24gb2YgdGhpcyBtZXRob2QuCiAgICAgLy8KQEAgLTg2Myw2ICs4NTYsOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIEFscGhhT3AgYWxwaGFPcCwKICAgICAgICAgICAgICAgICAg
ICAgdm9pZCogZGVzdGluYXRpb25EYXRhKTsKIAorICAgIEF0dHJpYnV0ZXMgbV9hdHRyczsKKwog
I2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJl
cXVlc3RlZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsCiAgICAgLy8gaW4gcGFydGljdWxh
ciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgb3IKQEAg
LTg3MSw4ICs4NjYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsK
ICNlbmRpZgogCi0gICAgaW50IG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQ7Ci0KICNp
ZiBQTEFURk9STShNQUMpCiAgICAgdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgICBTdHJpbmcgc291
cmNlOwpAQCAtODg2LDIyICs4NzksOSBAQCBwdWJsaWM6CiAKICAgICBPd25QdHI8RXh0ZW5zaW9u
czNET3BlbkdMPiBtX2V4dGVuc2lvbnM7CiAKLSAgICBBdHRyaWJ1dGVzIG1fYXR0cnM7CiAgICAg
VmVjdG9yPFZlY3RvcjxmbG9hdD4gPiBtX3ZlcnRleEFycmF5OwogCiAgICAgQ0dMQ29udGV4dE9i
aiBtX2NvbnRleHRPYmo7Ci0gICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fd2ViR0xMYXllcjsK
LSAgICBHQzNEdWludCBtX3RleHR1cmU7Ci0gICAgR0MzRHVpbnQgbV9mYm87Ci0gICAgR0MzRHVp
bnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7Ci0KLSAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2ggRkJP
IGlzIGJvdW5kCi0gICAgR0MzRHVpbnQgbV9ib3VuZEZCTzsKLQotICAgIC8vIEZvciBtdWx0aXNh
bXBsaW5nCi0gICAgR0MzRHVpbnQgbV9tdWx0aXNhbXBsZUZCTzsKLSAgICBHQzNEdWludCBtX211
bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyOwotICAgIEdDM0R1aW50IG1fbXVsdGlzYW1wbGVD
b2xvckJ1ZmZlcjsKIAogICAgIC8vIEVycm9ycyByYWlzZWQgYnkgc3ludGhlc2l6ZUdMRXJyb3Io
KS4KICAgICBMaXN0SGFzaFNldDxHQzNEZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwCShyZXZpc2lvbiA3NjY0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5
Miw5IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICBtX2Nv
bnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0
KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CiAg
ICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOwogICAgIG1fY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotICAgIHJlc2l6
ZURlcHRoU3RlbmNpbCgwKTsKKyAgICAKKyAgICBpZiAoIW11bHRpc2FtcGxlKCkpCisgICAgICAg
IHJlc2l6ZURlcHRoU3RlbmNpbCgwKTsKICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgIC8vIENsZWFudXAKICAgICAg
ICAgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9t
YWMvRHJhd2luZ0J1ZmZlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0JKHJldmlzaW9uIDc2NjQw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVm
ZmVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIERyYXdpbmdCdWZmZXI6
OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAgICAgCiAgICAgLy8gQ3JlYXRlIHRoZSBX
ZWJHTExheWVyCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgICAgIG1fcGxh
dGZvcm1MYXllci5hZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10gaW5pdFdpdGhHcmFwaGljc0Nv
bnRleHQzRDptX2NvbnRleHQuZ2V0KCldKTsKKyAgICAgICAgbV9wbGF0Zm9ybUxheWVyLmFkb3B0
TlMoW1tXZWJHTExheWVyIGFsbG9jXSBpbml0V2l0aERyYXdpbmdCdWZmZXI6dGhpc10pOwogI2lm
bmRlZiBOREVCVUcKICAgICAgICAgW21fcGxhdGZvcm1MYXllci5nZXQoKSBzZXROYW1lOkAiRHJh
d2luZ0J1ZmZlciBMYXllciJdOwogI2VuZGlmICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1h
Yy5tbQkocmV2aXNpb24gNzY2NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDYgQEAKICNpbmNsdWRlICJVaW50OEFycmF5LmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllci5oIgog
I2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03
OCwzMCArNzcsMTkgQEAgc3RhdGljIHZvaWQgc2V0UGl4ZWxGb3JtYXQoVmVjdG9yPENHTFBpeAog
ICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigw
KSk7CiB9CiAKLVBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkK
K1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3csIFJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogewogICAgIC8vIFRoaXMgaW1wbGVtZW50YXRp
b24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhlIEhv
c3RXaW5kb3cuCiAgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3cs
IGZhbHNlKSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRS
ZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkp
OwogICAgIHJldHVybiBjb250ZXh0LT5tX2NvbnRleHRPYmogPyBjb250ZXh0LnJlbGVhc2UoKSA6
IDA7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCkK
LSAgICA6IG1fY3VycmVudFdpZHRoKDApCi0gICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKLSAgICAs
IG1fYXR0cnMoYXR0cnMpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoQXR0
cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogLyogaG9zdFdpbmRvdyAqLywgUmVuZGVyU3R5bGUg
LyogcmVuZGVyU3R5bGUgKi8pCisgICAgOiBtX2F0dHJzKGF0dHJzKQogICAgICwgbV9jb250ZXh0
T2JqKDApCi0gICAgLCBtX3RleHR1cmUoMCkKLSAgICAsIG1fZmJvKDApCi0gICAgLCBtX2RlcHRo
U3RlbmNpbEJ1ZmZlcigwKQotICAgICwgbV9ib3VuZEZCTygwKQotICAgICwgbV9tdWx0aXNhbXBs
ZUZCTygwKQotICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQotICAgICwg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5k
b3cpOwotCiAgICAgVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPiBhdHRyaWJzOwogICAg
IENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0T2JqID0gMDsKICAgICBHTGludCBudW1QaXhl
bEZvcm1hdHMgPSAwOwpAQCAtMTUxLDQxICsxMzksNiBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoR3JhCiAgICAgCiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKLSAg
ICAvLyBDcmVhdGUgdGhlIFdlYkdMTGF5ZXIKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKLSAgICAgICAgbV93ZWJHTExheWVyLmFkb3B0TlMoW1tXZWJHTExheWVyIGFsbG9jXSBpbml0
V2l0aEdyYXBoaWNzQ29udGV4dDNEOnRoaXNdKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFtt
X3dlYkdMTGF5ZXIuZ2V0KCkgc2V0TmFtZTpAIldlYkdMIExheWVyIl07Ci0jZW5kaWYgICAgCi0g
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIAotICAgIC8vIGNyZWF0ZSBhIHRleHR1
cmUgdG8gcmVuZGVyIGludG8KLSAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0g
ICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgOjpnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5F
QVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlO
X0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVApOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUCk7Ci0gICAgOjpnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotICAgIAotICAgIC8vIGNyZWF0ZSBhbiBGQk8KLSAg
ICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7Ci0gICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICAKLSAgICBtX2JvdW5kRkJP
ID0gbV9mYm87Ci0gICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2ls
IHx8IG1fYXR0cnMuZGVwdGgpKQotICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAm
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotCi0gICAgLy8gY3JlYXRlIGFuIG11bHRpc2FtcGxlIEZC
TwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewotICAgICAgICA6OmdsR2VuRnJhbWVidWZm
ZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBtX2Jv
dW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKLSAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNF
WFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChtX2F0dHJzLnN0
ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJz
RVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0gICAgCiAg
ICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCiAKICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5H
TEVSZXNvdXJjZXM7CkBAIC0yMTMsMTggKzE2Niw2IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFw
aGljc0NvbnRleHQzRChHcmEKIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0Qo
KQogewogICAgIGlmIChtX2NvbnRleHRPYmopIHsKLSAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRl
eHQobV9jb250ZXh0T2JqKTsKLSAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1
cmUpOwotICAgICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgICAgIDo6Z2xE
ZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAg
ICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQotICAgICAgICAg
ICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhT
dGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwg
Jm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1f
YXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgICAgIDo6Z2xEZWxl
dGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIH0K
LSAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwogICAgICAgICBD
R0xTZXRDdXJyZW50Q29udGV4dCgwKTsKICAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQobV9jb250
ZXh0T2JqKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvV2ViR0xMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9XZWJHTExheWVyLmgJKHJldmlzaW9uIDc2NjQwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsMTYgKzMyLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBHcmFwaGlj
c0xheWVyOwotICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworICAgIGNsYXNzIERyYXdpbmdC
dWZmZXI7CiB9CiAKIEBpbnRlcmZhY2UgV2ViR0xMYXllciA6IENBT3BlbkdMTGF5ZXIgCiB7CiAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV9sYXllck93bmVyOwotICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgV2ViQ29yZTo6RHJhd2luZ0J1ZmZlciog
bV9kcmF3aW5nQnVmZmVyOwogfQogCi0tIChpZClpbml0V2l0aEdyYXBoaWNzQ29udGV4dDNEOihX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCopY29udGV4dDsKKy0gKGlkKWluaXRXaXRoRHJhd2lu
Z0J1ZmZlcjooV2ViQ29yZTo6RHJhd2luZ0J1ZmZlciopZHJhd2luZ0J1ZmZlcjsKIAogLSAoQ0dJ
bWFnZVJlZiljb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihDR0NvbG9yU3BhY2VSZWYp
Y29sb3JTcGFjZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L1dlYkdMTGF5ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL1dlYkdMTGF5ZXIubW0JKHJldmlzaW9uIDc2NjQwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIubW0JKHdvcmtpbmcgY29weSkKQEAg
LTMwLDcgKzMwLDcgQEAKIAogI2ltcG9ydCAiV2ViR0xMYXllci5oIgogCi0jaW1wb3J0ICJHcmFw
aGljc0NvbnRleHQzRC5oIgorI2ltcG9ydCAiRHJhd2luZ0J1ZmZlci5oIgogI2ltcG9ydCAiR3Jh
cGhpY3NMYXllci5oIgogI2ltcG9ydCA8T3BlbkdML09wZW5HTC5oPgogI2ltcG9ydCA8d3RmL0Zh
c3RNYWxsb2MuaD4KQEAgLTQxLDkgKzQxLDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IEBpbXBsZW1lbnRhdGlvbiBXZWJHTExheWVyCiAKLS0oaWQpaW5pdFdpdGhHcmFwaGljc0NvbnRl
eHQzRDooR3JhcGhpY3NDb250ZXh0M0QqKWNvbnRleHQKKy0oaWQpaW5pdFdpdGhEcmF3aW5nQnVm
ZmVyOihEcmF3aW5nQnVmZmVyKilkcmF3aW5nQnVmZmVyCiB7Ci0gICAgbV9jb250ZXh0ID0gY29u
dGV4dDsKKyAgICBtX2RyYXdpbmdCdWZmZXIgPSBkcmF3aW5nQnVmZmVyOwogICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CiAgICAgcmV0dXJuIHNlbGY7CiB9CkBAIC01NywxOSArNTcsMjIgQEAgLShD
R0xQaXhlbEZvcm1hdE9iailjb3B5Q0dMUGl4ZWxGb3JtYXRGbwogICAgIC8vIElmIG5lZWRlZCB3
ZSB3aWxsIGhhdmUgdG8gc2V0IHRoZSBkaXNwbGF5IG1hc2sgaW4gdGhlIENhbnZhcyBDR0xDb250
ZXh0IGFuZAogICAgIC8vIG1ha2Ugc3VyZSBpdCBtYXRjaGVzLgogICAgIFVOVVNFRF9QQVJBTSht
YXNrKTsKLSAgICByZXR1cm4gQ0dMUmV0YWluUGl4ZWxGb3JtYXQoQ0dMR2V0UGl4ZWxGb3JtYXQo
bV9jb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpKTsKKyAgICByZXR1cm4gQ0dM
UmV0YWluUGl4ZWxGb3JtYXQoQ0dMR2V0UGl4ZWxGb3JtYXQobV9kcmF3aW5nQnVmZmVyLT5ncmFw
aGljc0NvbnRleHQzRCgpLT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpKTsKIH0KIAogLShD
R0xDb250ZXh0T2JqKWNvcHlDR0xDb250ZXh0Rm9yUGl4ZWxGb3JtYXQ6KENHTFBpeGVsRm9ybWF0
T2JqKXBpeGVsRm9ybWF0CiB7CiAgICAgQ0dMQ29udGV4dE9iaiBjb250ZXh0T2JqOwotICAgIENH
TENyZWF0ZUNvbnRleHQocGl4ZWxGb3JtYXQsIG1fY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCgpLCAmY29udGV4dE9iaik7CisgICAgQ0dMQ3JlYXRlQ29udGV4dChwaXhlbEZvcm1h
dCwgbV9kcmF3aW5nQnVmZmVyLT5ncmFwaGljc0NvbnRleHQzRCgpLT5wbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEKCksICZjb250ZXh0T2JqKTsKICAgICByZXR1cm4gY29udGV4dE9iajsKIH0KIAog
LSh2b2lkKWRyYXdJbkNHTENvbnRleHQ6KENHTENvbnRleHRPYmopZ2xDb250ZXh0IHBpeGVsRm9y
bWF0OihDR0xQaXhlbEZvcm1hdE9iailwaXhlbEZvcm1hdCBmb3JMYXllclRpbWU6KENGVGltZUlu
dGVydmFsKXRpbWVJbnRlcnZhbCBkaXNwbGF5VGltZTooY29uc3QgQ1ZUaW1lU3RhbXAgKil0aW1l
U3RhbXAKIHsKLSAgICBtX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7CisgICAgbV9kcmF3aW5n
QnVmZmVyLT5ncmFwaGljc0NvbnRleHQzRCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBt
X2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwor
ICAgIG1fZHJhd2luZ0J1ZmZlci0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZmluaXNoKCk7CiAKICAg
ICBDR0xTZXRDdXJyZW50Q29udGV4dChnbENvbnRleHQpOwogCkBAIC04NCw3ICs4Nyw3IEBAIC0o
dm9pZClkcmF3SW5DR0xDb250ZXh0OihDR0xDb250ZXh0T2JqKWcKICAgICBnbExvYWRJZGVudGl0
eSgpOwogCiAgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV8yRCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpKTsKKyAgICBnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fZHJhd2luZ0J1ZmZlci0+cGxhdGZvcm1Db2xvckJ1ZmZl
cigpKTsKICAgICAKICAgICBnbEJlZ2luKEdMX1RSSUFOR0xFX0ZBTik7CiAgICAgICAgIGdsVGV4
Q29vcmQyZigwLCAwKTsKQEAgLTExMSw3ICsxMTQsNyBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2
b2lkICosIGNvbnN0IHZvaWQgCiAKIC0oQ0dJbWFnZVJlZiljb3B5SW1hZ2VTbmFwc2hvdFdpdGhD
b2xvclNwYWNlOihDR0NvbG9yU3BhY2VSZWYpY29sb3JTcGFjZQogewotICAgIENHTFNldEN1cnJl
bnRDb250ZXh0KG1fY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICBD
R0xTZXRDdXJyZW50Q29udGV4dChtX2RyYXdpbmdCdWZmZXItPmdyYXBoaWNzQ29udGV4dDNEKCkt
PnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSk7CiAKICAgICBSZXRhaW5QdHI8Q0dDb2xvclNw
YWNlUmVmPiBpbWFnZUNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwogICAgIGlmICghaW1hZ2VDb2xv
clNwYWNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAJKHJldmlzaW9uIDc2NjQw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDEwIEBAIGJvb2wgRXh0ZW5z
aW9uczNET3BlbkdMOjpzdXBwb3J0cyhjb25zdCAKICAgICAvLyBHTF9PRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0IGFzIGF2YWlsYWJsZS4KICAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfZmxv
YXQiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQogICAgICAgICByZXR1
cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVyZV9mbG9hdCIp
OworICAgICAgICAKKyAgICAvLyBXZSByZXBvcnQgdHJ1ZSBmb3IgR0xfT0VTX3BhY2tlZF9kZXB0
aF9zdGVuY2lsIGlmIEdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCBpcyBzdXBwb3J0ZWQKKyAg
ICBpZiAobmFtZSA9PSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIikKKyAgICAgICAgcmV0
dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX3BhY2tlZF9kZXB0aF9z
dGVuY2lsIik7CiAKICAgICAvLyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyB0aGUgc3RhbmRh
cmQgZGVyaXZhdGl2ZSBmdW5jdGlvbnMKICAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJk
X2Rlcml2YXRpdmVzIikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cAkocmV2aXNpb24gNzY2NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw2IEBACiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkFycmF5QnVm
ZmVyVmlldy5oIgotI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgogI2luY2x1
ZGUgIkZsb2F0MzJBcnJheS5oIgpAQCAtNDEsNiArNDAsNyBAQAogI2luY2x1ZGUgIkludDMyQXJy
YXkuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlVpbnQ4QXJyYXku
aCIKKyNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgogCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1
ZGUgPE9wZW5HTC9nbC5oPgpAQCAtNTUsMTAgKzU1LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dmFsaWRhdGVBdHRyaWJ1dAogewogICAgIGNvbnN0IGNoYXIqIGV4dGVuc2lvbnMgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKTsK
ICAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIGlmIChzdGQ6OnN0cnN0cihleHRl
bnNpb25zLCAiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIikpIHsKLSAgICAgICAgICAgIGlm
ICghbV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgICAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsK
LSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChzdGQ6OnN0cnN0cihleHRlbnNpb25zLCAiR0xf
RVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIikpCisgICAgICAgICAgICBtX2F0dHJzLmRlcHRoID0g
dHJ1ZTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7
CiAgICAgfQogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewpAQCAtNzksOSArNzgsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZQogewogICAgIEhUTUxDYW52
YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOworICAgIAorICAgIGludCB3aWR0aCA9IGNv
bnRleHQtPmNhbnZhcygpLT53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBjb250ZXh0LT5jYW52
YXMoKS0+aGVpZ2h0KCk7CiAKLSAgICBpbnQgcm93Qnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAqIDQ7
Ci0gICAgaW50IHRvdGFsQnl0ZXMgPSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsKKyAgICBp
bnQgcm93Qnl0ZXMgPSB3aWR0aCAqIDQ7CisgICAgaW50IHRvdGFsQnl0ZXMgPSByb3dCeXRlcyAq
IGhlaWdodDsKIAogICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHBpeGVscyhuZXcgdW5z
aWduZWQgY2hhclt0b3RhbEJ5dGVzXSk7CiAgICAgaWYgKCFwaXhlbHMpCkBAIC04OSwyMCArOTEs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1JlCiAKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKIAotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKLSAg
ICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAg
ICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJy
ZW50SGVpZ2h0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9DT0xP
Ul9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRy
dWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKLSAg
ICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KICAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKICAgICBib29sIG11c3RSZXN0b3JlUGFj
a0FsaWdubWVudCA9IGZhbHNlOwogICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9QQUNLX0FMSUdOTUVO
VCwgJnBhY2tBbGlnbm1lbnQpOwpAQCAtMTExLDE4MSArOTksMTIgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZQogICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1l
bnQgPSB0cnVlOwogICAgIH0KIAotICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdp
ZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JF
ViwgcGl4ZWxzLmdldCgpKTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0
LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYsIHBpeGVscy5nZXQoKSk7CiAK
ICAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQogICAgICAgICA6OmdsUGl4ZWxTdG9y
ZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOwogCi0gICAgaWYgKG11c3RSZXN0
b3JlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9ib3VuZEZCTyk7Ci0KLSAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgbV9jdXJy
ZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwKLSAgICAgICAgICAgICAgICAgIGNhbnZhcy0+d2lk
dGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1D
b250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0
aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAoIW1fY29udGV4dE9iaikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJl
bnRIZWlnaHQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2N1cnJlbnRXaWR0aCA9IHdp
ZHRoOwotICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKLSAgICAKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICAKLSAgICBHTHVpbnQgaW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JG
b3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gMDsKLSAgICBpZiAobV9hdHRycy5h
bHBoYSkgewotICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTg7Ci0gICAgICAg
IGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbnRlcm5hbENv
bG9yRm9ybWF0ID0gR0xfUkdCODsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7Ci0gICAg
fQotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgewotICAgICAgICAv
LyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQg
ZGVwdGggaXMgbm90LgotICAgICAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0M0QgY29uc3RydWN0
b3IuCi0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgJiYgbV9hdHRycy5kZXB0aCkKLSAgICAg
ICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9F
WFQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0
ID0gR0xfREVQVEhfQ09NUE9ORU5UOwotICAgIH0KLQotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8g
PSBmYWxzZTsKLQotICAgIC8vIHJlc2l6ZSBtdWx0aXNhbXBsZSBGQk8KLSAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMpIHsKLSAgICAgICAgR0xpbnQgbWF4U2FtcGxlQ291bnQ7Ci0gICAgICAgIDo6
Z2xHZXRJbnRlZ2VydihHTF9NQVhfU0FNUExFU19FWFQsICZtYXhTYW1wbGVDb3VudCk7Ci0gICAg
ICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oOCwgbWF4U2FtcGxlQ291bnQpOwotICAg
ICAgICBpZiAoc2FtcGxlQ291bnQgPiBtYXhTYW1wbGVDb3VudCkKLSAgICAgICAgICAgIHNhbXBs
ZUNvdW50ID0gbWF4U2FtcGxlQ291bnQ7Ci0gICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fbXVs
dGlzYW1wbGVGQk8pIHsKLSAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJB
TUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgICAgIG11c3RSZXN0b3Jl
RkJPID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChH
TF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICA6
OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQs
IHNhbXBsZUNvdW50LCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAg
ICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xf
Q09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxl
Q29sb3JCdWZmZXIpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVw
dGgpIHsKLSAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZF
Ul9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgOjpn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBz
YW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwot
ICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgICAgICAgICA6OmdsRnJh
bWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FU
VEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAg
ICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdM
X0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxl
RGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgfQotICAgICAgICA6OmdsQmluZFJlbmRlcmJ1
ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKLSAgICAgICAgaWYgKGdsQ2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpICE9IEdMX0ZSQU1FQlVGRkVSX0NP
TVBMRVRFX0VYVCkgewotICAgICAgICAgICAgLy8gRklYTUU6IGNsZWFudXAuCi0gICAgICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gcmVzaXplIHJl
Z3VsYXIgRkJPCi0gICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKLSAgICAgICAgbXVzdFJl
c3RvcmVGQk8gPSB0cnVlOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgbV9mYm8pOwotICAgIH0KLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBp
bnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5T
SUdORURfQllURSwgMCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3Rl
eHR1cmUsIDApOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSAgICBp
ZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0
aCkpIHsKLSAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFn
ZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7Ci0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICA6
OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVO
Q0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7Ci0gICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgOjpnbEZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNI
TUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAg
ICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0g
ICAgfQotICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJf
RVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKLSAgICAgICAgLy8gRklYTUU6
IGNsZWFudXAKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9h
dHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBpZiAobV9ib3VuZEZCTyA9
PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsK
LSAgICB9Ci0KLSAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8gMC4KLSAgICBHTGZs
b2F0IGNsZWFyQ29sb3JbXSA9IHswLCAwLCAwLCAwfSwgY2xlYXJEZXB0aCA9IDA7Ci0gICAgR0xp
bnQgY2xlYXJTdGVuY2lsID0gMDsKLSAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7R0xfVFJV
RSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRX0sIGRlcHRoTWFzayA9IEdMX1RSVUU7Ci0gICAg
R0x1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZmZjsKLSAgICBHTGJvb2xlYW4gaXNTY2lzc29y
RW5hYmxlZCA9IEdMX0ZBTFNFOwotICAgIEdMYm9vbGVhbiBpc0RpdGhlckVuYWJsZWQgPSBHTF9G
QUxTRTsKLSAgICBHTGJpdGZpZWxkIGNsZWFyTWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7Ci0g
ICAgOjpnbEdldEZsb2F0dihHTF9DT0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7Ci0gICAg
OjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgOjpnbEdldEJvb2xlYW52KEdMX0NPTE9S
X1dSSVRFTUFTSywgY29sb3JNYXNrKTsKLSAgICA6OmdsQ29sb3JNYXNrKEdMX1RSVUUsIEdMX1RS
VUUsIEdMX1RSVUUsIEdMX1RSVUUpOwotICAgIGlmIChtX2F0dHJzLmRlcHRoKSB7Ci0gICAgICAg
IDo6Z2xHZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsKLSAgICAg
ICAgOjpnbENsZWFyRGVwdGgoMSk7Ci0gICAgICAgIDo6Z2xHZXRCb29sZWFudihHTF9ERVBUSF9X
UklURU1BU0ssICZkZXB0aE1hc2spOwotICAgICAgICA6OmdsRGVwdGhNYXNrKEdMX1RSVUUpOwot
ICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsKLSAgICB9Ci0gICAgaWYg
KG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9D
TEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoMCk7
Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnBy
ZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFzaykpOwotICAgICAgICA6OmdsU3RlbmNpbE1hc2tT
ZXBhcmF0ZShHTF9GUk9OVCwgMHhmZmZmZmZmZik7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHTF9T
VEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgfQotICAgIGlzU2Npc3NvckVuYWJsZWQgPSA6OmdsSXNF
bmFibGVkKEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAgOjpnbERpc2FibGUoR0xfU0NJU1NPUl9URVNU
KTsKLSAgICBpc0RpdGhlckVuYWJsZWQgPSA6OmdsSXNFbmFibGVkKEdMX0RJVEhFUik7Ci0gICAg
OjpnbERpc2FibGUoR0xfRElUSEVSKTsKLQotICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOwotCi0g
ICAgOjpnbENsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xv
clsyXSwgY2xlYXJDb2xvclszXSk7Ci0gICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNv
bG9yTWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOwotICAgIGlmIChtX2F0dHJz
LmRlcHRoKSB7Ci0gICAgICAgIDo6Z2xDbGVhckRlcHRoKGNsZWFyRGVwdGgpOwotICAgICAgICA6
OmdsRGVwdGhNYXNrKGRlcHRoTWFzayk7Ci0gICAgfQotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwp
IHsKLSAgICAgICAgOjpnbENsZWFyU3RlbmNpbChjbGVhclN0ZW5jaWwpOwotICAgICAgICA6Omds
U3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgc3RlbmNpbE1hc2spOwotICAgIH0KLSAgICBp
ZiAoaXNTY2lzc29yRW5hYmxlZCkKLSAgICAgICAgOjpnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1Qp
OwotICAgIGVsc2UKLSAgICAgICAgOjpnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKLSAgICBp
ZiAoaXNEaXRoZXJFbmFibGVkKQotICAgICAgICA6OmdsRW5hYmxlKEdMX0RJVEhFUik7Ci0gICAg
ZWxzZQotICAgICAgICA6OmdsRGlzYWJsZShHTF9ESVRIRVIpOwotCi0gICAgaWYgKG11c3RSZXN0
b3JlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9ib3VuZEZCTyk7Ci0KLSAgICA6OmdsRmx1c2goKTsKLX0KLQotSW50U2l6ZSBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKQotewotICAgIHJldHVybiBJ
bnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zi
byk7Ci0gICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoMCwgMCwgbV9jdXJyZW50V2lkdGgs
IG1fY3VycmVudEhlaWdodCwgMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwg
R0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOwotICAgIH0KLSAgICA6Omds
RmluaXNoKCk7CisgICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIHdpZHRoLCBoZWlnaHQs
IGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3Rp
dmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCkBAIC0zMTgsMTYgKzEzNyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIoR0MzRGUKIAogdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZm
ZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGZibzsKLSAgICBp
ZiAoYnVmZmVyKQotICAgICAgICBmYm8gPSBidWZmZXI7Ci0gICAgZWxzZQotICAgICAgICBmYm8g
PSAobV9hdHRycy5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOwotICAgIGlm
IChmYm8gIT0gbV9ib3VuZEZCTykgewotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKHRh
cmdldCwgZmJvKTsKLSAgICAgICAgbV9ib3VuZEZCTyA9IGZibzsKLSAgICB9CisgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0
IHJlbmRlcmJ1ZmZlcikKQEAgLTQ4MywyOSArMjkzLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvbXBpbGVTaGFkZXIoUGwKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlm
IChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsK
LSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwg
bV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJB
V19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVY
VCh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdo
dCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICB9CiAgICAgOjpnbENv
cHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJP
ID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKICAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211
bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9G
UkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xC
bGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsg
d2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0gICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0g
ICAgfQogICAgIDo6Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMg
JiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCkBAIC03OTYsMTYg
KzU5MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGkKICAgICAv
LyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFk
aW5nIHBpeGVscy4KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsRmx1c2goKTsK
LSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxl
RkJPKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZF
Ul9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xCbGl0RnJhbWVi
dWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkg
KyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIDo6
Z2xGbHVzaCgpOwotICAgIH0KICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2Jv
dW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101643</attachid>
            <date>2011-07-21 14:22:36 -0700</date>
            <delta_ts>2011-08-16 14:33:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20110721171914.patch</filename>
            <type>text/plain</type>
            <size>26839</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxNDkxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDggQEAKKzIwMTEtMDctMjEgIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gRmlyc3QgYXR0
ZW1wdCBhdCBjb252ZXJ0aW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2luZyBEcmF3aW5n
QnVmZmVyLiAgCisgICAgICAgIFRoaXMgY2hhbmdlIHNob3VsZCBvbmx5IGFmZmVjdCB0aGUgYmVo
YXZpb3VyIG9mIENocm9tZS4gIE90aGVyIHBvcnRzIHdpbGwgY29udGludWUgdG8gdXNlIHRoZWly
IGV4aXN0aW5nIFdlYkdMIHByZXNlbnRhdGlvbiBtZWNoYW5pc21zLgorICAgICAgICBUaGUgZGVz
aWduIG9mIHRoaXMgY2hhbmdlIHN0aWxsIG5lZWRzIHNvbWUgd29yay4gIERyYXdpbmdCdWZmZXIg
aXMgY291cGxlZCB3aXRoIENhbnZhczJEIHN0cnVjdHVyZXMgdmlhIHBsYXRmb3JtTGF5ZXIsIHdo
aWNoIG1lYW5zIGl0IGlzIHN0aWxsIG5vdCBxdWl0ZSBzdWl0YWJsZQorICAgICAgICBmb3IgdXNl
IGluIGEgV2ViR0wgY29udGV4dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOiAgQ29u
ZGl0aW9uYWxseSBjb25zdHJ1Y3QgYW5kIHVzZSBhIERyYXdpbmdCdWZmZXIgZm9yIGFsbCByZW5k
ZXJpbmcgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1l
YnVmZmVySGVpZ2h0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHA6
ICBHcmFwaGljc0NvbnRleHRzIGNvbmRpdGlvbmFsbHkgc3RvcmUgYSByYXcgcG9pbnRlciB0byBh
IERyYXdpbmdCdWZmZXIuICBUaGUgRHJhd2luZ0J1ZmZlciBpcyBpbnN0YWxsZWQgdG8gdGhlIHBs
YXRmb3JtIGxheWVyIGNyZWF0ZWQgYnkgdGhlIEdyYXBoaWNzQ29udGV4dDNELgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURyYXdpbmdCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2V0RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDogIFB1bGxl
ZCBhIGZldyByb3V0aW5lcyB0aGF0IGFyZSBub3cgY29tbW9uIHRvIENhbnZhczJEIGFuZCBXZWJH
TCB0byBDYW52YXNMYXllckNocm9taXVtLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXll
ckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OkNhbnZhc0xheWVyQ2hyb21p
dW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRp
ZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVtOjpzZXREcmF3aW5n
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OnVwZGF0ZVBs
YXRmb3JtVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1
bTo6Z2V0RHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdC
dWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOiAgQWRkIG9wdGlvbmFsIHBhcmVudFRleHR1
cmVJZCBwYXJhbWV0ZXIgdG8gYnlwYXNzIHJlcXVlc3RpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHBs
YXRmb3JtTGF5ZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xM
YXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0RyYXdpbmdCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6
Y29tbWl0KTogIEFOR0xFIGRvZXMgbm90IHN1cHBvcnQgTElORUFSIHdoZW4gZG9pbmcgYSBmYm8g
YmxpdC4gIEJlY2F1c2Ugbm8gc2NhbGluZyBpcyBwZXJmb3JtZWQsIHdlIGNhbiB1c2UgTkVBUkVT
VC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oOgorCiAy
MDExLTA3LTIxICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZW1vdmUgTGVnYWN5RGVmYXVsdE9wdGlvbmFsQXJndW1lbnRzIGZsYWcgZnJvbSBGaWxlQVBJ
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDkxNDQ3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgxLDgg
KzM4MSwxOCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAg
LCBtX3ZpZGVvQ2FjaGUoNCkKICAgICAsIG1fY29udGV4dExvc3QoZmFsc2UpCiAgICAgLCBtX2F0
dHJpYnV0ZXMoYXR0cmlidXRlcykKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQogewogICAgIEFT
U0VSVChtX2NvbnRleHQpOworCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgLy8gQ3JlYXRl
IHRoZSBEcmF3aW5nQnVmZmVyCisgICAgbV9kcmF3aW5nQnVmZmVyID0gbV9jb250ZXh0LT5jcmVh
dGVEcmF3aW5nQnVmZmVyKEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWln
aHQoKSkpOworI2VuZGlmCisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmJpbmQoKTsKKwogICAgIHNldHVwRmxhZ3MoKTsKICAgICBpbml0aWFsaXpl
TmV3Q29udGV4dCgpOwogfQpAQCAtNDQ4LDcgKzQ1OCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aW5pdGlhbGl6ZU5lCiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAg
ICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CiAKLSAgICBtX2NvbnRleHQtPnJlc2hhcGUoY2FudmFz
KCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKGNhbnZhcygpLT53aWR0
aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+
cmVzaGFwZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKKwogICAgIG1f
Y29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWln
aHQoKSk7CiAKICAgICBtX2NvbnRleHQtPnNldENvbnRleHRMb3N0Q2FsbGJhY2soYWRvcHRQdHIo
bmV3IFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayh0aGlzKSkpOwpAQCAtNTc0LDcg
KzU4OCwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpCiAgICAg
ICAgIHJldHVybjsKICAgICBjYW52YXMoKS0+Y2xlYXJDb3BpZWRJbWFnZSgpOwogICAgIG1fbWFy
a2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CiAgICAgbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKIH0KIAogUGFzc1JlZlB0cjxJbWFnZURhdGE+
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEo
KQpAQCAtNjEyLDcgKzYzMSwxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFw
ZShpbnQKIAogICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5
LCBzaW5jZSB0aGUgbmV3bHkgY3JlYXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9m
ZgogICAgIC8vIGNsZWFyIChhbmQgdGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4K
LSAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CisgICAgaWYgKG1fZHJhd2lu
Z0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdpZHRoLCBo
ZWlnaHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVp
Z2h0KTsKIH0KIAogaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlcldpZHRo
KCkgY29uc3QKQEAgLTEwODAsOSArMTEwMiwyMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleEltYWdlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2xlYXJJZkNvbXBv
c2l0ZWQoKTsKLSAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkKKyAgICBpZiAoaXNSZXNvdXJjZVNh
ZmUoKSkgeworICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4s
IGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYm
IG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7
CisKICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSAgICBlbHNlIHsKKwor
ICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgIGlmICgh
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ29tbWl0IERy
YXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAgICAgIEdDM0RpbnQgY2xpcHBlZFgs
IGNsaXBwZWRZOwogICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0
OwogICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVi
dWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNs
aXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKQEAgLTEwOTQsNiArMTEy
OCwxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyKTsKKworICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisg
ICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAg
ICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CiAgICAgfQogICAgIC8vIEZJWE1FOiBp
ZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBiZWxvdyBzaG91
bGQgYmUgZXhlY3V0ZWQuCiAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFKTsKQEAgLTI4NzIsNyArMjkxMCwxNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cmVhZFBpeGVscyhHCiAgICAgfQogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CiAgICAgdm9pZCog
ZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKKworICAgIC8vIENvbW1pdCBEcmF3aW5nQnVm
ZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisgICAgaWYgKCFtX2ZyYW1l
YnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+Y29tbWl0KCk7CisKICAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKworICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZl
ciBpZiBuZWVkZWQKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisKICNpZiBPUyhEQVJXSU4p
CiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24gd2hlbiBHTCBkcml2ZXIgYnVnIG9u
IE1hYyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyB3aGVuIGFscGhhIGlzIG9mZiwgcmVhZFBpeGVs
cyBzaG91bGQgc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAuCkBAIC00MTIzLDE0ICs0MTcx
LDE0IEBAIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWUKIHsKICAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgp
KQogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldFdpZHRoKCk7Ci0gICAg
cmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOwor
ICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0
aCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7CiB9
CiAKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQo
KQogewogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGlu
Zy0+b2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0SGVp
Z2h0KCk7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUo
KS5oZWlnaHQoKTsKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVy
LT5zaXplKCkuaGVpZ2h0KCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCkuaGVpZ2h0KCk7CiB9CiAKIFdlYkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVRleHR1cmVCaW5kaW5nKEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0Zv
ckN1YmVNYXApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gOTE0NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAogCiAjaW5jbHVkZSAi
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKQEAgLTYxNyw2ICs2MTgsMTAgQEAgcHVibGljOgog
ICAgIGJvb2wgc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0RzaXplaSBudW1WZXJ0ZXgpOwogICAg
IHZvaWQgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKIAorICAg
IC8vIE9wdGlvbmFsIHN0cnVjdHVyZSBmb3IgcmVuZGVyaW5nIHRvIGEgRHJhd2luZ0J1ZmZlciwg
aW5zdGVhZCBvZgorICAgIC8vIGRpcmVjdGx5IHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2NvbnRl
eHQuCisgICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IG1fZHJhd2luZ0J1ZmZlcjsKKwogICAgIHZv
aWQgbG9zZUNvbnRleHQoKTsKICAgICAvLyBIZWxwZXIgZm9yIHJlc3RvcmF0aW9uIGFmdGVyIGNv
bnRleHQgbG9zdC4KICAgICB2b2lkIG1heWJlUmVzdG9yZUNvbnRleHQoTG9zdENvbnRleHRNb2Rl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDkxNDQ3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw3ICs1OSwxMCBAQCB1aW50OF90IGNvbnZlcnRDb2xvcjE2QmlnVG84KHVpbnQxNl90IHZh
CiAKIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURy
YXdpbmdCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICByZXR1cm4gRHJhd2luZ0J1
ZmZlcjo6Y3JlYXRlKHRoaXMsIHNpemUpOworICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3
aW5nQnVmZmVyKERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBzaXplKSk7CisgICAgc2V0RHJh
d2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyLmdldCgpKTsKKyAgICByZXR1cm4gZHJhd2luZ0J1ZmZl
cjsKKwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZl
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCB1bnBhY2tBbGlnbm1lbnQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgJKHJldmlzaW9uIDkxNDQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtNDk4LDcgKzQ5OCwx
MSBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIFBhc3NS
ZWZQdHI8RHJhd2luZ0J1ZmZlcj4gY3JlYXRlRHJhd2luZ0J1ZmZlcihjb25zdCBJbnRTaXplJiA9
IEludFNpemUoKSk7Ci0gICAgCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgdm9pZCBzZXRE
cmF3aW5nQnVmZmVyKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpIHsgbV9kcmF3aW5nQnVm
ZmVyID0gZHJhd2luZ0J1ZmZlcjsgfQorICAgIERyYXdpbmdCdWZmZXIqIGdldERyYXdpbmdCdWZm
ZXIoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdCdWZmZXI7IH0KKyNlbmRpZgorCiAjaWYgUExB
VEZPUk0oTUFDKSB8fCBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oR1RLKQogICAgIC8v
IFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3Vs
YXIgRkJPLgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKQEAgLTk0OCw2ICs5NTIsMTAgQEAg
cHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOwogICAg
IE93blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFsPiBtX2ludGVybmFsOwogI2VuZGlmCisK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZm
ZXI7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gOTE0NDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw4IEBAIFBhc3NSZWZQdHI8Q2FudmFzMkRM
YXllckNocm9taXVtPiBDYW52YXMKIAogQ2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExh
eWVyQ2hyb21pdW0oRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgR3JhcGhpY3NMYXllckNo
cm9taXVtKiBvd25lcikKICAgICA6IENhbnZhc0xheWVyQ2hyb21pdW0ob3duZXIpCi0gICAgLCBt
X2RyYXdpbmdCdWZmZXIoZHJhd2luZ0J1ZmZlcikKIHsKKyAgICBzZXREcmF3aW5nQnVmZmVyKGRy
YXdpbmdCdWZmZXIpOwogfQogCiBDYW52YXMyRExheWVyQ2hyb21pdW06On5DYW52YXMyRExheWVy
Q2hyb21pdW0oKQpAQCAtNzIsMzIgKzcyLDEyIEBAIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVt
Ojp1cGRhdGVDb21wb3MKIHsKICAgICBpZiAoIW1fY29udGVudHNEaXJ0eSB8fCAhZHJhd3NDb250
ZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobV90ZXh0dXJlQ2hhbmdlZCkgeyAvLyBX
ZSBoYXZlIHRvIGdlbmVyYXRlIGEgbmV3IGJhY2tpbmcgdGV4dHVyZS4KLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwotICAgICAgICBp
ZiAobV90ZXh0dXJlSWQpCi0gICAgICAgICAgICBjb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fdGV4
dHVyZUlkKTsKLSAgICAgICAgbV90ZXh0dXJlSWQgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7
Ci0gICAgICAgIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKTsKLSAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKLSAgICAgICAgSW50U2l6ZSBzaXplID0gbV9kcmF3aW5n
QnVmZmVyLT5zaXplKCk7Ci0gICAgICAgIGNvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAgICAgIC8vIFNldCB0aGUg
bWluLW1hZyBmaWx0ZXJzIHRvIGxpbmVhciBhbmQgd3JhcCBtb2RlcyB0byBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRQotICAgICAgICAvLyB0byBnZXQgYXJvdW5kIE5QT1QgdGV4dHVy
ZSBsaW1pdGF0aW9ucyBvZiBHTEVTLgotICAgICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
SU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICAgICAgY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0g
ICAgICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6
OkNMQU1QX1RPX0VER0UpOwotICAgICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Qs
IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICAgICAgbV90ZXh0dXJlQ2hh
bmdlZCA9IGZhbHNlOwotICAgICAgICAvLyBGSVhNRTogVGhlIGZpbmlzaCgpIGhlcmUgaXMgcmVx
dWlyZWQgYmVjYXVzZSB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0dXJlIGNyZWF0
ZWQgaW4gdGhpcwotICAgICAgICAvLyBjb250ZXh0ICh0aGUgY29tcG9zaXRvciBjb250ZXh0KSBp
cyBhY3R1YWxseSBjcmVhdGVkIGJ5IHRoZSBzZXJ2aWNlIHNpZGUgYmVmb3JlIHRoZSBjaGlsZCBj
b250ZXh0Ci0gICAgICAgIC8vIGF0dGVtcHRzIHRvIHVzZSBpdCAoaW4gcHVibGlzaFRvUGxhdGZv
cm1MYXllcikuICBmaW5pc2goKSBpcyBjdXJyZW50bHkgdGhlIG9ubHkgY2FsbCB3aXRoIHN0cm9u
ZwotICAgICAgICAvLyBlbm91Z2ggc2VtYW50aWNzIHRvIHByb21pc2UgdGhpcywgYnV0IGlzIGFj
dHVhbGx5IG11Y2ggc3Ryb25nZXIuICBJZGVhbGx5IHdlJ2QgZG8gc29tZXRoaW5nIGxpa2UKLSAg
ICAgICAgLy8gaW5zZXJ0aW5nIGEgZmVuY2UgaGVyZSBhbmQgd2FpdGluZyBmb3IgaXQgYmVmb3Jl
IHRyeWluZyB0byBwdWJsaXNoLgotICAgICAgICBjb250ZXh0LT5maW5pc2goKTsKLSAgICB9CisK
KyAgICB1cGRhdGVQbGF0Zm9ybVRleHR1cmUoKTsKKwogICAgIC8vIFVwZGF0ZSB0aGUgY29udGVu
dHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KICAgICBpZiAobV9jb250
ZW50c0RpcnR5KSB7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cHVibGlzaFRvUGxhdGZvcm1M
YXllcigpOworICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIo
bV90ZXh0dXJlSWQpOwogICAgICAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKICAgICB9CiB9
CkBAIC0xMTIsMjAgKzkyLDYgQEAgdW5zaWduZWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp0ZXh0
dXJlSQogICAgIHJldHVybiBtX3RleHR1cmVJZDsKIH0KIAotdm9pZCBDYW52YXMyRExheWVyQ2hy
b21pdW06OnNldERyYXdpbmdCdWZmZXIoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKLXsK
LSAgICBpZiAoZHJhd2luZ0J1ZmZlciAhPSBtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAgaWYg
KG1fZHJhd2luZ0J1ZmZlciAmJiBsYXllclJlbmRlcmVyKCkpCi0gICAgICAgICAgICBsYXllclJl
bmRlcmVyKCktPnJlbW92ZUNoaWxkQ29udGV4dChtX2RyYXdpbmdCdWZmZXItPmdyYXBoaWNzQ29u
dGV4dDNEKCkuZ2V0KCkpOwotCi0gICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdpbmdCdWZm
ZXI7Ci0gICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSB0cnVlOwotCi0gICAgICAgIGlmIChkcmF3
aW5nQnVmZmVyICYmIGxheWVyUmVuZGVyZXIoKSkKLSAgICAgICAgICAgIGxheWVyUmVuZGVyZXIo
KS0+YWRkQ2hpbGRDb250ZXh0KG1fZHJhd2luZ0J1ZmZlci0+Z3JhcGhpY3NDb250ZXh0M0QoKS5n
ZXQoKSk7Ci0gICAgfQotfQotCiB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJS
ZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIG5ld0xheWVyUmVuZGVyZXIpCiB7CiAgICAg
aWYgKGxheWVyUmVuZGVyZXIoKSAhPSBuZXdMYXllclJlbmRlcmVyICYmIG1fZHJhd2luZ0J1ZmZl
cikgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgJKHJldmlzaW9uIDkx
NDQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxMSBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHNldFRleHR1cmVDaGFuZ2VkKCk7CiAgICAgdW5zaWduZWQgdGV4dHVy
ZUlkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREcmF3aW5nQnVmZmVyKERyYXdpbmdCdWZmZXIqKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1
bSopOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENhbnZhczJETGF5ZXJDaHJvbWl1bShEcmF3
aW5nQnVmZmVyKiwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7Ci0gICAgRHJhd2luZ0J1
ZmZlciogbV9kcmF3aW5nQnVmZmVyOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5
ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDkxNDQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDkgKzM0LDEwIEBACiAKICNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgi
CiAKLSNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDYsNiArNDcsNyBAQCBDYW52YXNMYXllckNocm9taXVtOjpDYW52YXNM
YXllckNocm9taXVtCiAgICAgLCBtX3RleHR1cmVJZCgwKQogICAgICwgbV9oYXNBbHBoYSh0cnVl
KQogICAgICwgbV9wcmVtdWx0aXBsaWVkQWxwaGEodHJ1ZSkKKyAgICAsIG1fZHJhd2luZ0J1ZmZl
cigwKQogewogfQogCkBAIC02OCw1ICs3MCw0NiBAQCB2b2lkIENhbnZhc0xheWVyQ2hyb21pdW06
OnB1c2hQcm9wZXJ0aWVzCiAgICAgY2FudmFzTGF5ZXItPnNldFByZW11bHRpcGxpZWRBbHBoYSht
X3ByZW11bHRpcGxpZWRBbHBoYSk7CiB9CiAKK3ZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6c2V0
RHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQoreworICAgIGlmIChk
cmF3aW5nQnVmZmVyICE9IG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9kcmF3aW5n
QnVmZmVyICYmIGxheWVyUmVuZGVyZXIoKSkKKyAgICAgICAgICAgIGxheWVyUmVuZGVyZXIoKS0+
cmVtb3ZlQ2hpbGRDb250ZXh0KG1fZHJhd2luZ0J1ZmZlci0+Z3JhcGhpY3NDb250ZXh0M0QoKS5n
ZXQoKSk7CisKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyID0gZHJhd2luZ0J1ZmZlcjsKKyAgICAg
ICAgbV90ZXh0dXJlQ2hhbmdlZCA9IHRydWU7CisKKyAgICAgICAgaWYgKGRyYXdpbmdCdWZmZXIg
JiYgbGF5ZXJSZW5kZXJlcigpKQorICAgICAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT5hZGRDaGls
ZENvbnRleHQobV9kcmF3aW5nQnVmZmVyLT5ncmFwaGljc0NvbnRleHQzRCgpLmdldCgpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlUGxhdGZvcm1UZXh0dXJl
KCkKK3sKKyAgICBpZiAobV90ZXh0dXJlQ2hhbmdlZCkgeyAvLyBXZSBoYXZlIHRvIGdlbmVyYXRl
IGEgbmV3IGJhY2tpbmcgdGV4dHVyZS4KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAgICAgICBpZiAobV90ZXh0dXJlSWQpCisg
ICAgICAgICAgICBjb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fdGV4dHVyZUlkKTsKKyAgICAgICAg
bV90ZXh0dXJlSWQgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIGNvbnRleHQt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICAgICAgY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVy
ZUlkKTsKKyAgICAgICAgSW50U2l6ZSBzaXplID0gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCk7Cisg
ICAgICAgIGNvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSk7CisgICAgICAgIC8vIFNldCB0aGUgbWluLW1hZyBmaWx0ZXJzIHRv
IGxpbmVhciBhbmQgd3JhcCBtb2RlcyB0byBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURH
RQorICAgICAgICAvLyB0byBnZXQgYXJvdW5kIE5QT1QgdGV4dHVyZSBsaW1pdGF0aW9ucyBvZiBH
TEVTLgorICAgICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6TElORUFSKTsKKyAgICAgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFH
X0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgICAgIGNvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwor
ICAgICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNE
OjpDTEFNUF9UT19FREdFKTsKKyAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICAvLyBGSVhNRTogVGhlIGZpbmlzaCgpIGhlcmUgaXMgcmVxdWlyZWQgYmVjYXVzZSB3ZSBo
YXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0dXJlIGNyZWF0ZWQgaW4gdGhpcworICAgICAg
ICAvLyBjb250ZXh0ICh0aGUgY29tcG9zaXRvciBjb250ZXh0KSBpcyBhY3R1YWxseSBjcmVhdGVk
IGJ5IHRoZSBzZXJ2aWNlIHNpZGUgYmVmb3JlIHRoZSBjaGlsZCBjb250ZXh0CisgICAgICAgIC8v
IGF0dGVtcHRzIHRvIHVzZSBpdCAoaW4gcHVibGlzaFRvUGxhdGZvcm1MYXllcikuIGZpbmlzaCgp
IGlzIGN1cnJlbnRseSB0aGUgb25seSBjYWxsIHdpdGggc3Ryb25nCisgICAgICAgIC8vIGVub3Vn
aCBzZW1hbnRpY3MgdG8gcHJvbWlzZSB0aGlzLCBidXQgaXMgYWN0dWFsbHkgbXVjaCBzdHJvbmdl
ci4gSWRlYWxseSB3ZSdkIGRvIHNvbWV0aGluZyBsaWtlCisgICAgICAgIC8vIGluc2VydGluZyBh
IGZlbmNlIGhlcmUgYW5kIHdhaXRpbmcgZm9yIGl0IGJlZm9yZSB0cnlpbmcgdG8gcHVibGlzaC4K
KyAgICAgICAgY29udGV4dC0+ZmluaXNoKCk7CisgICAgfQorfQorCiB9CiAjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21p
dW0uaAkocmV2aXNpb24gOTE0NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBEcmF3aW5nQnVmZmVyOwor
CiAvLyBCYXNlIGNsYXNzIGZvciBXZWJHTCBhbmQgYWNjZWxlcmF0ZWQgMmQgY2FudmFzZXMuCiBj
bGFzcyBDYW52YXNMYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0gewogcHVibGlj
OgpAQCAtNDcsMTUgKzQ5LDIyIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJv
cGVydGllc1RvKENDTGF5ZXJJbXBsKik7CiAKKyAgICB2b2lkIHNldERyYXdpbmdCdWZmZXIoRHJh
d2luZ0J1ZmZlciopOworICAgIERyYXdpbmdCdWZmZXIqIGdldERyYXdpbmdCdWZmZXIoKSB7IHJl
dHVybiBtX2RyYXdpbmdCdWZmZXI7IH0KKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENhbnZh
c0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAKKyAgICB2b2lk
IHVwZGF0ZVBsYXRmb3JtVGV4dHVyZSgpOworCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXll
clR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJDYW52YXNMYXllciI7IH0KIAogICAgIGJv
b2wgbV90ZXh0dXJlQ2hhbmdlZDsKICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKICAgICBib29s
IG1faGFzQWxwaGE7CiAgICAgYm9vbCBtX3ByZW11bHRpcGxpZWRBbHBoYTsKKworICAgIERyYXdp
bmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJh
d2luZ0J1ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gOTE0NDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdC
dWZmZXIoKQogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotdm9pZCBEcmF3
aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCkKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6
cHVibGlzaFRvUGxhdGZvcm1MYXllcih1bnNpZ25lZCBpbnQgcGFyZW50VGV4dHVyZSkKIHsKICAg
ICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE5LDcgKzExOSwxMCBAQCB2
b2lkIERyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5CiAgICAgICAgIG1fY2FsbGJh
Y2stPndpbGxQdWJsaXNoKCk7CiAgICAgaWYgKG11bHRpc2FtcGxlKCkpCiAgICAgICAgIGNvbW1p
dCgpOwotICAgIHVuc2lnbmVkIHBhcmVudFRleHR1cmUgPSBtX3BsYXRmb3JtTGF5ZXItPnRleHR1
cmVJZCgpOworCisgICAgaWYgKCFwYXJlbnRUZXh0dXJlKQorICAgICAgICBwYXJlbnRUZXh0dXJl
ID0gbV9wbGF0Zm9ybUxheWVyLT50ZXh0dXJlSWQoKTsKKwogICAgIC8vIFdlIGRvIHRoZSBjb3B5
IGluIHRoZSBjYW52YXMnIChjaGlsZCkgY29udGV4dCBzbyB0aGF0IGl0IGV4ZWN1dGVzIGluIHRo
ZSBjb3JyZWN0IG9yZGVyIHJlbGF0aXZlIHRvCiAgICAgLy8gb3RoZXIgY29tbWFuZHMgaW4gdGhl
IGNoaWxkIGNvbnRleHQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBwYXJlbnQgdGV4dHVyZSBhbHdh
eXMgY29udGFpbnMgYSBjb21wbGV0ZQogICAgIC8vIGZyYW1lIGFuZCBub3Qgc29tZSBpbnRlcm1l
ZGlhdGUgcmVzdWx0LiBMYXllclJlbmRlcmVyQ2hyb21pdW0gdXNlcyBnbFNldExhdGNoIHRvIG1h
a2Ugc3VyZSB0aGUgY2hpbGQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAko
cmV2aXNpb24gOTE0NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBACiAKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkRyYXdp
bmdCdWZmZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgi
CkBAIC03NCwyMyArNzUsMTMgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0bwogICAgIGlmICghbV9jb250ZW50c0RpcnR5KQogICAgICAgICByZXR1cm47CiAKLSAgICBH
cmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQo
KTsKLSAgICBpZiAobV90ZXh0dXJlQ2hhbmdlZCkgewotICAgICAgICByZW5kZXJlckNvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCk7
Ci0gICAgICAgIC8vIFNldCB0aGUgbWluLW1hZyBmaWx0ZXJzIHRvIGxpbmVhciBhbmQgd3JhcCBt
b2RlcyB0byBHTF9DTEFNUF9UT19FREdFCi0gICAgICAgIC8vIHRvIGdldCBhcm91bmQgTlBPVCB0
ZXh0dXJlIGxpbWl0YXRpb25zIG9mIEdMRVMuCi0gICAgICAgIHJlbmRlcmVyQ29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAg
ICAgIHJlbmRlcmVyQ29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgICAgIHJlbmRlcmVyQ29udGV4dC0+dGV4UGFyYW1ldGVy
aShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIHJl
bmRlcmVyQ29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6
Q0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSBmYWxzZTsKLSAgICB9
CisgICAgdXBkYXRlUGxhdGZvcm1UZXh0dXJlKCk7CisKICAgICAvLyBVcGRhdGUgdGhlIGNvbnRl
bnRzIG9mIHRoZSB0ZXh0dXJlIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCi0gICAgaWYgKG1fY29u
dGVudHNEaXJ0eSAmJiBtX3RleHR1cmVVcGRhdGVkKSB7Ci0gICAgICAgIC8vIHByZXBhcmVUZXh0
dXJlIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBp
bnRvIHRoZSB0ZXh0dXJlCi0gICAgICAgIC8vIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCi0gICAg
ICAgIC8vCi0gICAgICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKKyAgICBpZiAobV9j
b250ZW50c0RpcnR5KSB7CisgICAgICAgIC8vIHB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIgY29waWVz
IHRoZSBjb250ZW50cyBvZiB0aGUgb2ZmLXNjcmVlbiByZW5kZXIKKyAgICAgICAgLy8gdGFyZ2V0
IGludG8gdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KKyAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5wdWJsaXNoVG9QbGF0Zm9ybUxheWVyKG1fdGV4dHVyZUlkKTsKICAgICAgICAg
bV9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAgICAgICAgIG1fY29udGVudHNEaXJ0
eSA9IGZhbHNlOwogICAgICAgICBtX3RleHR1cmVVcGRhdGVkID0gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZm
ZXIuY3BwCShyZXZpc2lvbiA5MTQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw4
IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y29tbWl0KGxvbmcgeCwgbG9uZwogICAgIGlmIChtX211
bHRpc2FtcGxlRkJPKSB7CiAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEV4dGVu
c2lvbnMzRDo6UkVBRF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEV4dGVuc2lvbnMzRDo6RFJBV19GUkFNRUJVRkZFUiwg
bV9mYm8pOwotICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+YmxpdEZyYW1lYnVm
ZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9CVUZGRVJfQklULCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAg
ICAgICAgLy8gVXNlIE5FQVJFU1QsIGJlY2F1c2UgdGhlcmUgaXMgbm8gc2NhbGUgcGVyZm9ybWVk
IGR1cmluZyB0aGUgYmxpdC4KKyAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmJs
aXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5F
QVJFU1QpOwogICAgIH0KICAgICAKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAkocmV2aXNp
b24gOTE0NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2lu
Z0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4NywxMCBAQCBwdWJsaWM6CiAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpOwotICAgIHZvaWQgcHVibGlzaFRvUGxhdGZvcm1MYXllcigpOworICAgIC8vIFBh
c3Mgbm9uLXplcm8gdG8gcGFyZW50VGV4dHVyZSB0byBzcGVjaWZ5IGEgdGV4dHVyZSBpbnRvIHdo
aWNoIHRvIHB1Ymxpc2gKKyAgICAvLyB0aGUgZHJhd2luZyBidWZmZXIncyBjb250ZW50cy4gT3Ro
ZXJ3aXNlLCBwdWJsaXNoZXMgdG8gdGhlIHBsYXRmb3JtTGF5ZXIKKyAgICAvLyBhc3NvY2lhdGVk
IHdpdGggdGhlIGluc3RhbmNlLgorICAgIHZvaWQgcHVibGlzaFRvUGxhdGZvcm1MYXllcih1bnNp
Z25lZCBpbnQgcGFyZW50VGV4dHVyZSA9IDApOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShDSFJP
TUlVTSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5MTQ5MSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTEtMDctMjEgIEplZmYgVGltYW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtDaHJvbWl1bV0gRmlyc3QgYXR0ZW1wdCBhdCBjb252ZXJ0aW5nIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCB0byB1c2luZyBEcmF3aW5nQnVmZmVyLiAgCisgICAgICAgIFRoaXMgY2hh
bmdlIHNob3VsZCBvbmx5IGFmZmVjdCB0aGUgYmVoYXZpb3VyIG9mIENocm9tZS4gIE90aGVyIHBv
cnRzIHdpbGwgY29udGludWUgdG8gdXNlIHRoZWlyIGV4aXN0aW5nIFdlYkdMIHByZXNlbnRhdGlv
biBtZWNoYW5pc21zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTMyMDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKTogIFB1c2ggdGhlIERyYXdpbmdC
dWZmZXIgdXNlZCBieSB0aGUgR3JhcGhpY3NDb250ZXh0M0QgaW50byBuZXdseSBjb25zdHJ1Y3Rl
ZCBXZWJHTExheWVyQ2hyb21pdW0gaW5zdGFuY2VzLgorCiAyMDExLTA3LTIxICBWc2V2b2xvZCBW
bGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bSBEZXZUb29s
c10gUmVtb3ZlIHVudXNlZCBtZXRob2Qgc2V0QWdlbnRJZGVudGlmaWVyUHJlZml4IGZyb20gV2Vi
RGV2VG9vbEFnZW50LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDkxNDc4KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMjAsNiArMTAyMCw3IEBAIFBsYXRmb3JtTGF5ZXIqIEdyYXBo
aWNzQ29udGV4dDNEOjpwbGF0Zm8KIHsKICAgICBXZWJHTExheWVyQ2hyb21pdW0qIGNhbnZhc0xh
eWVyID0gbV9pbnRlcm5hbC0+cGxhdGZvcm1MYXllcigpOwogICAgIGNhbnZhc0xheWVyLT5zZXRD
b250ZXh0KHRoaXMpOworICAgIGNhbnZhc0xheWVyLT5zZXREcmF3aW5nQnVmZmVyKGdldERyYXdp
bmdCdWZmZXIoKSk7CiAgICAgcmV0dXJuIGNhbnZhc0xheWVyOwogfQogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104090</attachid>
            <date>2011-08-16 14:33:07 -0700</date>
            <delta_ts>2011-10-04 19:31:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20110816173051.patch</filename>
            <type>text/plain</type>
            <size>56585</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMTQ5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODYgQEAKKzIwMTEtMDgtMTYgIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUm91Z2ggcGF0
Y2ggdGhhdCBkZW1vbnN0cmF0ZXMgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gdW5pZnkgYm90aCBX
ZWJHTCBhbmQgQ2FudmFzMkQgcmVuZGVyaW5nIGNvbnRleHRzIHRvIHVzZSBhIERyYXdpbmdCdWZm
ZXIgZm9yIGJhY2tpbmcgc3RvcmUgbWFuYWdlbWVudC4KKyAgICAgICAgCisgICAgICAgIFdlYkdM
IHJlbmRlcmluZyBjb250ZXh0cyBjcmVhdGUgYW5kIHJlbmRlciB0byBGQk9zIG1hbmFnZWQgYnkg
YSBEcmF3aW5nQnVmZmVyIGluc3RhbmNlLiAgQWxsIFBsYXRmb3JtTGF5ZXIgbGlmZXRpbWUgbWFu
YWdlbWVudCBpcyBwZXJmb3JtZWQgYnkgdGhlIERyYXdpbmdCdWZmZXIuCisgICAgICAgIEJlY2F1
c2UgZGlmZmVyZW50IGxheWVyIHR5cGVzIGFyZSByZXF1aXJlZCBmb3IgQ2FudmFzMkQgYW5kIFdl
YkdMIGNvbXBvc2l0b3IgbGF5ZXJzLCBhbiBhZ3J1bWVudCBpcyBwYXNzZWQgdG8gdGhlIERyYXdp
bmdCdWZmZXIgdG8gaW5kaWNhdGUgaXRzIHVzYWdlIHBhdHRlcm4uCisgICAgICAgIAorICAgICAg
ICBCZWNhdXNlIFdlYkdMIGNvbnRlbnQgaXMgbm93IHJlbmRlcmVkIHRvIGEgRHJhd2luZ0J1ZmZl
ciwgYWxsIG9mIHRoZSByb3V0aW5lcyB0aGF0IHByZXZpb3VzbHkgcmVhZCBmcm9tIHRoZSBiYWNr
LWJ1ZmZlciBub3cgbXVzdCByZWFkIGZyb20gdGhlIEZCTyBtYW5hZ2VkIGJ5IHRoZSBEcmF3aW5n
QnVmZmVyLgorICAgICAgICBBIHRlbXBvcmFyeSBzb2x1dGlvbiBpcyBwcm9wb3NlZDogIEFkZCBh
biBleHRyYSBhcmd1bWVudCB0byByZWFkQmFja0ZyYW1lYnVmZmVyIHRvIGNvbmRpdGlvbmFsbHkg
c3BlY2lmeSBpZiBmYiAwIHNob3VsZCBiZSBib3VuZCBiZWZvcmUgdGhlIHJlYWQsIG9yIGlmIHRo
ZSByZWFkIHNob3VsZCBoYXBwZW4gZnJvbSB0aGUgY3VycmVudGx5IGJvdW5kIGZiby4gCisgICAg
ICAgIEEgcGFyYWxsZWwgQ2hyb21lIGNoYW5nZSBpcyByZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhl
IGxvZ2ljIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV3IGFyZ3VtZW50LiAgU2VlIENMOiAgaHR0cDov
L2NvZGVyZXZpZXcuY2hyb21pdW0ub3JnLzc2NjkwMDIKKyAgICAgICAgCisgICAgICAgIFRoaXMg
Y2hhbmdlIHNob3VsZCBvbmx5IGFmZmVjdCB0aGUgY2hyb21pdW0gcG9ydC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpyZXNldEFjY2VsZXJhdGlvbik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcklmQ29tcG9zaXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0
b3JlQ29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNocm9t
aXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNM
YXllckNocm9taXVtOjpDYW52YXNMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc0xheWVyQ2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc0xheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmg6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVtOjpzZXRUZXh0dXJlVXBkYXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVtOjpnZXREcmF3aW5nQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdpbmdCdWZmZXI6Om1hcmtDb250ZXh0Q2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9taXVtKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6fldlYkdMTGF5ZXJDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpjb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0RHJhd2luZ0J1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnNldFRleHR1cmVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6cmF0ZUxpbWl0Q29udGV4dCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnRleHR1cmVJZCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdC
dWZmZXI6OnJlc2V0T25OZXdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OmNvbW1pdCk6IEFOR0xFIGRvZXMgbm90IHN1cHBvcnQgTElORUFSIHdoZW4gZG9pbmcgYSBm
Ym8gYmxpdC4gQmVjYXVzZSBubyBzY2FsaW5nIGlzIHBlcmZvcm1lZCwgd2UgY2FuIHVzZSBORUFS
RVNULgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6bXVsdGlzYW1wbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFn
ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpzZXRTY2lzc29yRW5hYmxlZCk6CisK
IDIwMTEtMDgtMTYgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkIENocm9taXVtIFdpbmRvd3MgYnVpbGQgZml4IGFmdGVyIHI5MzE0MC4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gOTI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDYxLDcgKzIwNjEsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVzZXRB
Y2NlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAg
ICBtX2RyYXdpbmdCdWZmZXIgPSBtX2NvbnRleHQzRC0+Y29udGV4dCgpLT5jcmVhdGVEcmF3aW5n
QnVmZmVyKGNhbnZhcygpLT5zaXplKCkpOworICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3
aW5nQnVmZmVyOjpjcmVhdGUobV9jb250ZXh0M0QtPmNvbnRleHQoKSwgSW50U2l6ZShjYW52YXMo
KS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSwgRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1
ZmZlclVzYWdlQ2FudmFzMkQpOwogICAgICAgICBpZiAoIW1fZHJhd2luZ0J1ZmZlcikgewogICAg
ICAgICAgICAgY2xlYXJBY2NlbGVyYXRpb24oKTsKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAkocmV2aXNpb24gOTI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODIsOCArMzgyLDE4
IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb24KICAgICAsIG1fdmlk
ZW9DYWNoZSg0KQogICAgICwgbV9jb250ZXh0TG9zdChmYWxzZSkKICAgICAsIG1fYXR0cmlidXRl
cyhhdHRyaWJ1dGVzKQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCiB7CiAgICAgQVNTRVJUKG1f
Y29udGV4dCk7CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBDcmVhdGUgdGhlIERy
YXdpbmdCdWZmZXIKKyAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVmZmVyOjpjcmVhdGUo
bV9jb250ZXh0LmdldCgpLCBJbnRTaXplKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVp
Z2h0KCkpLCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyVXNhZ2VXZWJHTCk7CisjZW5kaWYK
KworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Ymlu
ZCgpOworCiAgICAgc2V0dXBGbGFncygpOwogICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7CiB9
CkBAIC00NDksNiArNDU5LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxp
emVOZQogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAgICAgICBpbml0VmVydGV4QXR0
cmliMCgpOwogCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5yZXNldChJbnRTaXplKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkp
KTsKKwogICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCkt
PmhlaWdodCgpKTsKICAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhcygpLT53aWR0
aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwogCkBAIC00ODEsNyArNDk0LDEyIEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dEMKIHsKICAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hh
bmdlZCgpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5tYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+
bWFya0NvbnRleHRDaGFuZ2VkKCk7CisKICAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOwogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9
IGNhbnZhcygpLT5yZW5kZXJCb3goKTsKQEAgLTUxMSw4ICs1MjksMTIgQEAgYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFySWZDb21wbwogICAgIC8vIERldGVybWluZSBpZiBpdCdzIHBv
c3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1c2VyIGFza2VkIGZvciBhbmQgdGhpcyBj
bGVhci4KICAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBtYXNrICYmICFtX3NjaXNzb3JFbmFibGVk
OwogCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBtX2NvbnRleHQtPmJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZykgeworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgMCk7CisgICAgfQogICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKTsKICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkKICAgICAgICAgbV9jb250ZXh0LT5j
bGVhckNvbG9yKG1fY29sb3JNYXNrWzBdID8gbV9jbGVhckNvbG9yWzBdIDogMCwKQEAgLTU3MSwx
NyArNTkzLDI5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmkKICAg
ICBlbHNlCiAgICAgICAgIGNhbnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKICAgICBj
bGVhcklmQ29tcG9zaXRlZCgpOworI2lmIDAgIC8vIFRPRE86ICBXaHkgaXMgdGhpcyBjb2RlIGhl
cmU/CiAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFtX2xheWVyQ2xlYXJlZCkKICAg
ICAgICAgcmV0dXJuOworI2VuZGlmCiAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsK
ICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7Ci0gICAgbV9jb250ZXh0LT5wYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisgICAgbV9jb250ZXh0LT5wYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzLCBtX2RyYXdpbmdCdWZmZXIgPyBmYWxzZSA6
IHRydWUpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOwogfQogCiBQYXNzUmVmUHRyPEltYWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCiB7CiAgICAgY2xlYXJJZkNv
bXBvc2l0ZWQoKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YSgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci0+Y29tbWl0KCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gbV9j
b250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShtX2RyYXdpbmdCdWZmZXIg
PyBmYWxzZSA6IHRydWUpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJh
d2luZ0J1ZmZlci0+YmluZCgpOworICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAKIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKQEAgLTU4
OSw2ICs2MjMsMTYgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50c0ludG9DYQog
ICAgIHJldHVybiBtX2NvbnRleHQtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKTsKIH0KIAorI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK1BsYXRmb3JtTGF5ZXIqIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgaWYgKG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+cGxhdGZvcm1MYXllcigpOwor
CisgICAgcmV0dXJuIG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpOworfQorI2VuZGlmCisKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkK
IHsKICAgICAvLyBUaGlzIGlzIGFuIGFwcHJveGltYXRpb24gYmVjYXVzZSBhdCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQgbGV2ZWwgd2UgZG9uJ3QKQEAgLTYxMywxNiArNjU3LDI1IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGludAogCiAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0
byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHksIHNpbmNlIHRoZSBuZXdseSBjcmVhdGVkIGltYWdl
IGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2ZmCiAgICAgLy8gY2xlYXIgKGFuZCB0aGlzIG1hdGNo
ZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgotICAgIG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwg
aGVpZ2h0KTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPnJlc2V0KEludFNpemUod2lkdGgsIGhlaWdodCkpOworICAgIGVsc2UKKyAgICAgICAgbV9j
b250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgoKSBjb25zdAogeworICAgIGlmIChtX2RyYXdpbmdC
dWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpOwor
CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0
aCgpOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0
KCkgY29uc3QKIHsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9k
cmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCk7CisKICAgICByZXR1cm4gbV9jb250ZXh0LT5n
ZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOwogfQogCkBAIC03NDIsNyArNzk1
LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVidWYKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKLSAgICBt
X2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsK
KyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikgeworICAg
ICAgICAvLyBJbnN0ZWFkIG9mIGJpbmRpbmcgZmIgMCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIu
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0gZWxzZQorICAgICAgICBt
X2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsK
ICAgICBpZiAoYnVmZmVyKQogICAgICAgICBidWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtMTA4MSw5ICsxMTM4LDIx
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIGlmIChpc1Jlc291cmNl
U2FmZSgpKQorICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7CisgICAgICAgIC8vIENvbW1pdCBE
cmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAg
IGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwogICAgICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIpOwotICAgIGVsc2UgeworCisgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1
ZmZlciBpZiBuZWVkZWQKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2Ry
YXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4s
IGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYm
IG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7
CisKICAgICAgICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7CiAgICAgICAgIEdDM0RzaXpl
aSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CiAgICAgICAgIGlmIChjbGlwMkQoeCwgeSwg
d2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVi
dWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlw
cGVkSGVpZ2h0KSkgewpAQCAtMTA5NSw2ICsxMTY0LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworCisgICAgICAgIC8vIFJlc3Rv
cmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJp
bmQoKTsKICAgICB9CiAgICAgLy8gRklYTUU6IGlmIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgY29t
cGxldGUsIG5vbmUgb2YgdGhlIGJlbG93IHNob3VsZCBiZSBleGVjdXRlZC4KICAgICB0ZXgtPnNl
dExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwpAQCAtMTI3MSw3ICsxMzQ0LDEwIEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVGcmFtZWIKICAgICBpZiAoZnJhbWVi
dWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgPSAwOwogICAgICAgICAvLyBIYXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUg
dG8gYmluZCBiYWNrIHRvIGludGVybmFsIGZiby4KLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgaWYg
KG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwogICAgIH0KIH0KIApAQCAtMTM1OCw4ICsx
NDM0LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdDM0QKIHsKICAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVT
VCkKKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKICAg
ICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3Nj
aXNzb3JFbmFibGVkKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE3MDAsOCArMTc3OSwxMSBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlKEdDM0RlCiB7CiAgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisgICAg
aWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CiAgICAgICAgIG1f
c2Npc3NvckVuYWJsZWQgPSB0cnVlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAg
ICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFi
bGVkKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjg3Myw3ICsyOTU1LDE3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEcKICAgICB9CiAgICAgY2xlYXJJZkNvbXBv
c2l0ZWQoKTsKICAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOworCisgICAg
Ly8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGlu
ZykKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAg
ICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwogICAgIG1fY29udGV4dC0+cmVhZFBp
eGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCisgICAgLy8g
UmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQo
KTsKKwogI2lmIE9TKERBUldJTikKICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3
aGVuIEdMIGRyaXZlciBidWcgb24gTWFjIGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIHdoZW4gYWxw
aGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNob3VsZCBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2Yg
MC4KQEAgLTQxMjQsMTQgKzQyMTYsMTQgQEAgaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
Qm91bmRGcmFtZQogewogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+b2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGlu
Zy0+Z2V0V2lkdGgoKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVm
ZmVyU2l6ZSgpLndpZHRoKCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2lu
Z0J1ZmZlci0+c2l6ZSgpLndpZHRoKCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkud2lkdGgoKTsKIH0KIAogaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91
bmRGcmFtZWJ1ZmZlckhlaWdodCgpCiB7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYm
IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQoKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRl
cm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOworICAgIHJldHVybiBtX2RyYXdpbmdCdWZm
ZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKSA6IG1fY29udGV4dC0+Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKIH0KIAogV2ViR0xUZXh0dXJlKiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoR0MzRGVudW0gdGFyZ2V0
LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKQEAgLTQ4MjcsNiArNDkxOSw4IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3RvcmUKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXRPbk5ld0NvbnRleHQoY29udGV4dCk7CisK
ICAgICBtX2NvbnRleHQgPSBjb250ZXh0OwogICAgIG1fY29udGV4dExvc3QgPSBmYWxzZTsKICAg
ICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDkyODM3KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgV2ViR0xSZW5kZXJpbmdDb250ZXh0
X2gKIAogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJEcmF3
aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZsb2F0
MzJBcnJheS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCkBAIC0yOTAsNyArMjkx
LDcgQEAgcHVibGljOgogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNE
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpOyB9CisgICAgdmlydHVh
bCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHZv
aWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwpAQCAtMzU1LDYgKzM1NiwxMCBAQCBw
dWJsaWM6CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKIAorICAg
IC8vIE9wdGlvbmFsIHN0cnVjdHVyZSBmb3IgcmVuZGVyaW5nIHRvIGEgRHJhd2luZ0J1ZmZlciwg
aW5zdGVhZCBvZiBkaXJlY3RseQorICAgIC8vIHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2NvbnRl
eHQuCisgICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IG1fZHJhd2luZ0J1ZmZlcjsKKwogICAgIGNs
YXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc3RvcmVUaW1lciA6IHB1YmxpYyBUaW1lckJhc2Ug
ewogICAgIHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVz
dG9yZVRpbWVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkgOiBtX2NvbnRleHQoY29u
dGV4dCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA5MjgzNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTYsMTIgKzU2LDYgQEAgdWludDhfdCBjb252ZXJ0Q29sb3IxNkJpZ1RvOCh1aW50
MTZfdCB2YQogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotCi1QYXNzUmVmUHRyPERyYXdp
bmdCdWZmZXI+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVEcmF3aW5nQnVmZmVyKGNvbnN0IElu
dFNpemUmIHNpemUpCi17Ci0gICAgcmV0dXJuIERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBz
aXplKTsKLX0KLQogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRFJlc291cmNlU2Fm
ZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgdW5wYWNrQWxpZ25tZW50KQogewog
ICAgIEFTU0VSVCh1bnBhY2tBbGlnbm1lbnQgPT0gMSB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gMiB8
fCB1bnBhY2tBbGlnbm1lbnQgPT0gNCB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gOCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgJKHJldmlzaW9uIDkyODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNiBAQCBj
b25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9ybTNET2JqCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7Ci1jbGFzcyBEcmF3aW5nQnVmZmVy
OwogY2xhc3MgRXh0ZW5zaW9uczNEOwogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShRVCkKIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsKQEAgLTQ3NSw4ICs0
NzQsMTEgQEAgcHVibGljOgogICAgIEdyQ29udGV4dCogZ3JDb250ZXh0KCk7CiAjZW5kaWYKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0OworICAgIC8vIFRoZSBDaHJvbWl1bSBwb3J0IG1hbmFnZXMgUGxhdGZv
cm1MYXllciBpbnN0YWNlcyB2aWEgdGhlIERyYXdpbmdCdWZmZXIKKyAgICAvLyBjbGFzcy4KKyAg
ICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gMDsgfQogI2Vu
ZGlmCisKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpOwogICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZv
cm1UZXh0dXJlKCkgY29uc3Q7CkBAIC01MDAsOCArNTAyLDYgQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgdm9pZCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIFBhc3NSZWZQdHI8RHJhd2luZ0J1
ZmZlcj4gY3JlYXRlRHJhd2luZ0J1ZmZlcihjb25zdCBJbnRTaXplJiA9IEludFNpemUoKSk7Ci0g
ICAgCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShRVCkKICAgICAvLyBXaXRoIG11bHRpc2FtcGxpbmcgb24sIGJsaXQg
ZnJvbSBtdWx0aXNhbXBsZUZCTyB0byByZWd1bGFyIEZCTy4KICAgICB2b2lkIHByZXBhcmVUZXh0
dXJlKCk7CkBAIC03OTEsOCArNzkxLDggQEAgcHVibGljOgogICAgIHZvaWQgbWFya0xheWVyQ29t
cG9zaXRlZCgpOwogICAgIGJvb2wgbGF5ZXJDb21wb3NpdGVkKCkgY29uc3Q7CiAKLSAgICB2b2lk
IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQpOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YSgpOworICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwgYm9vbCBiaW5kQmFja0J1ZmZlciA9IHRydWUp
OworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YShib29sIGJpbmRCYWNrQnVmZmVyID0gdHJ1ZSk7CiAKICNpZiBQTEFURk9STShRVCkKICAg
ICBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDkyODM3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsOCBAQCBQYXNzUmVm
UHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gQ2FudmFzCiAKIENhbnZhczJETGF5ZXJDaHJvbWl1
bTo6Q2FudmFzMkRMYXllckNocm9taXVtKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBDYW52YXNMYXllckNocm9taXVtKG93
bmVyKQotICAgICwgbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCiB7CisgICAgc2V0RHJh
d2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKTsKIH0KIAogQ2FudmFzMkRMYXllckNocm9taXVtOjp+
Q2FudmFzMkRMYXllckNocm9taXVtKCkKQEAgLTcwLDYgKzcwLDExIEBAIHZvaWQgQ2FudmFzMkRM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3MKIHsKICAgICBpZiAoIW1fY29udGVudHNEaXJ0eSB8
fCAhZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKKworI2lmIDAKKyAgICB1cGRhdGVQ
bGF0Zm9ybVRleHR1cmUoKTsKKyNlbmRpZgorCiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBv
ZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgogICAgIGlmIChtX2NvbnRlbnRz
RGlydHkpIHsKICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5wdWJsaXNoVG9QbGF0Zm9ybUxheWVy
KCk7CkBAIC03NywzNyArODIsNSBAQCB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zCiAgICAgfQogfQogCi11bnNpZ25lZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnRleHR1
cmVJZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1
ZmZlci0+cGxhdGZvcm1Db2xvckJ1ZmZlcigpIDogMDsKLX0KLQotdm9pZCBDYW52YXMyRExheWVy
Q2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikK
LXsKLSAgICBpZiAoZHJhd2luZ0J1ZmZlciAhPSBtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlciAmJiBsYXllclJlbmRlcmVyKCkpCi0gICAgICAgICAgICBsYXll
clJlbmRlcmVyKCktPnJlbW92ZUNoaWxkQ29udGV4dChtX2RyYXdpbmdCdWZmZXItPmdyYXBoaWNz
Q29udGV4dDNEKCkuZ2V0KCkpOwotCi0gICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdpbmdC
dWZmZXI7Ci0KLSAgICAgICAgaWYgKGRyYXdpbmdCdWZmZXIgJiYgbGF5ZXJSZW5kZXJlcigpKQot
ICAgICAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT5hZGRDaGlsZENvbnRleHQobV9kcmF3aW5nQnVm
ZmVyLT5ncmFwaGljc0NvbnRleHQzRCgpLmdldCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ2FudmFz
MkRMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bmV3TGF5ZXJSZW5kZXJlcikKLXsKLSAgICBpZiAobGF5ZXJSZW5kZXJlcigpICE9IG5ld0xheWVy
UmVuZGVyZXIgJiYgbV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXItPmdyYXBoaWNzQ29udGV4dDNEKCkpIHsKLSAgICAgICAgICAgIGlmIChsYXllclJlbmRlcmVy
KCkpCi0gICAgICAgICAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT5yZW1vdmVDaGlsZENvbnRleHQo
bV9kcmF3aW5nQnVmZmVyLT5ncmFwaGljc0NvbnRleHQzRCgpLmdldCgpKTsKLSAgICAgICAgICAg
IGlmIChuZXdMYXllclJlbmRlcmVyKQotICAgICAgICAgICAgICAgIG5ld0xheWVyUmVuZGVyZXIt
PmFkZENoaWxkQ29udGV4dChtX2RyYXdpbmdCdWZmZXItPmdyYXBoaWNzQ29udGV4dDNEKCkuZ2V0
KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJl
cihuZXdMYXllclJlbmRlcmVyKTsKLSAgICB9Ci19Ci0KIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
aAkocmV2aXNpb24gOTI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTgg
KzQ1LDEyIEBAIGNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW4KIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShE
cmF3aW5nQnVmZmVyKiwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAgICAgdmlydHVh
bCB+Q2FudmFzMkRMYXllckNocm9taXVtKCk7CisKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250
ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMo
KTsKIAotICAgIHZvaWQgc2V0VGV4dHVyZUNoYW5nZWQoKTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVk
IHRleHR1cmVJZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVm
ZmVyKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVy
Q2hyb21pdW0qKTsKLQogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDYW52YXMyRExheWVyQ2hyb21p
dW0oRHJhd2luZ0J1ZmZlciosIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwotICAgIERy
YXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhc0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5MjgzNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw5ICszNCwxMCBAQAogCiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJv
bWl1bS5oIgogCi0jaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJEcmF3aW5n
QnVmZmVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXll
clJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDYgKzQ1LDcgQEAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6
Q2FudmFzTGF5ZXJDaHJvbWl1bQogICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKICAgICAsIG1f
aGFzQWxwaGEodHJ1ZSkKICAgICAsIG1fcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCisgICAgLCBt
X2RyYXdpbmdCdWZmZXIoMCkKIHsKIH0KIApAQCAtNjYsNSArNjgsNzMgQEAgdm9pZCBDYW52YXNM
YXllckNocm9taXVtOjpwdXNoUHJvcGVydGllcwogICAgIGNhbnZhc0xheWVyLT5zZXRQcmVtdWx0
aXBsaWVkQWxwaGEobV9wcmVtdWx0aXBsaWVkQWxwaGEpOwogfQogCit2b2lkIENhbnZhc0xheWVy
Q2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikK
K3sKKyAgICBpZiAoZHJhd2luZ0J1ZmZlciAhPSBtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlciAmJiBsYXllclJlbmRlcmVyKCkpCisgICAgICAgICAgICBsYXll
clJlbmRlcmVyKCktPnJlbW92ZUNoaWxkQ29udGV4dChtX2RyYXdpbmdCdWZmZXItPmdyYXBoaWNz
Q29udGV4dDNEKCkuZ2V0KCkpOworCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdpbmdC
dWZmZXI7CisKKyAgICAgICAgaWYgKGRyYXdpbmdCdWZmZXIgJiYgbGF5ZXJSZW5kZXJlcigpKQor
ICAgICAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT5hZGRDaGlsZENvbnRleHQobV9kcmF3aW5nQnVm
ZmVyLT5ncmFwaGljc0NvbnRleHQzRCgpLmdldCgpKTsKKyAgICB9Cit9CisKKyNpZiAwCit2b2lk
IENhbnZhc0xheWVyQ2hyb21pdW06OnNldFRleHR1cmVDaGFuZ2VkKCkKK3sKKyAgICBtX3RleHR1
cmVDaGFuZ2VkID0gdHJ1ZTsKK30KKyNlbmRpZgorCit1bnNpZ25lZCBDYW52YXNMYXllckNocm9t
aXVtOjp0ZXh0dXJlSWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBt
X2RyYXdpbmdCdWZmZXItPnBsYXRmb3JtQ29sb3JCdWZmZXIoKSA6IDA7Cit9CisKK3ZvaWQgQ2Fu
dmFzTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0q
IG5ld0xheWVyUmVuZGVyZXIpCit7CisgICAgaWYgKGxheWVyUmVuZGVyZXIoKSAhPSBuZXdMYXll
clJlbmRlcmVyICYmIG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyLT5ncmFwaGljc0NvbnRleHQzRCgpKSB7CisgICAgICAgICAgICBpZiAobGF5ZXJSZW5kZXJl
cigpKQorICAgICAgICAgICAgICAgIGxheWVyUmVuZGVyZXIoKS0+cmVtb3ZlQ2hpbGRDb250ZXh0
KG1fZHJhd2luZ0J1ZmZlci0+Z3JhcGhpY3NDb250ZXh0M0QoKS5nZXQoKSk7CisgICAgICAgICAg
ICBpZiAobmV3TGF5ZXJSZW5kZXJlcikKKyAgICAgICAgICAgICAgICBuZXdMYXllclJlbmRlcmVy
LT5hZGRDaGlsZENvbnRleHQobV9kcmF3aW5nQnVmZmVyLT5ncmFwaGljc0NvbnRleHQzRCgpLmdl
dCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVy
ZXIobmV3TGF5ZXJSZW5kZXJlcik7CisgICAgfQorfQorCisjaWYgMAordm9pZCBDYW52YXNMYXll
ckNocm9taXVtOjp1cGRhdGVQbGF0Zm9ybVRleHR1cmUoKQoreworICAgIGlmIChtX3RleHR1cmVD
aGFuZ2VkKSB7IC8vIFdlIGhhdmUgdG8gZ2VuZXJhdGUgYSBuZXcgYmFja2luZyB0ZXh0dXJlLgor
ICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0
KCk7CisgICAgICAgIGlmIChtX3RleHR1cmVJZCkKKyAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0
ZVRleHR1cmUobV90ZXh0dXJlSWQpOworICAgICAgICBtX3RleHR1cmVJZCA9IGNvbnRleHQtPmNy
ZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTApOworICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOworICAgICAgICBJbnRTaXplIHNp
emUgPSBtX2RyYXdpbmdCdWZmZXItPnNpemUoKTsKKyAgICAgICAgY29udGV4dC0+dGV4SW1hZ2Uy
RFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKKyAgICAg
ICAgLy8gU2V0IHRoZSBtaW4tbWFnIGZpbHRlcnMgdG8gbGluZWFyIGFuZCB3cmFwIG1vZGVzIHRv
IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFCisgICAgICAgIC8vIHRvIGdldCBhcm91
bmQgTlBPVCB0ZXh0dXJlIGxpbWl0YXRpb25zIG9mIEdMRVMuCisgICAgICAgIGNvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAg
ICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQz
RDo6TElORUFSKTsKKyAgICAgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgICAgIGNvbnRleHQtPnRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgICAg
ICBtX3RleHR1cmVDaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIC8vIEZJWE1FOiBUaGUgZmluaXNo
KCkgaGVyZSBpcyByZXF1aXJlZCBiZWNhdXNlIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhl
IHRleHR1cmUgY3JlYXRlZCBpbiB0aGlzCisgICAgICAgIC8vIGNvbnRleHQgKHRoZSBjb21wb3Np
dG9yIGNvbnRleHQpIGlzIGFjdHVhbGx5IGNyZWF0ZWQgYnkgdGhlIHNlcnZpY2Ugc2lkZSBiZWZv
cmUgdGhlIGNoaWxkIGNvbnRleHQKKyAgICAgICAgLy8gYXR0ZW1wdHMgdG8gdXNlIGl0IChpbiBw
dWJsaXNoVG9QbGF0Zm9ybUxheWVyKS4gZmluaXNoKCkgaXMgY3VycmVudGx5IHRoZSBvbmx5IGNh
bGwgd2l0aCBzdHJvbmcKKyAgICAgICAgLy8gZW5vdWdoIHNlbWFudGljcyB0byBwcm9taXNlIHRo
aXMsIGJ1dCBpcyBhY3R1YWxseSBtdWNoIHN0cm9uZ2VyLiBJZGVhbGx5IHdlJ2QgZG8gc29tZXRo
aW5nIGxpa2UKKyAgICAgICAgLy8gaW5zZXJ0aW5nIGEgZmVuY2UgaGVyZSBhbmQgd2FpdGluZyBm
b3IgaXQgYmVmb3JlIHRyeWluZyB0byBwdWJsaXNoLgorICAgICAgICBjb250ZXh0LT5maW5pc2go
KTsKKyAgICB9Cit9CisjZW5kaWYKKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhc0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgJKHJldmlzaW9uIDky
ODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
TGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRHJhd2luZ0J1ZmZlcjsKKwogLy8gQmFzZSBjbGFzcyBm
b3IgV2ViR0wgYW5kIGFjY2VsZXJhdGVkIDJkIGNhbnZhc2VzLgogY2xhc3MgQ2FudmFzTGF5ZXJD
aHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKIHB1YmxpYzoKQEAgLTQ3LDE0ICs0OSwz
MSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVy
SW1wbCopOwogCisgICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmVVcGRhdGVkKCkge30KKworICAg
IHZpcnR1YWwgdm9pZCBzZXREcmF3aW5nQnVmZmVyKERyYXdpbmdCdWZmZXIqKTsKKyAgICBEcmF3
aW5nQnVmZmVyKiBnZXREcmF3aW5nQnVmZmVyKCkgeyByZXR1cm4gbV9kcmF3aW5nQnVmZmVyOyB9
CisKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25zdDsKKyNpZiAwCisgICAgdm9pZCBzZXRU
ZXh0dXJlQ2hhbmdlZCgpOworICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0OworI2VuZGlm
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21p
dW0qKTsKKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENhbnZhc0xheWVyQ2hyb21pdW0oR3Jh
cGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHRleHR1
cmVJZCgpIGNvbnN0ID0gMDsKKyAgICAvLyBUT0RPOiAgUmVtb3ZlIG1lPworICAgIC8vdm9pZCB1
cGRhdGVQbGF0Zm9ybVRleHR1cmUoKTsKKwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJU
eXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiQ2FudmFzTGF5ZXIiOyB9CiAKICAgICBib29s
IG1faGFzQWxwaGE7CiAgICAgYm9vbCBtX3ByZW11bHRpcGxpZWRBbHBoYTsKKworICAgIERyYXdp
bmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJh
d2luZ0J1ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gOTI4MzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJEcmF3aW5nQnVmZmVy
LmgiCiAKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaWYgVVNFKFNLSUEpCiAjaW5jbHVkZSAiR3JDb250ZXh0LmgiCkBA
IC0zOSw2ICs0MCw3IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5j
bHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiV2ViR0xMYXllckNocm9t
aXVtLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjMsOCArNjUsMTEgQEAg
c3RhdGljIHVuc2lnbmVkIGdlbmVyYXRlQ29sb3JUZXh0dXJlKEdyYQogRHJhd2luZ0J1ZmZlcjo6
RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0
ZWQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERyYXdpbmdCdWZmZXJVc2FnZSB1c2FnZSkKKyAgICA6IG1fdXNh
Z2UodXNhZ2UpCisgICAgLCBtX3NjaXNzb3JFbmFibGVkKGZhbHNlKQorICAgICwgbV9jb250ZXh0
KGNvbnRleHQpCiAgICAgLCBtX3NpemUoLTEsIC0xKQogICAgICwgbV9tdWx0aXNhbXBsZUV4dGVu
c2lvblN1cHBvcnRlZChtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCkKICAgICAsIG1fcGFj
a2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVu
c2lvblN1cHBvcnRlZCkKQEAgLTc5LDE0ICs4NCwxNSBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5n
QnVmZmVyKEdyYXBoaWNzQ29uCiAgICAgLCBtX2dyQ29udGV4dCgwKQogI2VuZGlmCiB7Ci0gICAg
bV9mYm8gPSBjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIGNvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBt
X2NvbG9yQnVmZmVyID0gZ2VuZXJhdGVDb2xvclRleHR1cmUoY29udGV4dCwgc2l6ZSk7Ci0gICAg
Y3JlYXRlU2Vjb25kYXJ5QnVmZmVycygpOwotICAgIGlmICghcmVzZXQoc2l6ZSkpIHsKKyNpZiAw
CisgICAgaWYgKERyYXdpbmdCdWZmZXJVc2FnZVdlYkdMID09IG1fdXNhZ2UKKyAgICAgICAgJiYg
IW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fY29weV90
ZXh0dXJlX3RvX3BhcmVudF90ZXh0dXJlIikpIHsKICAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CisjZW5kaWYKKworICAgIGluaXRpYWxpemUoc2l6ZSk7
CiB9CiAKIERyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKQEAgLTEwMiwyOCArMTA4LDY2
IEBAIERyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKICAgICBjbGVhcigpOwogfQogCit2
b2lkIERyYXdpbmdCdWZmZXI6OmluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAg
ICBtX2ZibyA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBtX2NvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsK
KyAgICBtX2NvbG9yQnVmZmVyID0gZ2VuZXJhdGVDb2xvclRleHR1cmUobV9jb250ZXh0LmdldCgp
LCBzaXplKTsKKyAgICBjcmVhdGVTZWNvbmRhcnlCdWZmZXJzKCk7CisgICAgaWYgKCFyZXNldChz
aXplKSkgeworICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHZvaWQgRHJhd2luZ0J1
ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1MYXllcigpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChtdWx0aXNhbXBsZSgpKQorICAgIGJvb2wgbXVsdGlz
YW1wbGVCb3VuZCA9IGZhbHNlOworICAgIGlmIChtdWx0aXNhbXBsZSgpKSB7CiAgICAgICAgIGNv
bW1pdCgpOworICAgICAgICBtdWx0aXNhbXBsZUJvdW5kID0gdHJ1ZTsKKyAgICB9CisKICAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogI2lmIFVTRShTS0lBKQogICAgIGlmICht
X2dyQ29udGV4dCkKICAgICAgICAgbV9nckNvbnRleHQtPmZsdXNoKDApOwogI2VuZGlmCiAgICAg
bV9jb250ZXh0LT5mbHVzaCgpOworCisgICAgaWYgKERyYXdpbmdCdWZmZXJVc2FnZVdlYkdMID09
IG1fdXNhZ2UpIHsKKyAgICAgICAgdW5zaWduZWQgcGFyZW50VGV4dHVyZSA9IG1fcGxhdGZvcm1M
YXllci0+dGV4dHVyZUlkKCk7CisgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBwYXJlbnRUZXh0dXJlKTsKKyAgICAgICAg
bV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgLy8gbGV2ZWwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAgLy8geCwgeQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fc2l6ZS53aWR0aCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fc2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwKTsgIC8vIGJvcmRlcgorICAgIH0KKworICAgIGlmIChtdWx0aXNhbXBsZUJv
dW5kKQorICAgICAgICBiaW5kKCk7CiB9CiAjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKIFBsYXRmb3JtTGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5ZXIo
KQogewotICAgIGlmICghbV9wbGF0Zm9ybUxheWVyKQotICAgICAgICBtX3BsYXRmb3JtTGF5ZXIg
PSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCAwKTsKKyAgICBpZiAoIW1fcGxh
dGZvcm1MYXllcikgeworICAgICAgICBpZiAoRHJhd2luZ0J1ZmZlclVzYWdlQ2FudmFzMkQgPT0g
bV91c2FnZSkKKyAgICAgICAgICAgIG1fcGxhdGZvcm1MYXllciA9IENhbnZhczJETGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKHRoaXMsIDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BsYXRm
b3JtTGF5ZXIgPSBXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9wbGF0
Zm9ybUxheWVyLT5zZXREcmF3aW5nQnVmZmVyKHRoaXMpOworICAgIH0KKwogICAgIHJldHVybiBt
X3BsYXRmb3JtTGF5ZXIuZ2V0KCk7CiB9CiAjZW5kaWYKQEAgLTEzMyw2ICsxNzcsMTQgQEAgUGxh
dGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybQogICAgIHJldHVybiBtX2NvbG9y
QnVmZmVyOwogfQogCit2b2lkIERyYXdpbmdCdWZmZXI6Om1hcmtDb250ZXh0Q2hhbmdlZCgpIHsK
KyAgICBpZiAobV9jb250ZXh0KQorICAgICAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdl
ZCgpOworCisgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAgICAgICAgbV9wbGF0Zm9ybUxheWVy
LT5zZXRUZXh0dXJlVXBkYXRlZCgpOworfQorCiAjaWYgVVNFKFNLSUEpCiB2b2lkIERyYXdpbmdC
dWZmZXI6OnNldEdyQ29udGV4dChHckNvbnRleHQqIGNvbnRleHQpCiB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDkyODM3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9t
aXVtLmgiCiAKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9u
czNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgpAQCAtNDgsNyArNDksNiBAQCBQYXNzUmVmUHRyPFdl
YkdMTGF5ZXJDaHJvbWl1bT4gV2ViR0xMYXllCiAKIFdlYkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xM
YXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBDYW52YXNM
YXllckNocm9taXVtKG93bmVyKQotICAgICwgbV9jb250ZXh0KDApCiAgICAgLCBtX3RleHR1cmVJ
ZCgwKQogICAgICwgbV90ZXh0dXJlQ2hhbmdlZCh0cnVlKQogICAgICwgbV9jb250ZXh0U3VwcG9y
dHNSYXRlTGltaXRpbmdFeHRlbnNpb24oZmFsc2UpCkBAIC01OSwxMyArNTksMTQgQEAgV2ViR0xM
YXllckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0oRwogCiBXZWJHTExheWVyQ2hyb21pdW06
On5XZWJHTExheWVyQ2hyb21pdW0oKQogewotICAgIGlmIChtX2NvbnRleHQgJiYgbGF5ZXJSZW5k
ZXJlcigpKQotICAgICAgICBsYXllclJlbmRlcmVyKCktPnJlbW92ZUNoaWxkQ29udGV4dChtX2Nv
bnRleHQpOworICAgIGlmIChjb250ZXh0KCkgJiYgbGF5ZXJSZW5kZXJlcigpKQorICAgICAgICBs
YXllclJlbmRlcmVyKCktPnJlbW92ZUNoaWxkQ29udGV4dChjb250ZXh0KCkpOwogfQogCiBib29s
IFdlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
KG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNl
dFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUik7CisgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IGNvbnRleHQoKTsKKyAgICByZXR1cm4gKGNvbnRleHQz
RCAmJiBjb250ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FS
QigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUik7CiB9CiAKIHZvaWQgV2ViR0xMYXll
ckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKQEAgLTc2LDI0ICs3Nyw0MCBA
QCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvCiAgICAgaWYgKCFtX2Nv
bnRlbnRzRGlydHkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBy
ZW5kZXJlckNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwotICAgIGlmIChtX3RleHR1
cmVDaGFuZ2VkKSB7Ci0gICAgICAgIHJlbmRlcmVyQ29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKLSAgICAgICAgLy8gU2V0IHRo
ZSBtaW4tbWFnIGZpbHRlcnMgdG8gbGluZWFyIGFuZCB3cmFwIG1vZGVzIHRvIEdMX0NMQU1QX1RP
X0VER0UKKyAgICBpZiAobV90ZXh0dXJlQ2hhbmdlZCkgeyAgLy8gV2UgaGF2ZSB0byBnZW5lcmF0
ZSBhIG5ldyBiYWNraW5nIHRleHR1cmUuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKKyAgICAgICAgaWYgKG1fdGV4dHVyZUlkKQor
ICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX3RleHR1cmVJZCk7CisgICAgICAg
IG1fdGV4dHVyZUlkID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOworICAgICAgICBjb250ZXh0
LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgICAgIGNv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1
cmVJZCk7CisgICAgICAgIEludFNpemUgc2l6ZSA9IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpOwor
ICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUpOworICAgICAgICAvLyBTZXQgdGhlIG1pbi1tYWcgZmlsdGVycyB0
byBsaW5lYXIgYW5kIHdyYXAgbW9kZXMgdG8gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VE
R0UKICAgICAgICAgLy8gdG8gZ2V0IGFyb3VuZCBOUE9UIHRleHR1cmUgbGltaXRhdGlvbnMgb2Yg
R0xFUy4KLSAgICAgICAgcmVuZGVyZXJDb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVS
LCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICAgICAgcmVuZGVyZXJDb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAg
ICAgICAgcmVuZGVyZXJDb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICAgICAgcmVuZGVyZXJDb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICAg
ICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUik7CisgICAgICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICAgICAgY29u
dGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9f
RURHRSk7CiAgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgLy8gRklY
TUU6IFRoZSBmaW5pc2goKSBoZXJlIGlzIHJlcXVpcmVkIGJlY2F1c2Ugd2UgaGF2ZSB0byBtYWtl
IHN1cmUgdGhhdCB0aGUgdGV4dHVyZSBjcmVhdGVkIGluIHRoaXMKKyAgICAgICAgLy8gY29udGV4
dCAodGhlIGNvbXBvc2l0b3IgY29udGV4dCkgaXMgYWN0dWFsbHkgY3JlYXRlZCBieSB0aGUgc2Vy
dmljZSBzaWRlIGJlZm9yZSB0aGUgY2hpbGQgY29udGV4dAorICAgICAgICAvLyBhdHRlbXB0cyB0
byB1c2UgaXQgKGluIHB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpLiBmaW5pc2goKSBpcyBjdXJyZW50
bHkgdGhlIG9ubHkgY2FsbCB3aXRoIHN0cm9uZworICAgICAgICAvLyBlbm91Z2ggc2VtYW50aWNz
IHRvIHByb21pc2UgdGhpcywgYnV0IGlzIGFjdHVhbGx5IG11Y2ggc3Ryb25nZXIuIElkZWFsbHkg
d2UnZCBkbyBzb21ldGhpbmcgbGlrZQorICAgICAgICAvLyBpbnNlcnRpbmcgYSBmZW5jZSBoZXJl
IGFuZCB3YWl0aW5nIGZvciBpdCBiZWZvcmUgdHJ5aW5nIHRvIHB1Ymxpc2guCisgICAgICAgIGNv
bnRleHQtPmZpbmlzaCgpOwogICAgIH0KKworI2lmIDAKKyAgICB1cGRhdGVQbGF0Zm9ybVRleHR1
cmUoKTsKKyNlbmRpZgorCiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVy
ZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgotICAgIGlmIChtX2NvbnRlbnRzRGlydHkgJiYgbV90
ZXh0dXJlVXBkYXRlZCkgewotICAgICAgICAvLyBwcmVwYXJlVGV4dHVyZSBjb3BpZXMgdGhlIGNv
bnRlbnRzIG9mIHRoZSBvZmYtc2NyZWVuIHJlbmRlciB0YXJnZXQgaW50byB0aGUgdGV4dHVyZQot
ICAgICAgICAvLyB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgotICAgICAgICAvLwotICAgICAgICBt
X2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7Ci0gICAgICAgIG1fY29udGV4dC0+bWFya0xheWVy
Q29tcG9zaXRlZCgpOworICAgIGlmIChtX2NvbnRlbnRzRGlydHkpIHsKKyAgICAgICAgLy8gcHVi
bGlzaFRvUGxhdGZvcm1MYXllciBjb3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBvZmYtc2NyZWVu
IHJlbmRlcgorICAgICAgICAvLyB0YXJnZXQgaW50byB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBj
b21wb3NpdG9yLgorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnB1Ymxpc2hUb1BsYXRmb3JtTGF5
ZXIoKTsKKyAgICAgICAgY29udGV4dCgpLT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAgICAgICAg
IG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBtX3RleHR1cmVVcGRhdGVkID0gZmFs
c2U7CiAgICAgfQpAQCAtMTA4LDU1ICsxMjUsNTAgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06
OnNldFRleHR1cmVVcGRhdAogICAgICAgICBtX3JhdGVMaW1pdGluZ1RpbWVyLnN0YXJ0T25lU2hv
dCgwKTsKIH0KIAotdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnNldENvbnRleHQoY29uc3QgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCitHcmFwaGljc0NvbnRleHQzRCogV2ViR0xMYXllckNo
cm9taXVtOjpjb250ZXh0KCkgY29uc3QKIHsKLSAgICBib29sIGNvbnRleHRDaGFuZ2VkID0gKG1f
Y29udGV4dCAhPSBjb250ZXh0KTsKLSAgICBpZiAoY29udGV4dENoYW5nZWQgJiYgbGF5ZXJSZW5k
ZXJlcigpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgICAgICBsYXllclJlbmRl
cmVyKCktPnJlbW92ZUNoaWxkQ29udGV4dChtX2NvbnRleHQpOwotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgICAgIGxheWVyUmVuZGVyZXIoKS0+YWRkQ2hpbGRDb250ZXh0KGNvbnN0X2Nh
c3Q8R3JhcGhpY3NDb250ZXh0M0QqPihjb250ZXh0KSk7Ci0gICAgfQorICAgIGlmIChtX2RyYXdp
bmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPmdyYXBoaWNzQ29udGV4
dDNEKCkuZ2V0KCk7CisKKyAgcmV0dXJuIDA7Cit9CiAKLSAgICBtX2NvbnRleHQgPSBjb25zdF9j
YXN0PEdyYXBoaWNzQ29udGV4dDNEKj4oY29udGV4dCk7Cit2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1
bTo6c2V0RHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQoreworICAg
IGJvb2wgY29udGV4dENoYW5nZWQgPSBjb250ZXh0KCkgIT0gKGRyYXdpbmdCdWZmZXIgPyBkcmF3
aW5nQnVmZmVyLT5ncmFwaGljc0NvbnRleHQzRCgpIDogMCk7CisgICAgQ2FudmFzTGF5ZXJDaHJv
bWl1bTo6c2V0RHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKTsKIAotICAgIGlmICghbV9jb250
ZXh0KQorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBjb250ZXh0KCk7CisgICAg
aWYgKCFjb250ZXh0M0QpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIGludCB0ZXh0
dXJlSWQgPSBtX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpOworICAgIHVuc2lnbmVkIGludCB0
ZXh0dXJlSWQgPSBjb250ZXh0M0QtPnBsYXRmb3JtVGV4dHVyZSgpOwogICAgIGlmICh0ZXh0dXJl
SWQgIT0gbV90ZXh0dXJlSWQgfHwgY29udGV4dENoYW5nZWQpIHsKICAgICAgICAgbV90ZXh0dXJl
Q2hhbmdlZCA9IHRydWU7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSB0cnVlOwogICAgIH0K
ICAgICBtX3RleHR1cmVJZCA9IHRleHR1cmVJZDsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0
cmlidXRlcyBhdHRyaWJ1dGVzID0gbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBjb250ZXh0M0Qt
PmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgbV9oYXNBbHBoYSA9IGF0dHJpYnV0ZXMuYWxw
aGE7CiAgICAgbV9wcmVtdWx0aXBsaWVkQWxwaGEgPSBhdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRB
bHBoYTsKLSAgICBtX2NvbnRleHRTdXBwb3J0c1JhdGVMaW1pdGluZ0V4dGVuc2lvbiA9IG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fcmF0ZV9saW1pdF9v
ZmZzY3JlZW5fY29udGV4dCIpOworICAgIG1fY29udGV4dFN1cHBvcnRzUmF0ZUxpbWl0aW5nRXh0
ZW5zaW9uID0gY29udGV4dDNELT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9DSFJPTUlV
TV9yYXRlX2xpbWl0X29mZnNjcmVlbl9jb250ZXh0Iik7CiB9CiAKLXZvaWQgV2ViR0xMYXllckNo
cm9taXVtOjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbmV3TGF5ZXJS
ZW5kZXJlcikKKyNpZiAxCit2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZUNoYW5n
ZWQoKQogewotICAgIGlmIChsYXllclJlbmRlcmVyKCkgIT0gbmV3TGF5ZXJSZW5kZXJlcikgewot
ICAgICAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgICAgICBpZiAobGF5ZXJSZW5kZXJlcigp
KQotICAgICAgICAgICAgICAgIGxheWVyUmVuZGVyZXIoKS0+cmVtb3ZlQ2hpbGRDb250ZXh0KG1f
Y29udGV4dCk7Ci0gICAgICAgICAgICBpZiAobmV3TGF5ZXJSZW5kZXJlcikKLSAgICAgICAgICAg
ICAgICBuZXdMYXllclJlbmRlcmVyLT5hZGRDaGlsZENvbnRleHQobV9jb250ZXh0KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIobmV3TGF5ZXJS
ZW5kZXJlcik7Ci0gICAgfQorICAgIG1fdGV4dHVyZUNoYW5nZWQgPSB0cnVlOwogfQorI2VuZGlm
CiAKIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjpyYXRlTGltaXRDb250ZXh0KFRpbWVyPFdlYkdM
TGF5ZXJDaHJvbWl1bT4qKQogewogICAgIFRSQUNFX0VWRU5UKCJXZWJHTExheWVyQ2hyb21pdW06
OnJhdGVMaW1pdENvbnRleHQiLCB0aGlzLCAwKTsKIAotICAgIGlmICghbV9jb250ZXh0KQorICAg
IGlmICghY29udGV4dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBFeHRlbnNpb25zM0RDaHJv
bWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4obV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOworICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRl
bnNpb25zID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0KCkvKm1f
Y29udGV4dCovLT5nZXRFeHRlbnNpb25zKCkpOwogICAgIGV4dGVuc2lvbnMtPnJhdGVMaW1pdE9m
ZnNjcmVlbkNvbnRleHRDSFJPTUlVTSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hy
b21pdW0uaAkocmV2aXNpb24gOTI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
MTIgKzUyLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKICAgICB2
b2lkIHNldFRleHR1cmVVcGRhdGVkKCk7CisgICAgdmlydHVhbCB2b2lkIHNldERyYXdpbmdCdWZm
ZXIoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcik7CiAKLSAgICB2b2lkIHNldENvbnRleHQo
Y29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpOwotICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2b2lkIHNldFRleHR1
cmVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25zdCB7IHJl
dHVybiBtX3RleHR1cmVJZDsgfQogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSBj
b25zdDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gIldlYkdMTGF5ZXIiOyB9CiAKQEAgLTY1LDEzICs2NSw5IEBA
IHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViR0xMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogb3duZXIpOwogICAgIGZyaWVuZCBjbGFzcyBXZWJHTExheWVyQ2hyb21pdW1SYXRl
TGltaXRUYXNrOwogCi0gICAgdmlydHVhbCB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25zdCB7IHJl
dHVybiBtX3RleHR1cmVJZDsgfQorCiAgICAgdm9pZCByYXRlTGltaXRDb250ZXh0KFRpbWVyPFdl
YkdMTGF5ZXJDaHJvbWl1bT4qKTsKIAotICAgIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9y
bUxheWVyIGhhcyBhIHNpZGUtZWZmZWN0IG9mIGFzc2lnbmluZyBpdHNlbGYKLSAgICAvLyB0byB0
aGUgbGF5ZXIuIEJlY2F1c2Ugb2YgdGhhdCBHcmFwaGljc0NvbnRleHQzRCdzIGRlc3RydWN0b3Ig
d2lsbCByZXNldAotICAgIC8vIGxheWVyJ3MgY29udGV4dCB0byAwLgotICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBtX2NvbnRleHQ7CiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAgICAgYm9vbCBt
X3RleHR1cmVDaGFuZ2VkOwogICAgIGJvb2wgbV9jb250ZXh0U3VwcG9ydHNSYXRlTGltaXRpbmdF
eHRlbnNpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCShyZXZpc2lvbiA5MjgzNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAogI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDgsNyAr
NTAsNyBAQCBzdGF0aWMgaW50IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzID0KICNlbmRpZgog
c3RhdGljIGludCBzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVscyA9IDA7CiAKLVBhc3NSZWZQdHI8
RHJhd2luZ0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQorUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBE
cmF3aW5nQnVmZmVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IElu
dFNpemUmIHNpemUsIERyYXdpbmdCdWZmZXJVc2FnZSB1c2FnZSkKIHsKICAgICBFeHRlbnNpb25z
M0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CiAgICAgYm9vbCBtdWx0
aXNhbXBsZVN1cHBvcnRlZCA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9ibGl0IikgJiYgZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVy
X211bHRpc2FtcGxlIikgJiYgZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX09FU19yZ2I4X3JnYmE4
Iik7CkBAIC02MCwxMCArNjIsMjMgQEAgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5n
QnVmZmVyOgogICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0gZXh0ZW5zaW9u
cy0+c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwogICAgIGlmIChwYWNr
ZWREZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpCiAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJs
ZWQoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAgIFJlZlB0cjxEcmF3aW5nQnVm
ZmVyPiBkcmF3aW5nQnVmZmVyID0gYWRvcHRSZWYobmV3IERyYXdpbmdCdWZmZXIoY29udGV4dCwg
c2l6ZSwgbXVsdGlzYW1wbGVTdXBwb3J0ZWQsIHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCkp
OworICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyID0gYWRvcHRSZWYobmV3
IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSwgbXVsdGlzYW1wbGVTdXBwb3J0ZWQsIHBhY2tl
ZERlcHRoU3RlbmNpbFN1cHBvcnRlZCwgdXNhZ2UpKTsKICAgICByZXR1cm4gKGRyYXdpbmdCdWZm
ZXItPm1fY29udGV4dCkgPyBkcmF3aW5nQnVmZmVyLnJlbGVhc2UoKSA6IDA7CiB9CiAKK3ZvaWQg
RHJhd2luZ0J1ZmZlcjo6cmVzZXRPbk5ld0NvbnRleHQoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gZ3JhcGhpY3NDb250ZXh0KQoreworICAgIC8vIERvIG5vdCBmcmVlIGFueSBvZiB0aGUg
cHJldmlvdXNseSBhbGxvY2F0ZWQgcmVzb3VyY2VzLCBhcyB0aGUgb2xkIGNvbnRleHQKKyAgICAv
LyBoYXMgYmVlbiBsb3N0LgorICAgIG1fY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dDsKKworICAg
IC8vIEFzc2lnbiBhbiBpbnZhbGlkIHNpemUgdG8gZm9yY2UgdGhlIGluaXRpYWxpemlvbiByb3V0
aW5lIHRvIGNvbnN0cnVjdAorICAgIC8vIG5ldyBHUFUgcmVzb3VyY2VzLgorICAgIEludFNpemUg
b2xkU2l6ZSA9IG1fc2l6ZTsKKyAgICBtX3NpemUgPSBJbnRTaXplKC0xLCAtMSk7CisgICAgaW5p
dGlhbGl6ZShvbGRTaXplKTsKK30KKwogdm9pZCBEcmF3aW5nQnVmZmVyOjpjbGVhcigpCiB7CiAg
ICAgaWYgKCFtX2NvbnRleHQpCkBAIC0zMDAsMTYgKzMxNSwzNCBAQCB2b2lkIERyYXdpbmdCdWZm
ZXI6OmNvbW1pdChsb25nIHgsIGxvbmcKICAgICAgICAgaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgp
OwogICAgICAgICAKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIAor
CiAgICAgaWYgKG1fbXVsdGlzYW1wbGVGQk8pIHsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoRXh0ZW5zaW9uczNEOjpSRUFEX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJP
KTsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpEUkFX
X0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5ibGl0RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQsIEdyYXBoaWNzQ29udGV4dDNE
OjpMSU5FQVIpOworCisgICAgICAgIGlmIChtX3NjaXNzb3JFbmFibGVkKQorICAgICAgICAgICAg
bV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworCisg
ICAgICAgIC8vIFVzZSBORUFSRVNULCBiZWNhdXNlIHRoZXJlIGlzIG5vIHNjYWxlIHBlcmZvcm1l
ZCBkdXJpbmcgdGhlIGJsaXQuCisgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5i
bGl0RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQsIEdyYXBoaWNzQ29udGV4dDNEOjpO
RUFSRVNUKTsKKworICAgICAgICBpZiAobV9zY2lzc29yRW5hYmxlZCkKKyAgICAgICAgICAgIG1f
Y29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIH0K
LSAgICAKKwogICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogfQogCitib29sIERyYXdpbmdCdWZmZXI6Om11bHRpc2Ft
cGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+Z2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgJiYgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBv
cnRlZDsKK30KKworUGFzc1JlZlB0cjxJbWFnZURhdGE+IERyYXdpbmdCdWZmZXI6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShmYWxzZSk7Cit9CisKIHZvaWQgRHJhd2luZ0J1
ZmZlcjo6YmluZCgpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJldmlz
aW9uIDkyODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdp
bmdCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CkBAIC00OCw5ICs0OSwxMCBAQCBzdHJ1Y3QgR3JQbGF0Zm9ybVN1
cmZhY2VEZXNjOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLQorY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0Q7CitjbGFzcyBJbWFnZURhdGE7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pICYm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLWNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1
bTsKK2NsYXNzIENhbnZhc0xheWVyQ2hyb21pdW07CiAjZW5kaWYKIAogLy8gTWFuYWdlcyBhIHJl
bmRlcmluZyB0YXJnZXQgKGZyYW1lYnVmZmVyICsgYXR0YWNobWVudCkgZm9yIGEgY2FudmFzLiAg
Q2FuIHB1Ymxpc2ggaXRzIHJlbmRlcmluZwpAQCAtNjEsNiArNjMsOCBAQCBwdWJsaWM6CiAKICAg
ICB+RHJhd2luZ0J1ZmZlcigpOwogCisgICAgdm9pZCByZXNldE9uTmV3Q29udGV4dChQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBncmFwaGljc0NvbnRleHQpOworCiAgICAgdm9pZCBjbGVh
ckZyYW1lYnVmZmVyKCk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGJ1ZmZlciB3YXMg
c3VjY2Vzc2Z1bGx5IHJlc2l6ZWQuCkBAIC04MCwxNCArODQsMjIgQEAgcHVibGljOgogCiAgICAg
Ly8gQ29waWVzIHRoZSBtdWx0aXNhbXBsZSBjb2xvciBidWZmZXIgdG8gdGhlIG5vcm1hbCBjb2xv
ciBidWZmZXIgYW5kIGxlYXZlcyBtX2ZibyBib3VuZAogICAgIHZvaWQgY29tbWl0KGxvbmcgeCA9
IDAsIGxvbmcgeSA9IDAsIGxvbmcgd2lkdGggPSAtMSwgbG9uZyBoZWlnaHQgPSAtMSk7Ci0gICAg
Ci0gICAgYm9vbCBtdWx0aXNhbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dCAmJiBtX2Nv
bnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVF
eHRlbnNpb25TdXBwb3J0ZWQ7IH0KLSAgICAKKworICAgIC8vIGNvbW1pdCBzaG91bGQgY29weSB0
aGUgZnVsbCBtdWx0aXNhbXBsZSBidWZmZXIsIHNvIHRoZSBzY2lzc29yIHRlc3QKKyAgICAvLyBz
ZXR0aW5nIGlzIHRyYWNrZWQgc28gdGhhdCB0aGUgdGVzdCBjYW4gYmUgc2FmZWx5IGRpc2FibGVk
IGR1cmluZworICAgIC8vIGNhbGxzIHRvIGNvbW1pdC4KKyAgICB2b2lkIHNldFNjaXNzb3JFbmFi
bGVkKGJvb2wgc2Npc3NvckVuYWJsZWQpIHsgbV9zY2lzc29yRW5hYmxlZCA9IHNjaXNzb3JFbmFi
bGVkOyB9CisKKyAgICBib29sIG11bHRpc2FtcGxlKCkgY29uc3Q7CisKICAgICBQbGF0Zm9ybTNE
T2JqZWN0IHBsYXRmb3JtQ29sb3JCdWZmZXIoKSBjb25zdDsKIAorICAgIFBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIo
KTsKICAgICB2b2lkIHB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKTsKKyAgICB2b2lkIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOwogI2VuZGlmCiAKICNpZiBVU0UoU0tJQSkKQEAgLTk3LDEwICsxMDksMjEg
QEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gZ3JhcGhpY3ND
b250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAorICAgIGVudW0gRHJhd2lu
Z0J1ZmZlclVzYWdlIHsKKyAgICAgICAgRHJhd2luZ0J1ZmZlclVzYWdlQ2FudmFzMkQsCisgICAg
ICAgIERyYXdpbmdCdWZmZXJVc2FnZVdlYkdMLAorICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRT
aXplJiwgRHJhd2luZ0J1ZmZlclVzYWdlIHVzYWdlKTsKKwogcHJpdmF0ZToKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25z
dCBJbnRTaXplJik7Ci0gICAgCi0gICAgRHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCos
IGNvbnN0IEludFNpemUmLCBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLCBib29s
IHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCk7CisgICAgRHJhd2luZ0J1ZmZl
cihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29sIG11bHRpc2FtcGxlRXh0
ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb25TdXBwb3J0ZWQsIERyYXdpbmdCdWZmZXJVc2FnZSB1c2FnZSk7CisKKyAgICB2
b2lkIGluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYpOworCisgICAgRHJhd2luZ0J1ZmZlclVzYWdl
IG1fdXNhZ2U7CisgICAgYm9vbCBtX3NjaXNzb3JFbmFibGVkOwogCiAgICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiAgICAgSW50U2l6ZSBtX3NpemU7CkBAIC0xMjIsNyAr
MTQ1LDcgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBt
X3BsYXRmb3JtTGF5ZXI7CisgICAgUmVmUHRyPENhbnZhc0xheWVyQ2hyb21pdW0+IG1fcGxhdGZv
cm1MYXllcjsKICNlbmRpZgogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CShyZXZpc2lvbiA5MzE0OSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDgtMTYgIEplZmYgVGltYW51cyAg
PHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUm91Z2ggcGF0Y2ggdGhh
dCBkZW1vbnN0cmF0ZXMgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gdW5pZnkgYm90aCBXZWJHTCBh
bmQgQ2FudmFzMkQgcmVuZGVyaW5nIGNvbnRleHRzIHRvIHVzZSBhIERyYXdpbmdCdWZmZXIgZm9y
IGJhY2tpbmcgc3RvcmUgbWFuYWdlbWVudC4KKyAgICAgICAgCisgICAgICAgIEJlY2F1c2UgV2Vi
R0wgY29udGVudCBpcyBub3cgcmVuZGVyZWQgdG8gYSBEcmF3aW5nQnVmZmVyLCBhbGwgb2YgdGhl
IHJvdXRpbmVzIHRoYXQgcHJldmlvdXNseSByZWFkIGZyb20gdGhlIGJhY2stYnVmZmVyIG5vdyBt
dXN0IHJlYWQgZnJvbSB0aGUgRkJPIG1hbmFnZWQgYnkgdGhlIERyYXdpbmdCdWZmZXIuCisgICAg
ICAgIEEgdGVtcG9yYXJ5IHNvbHV0aW9uIGlzIHByb3Bvc2VkOiAgQWRkIGFuIGV4dHJhIGFyZ3Vt
ZW50IHRvIHJlYWRCYWNrRnJhbWVidWZmZXIgdG8gY29uZGl0aW9uYWxseSBzcGVjaWZ5IGlmIGZi
IDAgc2hvdWxkIGJlIGJvdW5kIGJlZm9yZSB0aGUgcmVhZCwgb3IgaWYgdGhlIHJlYWQgc2hvdWxk
IGhhcHBlbiBmcm9tIHRoZSBjdXJyZW50bHkgYm91bmQgZmJvLiAKKyAgICAgICAgQSBwYXJhbGxl
bCBDaHJvbWUgY2hhbmdlIGlzIHJlcXVpcmVkIHRvIGltcGxlbWVudCB0aGUgbG9naWMgYXNzb2Np
YXRlZCB3aXRoIHRoZSBuZXcgYXJndW1lbnQuICBTZWUgQ0w6ICBodHRwOi8vY29kZXJldmlldy5j
aHJvbWl1bS5vcmcvNzY2OTAwMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTMyMDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHB1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAqIHNy
Yy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bWFya0NvbnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHNyYy9HcmFwaGlj
c0NvbnRleHQzREludGVybmFsLmg6CisKIDIwMTEtMDgtMTYgIFN0ZXBoZW4gV2hpdGUgIDxzZW5v
cmJsYW5jb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Qgc2hvdWxk
IGFsbG93IGl0cyBob3N0V2luZG93IHRvIGJlIE5VTEwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24g
OTI4MzcpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRl
eHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgcHVibGljOgogICAgIC8v
IHRoZSBtZW1vcnkgcmVnaW9uIHBvaW50ZWQgdG8gYnkgInBpeGVscyIgd2l0aCBzaXplICJidWZm
ZXJTaXplIi4gSXQgaXMKICAgICAvLyBleHBlY3RlZCB0aGF0IHRoZSBzdG9yYWdlIGZvciAicGl4
ZWxzIiBjb3ZlcnMgKDQgKiB3aWR0aCAqIGhlaWdodCkgYnl0ZXMuCiAgICAgLy8gUmV0dXJucyB0
cnVlIG9uIHN1Y2Nlc3MuCi0gICAgdmlydHVhbCBib29sIHJlYWRCYWNrRnJhbWVidWZmZXIodW5z
aWduZWQgY2hhciogcGl4ZWxzLCBzaXplX3QgYnVmZmVyU2l6ZSkgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCByZWFkQmFja0ZyYW1lYnVmZmVyKHVuc2lnbmVkIGNoYXIqIHBpeGVscywgc2l6ZV90IGJ1
ZmZlclNpemUsIGJvb2wgYmluZERlZmF1bHRCYWNrQnVmZmVyKSA9IDA7CiAKICAgICAvLyBSZXR1
cm5zIHRoZSBpZCBvZiB0aGUgdGV4dHVyZSB3aGljaCBpcyB1c2VkIGZvciBzdG9yaW5nIHRoZSBj
b250ZW50cyBvZgogICAgIC8vIHRoZSBmcmFtZWJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBj
b250ZXh0LiBUaGlzIHRleHR1cmUgaXMgYWNjZXNzaWJsZQpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJ
KHJldmlzaW9uIDkyODM3KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0RDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw5ICsxMzQsNiBAQCBi
b29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmluaXRpYWxpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBtX2ltcGwgPSB3ZWJDb250ZXh0LnJlbGVhc2UoKTsKIAotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBtX2NvbXBvc2l0aW5nTGF5ZXIgPSBXZWJHTExheWVy
Q2hyb21pdW06OmNyZWF0ZSgwKTsKLSNlbmRpZgogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0x
ODAsMTggKzE3Nyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cHJlcGFyZVQK
ICAgICBtX2ltcGwtPnByZXBhcmVUZXh0dXJlKCk7CiB9CiAKLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi1XZWJHTExheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbXBvc2l0aW5nTGF5
ZXIuZ2V0KCk7Ci19Ci0jZW5kaWYKLQogdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpt
YXJrQ29udGV4dENoYW5nZWQoKQogewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBwbGF0Zm9ybUxheWVyKCktPnNldFRleHR1cmVVcGRhdGVkKCk7Ci0jZW5kaWYKICAgICBt
X2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOwogfQogCkBAIC0yMDUsNyArMTkyLDcgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpsYXllckNvbQogICAgIHJldHVybiBtX2xheWVyQ29t
cG9zaXRlZDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9p
ZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0LCBib29sIGJpbmRCYWNrQnVmZmVyKQog
ewogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKICAg
ICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwpAQCAtMjQzLDcg
KzIzMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRSZW4KICNlcnJv
ciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQogI2VuZGlmCiAKLSAgICBtX2ltcGwtPnJlYWRC
YWNrRnJhbWVidWZmZXIocGl4ZWxzLCA0ICogbV9pbXBsLT53aWR0aCgpICogbV9pbXBsLT5oZWln
aHQoKSk7CisgICAgbV9pbXBsLT5yZWFkQmFja0ZyYW1lYnVmZmVyKHBpeGVscywgNCAqIG1faW1w
bC0+d2lkdGgoKSAqIG1faW1wbC0+aGVpZ2h0KCksIGJpbmRCYWNrQnVmZmVyKTsKIAogICAgIGlm
ICghbV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSkgewog
ICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDQgKiBtX2ltcGwtPndpZHRoKCkgKiBtX2ltcGwt
PmhlaWdodCgpOwpAQCAtMjc0LDcgKzI2MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6cGFpbnRSZW4KICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQor
UGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKGJvb2wgYmluZEJhY2tCdWZmZXIpCiB7CiAgICAgaWYg
KG1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMjgzLDcgKzI3MCw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBH
cmFwaGljc0NvbnRleHQzREkKICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEt
PmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CiAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogbV9p
bXBsLT53aWR0aCgpICogbV9pbXBsLT5oZWlnaHQoKTsKIAotICAgIG1faW1wbC0+cmVhZEJhY2tG
cmFtZWJ1ZmZlcihwaXhlbHMsIGJ1ZmZlclNpemUpOworICAgIG1faW1wbC0+cmVhZEJhY2tGcmFt
ZWJ1ZmZlcihwaXhlbHMsIGJ1ZmZlclNpemUsIGJpbmRCYWNrQnVmZmVyKTsKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYnVmZmVyU2l6ZTsgaSArPSA0KQogICAgICAgICBzdGQ6OnN3YXAo
cGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKQEAgLTk1OSw5ICs5NDYsNiBAQCBHcmFwaGljc0Nv
bnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAKIEdyYXBoaWNzQ29udGV4dDNEOjp+R3Jh
cGhpY3NDb250ZXh0M0QoKQogewotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogY2FudmFzTGF5ZXIg
PSBtX2ludGVybmFsLT5wbGF0Zm9ybUxheWVyKCk7Ci0gICAgaWYgKGNhbnZhc0xheWVyKQotICAg
ICAgICBjYW52YXNMYXllci0+c2V0Q29udGV4dCgwKTsKICAgICBtX2ludGVybmFsLT5zZXRDb250
ZXh0TG9zdENhbGxiYWNrKG51bGxwdHIpOwogICAgIG1faW50ZXJuYWwtPnNldFN3YXBCdWZmZXJz
Q29tcGxldGVDYWxsYmFja0NIUk9NSVVNKG51bGxwdHIpOwogfQpAQCAtMTAwNSwxNSArOTg5LDYg
QEAgSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcgogICAgIHJldHVybiBt
X2ludGVybmFsLT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOwogfQogCi0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6
OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogY2FudmFz
TGF5ZXIgPSBtX2ludGVybmFsLT5wbGF0Zm9ybUxheWVyKCk7Ci0gICAgY2FudmFzTGF5ZXItPnNl
dENvbnRleHQodGhpcyk7Ci0gICAgcmV0dXJuIGNhbnZhc0xheWVyOwotfQotI2VuZGlmCi0KIERF
TEVHQVRFX1RPX0lOVEVSTkFMKG1ha2VDb250ZXh0Q3VycmVudCkKIERFTEVHQVRFX1RPX0lOVEVS
TkFMXzIocmVzaGFwZSwgaW50LCBpbnQpCiAKQEAgLTExNjYsOCArMTE0MSw4IEBAIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgKICAgICByZXR1cm4gbV9pbnRlcm5hbC0+
bGF5ZXJDb21wb3NpdGVkKCk7CiB9CiAKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEocGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKQotREVMRUdBVEVf
VE9fSU5URVJOQUxfUihwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSwgUGFzc1JlZlB0
cjxJbWFnZURhdGE+KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcywgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCosIGJvb2wpCitERUxFR0FURV9UT19J
TlRFUk5BTF8xUihwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSwgYm9vbCwgUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+KQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludHNJbnRvQ2Fu
dmFzQnVmZmVyKCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgJKHJldmlzaW9uIDkyODM3KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OSwxNSArNzksMTIgQEAgcHVibGljOgogICAgIGJvb2wgbGF5
ZXJDb21wb3NpdGVkKCkgY29uc3Q7CiAgICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAK
LSAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqKTsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9JbWFnZURhdGEoKTsKKyAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQqLCBib29sKTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4g
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoYm9vbCk7CiAgICAgYm9vbCBwYWludHNJ
bnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CiAKICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CiAK
LSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgV2ViR0xMYXllckNocm9taXVt
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7Ci0jZW5kaWYKICAgICBib29sIGlzR0xFUzJDb21wbGlh
bnQoKSBjb25zdDsKIAogICAgIHZvaWQgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7CkBAIC0yOTUs
OSArMjkyLDcgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFN0cmluZz4gbV9lbmFibGVkRXh0ZW5z
aW9uczsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnM7CiAgICAg
Ym9vbCBtX2xheWVyQ29tcG9zaXRlZDsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Ci0gICAgUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gbV9jb21wb3NpdGluZ0xheWVyOwotI2Vu
ZGlmCisKICNpZiBVU0UoU0tJQSkKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0
aGUgQ2FudmFzJ3MgYmFja2luZyBzdG9yZSBkb24ndAogICAgIC8vIG1hdGNoIHRob3NlIHRoYXQg
d2Ugd2VyZSBnaXZlbiBpbiB0aGUgbW9zdCByZWNlbnQgY2FsbCB0bwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109732</attachid>
            <date>2011-10-04 19:31:50 -0700</date>
            <delta_ts>2011-10-04 20:21:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111004222957.patch</filename>
            <type>text/plain</type>
            <size>33373</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NjY1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjkgQEAKKzIwMTEtMTAtMDQgIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUGF0Y2ggdGhh
dCBkZW1vbnN0cmF0ZXMgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuICBBbGwg
UGxhdGZvcm1MYXllciBsaWZldGltZSBtYW5hZ2VtZW50IGlzCisgICAgICAgIHBlcmZvcm1lZCBi
eSB0aGUgRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgQ2hhbmdlcyBhcmUgb25seSByZWxldmFudCB0
byBDaHJvbWl1bSBwb3J0cy4gIEZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgdW5jaGFuZ2VkIGZv
ciBvdGhlciBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOiBDb25zdHJ1Y3Qg
YSBEcmF3aW5nQnVmZmVyCisgICAgICAgIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYW5kIGZvcndh
cmQgYWxsIGZyYW1lYnVmZmVyIG1hbmFnZW1lbnQgY2FsbHMgdG8KKyAgICAgICAgaXQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRl
eHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xl
YXJJZkNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1l
YnVmZmVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZURyYXdpbmdCdWZmZXIpOiBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBpbnN0YW5j
ZXMgdHJhY2sgdGhlIERyYXdpbmdCdWZmZXIgaW5zdGFuY2VzIHRoYXQgdGhleSBjcmVhdGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXREcmF3aW5nQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEcmF3aW5nQnVmZmVyOjpmcmFtZWJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnNldENvbnRleHQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OnJlc2V0T25OZXdDb250ZXh0KTogVGhlIGRyYXdpbmcgYnVmZmVyIGlzCisg
ICAgICAgIHByZXNlcnZlZCB3aGVuIHRoZSBjb250ZXh0IGlzIGxvc3QuICBUaGlzIHJvdXRpbmUg
cmVwb3B1bGF0ZXMgdGhlCisgICAgICAgIGJ1ZmZlcidzIHN0YXRlIHdoZW4gdGhlIHJlcGxhY2Vt
ZW50IGNvbnRleHQgaXMgYnVpbHQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpj
b21taXQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6bXVsdGlzYW1wbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9J
bWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpzZXRTY2lzc29yRW5hYmxlZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNER3RrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRCk6CisKIDIwMTEtMTAtMDQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNv
bT4KIAogICAgICAgICBNb3ZlIGNvZGUgaW50byBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6
YmVnaW5TY3JvbGxHZXN0dXJlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTY2MzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjMsNyArMzYzLDEyIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdD
b250ZXh0PiBXZWJHTFIKICAgICB9CiAKICAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRy
dWU7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNl
cyA9IHRydWU7CisjZWxzZQogICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBmYWxzZTsK
KyNlbmRpZgorCiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CiAKQEAgLTM4NCw4
ICszODksMTggQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbgogICAg
ICwgbV92aWRlb0NhY2hlKDQpCiAgICAgLCBtX2NvbnRleHRMb3N0KGZhbHNlKQogICAgICwgbV9h
dHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKIHsKICAgICBB
U1NFUlQobV9jb250ZXh0KTsKKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIC8vIENyZWF0
ZSB0aGUgRHJhd2luZ0J1ZmZlcgorICAgIG1fZHJhd2luZ0J1ZmZlciA9IG1fY29udGV4dC0+Y3Jl
YXRlRHJhd2luZ0J1ZmZlcihJbnRTaXplKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVp
Z2h0KCkpKTsKKyNlbmRpZgorCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5iaW5kKCk7CisKICAgICBzZXR1cEZsYWdzKCk7CiAgICAgaW5pdGlhbGl6
ZU5ld0NvbnRleHQoKTsKIH0KQEAgLTQ1MSw2ICs0NjYsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aW5pdGlhbGl6ZU5lCiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAg
ICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CiAKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNh
bnZhcygpLT5oZWlnaHQoKSkpOworCiAgICAgbV9jb250ZXh0LT5yZXNoYXBlKGNhbnZhcygpLT53
aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwogICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwg
MCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7CiAKQEAgLTQ4Myw3ICs1
MDEsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDCiB7CiAgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQogICAgICAgICByZXR1cm47CisKICAgICBtX2NvbnRl
eHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOworCiAgICAgbV9sYXllckNsZWFyZWQgPSBmYWxzZTsK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUmVuZGVyQm94KiByZW5kZXJC
b3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7CkBAIC01MTMsOCArNTMzLDEyIEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcklmQ29tcG8KICAgICAvLyBEZXRlcm1pbmUgaWYgaXQn
cyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVhciB0aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRo
aXMgY2xlYXIuCiAgICAgYm9vbCBjb21iaW5lZENsZWFyID0gbWFzayAmJiAhbV9zY2lzc29yRW5h
YmxlZDsKIAotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIDApOworICAgIH0KICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sg
JiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpCiAgICAgICAgIG1fY29udGV4
dC0+Y2xlYXJDb2xvcihtX2NvbG9yTWFza1swXSA/IG1fY2xlYXJDb2xvclswXSA6IDAsCkBAIC01
NzQsMTcgKzU5OCwyOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJp
CiAgICAgfSBlbHNlCiAgICAgICAgIGNhbnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsK
ICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworCiAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5
ICYmICFtX2xheWVyQ2xlYXJlZCkKICAgICAgICAgcmV0dXJuOworCiAgICAgY2FudmFzKCktPmNs
ZWFyQ29waWVkSW1hZ2UoKTsKICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisKKyAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgp
OwogICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhpcyk7Cisg
ICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7
CiB9CiAKIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKIHsKICAgICBjbGVhcklmQ29tcG9zaXRlZCgp
OwotICAgIHJldHVybiBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KCk7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5j
b21taXQoKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBtX2NvbnRleHQtPnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgcmV0dXJuIGltYWdlRGF0
YTsKIH0KIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50c0ludG9DYW52YXNCdWZm
ZXIoKSBjb25zdApAQCAtNjE2LDE2ICs2NTIsMjUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnJlc2hhcGUoaW50CiAKICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIG1hcmsgdGhlIGNhbnZh
cyBhcyBkaXJ0eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2UgYnVmZmVyIHdpbGwgYWxz
byBzdGFydCBvZmYKICAgICAvLyBjbGVhciAoYW5kIHRoaXMgbWF0Y2hlcyB3aGF0IHJlc2hhcGUg
d2lsbCBkbykuCi0gICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOworICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUo
d2lkdGgsIGhlaWdodCk7CiB9CiAKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdC
dWZmZXJXaWR0aCgpIGNvbnN0CiB7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAg
cmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7CisKICAgICByZXR1cm4gbV9j
b250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7CiB9CiAKIGludCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdAogeworICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNp
emUoKS5oZWlnaHQoKTsKKwogICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVi
dWZmZXJTaXplKCkuaGVpZ2h0KCk7CiB9CiAKQEAgLTc0NSw3ICs3OTAsMTEgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZgogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwotICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOworICAgIGlmICghbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIEluc3RlYWQg
b2YgYmluZGluZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KKyAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwogICAgIGlmIChidWZmZXIp
CiAgICAgICAgIGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0xMDg0LDkgKzExMzMsMjEgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpCisgICAgaWYg
KGlzUmVzb3VyY2VTYWZlKCkpIHsKKyAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYg
bmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmNvbW1pdCgpOworCiAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0g
ICAgZWxzZSB7CisKKyAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAor
ICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxp
bmcpCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVy
KQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwogICAgICAgICBHQzNE
aW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKICAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0aCwg
Y2xpcHBlZEhlaWdodDsKICAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBn
ZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAm
Y2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7CkBA
IC0xMDk4LDYgKzExNTksMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJ
bWFnZQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fY29udGV4
dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlcik7CisKKyAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVy
IGlmIG5lZWRlZAorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2lu
Z0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwogICAgIH0KICAg
ICAvLyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0
aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgogICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSk7CkBAIC0xMjc0LDcgKzEzMzksMTAgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRlbGV0ZUZyYW1lYgogICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX2ZyYW1l
YnVmZmVyQmluZGluZykgewogICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IDA7CiAgICAg
ICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVidWZmZXIgaGVyZSB0byBiaW5kIGJhY2sgdG8g
aW50ZXJuYWwgZmJvLgotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVy
KQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgMCk7CiAgICAgfQogfQogCkBAIC0xMzYxLDggKzE0MjksMTEgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUoR0MzRAogewogICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAgICByZXR1cm47Ci0gICAg
aWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKQorICAgIGlmIChjYXAg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewogICAgICAgICBtX3NjaXNzb3JF
bmFibGVkID0gZmFsc2U7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOwor
ICAgIH0KICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMTcwMyw4ICsxNzc0LDExIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGUKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkKKyAgICBpZiAoY2FwID09IEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKICAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9
IHRydWU7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdp
bmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOworICAgIH0KICAg
ICBtX2NvbnRleHQtPmVuYWJsZShjYXApOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CkBAIC0yODc2LDcgKzI5NTAsMTcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnJlYWRQaXhlbHMoRwogICAgIH0KICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwogICAgIHZv
aWQqIGRhdGEgPSBwaXhlbHMtPmJhc2VBZGRyZXNzKCk7CisKKyAgICAvLyBDb21taXQgRHJhd2lu
Z0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgIGlmICghbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPmNvbW1pdCgpOworCiAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisKKyAgICAvLyBSZXN0b3JlIERyYXdpbmdC
dWZmZXIgaWYgbmVlZGVkCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdp
bmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworCiAjaWYgT1MoREFS
V0lOKQogICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBzZWN0aW9uIHdoZW4gR0wgZHJpdmVyIGJ1
ZyBvbiBNYWMgaXMgZml4ZWQsIGkuZS4sCiAgICAgLy8gd2hlbiBhbHBoYSBpcyBvZmYsIHJlYWRQ
aXhlbHMgc2hvdWxkIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgpAQCAtNDExOSwxNCAr
NDIwMywxNCBAQCBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lCiB7CiAg
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgpOwot
ICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgo
KTsKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCku
d2lkdGgoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgp
OwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVp
Z2h0KCkKIHsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9iamVjdCgpKQogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdl
dEhlaWdodCgpOwotICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1
ZmZlci0+c2l6ZSgpLmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVy
U2l6ZSgpLmhlaWdodCgpOwogfQogCiBXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVUZXh0dXJlQmluZGluZyhHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51
bXNGb3JDdWJlTWFwKQpAQCAtNDgyMiw2ICs0OTA2LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6Om1heWJlUmVzdG9yZQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgbV9kcmF3
aW5nQnVmZmVyLT5yZXNldE9uTmV3Q29udGV4dChjb250ZXh0KTsKKwogICAgIG1fY29udGV4dCA9
IGNvbnRleHQ7CiAgICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwogICAgIGluaXRpYWxpemVOZXdD
b250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAogCiAjaW5jbHVkZSAi
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKQEAgLTM1NSw2ICszNTYsMTAgQEAgcHVibGljOgog
CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiAKKyAgICAvLyBPcHRp
b25hbCBzdHJ1Y3R1cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGluc3RlYWQg
b2YgZGlyZWN0bHkKKyAgICAvLyB0byB0aGUgYmFjay1idWZmZXIgb2YgbV9jb250ZXh0LgorICAg
IFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7CisKICAgICBjbGFzcyBXZWJH
TFJlbmRlcmluZ0NvbnRleHRSZXN0b3JlVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc3RvcmVUaW1l
cihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpIDogbV9jb250ZXh0KGNvbnRleHQpIHsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYwLDcgKzYwLDEwIEBAIHVpbnQ4X3QgY29udmVydENvbG9yMTZCaWdUbzgodWludDE2X3QgdmEK
IAogUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRHJh
d2luZ0J1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIHJldHVybiBEcmF3aW5nQnVm
ZmVyOjpjcmVhdGUodGhpcywgc2l6ZSk7CisgICAgQVNTRVJUKCFtX2RyYXdpbmdCdWZmZXIpOwor
ICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyKERyYXdpbmdCdWZmZXI6OmNy
ZWF0ZSh0aGlzLCBzaXplKSk7CisgICAgbV9kcmF3aW5nQnVmZmVyID0gZHJhd2luZ0J1ZmZlci5n
ZXQoKTsKKyAgICByZXR1cm4gZHJhd2luZ0J1ZmZlcjsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdD
M0RpbnQgdW5wYWNrQWxpZ25tZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA5NjYzNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwMSw3ICs1MDEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKIAogICAgIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gY3JlYXRlRHJh
d2luZ0J1ZmZlcihjb25zdCBJbnRTaXplJiA9IEludFNpemUoKSk7Ci0gICAgCisgICAgdm9pZCBz
ZXREcmF3aW5nQnVmZmVyKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpIHsgbV9kcmF3aW5n
QnVmZmVyID0gZHJhd2luZ0J1ZmZlcjsgfQorICAgIERyYXdpbmdCdWZmZXIqIGdldERyYXdpbmdC
dWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdCdWZmZXI7IH0KKwogI2lmIFBMQVRGT1JN
KE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
UVQpCiAgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVG
Qk8gdG8gcmVndWxhciBGQk8uCiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwpAQCAtOTUxLDYg
Kzk1Myw4IEBAIHB1YmxpYzoKICAgICBMaXN0SGFzaFNldDxHQzNEZW51bT4gbV9zeW50aGV0aWNF
cnJvcnM7CiAjZW5kaWYKIAorICAgIERyYXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKKwog
ICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU7CiAgICAgT3duUHRyPEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gbV9wcml2YXRlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
RHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiwxNCBAQAogCiAjaW5jbHVkZSAiRHJhd2luZ0J1
ZmZlci5oIgogCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
I2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIldlYkdMTGF5ZXJD
aHJvbWl1bS5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHVuc2ln
bmVkIGdlbmVyYXRlQ29sb3JUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25z
dCBJbnRTaXplJiBzaXplKQpAQCAtNTcsNyArNjMsOCBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5n
QnVmZmVyKEdyYXBoaWNzQ29uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
dFNpemUmIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1w
bGVFeHRlbnNpb25TdXBwb3J0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCisgICAgOiBtX3NjaXNzb3JFbmFibGVkKGZhbHNlKQorICAgICwgbV9jb250ZXh0KGNv
bnRleHQpCiAgICAgLCBtX3NpemUoLTEsIC0xKQogICAgICwgbV9tdWx0aXNhbXBsZUV4dGVuc2lv
blN1cHBvcnRlZChtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCkKICAgICAsIG1fcGFja2Vk
RGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lv
blN1cHBvcnRlZCkKQEAgLTY5LDE0ICs3Niw3IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIoR3JhcGhpY3NDb24KICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlz
YW1wbGVDb2xvckJ1ZmZlcigwKQogewotICAgIG1fZmJvID0gY29udGV4dC0+Y3JlYXRlRnJhbWVi
dWZmZXIoKTsKLSAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgbV9jb2xvckJ1ZmZlciA9IGdlbmVyYXRlQ29sb3JU
ZXh0dXJlKGNvbnRleHQsIHNpemUpOwotICAgIGNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMoKTsKLSAg
ICBpZiAoIXJlc2V0KHNpemUpKSB7Ci0gICAgICAgIG1fY29udGV4dC5jbGVhcigpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGluaXRpYWxpemUoc2l6ZSk7CiB9CiAKIERyYXdpbmdCdWZm
ZXI6On5EcmF3aW5nQnVmZmVyKCkKQEAgLTg3LDE1ICs4NywzMCBAQCBEcmF3aW5nQnVmZmVyOjp+
RHJhd2luZ0J1ZmZlcigpCiAgICAgY2xlYXIoKTsKIH0KIAordm9pZCBEcmF3aW5nQnVmZmVyOjpp
bml0aWFsaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgbV9mYm8gPSBtX2NvbnRleHQt
PmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgbV9jb2xvckJ1ZmZlciA9
IGdlbmVyYXRlQ29sb3JUZXh0dXJlKG1fY29udGV4dC5nZXQoKSwgc2l6ZSk7CisgICAgY3JlYXRl
U2Vjb25kYXJ5QnVmZmVycygpOworICAgIGlmICghcmVzZXQoc2l6ZSkpIHsKKyAgICAgICAgbV9j
b250ZXh0LmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIERyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRm
b3JtTGF5ZXIoKQogewogICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAobXVsdGlzYW1wbGUoKSkKLSAgICAgICAgY29tbWl0KCk7CiAgICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobXVsdGlzYW1wbGUoKSkgeworICAgICAgICBj
b21taXQoKTsKKyAgICAgICAgYmluZCgpOworICAgIH0KKwogICAgIG1fY29udGV4dC0+Zmx1c2go
KTsKIH0KICNlbmRpZgpAQCAtMTEyLDQgKzEyNyw5IEBAIFBsYXRmb3JtM0RPYmplY3QgRHJhd2lu
Z0J1ZmZlcjo6cGxhdGZvcm0KICAgICByZXR1cm4gbV9jb2xvckJ1ZmZlcjsKIH0KIAorUGxhdGZv
cm0zRE9iamVjdCBEcmF3aW5nQnVmZmVyOjpmcmFtZWJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZmJvOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJ
KHJldmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJEcmF3
aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IgpAQCAtODUsMTAgKzg2LDggQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0bwogICAgIH0KICAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0dXJlIHVz
ZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgaWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkgJiYg
bV90ZXh0dXJlVXBkYXRlZCkgewotICAgICAgICAvLyBwcmVwYXJlVGV4dHVyZSBjb3BpZXMgdGhl
IGNvbnRlbnRzIG9mIHRoZSBvZmYtc2NyZWVuIHJlbmRlciB0YXJnZXQgaW50byB0aGUgdGV4dHVy
ZQotICAgICAgICAvLyB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgotICAgICAgICAvLwotICAgICAg
ICBtX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7CisgICAgICAgIC8vIHB1Ymxpc2hUb1BsYXRm
b3JtTGF5ZXIgcHJlcGFyZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBvZmYtc2NyZWVuIHJlbmRlciB0
YXJnZXQgZm9yIHVzZSBieSB0aGUgY29tcG9zaXRvci4KKyAgICAgICAgY29udGV4dCgpLT5nZXRE
cmF3aW5nQnVmZmVyKCktPnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKTsKICAgICAgICAgbV9jb250
ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAgICAgICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7
CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSBmYWxzZTsKQEAgLTEzMiw3ICsxMzEsNyBAQCB2
b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zCiAgICAgaWYgKCFtX2NvbnRl
eHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlSWQgPSBtX2Nv
bnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpOworICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlSWQgPSBt
X2NvbnRleHQtPmdldERyYXdpbmdCdWZmZXIoKS0+Y29sb3JCdWZmZXIoKTsKICAgICBpZiAodGV4
dHVyZUlkICE9IG1fdGV4dHVyZUlkIHx8IGNvbnRleHRDaGFuZ2VkKSB7CiAgICAgICAgIG1fdGV4
dHVyZUNoYW5nZWQgPSB0cnVlOwogICAgICAgICBtX3RleHR1cmVVcGRhdGVkID0gdHJ1ZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5jcHAJKHJldmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2
ICszNSw4IEBACiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogCiAjaW5jbHVkZSAiRXh0ZW5z
aW9uczNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02NCw2ICs2NiwyMCBAQCBQYXNz
UmVmUHRyPERyYXdpbmdCdWZmZXI+IERyYXdpbmdCdWZmZXI6CiAgICAgcmV0dXJuIChkcmF3aW5n
QnVmZmVyLT5tX2NvbnRleHQpID8gZHJhd2luZ0J1ZmZlci5yZWxlYXNlKCkgOiAwOwogfQogCit2
b2lkIERyYXdpbmdCdWZmZXI6OnJlc2V0T25OZXdDb250ZXh0KFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGdyYXBoaWNzQ29udGV4dCkKK3sKKyAgICAvLyBEbyBub3QgZnJlZSBhbnkgb2Yg
dGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIHJlc291cmNlcywgYXMgdGhlIG9sZCBjb250ZXh0Cisg
ICAgLy8gaGFzIGJlZW4gbG9zdC4KKyAgICBtX2NvbnRleHQgPSBncmFwaGljc0NvbnRleHQ7Cisg
ICAgbV9jb250ZXh0LT5zZXREcmF3aW5nQnVmZmVyKHRoaXMpOworCisgICAgLy8gQXNzaWduIGFu
IGludmFsaWQgc2l6ZSB0byBmb3JjZSB0aGUgaW5pdGlhbGl6aW9uIHJvdXRpbmUgdG8gY29uc3Ry
dWN0CisgICAgLy8gbmV3IEdQVSByZXNvdXJjZXMuCisgICAgSW50U2l6ZSBvbGRTaXplID0gbV9z
aXplOworICAgIG1fc2l6ZSA9IEludFNpemUoLTEsIC0xKTsKKyAgICBpbml0aWFsaXplKG9sZFNp
emUpOworfQorCiB2b2lkIERyYXdpbmdCdWZmZXI6OmNsZWFyKCkKIHsKICAgICBpZiAoIW1fY29u
dGV4dCkKQEAgLTI5MywyMyArMzA5LDQxIEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y29tbWl0KGxv
bmcgeCwgbG9uZwogewogICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICByZXR1cm47Ci0gICAg
ICAgIAorCiAgICAgaWYgKHdpZHRoIDwgMCkKICAgICAgICAgd2lkdGggPSBtX3NpemUud2lkdGgo
KTsKICAgICBpZiAoaGVpZ2h0IDwgMCkKICAgICAgICAgaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgp
OwotICAgICAgICAKKwogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
CisKICAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykgewogICAgICAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OlJFQURfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVG
Qk8pOwogICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OkRS
QVdfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0
M0Q6OkxJTkVBUik7CisKKyAgICAgICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCisgICAgICAgICAg
ICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisK
KyAgICAgICAgLy8gVXNlIE5FQVJFU1QsIGJlY2F1c2UgdGhlcmUgaXMgbm8gc2NhbGUgcGVyZm9y
bWVkIGR1cmluZyB0aGUgYmxpdC4KKyAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PmJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0M0Q6
Ok5FQVJFU1QpOworCisgICAgICAgIGlmIChtX3NjaXNzb3JFbmFibGVkKQorICAgICAgICAgICAg
bV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAg
fQotICAgIAorCiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiB9CiAKK2Jvb2wgRHJhd2luZ0J1ZmZlcjo6bXVsdGlz
YW1wbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5nZXRD
b250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyAmJiBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3Vw
cG9ydGVkOworfQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gRHJhd2luZ0J1ZmZlcjo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQoreworICAgIHJldHVybiBtX2NvbnRleHQtPnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7Cit9CisKIHZvaWQgRHJhd2luZ0J1ZmZl
cjo6YmluZCgpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJldmlzaW9u
IDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CkBAIC00Myw5ICs0NCwxMCBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQorY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBJbWFnZURhdGE7CiAj
aWYgUExBVEZPUk0oQ0hST01JVU0pICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLWNs
YXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bTsKK2NsYXNzIENhbnZhc0xheWVyQ2hyb21pdW07CiAj
ZW5kaWYKIAogLy8gTWFuYWdlcyBhIHJlbmRlcmluZyB0YXJnZXQgKGZyYW1lYnVmZmVyICsgYXR0
YWNobWVudCkgZm9yIGEgY2FudmFzLiAgQ2FuIHB1Ymxpc2ggaXRzIHJlbmRlcmluZwpAQCAtNTYs
NiArNTgsMTAgQEAgcHVibGljOgogCiAgICAgfkRyYXdpbmdCdWZmZXIoKTsKIAorICAgIC8vIFJl
c2V0cyB0aGUgZHJhd2luZyBidWZmZXIgaW50ZXJuYWwgc3RhdGUgb24gY29uc3RydWN0aW9uIG9m
IGEgbmV3CisgICAgLy8gR3JhcGhpY3NDb250ZXh0M0QuCisgICAgdm9pZCByZXNldE9uTmV3Q29u
dGV4dChQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisKICAgICB2b2lkIGNsZWFyRnJh
bWVidWZmZXIoKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgYnVmZmVyIHdhcyBzdWNj
ZXNzZnVsbHkgcmVzaXplZC4KQEAgLTc1LDEwICs4MSwxOCBAQCBwdWJsaWM6CiAKICAgICAvLyBD
b3BpZXMgdGhlIG11bHRpc2FtcGxlIGNvbG9yIGJ1ZmZlciB0byB0aGUgbm9ybWFsIGNvbG9yIGJ1
ZmZlciBhbmQgbGVhdmVzIG1fZmJvIGJvdW5kCiAgICAgdm9pZCBjb21taXQobG9uZyB4ID0gMCwg
bG9uZyB5ID0gMCwgbG9uZyB3aWR0aCA9IC0xLCBsb25nIGhlaWdodCA9IC0xKTsKLSAgICAKLSAg
ICBib29sIG11bHRpc2FtcGxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4
dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgJiYgbV9tdWx0aXNhbXBsZUV4dGVu
c2lvblN1cHBvcnRlZDsgfQotICAgIAorCisgICAgLy8gY29tbWl0IHNob3VsZCBjb3B5IHRoZSBm
dWxsIG11bHRpc2FtcGxlIGJ1ZmZlciwgYW5kIG5vdCByZXNwZWN0IHRoZQorICAgIC8vIGN1cnJl
bnQgc2Npc3NvciBib3VuZHMuIFRyYWNrIHRoZSBzdGF0ZSBvZiB0aGUgc2Npc3NvciB0ZXN0IHNv
IHRoYXQgaXQKKyAgICAvLyBjYW4gYmUgZGlzYWJsZWQgZHVyaW5nIGNhbGxzIHRvIGNvbW1pdC4K
KyAgICB2b2lkIHNldFNjaXNzb3JFbmFibGVkKGJvb2wgc2Npc3NvckVuYWJsZWQpIHsgbV9zY2lz
c29yRW5hYmxlZCA9IHNjaXNzb3JFbmFibGVkOyB9CisKKyAgICBib29sIG11bHRpc2FtcGxlKCkg
Y29uc3Q7CisKICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtQ29sb3JCdWZmZXIoKSBjb25z
dDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKCkgY29uc3Q7CisKKyAgICBQYXNz
UmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKCk7CkBAIC04OSw4ICsxMDMsMTMgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQz
RCosIGNvbnN0IEludFNpemUmKTsKLSAgICAKLSAgICBEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQsIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKTsKKworICAgIERy
YXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJiwgYm9vbCBtdWx0
aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2Vk
RGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZShj
b25zdCBJbnRTaXplJik7CisKKyAgICBib29sIG1fc2Npc3NvckVuYWJsZWQ7CiAKICAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKICAgICBJbnRTaXplIG1fc2l6ZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQz
REd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGlj
c0NvbnRleHQzRChHcmEKICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlz
YW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cigwKQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjphZGRBY3RpdmVHcmFwaGljc0NvbnRleHQodGhpcyk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3ND
b250ZXh0M0RNYWMubW0JKHJldmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTksNiArMTE5LDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCisgICAgLCBt
X2RyYXdpbmdCdWZmZXIoMCkKICAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlKHRoaXMpKSkKIHsKICAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzA2LDYgKzMwNiw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGlj
c0NvbnRleHQzRChHcmEKICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlz
YW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cigwKQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCiAgICAgLCBtX3ByaXZhdGUoYWRvcHRQdHIo
bmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzLCBob3N0V2luZG93KSkpCiB7CiAjaWYg
ZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShy
ZXZpc2lvbiA5NjY2NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMTAtMDQgIEplZmYgVGltYW51cyAgPHR3
aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUGF0Y2ggdGhhdCBkZW1vbnN0
cmF0ZXMgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAgICAgdG8gc2hh
cmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRvci4KKyAgICAg
ICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRvIEZCT3MgbWFu
YWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuICBBbGwgUGxhdGZvcm1M
YXllciBsaWZldGltZSBtYW5hZ2VtZW50IGlzCisgICAgICAgIHBlcmZvcm1lZCBieSB0aGUgRHJh
d2luZ0J1ZmZlci4KKyAgICAgICAgQ2hhbmdlcyBhcmUgb25seSByZWxldmFudCB0byBDaHJvbWl1
bSBwb3J0cy4gIEZ1bmN0aW9uYWxpdHkgaXMgCisgICAgICAgIHVuY2hhbmdlZCBmb3Igb3RoZXIg
cG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MzIwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
c3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwOiBBbGxvdyBzcGVjaWZpY2F0aW9uIGZv
ciBhbiBvcHRpb25hbAorICAgICAgICBEcmF3aW5nQnVmZmVyIGluc3RhbmNlIHRvIHRoZSBwYWlu
dFJlbmRlcmluZ1Jlc3VsdHMqIHJvdXRpbmVzIHRvIG92ZXJyaWRlCisgICAgICAgIHJlYWRpbmcg
ZnJvbSBGQiAwLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmg6CisKIDIwMTEtMTAtMDQgIFNjb3R0IEdyYWhhbSAgPHNjb3R0bWdAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIEFkZCBHQU1FUEFEIGZlYXR1cmUgZmxhZwpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJv
bWl1bS5jcHAJKHJldmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5
LDcgQEAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ2hy
b21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkRyYXdpbmdC
dWZmZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50Lmgi
CkBAIC0zMDgsMTAgKzMwOSwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFp
bnRGcmFtCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJh
d2luZ0J1ZmZlcikKIHsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjb250ZXh0LT5j
YW52YXMoKS0+YnVmZmVyKCk7Ci0gICAgcGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKDAsIG1faW1w
bC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSwgIW1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0
ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEsIGltYWdlQnVmZmVyKTsKKyAgICBpZiAoZHJhd2luZ0J1
ZmZlcikgeworICAgICAgICBwYWludEZyYW1lYnVmZmVyVG9DYW52YXMoZHJhd2luZ0J1ZmZlci0+
ZnJhbWVidWZmZXIoKSwgZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCksIGRyYXdpbmdCdWZm
ZXItPnNpemUoKS5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFt
X2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1
ZmZlcik7CisgICAgfSBlbHNlCisgICAgICAgIHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcygwLCBt
X2ltcGwtPndpZHRoKCksIG1faW1wbC0+aGVpZ2h0KCksICFtX2ltcGwtPmdldENvbnRleHRBdHRy
aWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CiB9CiAKIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKQEAgLTMyMywxNiArMzI4LDE5IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludENvbXAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERy
YXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CiAgICAgaWYgKG1faW1wbC0+Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpCiAgICAgICAgIHJldHVybiAwOwotICAg
IAotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKElu
dFNpemUobV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgpKSk7CisKKyAgICBpbnQgd2lk
dGggPSBkcmF3aW5nQnVmZmVyID8gZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCkgOiBtX2lt
cGwtPndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGRyYXdpbmdCdWZmZXIgPyBkcmF3aW5nQnVm
ZmVyLT5zaXplKCkuaGVpZ2h0KCkgOiBtX2ltcGwtPmhlaWdodCgpOworCisgICAgUmVmUHRyPElt
YWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZSh3aWR0aCwgaGVp
Z2h0KSk7CiAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRh
dGEoKS0+ZGF0YSgpOwotICAgIHNpemVfdCBidWZmZXJTaXplID0gNCAqIG1faW1wbC0+d2lkdGgo
KSAqIG1faW1wbC0+aGVpZ2h0KCk7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogd2lkdGgg
KiBoZWlnaHQ7CiAKLSAgICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCBidWZm
ZXJTaXplLCAwLCBtX2ltcGwtPndpZHRoKCksIG1faW1wbC0+aGVpZ2h0KCkpOworICAgIG1faW1w
bC0+cmVhZEJhY2tGcmFtZWJ1ZmZlcihwaXhlbHMsIGJ1ZmZlclNpemUsIGRyYXdpbmdCdWZmZXIg
PyBkcmF3aW5nQnVmZmVyLT5mcmFtZWJ1ZmZlcigpIDogMCwgd2lkdGgsIGhlaWdodCk7CiAKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ1ZmZlclNpemU7IGkgKz0gNCkKICAgICAgICAgc3Rk
Ojpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7CkBAIC0xMDAyLDcgKzEwMTAsNyBAQCBy
dCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsCiAgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICBcCiB9CiAK
LUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcywgSG9zdFdpbmRvdyosIGJvb2wpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhp
Y3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBi
b29sKSA6IG1fZHJhd2luZ0J1ZmZlcigwKQogewogfQogCkBAIC0xMjEzLDggKzEyMjEsMTYgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKAogICAgIHJldHVybiBtX3By
aXZhdGUtPmxheWVyQ29tcG9zaXRlZCgpOwogfQogCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xKHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KikKLURF
TEVHQVRFX1RPX0lOVEVSTkFMX1IocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEsIFBh
c3NSZWZQdHI8SW1hZ2VEYXRhPikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoY29udGV4
dCwgZ2V0RHJhd2luZ0J1ZmZlcigpKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBo
aWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoZ2V0RHJh
d2luZ0J1ZmZlcigpKTsKK30KKwogREVMRUdBVEVfVE9fSU5URVJOQUxfMVIocGFpbnRDb21wb3Np
dGVkUmVzdWx0c1RvQ2FudmFzLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiwgYm9vbCkKIAogYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuaAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYs
NyBAQCBjbGFzcyBXZWJWaWV3SW1wbDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBE
cmF3aW5nQnVmZmVyOwogY2xhc3MgRXh0ZW5zaW9uczNEQ2hyb21pdW07CiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogY2xhc3MgV2ViR0xMYXllckNocm9taXVtOwpAQCAtOTUsOSAr
OTYsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBsYXllckNvbXBvc2l0ZWQoKSBjb25zdDsKICAgICB2
b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKIAotICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOworICAgIHZvaWQgcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCosIERyYXdpbmdCdWZm
ZXIqKTsKICAgICB2b2lkIHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhpbnQgZnJhbWVidWZmZXIs
IGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBJbWFnZUJ1ZmZl
ciopOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0lt
YWdlRGF0YSgpOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKik7CiAgICAgYm9vbCBwYWludHNJbnRvQ2FudmFz
QnVmZmVyKCkgY29uc3Q7CiAgICAgYm9vbCBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMo
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109737</attachid>
            <date>2011-10-04 20:21:30 -0700</date>
            <delta_ts>2011-10-11 12:18:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111004231937.patch</filename>
            <type>text/plain</type>
            <size>33401</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NjY1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjkgQEAKKzIwMTEtMTAtMDQgIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUGF0Y2ggdGhh
dCBkZW1vbnN0cmF0ZXMgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuICBBbGwg
UGxhdGZvcm1MYXllciBsaWZldGltZSBtYW5hZ2VtZW50IGlzCisgICAgICAgIHBlcmZvcm1lZCBi
eSB0aGUgRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgQ2hhbmdlcyBhcmUgb25seSByZWxldmFudCB0
byBDaHJvbWl1bSBwb3J0cy4gIEZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgdW5jaGFuZ2VkIGZv
ciBvdGhlciBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOiBDb25zdHJ1Y3Qg
YSBEcmF3aW5nQnVmZmVyCisgICAgICAgIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYW5kIGZvcndh
cmQgYWxsIGZyYW1lYnVmZmVyIG1hbmFnZW1lbnQgY2FsbHMgdG8KKyAgICAgICAgaXQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRl
eHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xl
YXJJZkNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1l
YnVmZmVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZURyYXdpbmdCdWZmZXIpOiBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBpbnN0YW5j
ZXMgdHJhY2sgdGhlIERyYXdpbmdCdWZmZXIgaW5zdGFuY2VzIHRoYXQgdGhleSBjcmVhdGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXREcmF3aW5nQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEcmF3aW5nQnVmZmVyOjpmcmFtZWJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnNldENvbnRleHQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OnJlc2V0T25OZXdDb250ZXh0KTogVGhlIGRyYXdpbmcgYnVmZmVyIGlzCisg
ICAgICAgIHByZXNlcnZlZCB3aGVuIHRoZSBjb250ZXh0IGlzIGxvc3QuICBUaGlzIHJvdXRpbmUg
cmVwb3B1bGF0ZXMgdGhlCisgICAgICAgIGJ1ZmZlcidzIHN0YXRlIHdoZW4gdGhlIHJlcGxhY2Vt
ZW50IGNvbnRleHQgaXMgYnVpbHQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpj
b21taXQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6bXVsdGlzYW1wbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9J
bWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpzZXRTY2lzc29yRW5hYmxlZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNER3RrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRCk6CisKIDIwMTEtMTAtMDQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNv
bT4KIAogICAgICAgICBNb3ZlIGNvZGUgaW50byBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6
YmVnaW5TY3JvbGxHZXN0dXJlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTY2MzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjMsNyArMzYzLDEyIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdD
b250ZXh0PiBXZWJHTFIKICAgICB9CiAKICAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRy
dWU7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNl
cyA9IHRydWU7CisjZWxzZQogICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBmYWxzZTsK
KyNlbmRpZgorCiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CiAKQEAgLTM4Myw5
ICszODgsMTkgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbgogICAg
ICwgbV9yZXN0b3JlVGltZXIodGhpcykKICAgICAsIG1fdmlkZW9DYWNoZSg0KQogICAgICwgbV9j
b250ZXh0TG9zdChmYWxzZSkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQogICAgICwgbV9hdHRy
aWJ1dGVzKGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CisKKyNpZiBQTEFU
Rk9STShDSFJPTUlVTSkKKyAgICAvLyBDcmVhdGUgdGhlIERyYXdpbmdCdWZmZXIKKyAgICBtX2Ry
YXdpbmdCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZURyYXdpbmdCdWZmZXIoSW50U2l6ZShjYW52
YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisjZW5kaWYKKworICAgIGlmICht
X2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworCiAgICAg
c2V0dXBGbGFncygpOwogICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7CiB9CkBAIC00NTEsNiAr
NDY2LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZQogICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAgICAgICBpbml0VmVydGV4QXR0cmliMCgpOwogCisg
ICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJ
bnRTaXplKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKKwogICAgIG1f
Y29udGV4dC0+cmVzaGFwZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsK
ICAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMo
KS0+aGVpZ2h0KCkpOwogCkBAIC00ODMsNyArNTAxLDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6Om1hcmtDb250ZXh0QwogewogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKICAg
ICAgICAgcmV0dXJuOworCiAgICAgbV9jb250ZXh0LT5tYXJrQ29udGV4dENoYW5nZWQoKTsKKwog
ICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwpA
QCAtNTEzLDggKzUzMywxMiBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJJZkNv
bXBvCiAgICAgLy8gRGV0ZXJtaW5lIGlmIGl0J3MgcG9zc2libGUgdG8gY29tYmluZSB0aGUgY2xl
YXIgdGhlIHVzZXIgYXNrZWQgZm9yIGFuZCB0aGlzIGNsZWFyLgogICAgIGJvb2wgY29tYmluZWRD
bGVhciA9IG1hc2sgJiYgIW1fc2Npc3NvckVuYWJsZWQ7CiAKLSAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcpCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7
CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmJpbmQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICB9CiAgICAg
bV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAg
IGlmIChjb21iaW5lZENsZWFyICYmIChtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JV
RkZFUl9CSVQpKQogICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jb2xvck1hc2tbMF0g
PyBtX2NsZWFyQ29sb3JbMF0gOiAwLApAQCAtNTc0LDE3ICs1OTgsMjkgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaQogICAgIH0gZWxzZQogICAgICAgICBjYW52YXMo
KS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKwog
ICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNsZWFyZWQpCiAgICAgICAg
IHJldHVybjsKKwogICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdlKCk7CiAgICAgbV9tYXJr
ZWRDYW52YXNEaXJ0eSA9IGZhbHNlOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKHRoaXMpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwogfQogCiBQYXNzUmVmUHRyPEltYWdlRGF0YT4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgp
CiB7CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5wYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisgICAgUmVmUHRyPEltYWdlRGF0
YT4gaW1hZ2VEYXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0
YSgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
YmluZCgpOworICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKQEAgLTYxNiwxNiArNjUyLDI1
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGludAogCiAgICAgLy8gV2Ug
ZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHksIHNpbmNlIHRoZSBuZXdseSBj
cmVhdGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2ZmCiAgICAgLy8gY2xlYXIgKGFu
ZCB0aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgotICAgIG1fY29udGV4dC0+cmVz
aGFwZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPnJlc2V0KEludFNpemUod2lkdGgsIGhlaWdodCkpOworICAgIGVsc2UK
KyAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwogfQogCiBpbnQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgoKSBjb25zdAogeworICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNpemUo
KS53aWR0aCgpOworCiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZl
clNpemUoKS53aWR0aCgpOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5n
QnVmZmVySGVpZ2h0KCkgY29uc3QKIHsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAg
ICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCk7CisKICAgICByZXR1cm4g
bV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOwogfQogCkBA
IC03NDUsNyArNzkwLDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVi
dWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1
ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVy
byhidWZmZXIpKTsKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1
ZmZlcikgeworICAgICAgICAvLyBJbnN0ZWFkIG9mIGJpbmRpbmcgZmIgMCwgYmluZCB0aGUgZHJh
d2luZyBidWZmZXIuCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0gZWxz
ZQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVy
byhidWZmZXIpKTsKICAgICBpZiAoYnVmZmVyKQogICAgICAgICBidWZmZXItPnNldEhhc0V2ZXJC
ZWVuQm91bmQoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtMTA4
NCw5ICsxMTMzLDIxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIGlm
IChpc1Jlc291cmNlU2FmZSgpKQorICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7CisgICAgICAg
IC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxp
bmcpCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVy
KQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwogICAgICAgICBtX2Nv
bnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGVsc2UgeworCisgICAgICAgIC8vIFJlc3Rv
cmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJp
bmQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBu
ZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICBpZiAoIW1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+Y29tbWl0KCk7CisKICAgICAgICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7CiAgICAg
ICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CiAgICAgICAgIGlmIChj
bGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdl
dEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVk
V2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgewpAQCAtMTA5OCw2ICsxMTU5LDEwIEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworCisgICAg
ICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAgaWYgKCFtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdp
bmdCdWZmZXItPmJpbmQoKTsKICAgICB9CiAgICAgLy8gRklYTUU6IGlmIHRoZSBmcmFtZWJ1ZmZl
ciBpcyBub3QgY29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93IHNob3VsZCBiZSBleGVjdXRlZC4K
ICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwpAQCAtMTI3NCw3
ICsxMzM5LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVGcmFtZWIKICAg
ICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKICAgICAgICAgbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwogICAgICAgICAvLyBIYXZlIHRvIGNhbGwgYmluZEZyYW1l
YnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGludGVybmFsIGZiby4KLSAgICAgICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsK
KyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwogICAgIH0KIH0KIApA
QCAtMTM2MSw4ICsxNDI5LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxl
KEdDM0QKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHko
Y2FwKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlNDSVNTT1JfVEVTVCkKKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09S
X1RFU1QpIHsKICAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOworICAgICAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29y
RW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5kaXNhYmxl
KGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE3MDMs
OCArMTc3NCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlKEdDM0RlCiB7
CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09S
X1RFU1QpCisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7
CiAgICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOworICAgICAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZCht
X3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwKTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjg3Niw3ICsyOTUwLDE3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEcKICAgICB9CiAgICAg
Y2xlYXJJZkNvbXBvc2l0ZWQoKTsKICAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVz
cygpOworCisgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3Ig
bXVsdGlzYW1wbGluZykKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2lu
Z0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwogICAgIG1fY29u
dGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEp
OworCisgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgIGlmICghbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPmJpbmQoKTsKKwogI2lmIE9TKERBUldJTikKICAgICAvLyBGSVhNRTogcmVtb3ZlIHRo
aXMgc2VjdGlvbiB3aGVuIEdMIGRyaXZlciBidWcgb24gTWFjIGlzIGZpeGVkLCBpLmUuLAogICAg
IC8vIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNob3VsZCBzZXQgYWxwaGEgdG8gMjU1
IGluc3RlYWQgb2YgMC4KQEAgLTQxMTksMTQgKzQyMDMsMTQgQEAgaW50IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0Qm91bmRGcmFtZQogewogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAm
JiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtX2ZyYW1l
YnVmZmVyQmluZGluZy0+Z2V0V2lkdGgoKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRl
cm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZl
ciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCkgOiBtX2NvbnRleHQtPmdldEludGVy
bmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsKIH0KIAogaW50IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpCiB7CiAgICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKICAgICAgICAgcmV0
dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQoKTsKLSAgICByZXR1cm4gbV9jb250
ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOworICAgIHJldHVybiBt
X2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKSA6IG1fY29u
dGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKIH0KIAogV2ViR0xU
ZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoR0Mz
RGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKQEAgLTQ4MjIsNiArNDkw
Niw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3RvcmUKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXRPbk5ld0NvbnRleHQo
Y29udGV4dCk7CisKICAgICBtX2NvbnRleHQgPSBjb250ZXh0OwogICAgIG1fY29udGV4dExvc3Qg
PSBmYWxzZTsKICAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9u
IDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0X2gKIAogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIkZsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCkBA
IC0zNTUsNiArMzU2LDEwIEBAIHB1YmxpYzoKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gbV9jb250ZXh0OwogCisgICAgLy8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciByZW5kZXJpbmcg
dG8gYSBEcmF3aW5nQnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVjdGx5CisgICAgLy8gdG8gdGhlIGJh
Y2stYnVmZmVyIG9mIG1fY29udGV4dC4KKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3
aW5nQnVmZmVyOworCiAgICAgY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzdG9yZVRpbWVy
IDogcHVibGljIFRpbWVyQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICBleHBsaWNpdCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRSZXN0b3JlVGltZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KSA6IG1fY29udGV4dChjb250ZXh0KSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9u
IDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCwxMCBAQCB1aW50OF90IGNvbnZl
cnRDb2xvcjE2QmlnVG84KHVpbnQxNl90IHZhCiAKIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4g
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURyYXdpbmdCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKIHsKLSAgICByZXR1cm4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKHRoaXMsIHNpemUpOworICAg
IEFTU0VSVCghbV9kcmF3aW5nQnVmZmVyKTsKKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gZHJh
d2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVyOjpjcmVhdGUodGhpcywgc2l6ZSkpOworICAgIG1fZHJh
d2luZ0J1ZmZlciA9IGRyYXdpbmdCdWZmZXIuZ2V0KCk7CisgICAgcmV0dXJuIGRyYXdpbmdCdWZm
ZXI7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkRSZXNvdXJjZVNhZmUo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHVucGFja0FsaWdubWVudCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MDEsNyArNTAxLDkg
QEAgcHVibGljOgogICAgIHZvaWQgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICAgICBQYXNzUmVm
UHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZURyYXdpbmdCdWZmZXIoY29uc3QgSW50U2l6ZSYgPSBJ
bnRTaXplKCkpOwotICAgIAorICAgIHZvaWQgc2V0RHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVy
KiBkcmF3aW5nQnVmZmVyKSB7IG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdpbmdCdWZmZXI7IH0KKyAg
ICBEcmF3aW5nQnVmZmVyKiBnZXREcmF3aW5nQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3
aW5nQnVmZmVyOyB9CisKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKENIUk9NSVVNKSB8
fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQogICAgIC8vIFdpdGggbXVsdGlzYW1wbGlu
ZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIgRkJPLgogICAgIHZvaWQg
cHJlcGFyZVRleHR1cmUoKTsKQEAgLTk1MSw2ICs5NTMsOCBAQCBwdWJsaWM6CiAgICAgTGlzdEhh
c2hTZXQ8R0MzRGVudW0+IG1fc3ludGhldGljRXJyb3JzOwogI2VuZGlmCiAKKyAgICBEcmF3aW5n
QnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7CisKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IG1fcHJp
dmF0ZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIs
MTQgQEAKIAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAorI2luY2x1ZGUgIkV4dGVuc2lv
bnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAorI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21p
dW0uaCIKKyNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNvbG9yVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAgLTU3LDcgKzYz
LDggQEAgRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1
cHBvcnRlZCkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgIDogbV9zY2lzc29yRW5hYmxl
ZChmYWxzZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKC0xLCAtMSkK
ICAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRlbnNp
b25TdXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRl
ZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCkBAIC02OSwxNCArNzYsNyBA
QCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29uCiAgICAgLCBtX211bHRp
c2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKIHsKLSAgICBt
X2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIG1f
Y29sb3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShjb250ZXh0LCBzaXplKTsKLSAgICBj
cmVhdGVTZWNvbmRhcnlCdWZmZXJzKCk7Ci0gICAgaWYgKCFyZXNldChzaXplKSkgewotICAgICAg
ICBtX2NvbnRleHQuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbml0aWFs
aXplKHNpemUpOwogfQogCiBEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZlcigpCkBAIC04Nywx
NSArODcsMzAgQEAgRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQogICAgIGNsZWFyKCk7
CiB9CiAKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6aW5pdGlhbGl6ZShjb25zdCBJbnRTaXplJiBzaXpl
KQoreworICAgIG1fZmJvID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
bV9mYm8pOworICAgIG1fY29sb3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShtX2NvbnRl
eHQuZ2V0KCksIHNpemUpOworICAgIGNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMoKTsKKyAgICBpZiAo
IXJlc2V0KHNpemUpKSB7CisgICAgICAgIG1fY29udGV4dC5jbGVhcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBE
cmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCkKIHsKICAgICBpZiAoIW1fY29u
dGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG11bHRpc2FtcGxlKCkpCi0gICAgICAg
IGNvbW1pdCgpOwogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KG11bHRpc2FtcGxlKCkpIHsKKyAgICAgICAgY29tbWl0KCk7CisgICAgICAgIGJpbmQoKTsKKyAg
ICB9CisKICAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiB9CiAjZW5kaWYKQEAgLTExMiw0ICsxMjcs
OSBAQCBQbGF0Zm9ybTNET2JqZWN0IERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtCiAgICAgcmV0dXJu
IG1fY29sb3JCdWZmZXI7CiB9CiAKK1BsYXRmb3JtM0RPYmplY3QgRHJhd2luZ0J1ZmZlcjo6ZnJh
bWVidWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZibzsKK30KKwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIldlYkdMTGF5ZXJD
aHJvbWl1bS5oIgogCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKQEAgLTg1LDEwICs4Niw4IEBAIHZvaWQgV2Vi
R0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG8KICAgICB9CiAgICAgLy8gVXBkYXRlIHRo
ZSBjb250ZW50cyBvZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgogICAgIGlm
ICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpICYmIG1fdGV4dHVyZVVwZGF0ZWQpIHsKLSAgICAgICAg
Ly8gcHJlcGFyZVRleHR1cmUgY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgb2ZmLXNjcmVlbiBy
ZW5kZXIgdGFyZ2V0IGludG8gdGhlIHRleHR1cmUKLSAgICAgICAgLy8gdXNlZCBieSB0aGUgY29t
cG9zaXRvci4KLSAgICAgICAgLy8KLSAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgp
OworICAgICAgICAvLyBwdWJsaXNoVG9QbGF0Zm9ybUxheWVyIHByZXBhcmVzIHRoZSBjb250ZW50
cyBvZiB0aGUgb2ZmLXNjcmVlbiByZW5kZXIgdGFyZ2V0IGZvciB1c2UgYnkgdGhlIGNvbXBvc2l0
b3IuCisgICAgICAgIGNvbnRleHQoKS0+Z2V0RHJhd2luZ0J1ZmZlcigpLT5wdWJsaXNoVG9QbGF0
Zm9ybUxheWVyKCk7CiAgICAgICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOwog
ICAgICAgICByZXNldE5lZWRzRGlzcGxheSgpOwogICAgICAgICBtX3RleHR1cmVVcGRhdGVkID0g
ZmFsc2U7CkBAIC0xMzIsNyArMTMxLDcgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnNldENv
bnRleHQoY29ucwogICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICB1
bnNpZ25lZCBpbnQgdGV4dHVyZUlkID0gbV9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsKKyAg
ICB1bnNpZ25lZCBpbnQgdGV4dHVyZUlkID0gbV9jb250ZXh0LT5nZXREcmF3aW5nQnVmZmVyKCkt
PmNvbG9yQnVmZmVyKCk7CiAgICAgaWYgKHRleHR1cmVJZCAhPSBtX3RleHR1cmVJZCB8fCBjb250
ZXh0Q2hhbmdlZCkgewogICAgICAgICBtX3RleHR1cmVDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
bV90ZXh0dXJlVXBkYXRlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCShyZXZpc2lvbiA5NjYz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgIkRyYXdpbmdC
dWZmZXIuaCIKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNjQsNiArNjYsMjAgQEAgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5n
QnVmZmVyOgogICAgIHJldHVybiAoZHJhd2luZ0J1ZmZlci0+bV9jb250ZXh0KSA/IGRyYXdpbmdC
dWZmZXIucmVsZWFzZSgpIDogMDsKIH0KIAordm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNldE9uTmV3
Q29udGV4dChQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBncmFwaGljc0NvbnRleHQpCit7
CisgICAgLy8gRG8gbm90IGZyZWUgYW55IG9mIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCByZXNv
dXJjZXMsIGFzIHRoZSBvbGQgY29udGV4dAorICAgIC8vIGhhcyBiZWVuIGxvc3QuCisgICAgbV9j
b250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0OworICAgIG1fY29udGV4dC0+c2V0RHJhd2luZ0J1ZmZl
cih0aGlzKTsKKworICAgIC8vIEFzc2lnbiBhbiBpbnZhbGlkIHNpemUgdG8gZm9yY2UgdGhlIGlu
aXRpYWxpemlvbiByb3V0aW5lIHRvIGNvbnN0cnVjdAorICAgIC8vIG5ldyBHUFUgcmVzb3VyY2Vz
LgorICAgIEludFNpemUgb2xkU2l6ZSA9IG1fc2l6ZTsKKyAgICBtX3NpemUgPSBJbnRTaXplKC0x
LCAtMSk7CisgICAgaW5pdGlhbGl6ZShvbGRTaXplKTsKK30KKwogdm9pZCBEcmF3aW5nQnVmZmVy
OjpjbGVhcigpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCkBAIC0yOTMsMjMgKzMwOSw0MSBAQCB2
b2lkIERyYXdpbmdCdWZmZXI6OmNvbW1pdChsb25nIHgsIGxvbmcKIHsKICAgICBpZiAoIW1fY29u
dGV4dCkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIGlmICh3aWR0aCA8IDApCiAg
ICAgICAgIHdpZHRoID0gbV9zaXplLndpZHRoKCk7CiAgICAgaWYgKGhlaWdodCA8IDApCiAgICAg
ICAgIGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSAgICAgICAgCisKICAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIAorCiAgICAgaWYgKG1fbXVsdGlzYW1wbGVGQk8p
IHsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpSRUFE
X0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKICAgICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpEUkFXX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5ibGl0RnJhbWVidWZmZXIoeCwgeSwgd2lk
dGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0JVRkZFUl9CSVQsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworCisgICAgICAgIGlmICht
X3NjaXNzb3JFbmFibGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworCisgICAgICAgIC8vIFVzZSBORUFSRVNULCBiZWNh
dXNlIHRoZXJlIGlzIG5vIHNjYWxlIHBlcmZvcm1lZCBkdXJpbmcgdGhlIGJsaXQuCisgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5ibGl0RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgs
IGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JV
RkZFUl9CSVQsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsKKworICAgICAgICBpZiAobV9z
Y2lzc29yRW5hYmxlZCkKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIH0KLSAgICAKKwogICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogfQog
Citib29sIERyYXdpbmdCdWZmZXI6Om11bHRpc2FtcGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jb250ZXh0ICYmIG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMg
JiYgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZDsKK30KKworUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IERyYXdpbmdCdWZmZXI6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkK
K3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0
YSgpOworfQorCiB2b2lkIERyYXdpbmdCdWZmZXI6OmJpbmQoKQogewogICAgIGlmICghbV9jb250
ZXh0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvRHJhd2luZ0J1ZmZlci5oCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUg
IkludFNpemUuaCIKIAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNDMsOSArNDQs
MTAgQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOworY2xhc3MgSW1hZ2VEYXRhOwogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1jbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW07Citj
bGFzcyBDYW52YXNMYXllckNocm9taXVtOwogI2VuZGlmCiAKIC8vIE1hbmFnZXMgYSByZW5kZXJp
bmcgdGFyZ2V0IChmcmFtZWJ1ZmZlciArIGF0dGFjaG1lbnQpIGZvciBhIGNhbnZhcy4gIENhbiBw
dWJsaXNoIGl0cyByZW5kZXJpbmcKQEAgLTU2LDYgKzU4LDEwIEBAIHB1YmxpYzoKIAogICAgIH5E
cmF3aW5nQnVmZmVyKCk7CiAKKyAgICAvLyBSZXNldHMgdGhlIGRyYXdpbmcgYnVmZmVyIGludGVy
bmFsIHN0YXRlIG9uIGNvbnN0cnVjdGlvbiBvZiBhIG5ldworICAgIC8vIEdyYXBoaWNzQ29udGV4
dDNELgorICAgIHZvaWQgcmVzZXRPbk5ld0NvbnRleHQoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4pOworCiAgICAgdm9pZCBjbGVhckZyYW1lYnVmZmVyKCk7CiAKICAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIGJ1ZmZlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlc2l6ZWQuCkBAIC03NSwxMCAr
ODEsMTggQEAgcHVibGljOgogCiAgICAgLy8gQ29waWVzIHRoZSBtdWx0aXNhbXBsZSBjb2xvciBi
dWZmZXIgdG8gdGhlIG5vcm1hbCBjb2xvciBidWZmZXIgYW5kIGxlYXZlcyBtX2ZibyBib3VuZAog
ICAgIHZvaWQgY29tbWl0KGxvbmcgeCA9IDAsIGxvbmcgeSA9IDAsIGxvbmcgd2lkdGggPSAtMSwg
bG9uZyBoZWlnaHQgPSAtMSk7Ci0gICAgCi0gICAgYm9vbCBtdWx0aXNhbXBsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYW50
aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQ7IH0KLSAgICAKKworICAg
IC8vIGNvbW1pdCBzaG91bGQgY29weSB0aGUgZnVsbCBtdWx0aXNhbXBsZSBidWZmZXIsIGFuZCBu
b3QgcmVzcGVjdCB0aGUKKyAgICAvLyBjdXJyZW50IHNjaXNzb3IgYm91bmRzLiBUcmFjayB0aGUg
c3RhdGUgb2YgdGhlIHNjaXNzb3IgdGVzdCBzbyB0aGF0IGl0CisgICAgLy8gY2FuIGJlIGRpc2Fi
bGVkIGR1cmluZyBjYWxscyB0byBjb21taXQuCisgICAgdm9pZCBzZXRTY2lzc29yRW5hYmxlZChi
b29sIHNjaXNzb3JFbmFibGVkKSB7IG1fc2Npc3NvckVuYWJsZWQgPSBzY2lzc29yRW5hYmxlZDsg
fQorCisgICAgYm9vbCBtdWx0aXNhbXBsZSgpIGNvbnN0OworCiAgICAgUGxhdGZvcm0zRE9iamVj
dCBwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3Q7CisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFt
ZWJ1ZmZlcigpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpOwpAQCAtODksOCArMTAzLDEz
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEcmF3aW5nQnVm
ZmVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7Ci0gICAgCi0g
ICAgRHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29s
IG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLCBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4
dGVuc2lvblN1cHBvcnRlZCk7CisKKyAgICBEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
KiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCisg
ICAgICAgICAgICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRl
ZCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYpOworCisgICAgYm9vbCBt
X3NjaXNzb3JFbmFibGVkOwogCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRl
eHQ7CiAgICAgSW50U2l6ZSBtX3NpemU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREd0ay5jcHAJ
KHJldmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBA
QCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgLCBtX211bHRp
c2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCiAg
ICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigw
KQogewogICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YWRkQWN0aXZlR3JhcGhpY3NDb250
ZXh0KHRoaXMpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NDb250ZXh0M0RNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA5NjYz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHQzRE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSw3IEBAIEdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkK
ICAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fbXVsdGlz
YW1wbGVDb2xvckJ1ZmZlcigwKQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCiAgICAgLCBtX3By
aXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzKSkpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJ
KHJldmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNiw2ICszMDYsNyBA
QCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgLCBtX211bHRp
c2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCiAg
ICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigw
KQogICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUo
dGhpcywgaG9zdFdpbmRvdykpKQogewogI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTY2NjUpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisy
MDExLTEwLTA0ICBKZWZmIFRpbWFudXMgIDx0d2l6QGNocm9taXVtLm9yZz4KKworICAgICAgICBb
Q2hyb21pdW1dIFBhdGNoIHRoYXQgZGVtb25zdHJhdGVzIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRv
IGFsbG93IFdlYkdMCisgICAgICAgIHRvIHNoYXJlIGl0cyBiYWNraW5nIHN0b3JlIGRpcmVjdGx5
IHdpdGggdGhlIGNvbXBvc2l0b3IuCisgICAgICAgIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0cyBj
cmVhdGUgYW5kIHJlbmRlciB0byBGQk9zIG1hbmFnZWQgYnkgYQorICAgICAgICBEcmF3aW5nQnVm
ZmVyIGluc3RhbmNlLiAgQWxsIFBsYXRmb3JtTGF5ZXIgbGlmZXRpbWUgbWFuYWdlbWVudCBpcwor
ICAgICAgICBwZXJmb3JtZWQgYnkgdGhlIERyYXdpbmdCdWZmZXIuCisgICAgICAgIENoYW5nZXMg
YXJlIG9ubHkgcmVsZXZhbnQgdG8gQ2hyb21pdW0gcG9ydHMuICBGdW5jdGlvbmFsaXR5IGlzIAor
ICAgICAgICB1bmNoYW5nZWQgZm9yIG90aGVyIHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyMDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVt
LmNwcDogQWxsb3cgc3BlY2lmaWNhdGlvbiBmb3IgYW4gb3B0aW9uYWwKKyAgICAgICAgRHJhd2lu
Z0J1ZmZlciBpbnN0YW5jZSB0byB0aGUgcGFpbnRSZW5kZXJpbmdSZXN1bHRzKiByb3V0aW5lcyB0
byBvdmVycmlkZQorICAgICAgICByZWFkaW5nIGZyb20gRkIgMC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6Cisg
ICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOgorCiAyMDExLTEwLTA0ICBT
Y290dCBHcmFoYW0gIDxzY290dG1nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgR0FNRVBB
RCBmZWF0dXJlIGZsYWcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNz
Q29udGV4dDNEQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NjYzNSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVu
dEltcGwuaCIKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9u
czNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKICNp
bmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgpAQCAtMzA4LDEwICszMDksMTQgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50RnJhbQogI2VuZGlmCiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQq
IGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CiAgICAgSW1hZ2VCdWZm
ZXIqIGltYWdlQnVmZmVyID0gY29udGV4dC0+Y2FudmFzKCktPmJ1ZmZlcigpOwotICAgIHBhaW50
RnJhbWVidWZmZXJUb0NhbnZhcygwLCBtX2ltcGwtPndpZHRoKCksIG1faW1wbC0+aGVpZ2h0KCks
ICFtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFn
ZUJ1ZmZlcik7CisgICAgaWYgKGRyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgcGFpbnRGcmFtZWJ1
ZmZlclRvQ2FudmFzKGRyYXdpbmdCdWZmZXItPmZyYW1lYnVmZmVyKCksIGRyYXdpbmdCdWZmZXIt
PnNpemUoKS53aWR0aCgpLCBkcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAhbV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygp
LnByZW11bHRpcGxpZWRBbHBoYSwgaW1hZ2VCdWZmZXIpOworICAgIH0gZWxzZQorICAgICAgICBw
YWludEZyYW1lYnVmZmVyVG9DYW52YXMoMCwgbV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdo
dCgpLCAhbV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwg
aW1hZ2VCdWZmZXIpOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
CkBAIC0zMjMsMTYgKzMyOCwxOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFp
bnRDb21wCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgp
CitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQog
ewogICAgIGlmIChtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFs
cGhhKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFn
ZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKG1faW1wbC0+d2lkdGgoKSwgbV9pbXBs
LT5oZWlnaHQoKSkpOworCisgICAgaW50IHdpZHRoID0gZHJhd2luZ0J1ZmZlciA/IGRyYXdpbmdC
dWZmZXItPnNpemUoKS53aWR0aCgpIDogbV9pbXBsLT53aWR0aCgpOworICAgIGludCBoZWlnaHQg
PSBkcmF3aW5nQnVmZmVyID8gZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpIDogbV9pbXBs
LT5oZWlnaHQoKTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0
YTo6Y3JlYXRlKEludFNpemUod2lkdGgsIGhlaWdodCkpOwogICAgIHVuc2lnbmVkIGNoYXIqIHBp
eGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKLSAgICBzaXplX3QgYnVm
ZmVyU2l6ZSA9IDQgKiBtX2ltcGwtPndpZHRoKCkgKiBtX2ltcGwtPmhlaWdodCgpOworICAgIHNp
emVfdCBidWZmZXJTaXplID0gNCAqIHdpZHRoICogaGVpZ2h0OwogCi0gICAgbV9pbXBsLT5yZWFk
QmFja0ZyYW1lYnVmZmVyKHBpeGVscywgYnVmZmVyU2l6ZSwgMCwgbV9pbXBsLT53aWR0aCgpLCBt
X2ltcGwtPmhlaWdodCgpKTsKKyAgICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxz
LCBidWZmZXJTaXplLCBkcmF3aW5nQnVmZmVyID8gZHJhd2luZ0J1ZmZlci0+ZnJhbWVidWZmZXIo
KSA6IDAsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBidWZm
ZXJTaXplOyBpICs9IDQpCiAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsg
Ml0pOwpAQCAtMTAwMiw3ICsxMDEwLDcgQEAgcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEg
YTEsIHQyIGEyLAogICAgIHJldHVybiBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1
LCBhNiwgYTcsIGE4LCBhOSk7ICAgXAogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBib29s
KQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgYm9vbCkgOiBtX2RyYXdpbmdCdWZmZXIoMCkKIHsK
IH0KIApAQCAtMTIxMyw4ICsxMjIxLDE2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVy
Q29tcG9zaXRlZCgKICAgICByZXR1cm4gbV9wcml2YXRlLT5sYXllckNvbXBvc2l0ZWQoKTsKIH0K
IAotREVMRUdBVEVfVE9fSU5URVJOQUxfMShwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcywg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF9SKHBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhLCBQYXNzUmVmUHRyPEltYWdlRGF0YT4pCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKGNvbnRleHQsIGdldERyYXdpbmdCdWZmZXIoKSk7Cit9CisK
K1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEoKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvSW1hZ2VEYXRhKGdldERyYXdpbmdCdWZmZXIoKSk7Cit9CisKIERFTEVHQVRF
X1RPX0lOVEVSTkFMXzFSKHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcywgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCosIGJvb2wpCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0lu
dG9DYW52YXNCdWZmZXIoKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHJldmlzaW9uIDk2NjM1KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgV2ViVmlld0ltcGw7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNzIEV4dGVuc2lv
bnMzRENocm9taXVtOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIGNsYXNzIFdl
YkdMTGF5ZXJDaHJvbWl1bTsKQEAgLTk1LDkgKzk2LDkgQEAgcHVibGljOgogICAgIGJvb2wgbGF5
ZXJDb21wb3NpdGVkKCkgY29uc3Q7CiAgICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAK
LSAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqKTsKKyAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqLCBEcmF3aW5nQnVmZmVyKik7CiAgICAgdm9pZCBwYWludEZyYW1lYnVm
ZmVyVG9DYW52YXMoaW50IGZyYW1lYnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgSW1hZ2VCdWZmZXIqKTsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICBQYXNzUmVmUHRyPElt
YWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciop
OwogICAgIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogICAgIGJvb2wgcGFp
bnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>109738</attachid>
            <date>2011-10-04 20:31:43 -0700</date>
            <delta_ts>2011-10-04 20:31:43 -0700</delta_ts>
            <desc>Modified webgl confomance test</desc>
            <filename>buffer-preserve-test.html</filename>
            <type>text/html</type>
            <size>2136</size>
            <attacher name="John Bauman">jbauman</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUw+CjxodG1sPgo8aGVhZD4KPG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0
bGU+V2ViR0wgcmVxdWlyZWQgYnVmZmVyIGNsZWFyIGJlaGF2aW91ciB0ZXN0PC90aXRsZT4KPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiLz4KPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+CjxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+IDwvc2NyaXB0Pgo8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanMiPiA8L3NjcmlwdD4K
PHN0eWxlIHR5cGU9InRleHQvY3NzIj4KYm9keSB7CiAgICBoZWlnaHQ6IDMwMDBweDsKfQo8L3N0
eWxlPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cgp2YXIgaXRlciA9IDA7CnZhciBn
bDE7Cgp2YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7CgpmdW5jdGlvbiB0aW1lcigpIHsKICAgIGlm
IChpdGVyID09IDAgfHwgaXRlciA9PSAyKSB7CiAgICAgICAgLy8gc29tZSByYW5kb20gaGFja3kg
c3R1ZmYgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZ2V0IGEgY29tcG9zaXRpbmcgc3RlcAogICAgICAg
IHdpbmRvdy5zY3JvbGxCeSgwLCAxMCk7CiAgICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIC0xMCk7
CiAgICAgICAgaXRlcisrOwoKICAgICAgICBzZXRUaW1lb3V0KHRpbWVyLCA1MDApOwogICAgfSBl
bHNlIGlmIChpdGVyID09IDEpIHsKICAgICAgICBnbDEucmVhZFBpeGVscygwLDAsMSwxLGdsMS5S
R0JBLCBnbDEuVU5TSUdORURfQllURSwgbmV3CiAgICAgICAgICAgICAgICBVaW50OEFycmF5KDQp
KTsKICAgICAgICBpdGVyKys7CiAgICAgICAgc2V0VGltZW91dCh0aW1lciwgNTAwKTsKICAgIH0K
fQoKZnVuY3Rpb24gZ28oKSB7CiAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGVuc3VyZXMgV2Vi
R0wgaW1wbGVtZW50YXRpb25zIGNvcnJlY3RseSBjbGVhciB0aGUgZHJhd2luZyBidWZmZXIgb24g
Y29tcG9zaXRlIGlmIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBpcyBmYWxzZS4iKTsKCiAgICBkZWJ1
ZygiIik7CgogICAgZ2wxID0gY3JlYXRlM0RDb250ZXh0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjIiksIHthbnRpYWxpYXM6IGZhbHNlfSk7CiAgICBpZiAoIWdsMSkgewogICAgICAgIGZpbmlz
aFRlc3QoKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgc2hvdWxkQmVUcnVlKCJnbDEgIT0g
bnVsbCIpOwogICAgc2hvdWxkQmVUcnVlKCdnbDEuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVz
ZXJ2ZURyYXdpbmdCdWZmZXIgPT0gZmFsc2UnKTsKCiAgICBmdW5jdGlvbiBpbml0KGdsKSB7CiAg
ICAgICAgZ2wuY2xlYXJDb2xvcigxLCAwLCAwLCAxKTsKICAgICAgICBnbC5jbGVhcihnbC5DT0xP
Ul9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCB8IGdsLlNURU5DSUxfQlVGRkVSX0JJ
VCk7CgogICAgICAgIC8vIGVuYWJsZSBzY2lzc29yIGhlcmUsIGJlZm9yZSBjb21wb3NpdGluZywg
dG8gbWFrZSBzdXJlIGl0J3MgY29ycmVjdGx5CiAgICAgICAgLy8gaWdub3JlZCBhbmQgcmVzdG9y
ZWQKICAgICAgICBnbC5zY2lzc29yKDAsIDEwLCAxMCwgMTApOwogICAgICAgIGdsLmVuYWJsZShn
bC5TQ0lTU09SX1RFU1QpOwogICAgfQoKICAgIGluaXQoZ2wxKTsKCiAgICBzZXRUaW1lb3V0KHRp
bWVyLCA1MDApOwp9Cgp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGdvLCBmYWxzZSk7
CgpzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KPCEt
LSBJbXBvcnRhbnQgdG8gcHV0IHRoZSBjYW52YXMgYXQgdGhlIHRvcCBzbyB0aGF0IGl0J3MgYWx3
YXlzIHZpc2libGUgZXZlbiBpbiB0aGUgdGVzdCBzdWl0ZSBydW5uZXIuCiAgICAgT3RoZXJ3aXNl
IGl0IGp1c3QgZG9lc24ndCBnZXQgY29tcG9zaXRlZCBpbiBGaXJlZm94LiAtLT4KPGNhbnZhcyB3
aWR0aD0iMjAiIGhlaWdodD0iMjAiIHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCBibHVlOyIgaWQ9
ImMiPjwvY2FudmFzPgo8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CjxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110020</attachid>
            <date>2011-10-06 14:21:09 -0700</date>
            <delta_ts>2011-10-11 12:02:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111006171911.patch</filename>
            <type>text/plain</type>
            <size>38510</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2ODU2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzIgQEAKKzIwMTEtMTAtMDYgIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUGF0Y2ggdGhh
dCBkZW1vbnN0cmF0ZXMgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuICBBbGwg
UGxhdGZvcm1MYXllciBsaWZldGltZSBtYW5hZ2VtZW50IGlzCisgICAgICAgIHBlcmZvcm1lZCBi
eSB0aGUgRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgQ2hhbmdlcyBhcmUgb25seSByZWxldmFudCB0
byBDaHJvbWl1bSBwb3J0cy4gIEZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgdW5jaGFuZ2VkIGZv
ciBvdGhlciBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOiBDb25zdHJ1Y3Qg
YSBEcmF3aW5nQnVmZmVyCisgICAgICAgIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYW5kIGZvcndh
cmQgYWxsIGZyYW1lYnVmZmVyIG1hbmFnZW1lbnQgY2FsbHMgdG8KKyAgICAgICAgaXQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRl
eHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xl
YXJJZkNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1l
YnVmZmVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZURyYXdpbmdCdWZmZXIpOiBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBpbnN0YW5j
ZXMgdHJhY2sgdGhlIERyYXdpbmdCdWZmZXIgaW5zdGFuY2VzIHRoYXQgdGhleSBjcmVhdGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzZXREcmF3aW5nQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXREcmF3aW5nQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVDb2xvclRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6
OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZl
cjo6cGxhdGZvcm1Db2xvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpmcmFtZWJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExh
eWVyQ2hyb21pdW06OnNldENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9EcmF3aW5nQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6bXVs
dGlzYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6
ZGlzY2FyZFJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdp
bmdCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnNldFNjaXNzb3JF
bmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0
M0RHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250
ZXh0M0RNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhp
Y3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBo
aWNzQ29udGV4dDNEKToKKwogMjAxMS0xMC0wNiAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIGxhc3QgZnJhbWUgb2YgYSBtdWx0aXBhcnQgcmVzcG9uc2UgaXMgbm90
IGRpc3BsYXllZApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2Myw3ICszNjMsMTIgQEAgUGFzc093blB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdl
YkdMUgogICAgIH0KIAogICAgIGF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gdHJ1ZTsKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyAgICBhdHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gdHJ1ZTsK
KyNlbHNlCiAgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNlOworI2VuZGlmCisK
IAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKIApAQCAtMzc5LDYgKzM4NCw3IEBA
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb24KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZh
cykKICAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCiAg
ICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQogICAgICwgbV9yZXN0b3JlVGltZXIodGhpcykK
ICAgICAsIG1fdmlkZW9DYWNoZSg0KQpAQCAtMzg2LDYgKzM5MiwxNSBAQCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRl
cykKIHsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQor
ICAgIC8vIENyZWF0ZSB0aGUgRHJhd2luZ0J1ZmZlcgorICAgIG1fZHJhd2luZ0J1ZmZlciA9IG1f
Y29udGV4dC0+Y3JlYXRlRHJhd2luZ0J1ZmZlcighbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2lu
Z0J1ZmZlciwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7
CisjZW5kaWYKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1
ZmZlci0+YmluZCgpOworCiAgICAgc2V0dXBGbGFncygpOwogICAgIGluaXRpYWxpemVOZXdDb250
ZXh0KCk7CiB9CkBAIC00NTEsNiArNDY2LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmluaXRpYWxpemVOZQogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAgICAgICBpbml0
VmVydGV4QXR0cmliMCgpOwogCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+
aGVpZ2h0KCkpKTsKKwogICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52YXMoKS0+d2lkdGgoKSwg
Y2FudmFzKCktPmhlaWdodCgpKTsKICAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZh
cygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwogCkBAIC00ODMsNyArNTAxLDkgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0QwogewogICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZykKICAgICAgICAgcmV0dXJuOworCiAgICAgbV9jb250ZXh0LT5tYXJr
Q29udGV4dENoYW5nZWQoKTsKKwogICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7CiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2Fu
dmFzKCktPnJlbmRlckJveCgpOwpAQCAtNTEzLDggKzUzMywxMiBAQCBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y2xlYXJJZkNvbXBvCiAgICAgLy8gRGV0ZXJtaW5lIGlmIGl0J3MgcG9zc2li
bGUgdG8gY29tYmluZSB0aGUgY2xlYXIgdGhlIHVzZXIgYXNrZWQgZm9yIGFuZCB0aGlzIGNsZWFy
LgogICAgIGJvb2wgY29tYmluZWRDbGVhciA9IG1hc2sgJiYgIW1fc2Npc3NvckVuYWJsZWQ7CiAK
LSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nKSB7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCAwKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpOwogICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNrICYgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQogICAgICAgICBtX2NvbnRleHQtPmNsZWFy
Q29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLApAQCAtNTc0LDE3ICs1
OTgsMjkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaQogICAgIH0g
ZWxzZQogICAgICAgICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CiAgICAgY2xl
YXJJZkNvbXBvc2l0ZWQoKTsKKwogICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9s
YXllckNsZWFyZWQpCiAgICAgICAgIHJldHVybjsKKwogICAgIGNhbnZhcygpLT5jbGVhckNvcGll
ZEltYWdlKCk7CiAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOworCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKICAgICBt
X2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKHRoaXMpOworICAgIGlmICht
X2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwogfQogCiBQ
YXNzUmVmUHRyPEltYWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpCiB7CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICBy
ZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7
CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAK
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29u
c3QKQEAgLTYxNiwxNiArNjUyLDI1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNo
YXBlKGludAogCiAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGly
dHksIHNpbmNlIHRoZSBuZXdseSBjcmVhdGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQg
b2ZmCiAgICAgLy8gY2xlYXIgKGFuZCB0aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8p
LgotICAgIG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KEludFNpemUod2lkdGgs
IGhlaWdodCkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBo
ZWlnaHQpOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lk
dGgoKSBjb25zdAogeworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBt
X2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpOworCiAgICAgcmV0dXJuIG1fY29udGV4dC0+
Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOwogfQogCiBpbnQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3QKIHsKKyAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVp
Z2h0KCk7CisKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLmhlaWdodCgpOwogfQogCkBAIC03NDUsNyArNzkwLDExIEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kRnJhbWVidWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2Zy
YW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJC
aW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBJbnN0ZWFkIG9mIGJpbmRp
bmcgZmIgMCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCisgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKICAgICBpZiAoYnVmZmVyKQogICAgICAg
ICBidWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwpAQCAtMTA4NCw5ICsxMTMzLDIxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhcklm
Q29tcG9zaXRlZCgpOwotICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQorICAgIGlmIChpc1Jlc291
cmNlU2FmZSgpKSB7CisgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAo
ZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21t
aXQoKTsKKwogICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGVsc2Ug
eworCisgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDb21t
aXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAg
ICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAgICAgR0MzRGludCBjbGlw
cGVkWCwgY2xpcHBlZFk7CiAgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRI
ZWlnaHQ7CiAgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRG
cmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRY
LCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgewpAQCAtMTA5OCw2
ICsxMTU5LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIpOworCisgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVk
ZWQKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKICAgICB9CiAgICAgLy8gRklY
TUU6IGlmIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgY29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93
IHNob3VsZCBiZSBleGVjdXRlZC4KICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUpOwpAQCAtMTI3NCw3ICsxMzM5LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVGcmFtZWIKICAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJp
bmRpbmcpIHsKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwogICAgICAgICAvLyBI
YXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGludGVybmFs
IGZiby4KLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIDApOwogICAgIH0KIH0KIApAQCAtMTM2MSw4ICsxNDI5LDExIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdDM0QKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkKKyAgICBpZiAoY2FwID09IEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKICAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9
IGZhbHNlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CiAg
ICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KQEAgLTE3MDMsOCArMTc3NCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZW5hYmxlKEdDM0RlCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRh
dGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09IEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKSB7CiAgICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOwor
ICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CiAgICAgbV9jb250
ZXh0LT5lbmFibGUoY2FwKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQpAQCAtMjg3Niw3ICsyOTUwLDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFk
UGl4ZWxzKEcKICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKICAgICB2b2lkKiBkYXRh
ID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOworCisgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIg
aWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICBpZiAoIW1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5j
b21taXQoKTsKKwogICAgIG1fY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCisgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlm
IG5lZWRlZAorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVy
KQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKwogI2lmIE9TKERBUldJTikKICAg
ICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVuIEdMIGRyaXZlciBidWcgb24gTWFj
IGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNo
b3VsZCBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KQEAgLTQxMTksMTQgKzQyMDMsMTQg
QEAgaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZQogewogICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0V2lkdGgoKTsKLSAgICByZXR1
cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7CisgICAg
cmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCkg
OiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsKIH0KIAog
aW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpCiB7
CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQo
KTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhl
aWdodCgpOworICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNp
emUoKS5oZWlnaHQoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5o
ZWlnaHQoKTsKIH0KIAogV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVGV4dHVyZUJpbmRpbmcoR0MzRGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3Vi
ZU1hcCkKQEAgLTQ4MjIsNiArNDkwNiw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpt
YXliZVJlc3RvcmUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIG1fZHJhd2luZ0J1ZmZl
ciA9IG1fY29udGV4dC0+Y3JlYXRlRHJhd2luZ0J1ZmZlcighbV9hdHRyaWJ1dGVzLnByZXNlcnZl
RHJhd2luZ0J1ZmZlciwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkpOworCiAgICAgbV9jb250ZXh0
ID0gY29udGV4dDsKICAgICBtX2NvbnRleHRMb3N0ID0gZmFsc2U7CiAgICAgaW5pdGlhbGl6ZU5l
d0NvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw3IEBACiAjZGVmaW5lIFdlYkdMUmVuZGVyaW5nQ29udGV4dF9oCiAKICNpbmNsdWRl
ICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGbG9hdDMyQXJyYXkuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgpAQCAtMzU1LDYgKzM1NiwxMCBAQCBwdWJsaWM6
CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKIAorICAgIC8vIE9w
dGlvbmFsIHN0cnVjdHVyZSBmb3IgcmVuZGVyaW5nIHRvIGEgRHJhd2luZ0J1ZmZlciwgaW5zdGVh
ZCBvZiBkaXJlY3RseQorICAgIC8vIHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2NvbnRleHQuCisg
ICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IG1fZHJhd2luZ0J1ZmZlcjsKKwogICAgIGNsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dFJlc3RvcmVUaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgewogICAg
IHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzdG9yZVRp
bWVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkgOiBtX2NvbnRleHQoY29udGV4dCkg
eyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTgsOSArNTgsMTIgQEAgdWludDhfdCBjb252ZXJ0Q29sb3IxNkJpZ1RvOCh1aW50MTZfdCB2
YQogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIAotUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVy
PiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRHJhd2luZ0J1ZmZlcihjb25zdCBJbnRTaXplJiBz
aXplKQorUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
RHJhd2luZ0J1ZmZlcihib29sIHNlcGFyYXRlQmFja2luZ0J1ZmZlciwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKIHsKLSAgICByZXR1cm4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKHRoaXMsIHNpemUpOwor
ICAgIEFTU0VSVCghbV9kcmF3aW5nQnVmZmVyKTsKKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4g
ZHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVyOjpjcmVhdGUodGhpcywgc2l6ZSwgc2VwYXJhdGVC
YWNraW5nQnVmZmVyKSk7CisgICAgbV9kcmF3aW5nQnVmZmVyID0gZHJhd2luZ0J1ZmZlci5nZXQo
KTsKKyAgICByZXR1cm4gZHJhd2luZ0J1ZmZlcjsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0Rp
bnQgdW5wYWNrQWxpZ25tZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA5NjYzNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwMCw4ICs1MDAsMTAgQEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9pZCBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gY3Jl
YXRlRHJhd2luZ0J1ZmZlcihjb25zdCBJbnRTaXplJiA9IEludFNpemUoKSk7Ci0gICAgCisgICAg
UGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGVEcmF3aW5nQnVmZmVyKGJvb2wgc2VwYXJh
dGVCYWNraW5nQnVmZmVyLCBjb25zdCBJbnRTaXplJiA9IEludFNpemUoKSk7CisgICAgdm9pZCBz
ZXREcmF3aW5nQnVmZmVyKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpIHsgbV9kcmF3aW5n
QnVmZmVyID0gZHJhd2luZ0J1ZmZlcjsgfQorICAgIERyYXdpbmdCdWZmZXIqIGdldERyYXdpbmdC
dWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdCdWZmZXI7IH0KKwogI2lmIFBMQVRGT1JN
KE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
UVQpCiAgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVG
Qk8gdG8gcmVndWxhciBGQk8uCiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwpAQCAtOTUxLDYg
Kzk1Myw4IEBAIHB1YmxpYzoKICAgICBMaXN0SGFzaFNldDxHQzNEZW51bT4gbV9zeW50aGV0aWNF
cnJvcnM7CiAjZW5kaWYKIAorICAgIERyYXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKKwog
ICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU7CiAgICAgT3duUHRyPEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gbV9wcml2YXRlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
RHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiwxNCBAQAogCiAjaW5jbHVkZSAiRHJhd2luZ0J1
ZmZlci5oIgogCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
I2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIldlYkdMTGF5ZXJD
aHJvbWl1bS5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHVuc2ln
bmVkIGdlbmVyYXRlQ29sb3JUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25z
dCBJbnRTaXplJiBzaXplKQpAQCAtNDgsNyArNTQsNiBAQCBzdGF0aWMgdW5zaWduZWQgZ2VuZXJh
dGVDb2xvclRleHR1cmUoR3JhCiAgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBH
cmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CiAgICAgY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CiAgICAgY29u
dGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFKTsKLSAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9mZnNjcmVlbkNvbG9yVGV4dHVyZSwgMCk7
CiAKICAgICByZXR1cm4gb2Zmc2NyZWVuQ29sb3JUZXh0dXJlOwogfQpAQCAtNTYsMjcgKzYxLDI0
IEBAIHN0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNvbG9yVGV4dHVyZShHcmEKIERyYXdpbmdCdWZm
ZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3Vw
cG9ydGVkKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAg
OiBtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUoc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICAs
IG1fc2Npc3NvckVuYWJsZWQoZmFsc2UpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAs
IG1fc2l6ZSgtMSwgLTEpCiAgICAgLCBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11
bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxF
eHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQog
ICAgICwgbV9mYm8oMCkKICAgICAsIG1fY29sb3JCdWZmZXIoMCkKKyAgICAsIG1fYmFja2luZ0Nv
bG9yQnVmZmVyKDApCiAgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9kZXB0
aEJ1ZmZlcigwKQogICAgICwgbV9zdGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxl
RkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKIHsKLSAgICBtX2ZibyA9
IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIG1fY29sb3JC
dWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShjb250ZXh0LCBzaXplKTsKLSAgICBjcmVhdGVT
ZWNvbmRhcnlCdWZmZXJzKCk7Ci0gICAgaWYgKCFyZXNldChzaXplKSkgewotICAgICAgICBtX2Nv
bnRleHQuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbml0aWFsaXplKHNp
emUpOwogfQogCiBEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZlcigpCkBAIC04NywxNSArODks
NDMgQEAgRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQogICAgIGNsZWFyKCk7CiB9CiAK
K3ZvaWQgRHJhd2luZ0J1ZmZlcjo6aW5pdGlhbGl6ZShjb25zdCBJbnRTaXplJiBzaXplKQorewor
ICAgIG1fZmJvID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworCisgICAgaWYgKG1f
c2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICAgICAgbV9iYWNraW5nQ29sb3JCdWZmZXIgPSBn
ZW5lcmF0ZUNvbG9yVGV4dHVyZShtX2NvbnRleHQuZ2V0KCksIHNpemUpOworCisgICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zi
byk7CisgICAgbV9jb2xvckJ1ZmZlciA9IGdlbmVyYXRlQ29sb3JUZXh0dXJlKG1fY29udGV4dC5n
ZXQoKSwgc2l6ZSk7CisgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hN
RU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOwor
ICAgIGNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMoKTsKKyAgICBpZiAoIXJlc2V0KHNpemUpKSB7Cisg
ICAgICAgIG1fY29udGV4dC5jbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJs
aXNoVG9QbGF0Zm9ybUxheWVyKCkKIHsKICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0
dXJuOwogCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBpZiAobXVs
dGlzYW1wbGUoKSkKICAgICAgICAgY29tbWl0KCk7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUpIHsKKyAgICAg
ICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBtX2Zibyk7CisgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmFja2luZ0NvbG9yQnVmZmVyKTsKKyAgICAgICAgdW5zaWdu
ZWQgbG9uZyBjb2xvckZvcm1hdCA9IG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5h
bHBoYSA/IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIDogR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsK
KyAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgY29sb3JGb3JtYXQsIDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVp
Z2h0KCksIDApOworICAgIH0KKworICAgIGlmIChtdWx0aXNhbXBsZSgpKQorICAgICAgICBiaW5k
KCk7CisKICAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiB9CiAjZW5kaWYKQEAgLTEwOSw3ICsxMzks
MTIgQEAgUGxhdGZvcm1MYXllciogRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYQogCiBQbGF0Zm9y
bTNET2JqZWN0IERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtQ29sb3JCdWZmZXIoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2NvbG9yQnVmZmVyOworICAgIHJldHVybiBtX3NlcGFyYXRlQmFja2luZ1Rl
eHR1cmUgPyBtX2JhY2tpbmdDb2xvckJ1ZmZlciA6IG1fY29sb3JCdWZmZXI7Cit9CisKK1BsYXRm
b3JtM0RPYmplY3QgRHJhd2luZ0J1ZmZlcjo6ZnJhbWVidWZmZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2ZibzsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAKIAogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiRHJh
d2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0u
aCIKQEAgLTg1LDEwICs4Niw4IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21w
b3NpdG8KICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVyZSB1
c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgogICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpICYm
IG1fdGV4dHVyZVVwZGF0ZWQpIHsKLSAgICAgICAgLy8gcHJlcGFyZVRleHR1cmUgY29waWVzIHRo
ZSBjb250ZW50cyBvZiB0aGUgb2ZmLXNjcmVlbiByZW5kZXIgdGFyZ2V0IGludG8gdGhlIHRleHR1
cmUKLSAgICAgICAgLy8gdXNlZCBieSB0aGUgY29tcG9zaXRvci4KLSAgICAgICAgLy8KLSAgICAg
ICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOworICAgICAgICAvLyBwdWJsaXNoVG9QbGF0
Zm9ybUxheWVyIHByZXBhcmVzIHRoZSBjb250ZW50cyBvZiB0aGUgb2ZmLXNjcmVlbiByZW5kZXIg
dGFyZ2V0IGZvciB1c2UgYnkgdGhlIGNvbXBvc2l0b3IuCisgICAgICAgIGNvbnRleHQoKS0+Z2V0
RHJhd2luZ0J1ZmZlcigpLT5wdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCk7CiAgICAgICAgIG1fY29u
dGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOwogICAgICAgICByZXNldE5lZWRzRGlzcGxheSgp
OwogICAgICAgICBtX3RleHR1cmVVcGRhdGVkID0gZmFsc2U7CkBAIC0xMzIsNyArMTMxLDcgQEAg
dm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnNldENvbnRleHQoY29ucwogICAgIGlmICghbV9jb250
ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25lZCBpbnQgdGV4dHVyZUlkID0gbV9j
b250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsKKyAgICB1bnNpZ25lZCBpbnQgdGV4dHVyZUlkID0g
bV9jb250ZXh0LT5nZXREcmF3aW5nQnVmZmVyKCktPnBsYXRmb3JtQ29sb3JCdWZmZXIoKTsKICAg
ICBpZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkIHx8IGNvbnRleHRDaGFuZ2VkKSB7CiAgICAg
ICAgIG1fdGV4dHVyZUNoYW5nZWQgPSB0cnVlOwogICAgICAgICBtX3RleHR1cmVVcGRhdGVkID0g
dHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHJldmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogCiAjaW5jbHVk
ZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OCw3ICs1MCw3
IEBAIHN0YXRpYyBpbnQgc19tYXhpbXVtUmVzb3VyY2VVc2VQaXhlbHMgPQogI2VuZGlmCiBzdGF0
aWMgaW50IHNfY3VycmVudFJlc291cmNlVXNlUGl4ZWxzID0gMDsKIAotUGFzc1JlZlB0cjxEcmF3
aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIGNvbnN0IEludFNpemUmIHNpemUpCitQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IERyYXdp
bmdCdWZmZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQogewogICAgIEV4dGVuc2lvbnMz
RCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKICAgICBib29sIG11bHRp
c2FtcGxlU3VwcG9ydGVkID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVm
ZmVyX2JsaXQiKSAmJiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJf
bXVsdGlzYW1wbGUiKSAmJiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfT0VTX3JnYjhfcmdiYTgi
KTsKQEAgLTYwLDcgKzYyLDcgQEAgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVm
ZmVyOgogICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0gZXh0ZW5zaW9ucy0+
c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwogICAgIGlmIChwYWNrZWRE
ZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpCiAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQo
IkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVy
PiBkcmF3aW5nQnVmZmVyID0gYWRvcHRSZWYobmV3IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6
ZSwgbXVsdGlzYW1wbGVTdXBwb3J0ZWQsIHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCkpOwor
ICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyID0gYWRvcHRSZWYobmV3IERy
YXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSwgbXVsdGlzYW1wbGVTdXBwb3J0ZWQsIHBhY2tlZERl
cHRoU3RlbmNpbFN1cHBvcnRlZCwgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkpOwogICAgIHJldHVy
biAoZHJhd2luZ0J1ZmZlci0+bV9jb250ZXh0KSA/IGRyYXdpbmdCdWZmZXIucmVsZWFzZSgpIDog
MDsKIH0KIApAQCAtNzgsNiArODAsMTEgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpjbGVhcigpCiAg
ICAgICAgIG1fY29sb3JCdWZmZXIgPSAwOwogICAgIH0KIAorICAgIGlmIChtX2JhY2tpbmdDb2xv
ckJ1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9iYWNraW5nQ29s
b3JCdWZmZXIpOworICAgICAgICBtX2JhY2tpbmdDb2xvckJ1ZmZlciA9IDA7CisgICAgfQorCiAg
ICAgaWYgKG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcikgewogICAgICAgICBtX2NvbnRleHQtPmRl
bGV0ZVJlbmRlcmJ1ZmZlcihtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogICAgICAgICBtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSAwOwpAQCAtMjY5LDEwICsyNzYsMTYgQEAgYm9vbCBEcmF3
aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgICAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKIAogICAg
ICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBtX2NvbG9yQnVmZmVyKTsKLSAgICAgICAgCiAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2Uy
RChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKIAogICAgICAgICBtX2NvbnRleHQtPmZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbV9jb2xvckJ1ZmZlciwgMCk7CisKKyAgICAgICAgLy8gcmVzaXplIHRoZSBiYWNraW5nIGNv
bG9yIGJ1ZmZlcgorICAgICAgICBpZiAobV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKSB7CisgICAg
ICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBtX2JhY2tpbmdDb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3Jt
YXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CisgICAgICAgIH0KKwogICAgICAgICBt
X2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsK
IAogICAgICAgICBpZiAoIW11bHRpc2FtcGxlKCkpCkBAIC0yOTMsMjMgKzMwNiw1NiBAQCB2b2lk
IERyYXdpbmdCdWZmZXI6OmNvbW1pdChsb25nIHgsIGxvbmcKIHsKICAgICBpZiAoIW1fY29udGV4
dCkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIGlmICh3aWR0aCA8IDApCiAgICAg
ICAgIHdpZHRoID0gbV9zaXplLndpZHRoKCk7CiAgICAgaWYgKGhlaWdodCA8IDApCiAgICAgICAg
IGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSAgICAgICAgCisKICAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIAorCiAgICAgaWYgKG1fbXVsdGlzYW1wbGVGQk8pIHsK
ICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpSRUFEX0ZS
QU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoRXh0ZW5zaW9uczNEOjpEUkFXX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5ibGl0RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgs
IGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JV
RkZFUl9CSVQsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworCisgICAgICAgIGlmIChtX3Nj
aXNzb3JFbmFibGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTQ0lTU09SX1RFU1QpOworCisgICAgICAgIC8vIFVzZSBORUFSRVNULCBiZWNhdXNl
IHRoZXJlIGlzIG5vIHNjYWxlIHBlcmZvcm1lZCBkdXJpbmcgdGhlIGJsaXQuCisgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5ibGl0RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgsIGhl
aWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZF
Ul9CSVQsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsKKworICAgICAgICBpZiAobV9zY2lz
c29yRW5hYmxlZCkKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIH0KLSAgICAKKwogICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogfQogCiti
b29sIERyYXdpbmdCdWZmZXI6Om11bHRpc2FtcGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9j
b250ZXh0ICYmIG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgJiYg
bV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZDsKK30KKworUGFzc1JlZlB0cjxJbWFnZURh
dGE+IERyYXdpbmdCdWZmZXI6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK3sK
KyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgp
OworfQorCit2b2lkIERyYXdpbmdCdWZmZXI6OmRpc2NhcmRSZXNvdXJjZXMoKQoreworICAgIG1f
Y29sb3JCdWZmZXIgPSAwOworICAgIG1fYmFja2luZ0NvbG9yQnVmZmVyID0gMDsKKyAgICBtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSAwOworCisgICAgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgPSAw
OworICAgIG1fZGVwdGhCdWZmZXIgPSAwOworCisgICAgbV9zdGVuY2lsQnVmZmVyID0gMDsKKwor
ICAgIG1fbXVsdGlzYW1wbGVGQk8gPSAwOworICAgIG1fZmJvID0gMDsKK30KKwogdm9pZCBEcmF3
aW5nQnVmZmVyOjpiaW5kKCkKIHsKICAgICBpZiAoIW1fY29udGV4dCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAko
cmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
RHJhd2luZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAKICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTQzLDEwICs0NCw4IEBACiAjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKLWNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bTsKLSNlbmRpZgor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBJbWFnZURhdGE7CiAKIC8vIE1hbmFnZXMg
YSByZW5kZXJpbmcgdGFyZ2V0IChmcmFtZWJ1ZmZlciArIGF0dGFjaG1lbnQpIGZvciBhIGNhbnZh
cy4gIENhbiBwdWJsaXNoIGl0cyByZW5kZXJpbmcKIC8vIHJlc3VsdHMgdG8gYSBQbGF0Zm9ybUxh
eWVyIGZvciBjb21wb3NpdGluZy4KQEAgLTc1LDEwICs3NCwyMCBAQCBwdWJsaWM6CiAKICAgICAv
LyBDb3BpZXMgdGhlIG11bHRpc2FtcGxlIGNvbG9yIGJ1ZmZlciB0byB0aGUgbm9ybWFsIGNvbG9y
IGJ1ZmZlciBhbmQgbGVhdmVzIG1fZmJvIGJvdW5kCiAgICAgdm9pZCBjb21taXQobG9uZyB4ID0g
MCwgbG9uZyB5ID0gMCwgbG9uZyB3aWR0aCA9IC0xLCBsb25nIGhlaWdodCA9IC0xKTsKLSAgICAK
LSAgICBib29sIG11bHRpc2FtcGxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29u
dGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgJiYgbV9tdWx0aXNhbXBsZUV4
dGVuc2lvblN1cHBvcnRlZDsgfQotICAgIAorCisgICAgLy8gY29tbWl0IHNob3VsZCBjb3B5IHRo
ZSBmdWxsIG11bHRpc2FtcGxlIGJ1ZmZlciwgYW5kIG5vdCByZXNwZWN0IHRoZQorICAgIC8vIGN1
cnJlbnQgc2Npc3NvciBib3VuZHMuIFRyYWNrIHRoZSBzdGF0ZSBvZiB0aGUgc2Npc3NvciB0ZXN0
IHNvIHRoYXQgaXQKKyAgICAvLyBjYW4gYmUgZGlzYWJsZWQgZHVyaW5nIGNhbGxzIHRvIGNvbW1p
dC4KKyAgICB2b2lkIHNldFNjaXNzb3JFbmFibGVkKGJvb2wgc2Npc3NvckVuYWJsZWQpIHsgbV9z
Y2lzc29yRW5hYmxlZCA9IHNjaXNzb3JFbmFibGVkOyB9CisKKyAgICBib29sIG11bHRpc2FtcGxl
KCkgY29uc3Q7CisKICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtQ29sb3JCdWZmZXIoKSBj
b25zdDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKCkgY29uc3Q7CisKKyAgICBQ
YXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsK
KworICAgIHZvaWQgZGlzY2FyZFJlc291cmNlcygpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKTsKQEAgLTg4LDkg
Kzk3LDE1IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBncmFw
aGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQogCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRl
eHQzRCosIGNvbnN0IEludFNpemUmKTsKLSAgICAKLSAgICBEcmF3aW5nQnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBw
b3J0ZWQsIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Qq
LCBjb25zdCBJbnRTaXplJiwgYm9vbCk7CisKKyAgICBEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQsCisgICAgICAgICAgICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1
cHBvcnRlZCwgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKTsKKworICAgIHZvaWQgaW5pdGlh
bGl6ZShjb25zdCBJbnRTaXplJik7CisKKyAgICBib29sIG1fc2VwYXJhdGVCYWNraW5nVGV4dHVy
ZTsKKyAgICBib29sIG1fc2Npc3NvckVuYWJsZWQ7CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IG1fY29udGV4dDsKICAgICBJbnRTaXplIG1fc2l6ZTsKQEAgLTk4LDYgKzExMyw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRl
ZDsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9j
b2xvckJ1ZmZlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fYmFja2luZ0NvbG9yQnVmZmVyOwog
CiAgICAgLy8gVGhpcyBpcyB1c2VkIHdoZW4gd2UgaGF2ZSBPRVNfcGFja2VkX2RlcHRoX3N0ZW5j
aWwuCiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREd0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dy
YXBoaWNzQ29udGV4dDNER3RrLmNwcAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw2ICs2Miw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRChHcmEKICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQor
ICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjphZGRBY3RpdmVHcmFwaGljc0NvbnRleHQodGhpcyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0
M0RNYWMubW0JKHJldmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTks
NiArMTE5LDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogICAg
ICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1
ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCisgICAgLCBtX2RyYXdp
bmdCdWZmZXIoMCkKICAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlKHRoaXMpKSkKIHsKICAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHQzRFF0LmNwcAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzA2LDYgKzMwNiw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRChHcmEKICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQor
ICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCiAgICAgLCBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzLCBob3N0V2luZG93KSkpCiB7CiAjaWYgZGVmaW5l
ZChRVF9PUEVOR0xfRVNfMikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lv
biA5Njg1NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMTAtMDYgIEplZmYgVGltYW51cyAgPHR3aXpAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUGF0Y2ggdGhhdCBkZW1vbnN0cmF0ZXMg
dGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAgICAgdG8gc2hhcmUgaXRz
IGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRvci4KKyAgICAgICAgV2Vi
R0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRvIEZCT3MgbWFuYWdlZCBi
eSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuICBBbGwgUGxhdGZvcm1MYXllciBs
aWZldGltZSBtYW5hZ2VtZW50IGlzCisgICAgICAgIHBlcmZvcm1lZCBieSB0aGUgRHJhd2luZ0J1
ZmZlci4KKyAgICAgICAgQ2hhbmdlcyBhcmUgb25seSByZWxldmFudCB0byBDaHJvbWl1bSBwb3J0
cy4gIEZ1bmN0aW9uYWxpdHkgaXMgCisgICAgICAgIHVuY2hhbmdlZCBmb3Igb3RoZXIgcG9ydHMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzIwMQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL0dy
YXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwOiBBbGxvdyBzcGVjaWZpY2F0aW9uIGZvciBhbiBv
cHRpb25hbAorICAgICAgICBEcmF3aW5nQnVmZmVyIGluc3RhbmNlIHRvIHRoZSBwYWludFJlbmRl
cmluZ1Jlc3VsdHMqIHJvdXRpbmVzIHRvIG92ZXJyaWRlCisgICAgICAgIHJlYWRpbmcgZnJvbSBG
QiAwLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmg6CisKIDIwMTEtMTAtMDYgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21h
aWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5Njc5MS4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4
dDNEQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJE
cmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxl
bWVudC5oIgpAQCAtMzA4LDEwICszMDksMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnBhaW50RnJhbQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZm
ZXIqIGRyYXdpbmdCdWZmZXIpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY29u
dGV4dC0+Y2FudmFzKCktPmJ1ZmZlcigpOwotICAgIHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcygw
LCBtX2ltcGwtPndpZHRoKCksIG1faW1wbC0+aGVpZ2h0KCksICFtX2ltcGwtPmdldENvbnRleHRB
dHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CisgICAgaWYgKGRy
YXdpbmdCdWZmZXIpIHsKKyAgICAgICAgcGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGRyYXdpbmdC
dWZmZXItPmZyYW1lYnVmZmVyKCksIGRyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpLCBkcmF3
aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAhbV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwg
aW1hZ2VCdWZmZXIpOworICAgIH0gZWxzZQorICAgICAgICBwYWludEZyYW1lYnVmZmVyVG9DYW52
YXMoMCwgbV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgpLCAhbV9pbXBsLT5nZXRDb250
ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwgaW1hZ2VCdWZmZXIpOwogfQogCiBi
b29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2Fu
dmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCkBAIC0zMjMsMTYgKzMyOCwxOSBA
QCBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitQYXNzUmVmUHRyPEltYWdlRGF0
YT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogewogICAgIGlmIChtX2ltcGwtPmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhKQogICAgICAgICByZXR1cm4g
MDsKLSAgICAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNy
ZWF0ZShJbnRTaXplKG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSkpOworCisgICAg
aW50IHdpZHRoID0gZHJhd2luZ0J1ZmZlciA/IGRyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgp
IDogbV9pbXBsLT53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBkcmF3aW5nQnVmZmVyID8gZHJh
d2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpIDogbV9pbXBsLT5oZWlnaHQoKTsKKworICAgIFJl
ZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUod2lk
dGgsIGhlaWdodCkpOwogICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0
YSgpLT5kYXRhKCktPmRhdGEoKTsKLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDQgKiBtX2ltcGwt
PndpZHRoKCkgKiBtX2ltcGwtPmhlaWdodCgpOworICAgIHNpemVfdCBidWZmZXJTaXplID0gNCAq
IHdpZHRoICogaGVpZ2h0OwogCi0gICAgbV9pbXBsLT5yZWFkQmFja0ZyYW1lYnVmZmVyKHBpeGVs
cywgYnVmZmVyU2l6ZSwgMCwgbV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgpKTsKKyAg
ICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCBidWZmZXJTaXplLCBkcmF3aW5n
QnVmZmVyID8gZHJhd2luZ0J1ZmZlci0+ZnJhbWVidWZmZXIoKSA6IDAsIHdpZHRoLCBoZWlnaHQp
OwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBidWZmZXJTaXplOyBpICs9IDQpCiAgICAg
ICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOwpAQCAtMTAwMiw3ICsxMDEw
LDcgQEAgcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLAogICAgIHJldHVy
biBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSk7ICAg
XAogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBib29sKQorR3JhcGhpY3NDb250ZXh0M0Q6
OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzLCBIb3N0V2lu
ZG93KiwgYm9vbCkgOiBtX2RyYXdpbmdCdWZmZXIoMCkKIHsKIH0KIApAQCAtMTIxMyw4ICsxMjIx
LDE2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgKICAgICByZXR1
cm4gbV9wcml2YXRlLT5sYXllckNvbXBvc2l0ZWQoKTsKIH0KIAotREVMRUdBVEVfVE9fSU5URVJO
QUxfMShwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcywgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF9SKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhLCBQYXNzUmVmUHRyPEltYWdlRGF0YT4pCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KGNvbnRleHQsIGdldERyYXdpbmdCdWZmZXIoKSk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQor
eworICAgIHJldHVybiBtX3ByaXZhdGUtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KGdldERyYXdpbmdCdWZmZXIoKSk7Cit9CisKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKHBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcywgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCosIGJvb2wp
CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25z
dApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmgJKHJldmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDcgQEAgY2xhc3MgV2ViVmlld0ltcGw7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNzIEV4dGVuc2lvbnMzRENocm9taXVtOwogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIGNsYXNzIFdlYkdMTGF5ZXJDaHJvbWl1bTsKQEAg
LTk1LDkgKzk2LDkgQEAgcHVibGljOgogICAgIGJvb2wgbGF5ZXJDb21wb3NpdGVkKCkgY29uc3Q7
CiAgICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAKLSAgICB2b2lkIHBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKKyAgICB2b2lkIHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqLCBEcmF3
aW5nQnVmZmVyKik7CiAgICAgdm9pZCBwYWludEZyYW1lYnVmZmVyVG9DYW52YXMoaW50IGZyYW1l
YnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgSW1h
Z2VCdWZmZXIqKTsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoKTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciopOwogICAgIGJvb2wgcGFpbnRzSW50
b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogICAgIGJvb2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1Rv
Q2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110555</attachid>
            <date>2011-10-11 12:02:36 -0700</date>
            <delta_ts>2011-10-11 13:37:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111011150029.patch</filename>
            <type>text/plain</type>
            <size>39592</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2ODU2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzIgQEAKKzIwMTEtMTAtMDYgIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUGF0Y2ggdGhh
dCBkZW1vbnN0cmF0ZXMgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuICBBbGwg
UGxhdGZvcm1MYXllciBsaWZldGltZSBtYW5hZ2VtZW50IGlzCisgICAgICAgIHBlcmZvcm1lZCBi
eSB0aGUgRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgQ2hhbmdlcyBhcmUgb25seSByZWxldmFudCB0
byBDaHJvbWl1bSBwb3J0cy4gIEZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgdW5jaGFuZ2VkIGZv
ciBvdGhlciBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOiBDb25zdHJ1Y3Qg
YSBEcmF3aW5nQnVmZmVyCisgICAgICAgIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYW5kIGZvcndh
cmQgYWxsIGZyYW1lYnVmZmVyIG1hbmFnZW1lbnQgY2FsbHMgdG8KKyAgICAgICAgaXQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRl
eHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xl
YXJJZkNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1l
YnVmZmVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZURyYXdpbmdCdWZmZXIpOiBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBpbnN0YW5j
ZXMgdHJhY2sgdGhlIERyYXdpbmdCdWZmZXIgaW5zdGFuY2VzIHRoYXQgdGhleSBjcmVhdGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzZXREcmF3aW5nQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXREcmF3aW5nQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVDb2xvclRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6
OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZl
cjo6cGxhdGZvcm1Db2xvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpmcmFtZWJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExh
eWVyQ2hyb21pdW06OnNldENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9EcmF3aW5nQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6bXVs
dGlzYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6
ZGlzY2FyZFJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdp
bmdCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnNldFNjaXNzb3JF
bmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0
M0RHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250
ZXh0M0RNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhp
Y3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBo
aWNzQ29udGV4dDNEKToKKwogMjAxMS0xMC0wNiAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIGxhc3QgZnJhbWUgb2YgYSBtdWx0aXBhcnQgcmVzcG9uc2UgaXMgbm90
IGRpc3BsYXllZApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2Myw3ICszNjMsMTIgQEAgUGFzc093blB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdl
YkdMUgogICAgIH0KIAogICAgIGF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gdHJ1ZTsKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyAgICBhdHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gdHJ1ZTsK
KyNlbHNlCiAgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNlOworI2VuZGlmCisK
IAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKIApAQCAtMzc5LDYgKzM4NCw3IEBA
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb24KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZh
cykKICAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCiAg
ICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQogICAgICwgbV9yZXN0b3JlVGltZXIodGhpcykK
ICAgICAsIG1fdmlkZW9DYWNoZSg0KQpAQCAtMzg2LDYgKzM5MiwxNSBAQCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRl
cykKIHsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQor
ICAgIC8vIENyZWF0ZSB0aGUgRHJhd2luZ0J1ZmZlcgorICAgIG1fZHJhd2luZ0J1ZmZlciA9IG1f
Y29udGV4dC0+Y3JlYXRlRHJhd2luZ0J1ZmZlcighbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2lu
Z0J1ZmZlciwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7
CisjZW5kaWYKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1
ZmZlci0+YmluZCgpOworCiAgICAgc2V0dXBGbGFncygpOwogICAgIGluaXRpYWxpemVOZXdDb250
ZXh0KCk7CiB9CkBAIC00NTEsNiArNDY2LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmluaXRpYWxpemVOZQogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAgICAgICBpbml0
VmVydGV4QXR0cmliMCgpOwogCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+
aGVpZ2h0KCkpKTsKKwogICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52YXMoKS0+d2lkdGgoKSwg
Y2FudmFzKCktPmhlaWdodCgpKTsKICAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZh
cygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwogCkBAIC00ODMsNyArNTAxLDkgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0QwogewogICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZykKICAgICAgICAgcmV0dXJuOworCiAgICAgbV9jb250ZXh0LT5tYXJr
Q29udGV4dENoYW5nZWQoKTsKKwogICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7CiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2Fu
dmFzKCktPnJlbmRlckJveCgpOwpAQCAtNTEzLDggKzUzMywxMiBAQCBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y2xlYXJJZkNvbXBvCiAgICAgLy8gRGV0ZXJtaW5lIGlmIGl0J3MgcG9zc2li
bGUgdG8gY29tYmluZSB0aGUgY2xlYXIgdGhlIHVzZXIgYXNrZWQgZm9yIGFuZCB0aGlzIGNsZWFy
LgogICAgIGJvb2wgY29tYmluZWRDbGVhciA9IG1hc2sgJiYgIW1fc2Npc3NvckVuYWJsZWQ7CiAK
LSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nKSB7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCAwKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpOwogICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNrICYgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQogICAgICAgICBtX2NvbnRleHQtPmNsZWFy
Q29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLApAQCAtNTc0LDE3ICs1
OTgsMjkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaQogICAgIH0g
ZWxzZQogICAgICAgICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CiAgICAgY2xl
YXJJZkNvbXBvc2l0ZWQoKTsKKwogICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9s
YXllckNsZWFyZWQpCiAgICAgICAgIHJldHVybjsKKwogICAgIGNhbnZhcygpLT5jbGVhckNvcGll
ZEltYWdlKCk7CiAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOworCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKICAgICBt
X2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKHRoaXMpOworICAgIGlmICht
X2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwogfQogCiBQ
YXNzUmVmUHRyPEltYWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpCiB7CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICBy
ZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7
CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAK
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29u
c3QKQEAgLTYxNiwxNiArNjUyLDI1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNo
YXBlKGludAogCiAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGly
dHksIHNpbmNlIHRoZSBuZXdseSBjcmVhdGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQg
b2ZmCiAgICAgLy8gY2xlYXIgKGFuZCB0aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8p
LgotICAgIG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KEludFNpemUod2lkdGgs
IGhlaWdodCkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBo
ZWlnaHQpOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lk
dGgoKSBjb25zdAogeworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBt
X2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpOworCiAgICAgcmV0dXJuIG1fY29udGV4dC0+
Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOwogfQogCiBpbnQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3QKIHsKKyAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVp
Z2h0KCk7CisKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLmhlaWdodCgpOwogfQogCkBAIC03NDUsNyArNzkwLDExIEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kRnJhbWVidWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2Zy
YW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJC
aW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBJbnN0ZWFkIG9mIGJpbmRp
bmcgZmIgMCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCisgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKICAgICBpZiAoYnVmZmVyKQogICAgICAg
ICBidWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwpAQCAtMTA4NCw5ICsxMTMzLDIxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhcklm
Q29tcG9zaXRlZCgpOwotICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQorICAgIGlmIChpc1Jlc291
cmNlU2FmZSgpKSB7CisgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAo
ZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21t
aXQoKTsKKwogICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGVsc2Ug
eworCisgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDb21t
aXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAg
ICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAgICAgR0MzRGludCBjbGlw
cGVkWCwgY2xpcHBlZFk7CiAgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRI
ZWlnaHQ7CiAgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRG
cmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRY
LCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgewpAQCAtMTA5OCw2
ICsxMTU5LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIpOworCisgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVk
ZWQKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKICAgICB9CiAgICAgLy8gRklY
TUU6IGlmIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgY29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93
IHNob3VsZCBiZSBleGVjdXRlZC4KICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUpOwpAQCAtMTI3NCw3ICsxMzM5LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVGcmFtZWIKICAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJp
bmRpbmcpIHsKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwogICAgICAgICAvLyBI
YXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGludGVybmFs
IGZiby4KLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIDApOwogICAgIH0KIH0KIApAQCAtMTM2MSw4ICsxNDI5LDExIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdDM0QKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkKKyAgICBpZiAoY2FwID09IEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKICAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9
IGZhbHNlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CiAg
ICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KQEAgLTE3MDMsOCArMTc3NCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZW5hYmxlKEdDM0RlCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRh
dGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09IEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKSB7CiAgICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOwor
ICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CiAgICAgbV9jb250
ZXh0LT5lbmFibGUoY2FwKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQpAQCAtMjg3Niw3ICsyOTUwLDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFk
UGl4ZWxzKEcKICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKICAgICB2b2lkKiBkYXRh
ID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOworCisgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIg
aWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICBpZiAoIW1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5j
b21taXQoKTsKKwogICAgIG1fY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCisgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlm
IG5lZWRlZAorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVy
KQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKwogI2lmIE9TKERBUldJTikKICAg
ICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVuIEdMIGRyaXZlciBidWcgb24gTWFj
IGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNo
b3VsZCBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KQEAgLTQxMTksMTQgKzQyMDMsMTQg
QEAgaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZQogewogICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0V2lkdGgoKTsKLSAgICByZXR1
cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7CisgICAg
cmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCkg
OiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsKIH0KIAog
aW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpCiB7
CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQo
KTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhl
aWdodCgpOworICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNp
emUoKS5oZWlnaHQoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5o
ZWlnaHQoKTsKIH0KIAogV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVGV4dHVyZUJpbmRpbmcoR0MzRGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3Vi
ZU1hcCkKQEAgLTQ4MjIsNiArNDkwNiwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
bWF5YmVSZXN0b3JlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICAvLyBDb25zdHJ1Y3Qg
YSBuZXcgZHJhd2luZyBidWZmZXIgd2l0aCB0aGUgbmV3IEdyYXBoaWNzQ29udGV4dDNELgorICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5kaXNjYXJk
UmVzb3VyY2VzKCk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRl
RHJhd2luZ0J1ZmZlcighbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciwgbV9kcmF3
aW5nQnVmZmVyLT5zaXplKCkpOworICAgIH0KKwogICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CiAg
ICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwogICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAogCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKQEAgLTM1NSw2ICszNTYsMTAgQEAgcHVibGljOgogCiAgICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiAKKyAgICAvLyBPcHRpb25hbCBzdHJ1Y3R1
cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGluc3RlYWQgb2YgZGlyZWN0bHkK
KyAgICAvLyB0byB0aGUgYmFjay1idWZmZXIgb2YgbV9jb250ZXh0LgorICAgIFJlZlB0cjxEcmF3
aW5nQnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7CisKICAgICBjbGFzcyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRSZXN0b3JlVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc3RvcmVUaW1lcihXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQpIDogbV9jb250ZXh0KGNvbnRleHQpIHsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmNwcAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDEy
IEBAIHVpbnQ4X3QgY29udmVydENvbG9yMTZCaWdUbzgodWludDE2X3QgdmEKIH0gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQogCiAKLVBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZURyYXdpbmdCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1Bhc3NSZWZQ
dHI8RHJhd2luZ0J1ZmZlcj4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURyYXdpbmdCdWZmZXIo
Ym9vbCBzZXBhcmF0ZUJhY2tpbmdCdWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAg
cmV0dXJuIERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBzaXplKTsKKyAgICBBU1NFUlQoIW1f
ZHJhd2luZ0J1ZmZlcik7CisgICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IGRyYXdpbmdCdWZmZXIo
RHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKHRoaXMsIHNpemUsIHNlcGFyYXRlQmFja2luZ0J1ZmZlcikp
OworICAgIG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdpbmdCdWZmZXIuZ2V0KCk7CisgICAgcmV0dXJu
IGRyYXdpbmdCdWZmZXI7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkRS
ZXNvdXJjZVNhZmUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHVucGFja0FsaWdu
bWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MDAsOCArNTAwLDEwIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZvaWQgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAKLSAgICBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZURyYXdpbmdCdWZm
ZXIoY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKCkpOwotICAgIAorICAgIFBhc3NSZWZQdHI8RHJh
d2luZ0J1ZmZlcj4gY3JlYXRlRHJhd2luZ0J1ZmZlcihib29sIHNlcGFyYXRlQmFja2luZ0J1ZmZl
ciwgY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKCkpOworICAgIHZvaWQgc2V0RHJhd2luZ0J1ZmZl
cihEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKSB7IG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdp
bmdCdWZmZXI7IH0KKyAgICBEcmF3aW5nQnVmZmVyKiBnZXREcmF3aW5nQnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9kcmF3aW5nQnVmZmVyOyB9CisKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRG
T1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQogICAgIC8vIFdp
dGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIg
RkJPLgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKQEAgLTk1MSw2ICs5NTMsOCBAQCBwdWJs
aWM6CiAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1fc3ludGhldGljRXJyb3JzOwogI2VuZGlm
CiAKKyAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7CisKICAgICBmcmllbmQgY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU+IG1fcHJpdmF0ZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsOCArMzIsMTQgQEAKIAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAorI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJDYW52
YXMyRExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNv
bG9yVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKQEAgLTQ4LDcgKzU0LDYgQEAgc3RhdGljIHVuc2lnbmVkIGdlbmVyYXRlQ29sb3JUZXh0dXJl
KEdyYQogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpOwogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwogICAgIGNvbnRleHQtPnRleEltYWdl
MkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAg
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBvZmZzY3JlZW5Db2xvclRleHR1cmUsIDApOwogCiAgICAgcmV0dXJu
IG9mZnNjcmVlbkNvbG9yVGV4dHVyZTsKIH0KQEAgLTU2LDI3ICs2MSwyNCBAQCBzdGF0aWMgdW5z
aWduZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUoR3JhCiBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRTaXplJiBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKLSAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgIDogbV9zZXBhcmF0ZUJh
Y2tpbmdUZXh0dXJlKHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgLCBtX3NjaXNzb3JFbmFi
bGVkKGZhbHNlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3NpemUoLTEsIC0x
KQogICAgICwgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZChtdWx0aXNhbXBsZUV4dGVu
c2lvblN1cHBvcnRlZCkKICAgICAsIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9y
dGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKICAgICAsIG1fZmJvKDAp
CiAgICAgLCBtX2NvbG9yQnVmZmVyKDApCisgICAgLCBtX2JhY2tpbmdDb2xvckJ1ZmZlcigwKQog
ICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fZGVwdGhCdWZmZXIoMCkKICAg
ICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiB7Ci0gICAgbV9mYm8gPSBjb250ZXh0LT5jcmVh
dGVGcmFtZWJ1ZmZlcigpOwotICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBtX2NvbG9yQnVmZmVyID0gZ2VuZXJh
dGVDb2xvclRleHR1cmUoY29udGV4dCwgc2l6ZSk7Ci0gICAgY3JlYXRlU2Vjb25kYXJ5QnVmZmVy
cygpOwotICAgIGlmICghcmVzZXQoc2l6ZSkpIHsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW5pdGlhbGl6ZShzaXplKTsKIH0KIAogRHJh
d2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQpAQCAtODcsMTUgKzg5LDQzIEBAIERyYXdpbmdC
dWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKICAgICBjbGVhcigpOwogfQogCit2b2lkIERyYXdpbmdC
dWZmZXI6OmluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX2ZibyA9IG1f
Y29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKworICAgIGlmIChtX3NlcGFyYXRlQmFja2lu
Z1RleHR1cmUpCisgICAgICAgIG1fYmFja2luZ0NvbG9yQnVmZmVyID0gZ2VuZXJhdGVDb2xvclRl
eHR1cmUobV9jb250ZXh0LmdldCgpLCBzaXplKTsKKworICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIG1fY29s
b3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShtX2NvbnRleHQuZ2V0KCksIHNpemUpOwor
ICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyLCAwKTsKKyAgICBjcmVhdGVTZWNv
bmRhcnlCdWZmZXJzKCk7CisgICAgaWYgKCFyZXNldChzaXplKSkgeworICAgICAgICBtX2NvbnRl
eHQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1M
YXllcigpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAorICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG11bHRpc2FtcGxlKCkpCiAg
ICAgICAgIGNvbW1pdCgpOwotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisK
KyAgICBpZiAobV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKSB7CisgICAgICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwor
ICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBtX2JhY2tpbmdDb2xvckJ1ZmZlcik7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sb3JG
b3JtYXQgPSBtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEgPyBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSA6IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7CisgICAgICAgIG1fY29u
dGV4dC0+Y29weVRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGNv
bG9yRm9ybWF0LCAwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCAwKTsKKyAg
ICB9CisKKyAgICBpZiAobXVsdGlzYW1wbGUoKSkKKyAgICAgICAgYmluZCgpOworCiAgICAgbV9j
b250ZXh0LT5mbHVzaCgpOwogfQogI2VuZGlmCkBAIC0xMDksNyArMTM5LDEyIEBAIFBsYXRmb3Jt
TGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGEKIAogUGxhdGZvcm0zRE9iamVjdCBEcmF3
aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9j
b2xvckJ1ZmZlcjsKKyAgICByZXR1cm4gbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlID8gbV9iYWNr
aW5nQ29sb3JCdWZmZXIgOiBtX2NvbG9yQnVmZmVyOworfQorCitQbGF0Zm9ybTNET2JqZWN0IERy
YXdpbmdCdWZmZXI6OmZyYW1lYnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mYm87CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gOTY2
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExh
eWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNs
dWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIK
ICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCkBAIC04NSwxMCAr
ODYsOCBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvCiAgICAgfQog
ICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29t
cG9zaXRvci4KICAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSAmJiBtX3RleHR1cmVVcGRh
dGVkKSB7Ci0gICAgICAgIC8vIHByZXBhcmVUZXh0dXJlIGNvcGllcyB0aGUgY29udGVudHMgb2Yg
dGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBpbnRvIHRoZSB0ZXh0dXJlCi0gICAgICAgIC8v
IHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCi0gICAgICAgIC8vCi0gICAgICAgIG1fY29udGV4dC0+
cHJlcGFyZVRleHR1cmUoKTsKKyAgICAgICAgLy8gcHVibGlzaFRvUGxhdGZvcm1MYXllciBwcmVw
YXJlcyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBmb3IgdXNl
IGJ5IHRoZSBjb21wb3NpdG9yLgorICAgICAgICBjb250ZXh0KCktPmdldERyYXdpbmdCdWZmZXIo
KS0+cHVibGlzaFRvUGxhdGZvcm1MYXllcigpOwogICAgICAgICBtX2NvbnRleHQtPm1hcmtMYXll
ckNvbXBvc2l0ZWQoKTsKICAgICAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgbV90
ZXh0dXJlVXBkYXRlZCA9IGZhbHNlOwpAQCAtMTMyLDcgKzEzMSw3IEBAIHZvaWQgV2ViR0xMYXll
ckNocm9taXVtOjpzZXRDb250ZXh0KGNvbnMKICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9IG1fY29udGV4dC0+cGxhdGZv
cm1UZXh0dXJlKCk7CisgICAgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9IG1fY29udGV4dC0+Z2V0
RHJhd2luZ0J1ZmZlcigpLT5wbGF0Zm9ybUNvbG9yQnVmZmVyKCk7CiAgICAgaWYgKHRleHR1cmVJ
ZCAhPSBtX3RleHR1cmVJZCB8fCBjb250ZXh0Q2hhbmdlZCkgewogICAgICAgICBtX3RleHR1cmVD
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlZCA9IHRydWU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
OCBAQAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDgsNyArNTAsNyBAQCBzdGF0aWMgaW50
IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzID0KICNlbmRpZgogc3RhdGljIGludCBzX2N1cnJl
bnRSZXNvdXJjZVVzZVBpeGVscyA9IDA7CiAKLVBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJh
d2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRT
aXplJiBzaXplKQorUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVh
dGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wg
c2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMg
PSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CiAgICAgYm9vbCBtdWx0aXNhbXBsZVN1cHBvcnRl
ZCA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikgJiYg
ZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikg
JiYgZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX09FU19yZ2I4X3JnYmE4Iik7CkBAIC02MCw3ICs2
Miw3IEBAIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjoKICAgICBib29s
IHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9P
RVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKICAgICBpZiAocGFja2VkRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKQogICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfcGFja2Vk
X2RlcHRoX3N0ZW5jaWwiKTsKLSAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZl
ciA9IGFkb3B0UmVmKG5ldyBEcmF3aW5nQnVmZmVyKGNvbnRleHQsIHNpemUsIG11bHRpc2FtcGxl
U3VwcG9ydGVkLCBwYWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpKTsKKyAgICBSZWZQdHI8RHJh
d2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZlciA9IGFkb3B0UmVmKG5ldyBEcmF3aW5nQnVmZmVyKGNv
bnRleHQsIHNpemUsIG11bHRpc2FtcGxlU3VwcG9ydGVkLCBwYWNrZWREZXB0aFN0ZW5jaWxTdXBw
b3J0ZWQsIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpKTsKICAgICByZXR1cm4gKGRyYXdpbmdCdWZm
ZXItPm1fY29udGV4dCkgPyBkcmF3aW5nQnVmZmVyLnJlbGVhc2UoKSA6IDA7CiB9CiAKQEAgLTc4
LDYgKzgwLDExIEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXIoKQogICAgICAgICBtX2NvbG9y
QnVmZmVyID0gMDsKICAgICB9CiAKKyAgICBpZiAobV9iYWNraW5nQ29sb3JCdWZmZXIpIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fYmFja2luZ0NvbG9yQnVmZmVyKTsKKyAg
ICAgICAgbV9iYWNraW5nQ29sb3JCdWZmZXIgPSAwOworICAgIH0KKwogICAgIGlmIChtX211bHRp
c2FtcGxlQ29sb3JCdWZmZXIpIHsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVSZW5kZXJidWZm
ZXIobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKICAgICAgICAgbV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyID0gMDsKQEAgLTI2OSwxMCArMjc2LDE2IEBAIGJvb2wgRHJhd2luZ0J1ZmZlcjo6cmVz
ZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAKICAgICAgICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZl
cik7Ci0gICAgICAgIAogICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgp
LCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgMCk7CiAKICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUy
RChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZm
ZXIsIDApOworCisgICAgICAgIC8vIHJlc2l6ZSB0aGUgYmFja2luZyBjb2xvciBidWZmZXIKKyAg
ICAgICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkgeworICAgICAgICAgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9iYWNraW5n
Q29sb3JCdWZmZXIpOworICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIDApOworICAgICAgICB9CisKICAgICAgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CiAKICAgICAgICAgaWYg
KCFtdWx0aXNhbXBsZSgpKQpAQCAtMjkzLDIzICszMDYsNTYgQEAgdm9pZCBEcmF3aW5nQnVmZmVy
Ojpjb21taXQobG9uZyB4LCBsb25nCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgCisKICAgICBpZiAod2lkdGggPCAwKQogICAgICAgICB3aWR0aCA9IG1f
c2l6ZS53aWR0aCgpOwogICAgIGlmIChoZWlnaHQgPCAwKQogICAgICAgICBoZWlnaHQgPSBtX3Np
emUuaGVpZ2h0KCk7Ci0gICAgICAgIAorCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICAKKwogICAgIGlmIChtX211bHRpc2FtcGxlRkJPKSB7CiAgICAgICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEV4dGVuc2lvbnMzRDo6UkVBRF9GUkFNRUJVRkZFUiwgbV9t
dWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEV4dGVu
c2lvbnMzRDo6RFJBV19GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+YmxpdEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklULCBHcmFw
aGljc0NvbnRleHQzRDo6TElORUFSKTsKKworICAgICAgICBpZiAobV9zY2lzc29yRW5hYmxlZCkK
KyAgICAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKTsKKworICAgICAgICAvLyBVc2UgTkVBUkVTVCwgYmVjYXVzZSB0aGVyZSBpcyBubyBz
Y2FsZSBwZXJmb3JtZWQgZHVyaW5nIHRoZSBibGl0LgorICAgICAgICBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+YmxpdEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklULCBHcmFwaGlj
c0NvbnRleHQzRDo6TkVBUkVTVCk7CisKKyAgICAgICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCisg
ICAgICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKTsKICAgICB9Ci0gICAgCisKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKIH0KIAorYm9vbCBEcmF3aW5nQnVm
ZmVyOjptdWx0aXNhbXBsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dCAmJiBtX2Nv
bnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVF
eHRlbnNpb25TdXBwb3J0ZWQ7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBEcmF3aW5nQnVm
ZmVyOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgcmV0dXJuIG1f
Y29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKK30KKwordm9pZCBE
cmF3aW5nQnVmZmVyOjpkaXNjYXJkUmVzb3VyY2VzKCkKK3sKKyAgICBtX2NvbG9yQnVmZmVyID0g
MDsKKyAgICBtX2JhY2tpbmdDb2xvckJ1ZmZlciA9IDA7CisgICAgbV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyID0gMDsKKworICAgIG1fZGVwdGhTdGVuY2lsQnVmZmVyID0gMDsKKyAgICBtX2RlcHRo
QnVmZmVyID0gMDsKKworICAgIG1fc3RlbmNpbEJ1ZmZlciA9IDA7CisKKyAgICBtX211bHRpc2Ft
cGxlRkJPID0gMDsKKyAgICBtX2ZibyA9IDA7Cit9CisKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Ymlu
ZCgpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJldmlzaW9uIDk2NjM1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlczNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CkBAIC00MywxMCArNDQsOCBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi1jbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW07Ci0jZW5kaWYKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOworY2xhc3MgSW1hZ2VEYXRhOwogCiAvLyBNYW5hZ2VzIGEgcmVuZGVyaW5nIHRh
cmdldCAoZnJhbWVidWZmZXIgKyBhdHRhY2htZW50KSBmb3IgYSBjYW52YXMuICBDYW4gcHVibGlz
aCBpdHMgcmVuZGVyaW5nCiAvLyByZXN1bHRzIHRvIGEgUGxhdGZvcm1MYXllciBmb3IgY29tcG9z
aXRpbmcuCkBAIC03NSwxMCArNzQsMjIgQEAgcHVibGljOgogCiAgICAgLy8gQ29waWVzIHRoZSBt
dWx0aXNhbXBsZSBjb2xvciBidWZmZXIgdG8gdGhlIG5vcm1hbCBjb2xvciBidWZmZXIgYW5kIGxl
YXZlcyBtX2ZibyBib3VuZAogICAgIHZvaWQgY29tbWl0KGxvbmcgeCA9IDAsIGxvbmcgeSA9IDAs
IGxvbmcgd2lkdGggPSAtMSwgbG9uZyBoZWlnaHQgPSAtMSk7Ci0gICAgCi0gICAgYm9vbCBtdWx0
aXNhbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmdldENvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQ7IH0KLSAgICAKKworICAgIC8vIGNvbW1pdCBzaG91bGQgY29weSB0aGUgZnVsbCBtdWx0aXNh
bXBsZSBidWZmZXIsIGFuZCBub3QgcmVzcGVjdCB0aGUKKyAgICAvLyBjdXJyZW50IHNjaXNzb3Ig
Ym91bmRzLiBUcmFjayB0aGUgc3RhdGUgb2YgdGhlIHNjaXNzb3IgdGVzdCBzbyB0aGF0IGl0Cisg
ICAgLy8gY2FuIGJlIGRpc2FibGVkIGR1cmluZyBjYWxscyB0byBjb21taXQuCisgICAgdm9pZCBz
ZXRTY2lzc29yRW5hYmxlZChib29sIHNjaXNzb3JFbmFibGVkKSB7IG1fc2Npc3NvckVuYWJsZWQg
PSBzY2lzc29yRW5hYmxlZDsgfQorCisgICAgYm9vbCBtdWx0aXNhbXBsZSgpIGNvbnN0OworCiAg
ICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3Q7CisgICAgUGxh
dGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcigpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisKKyAgICAvLyBJbW1l
ZGlhdGVseSByZWxlYXNlcyBvd25lcnNoaXAgb2YgYWxsIHJlc291cmNlcy4gQ2FsbCB1cG9uIGxv
c3Mgb2YgdGhlCisgICAgLy8gZ3JhcGhpY3MgY29udGV4dCB0byBwcmV2ZW50IGZyZWVpbmcgaW52
YWxpZCByZXNvdXJjZXMuCisgICAgdm9pZCBkaXNjYXJkUmVzb3VyY2VzKCk7CiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpOwpAQCAtODgsOSArOTksMTUgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9
CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gY3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOwotICAgIAotICAgIERyYXdpbmdC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJiwgYm9vbCBtdWx0aXNhbXBs
ZUV4dGVuc2lvblN1cHBvcnRlZCwgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBw
b3J0ZWQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZShHcmFw
aGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29sKTsKKworICAgIERyYXdpbmdCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJiwgYm9vbCBtdWx0aXNhbXBsZUV4
dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVu
Y2lsRXh0ZW5zaW9uU3VwcG9ydGVkLCBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpOworCisg
ICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IEludFNpemUmKTsKKworICAgIGJvb2wgbV9zZXBhcmF0
ZUJhY2tpbmdUZXh0dXJlOworICAgIGJvb2wgbV9zY2lzc29yRW5hYmxlZDsKIAogICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIEludFNpemUgbV9zaXplOwpAQCAt
OTgsNiArMTE1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uU3VwcG9ydGVkOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CiAgICAgUGxhdGZv
cm0zRE9iamVjdCBtX2NvbG9yQnVmZmVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9iYWNraW5n
Q29sb3JCdWZmZXI7CiAKICAgICAvLyBUaGlzIGlzIHVzZWQgd2hlbiB3ZSBoYXZlIE9FU19wYWNr
ZWRfZGVwdGhfc3RlbmNpbC4KICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVwdGhTdGVuY2lsQnVm
ZmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNz
Q29udGV4dDNER3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCShyZXZpc2lvbiA5NjYzNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREd0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6
OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwg
bV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUNv
bG9yQnVmZmVyKDApCisgICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKIHsKICAgICBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmFkZEFjdGl2ZUdyYXBoaWNzQ29udGV4dCh0aGlzKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9H
cmFwaGljc0NvbnRleHQzRE1hYy5tbQkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTExOSw2ICsxMTksNyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250
ZXh0M0QoR3JhCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxl
RGVwdGhTdGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkK
KyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQogICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcykpKQogewogICAgIFVOVVNFRF9QQVJBTShob3N0
V2luZG93KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dDNEUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCShyZXZpc2lvbiA5NjYzNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNiArMzA2LDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6
OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwg
bV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUNv
bG9yQnVmZmVyKDApCisgICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKICAgICAsIG1fcHJpdmF0ZShh
ZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKHRoaXMsIGhvc3RXaW5kb3cpKSkK
IHsKICNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDk2ODU1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAxMS0xMC0wNiAgSmVmZiBUaW1h
bnVzICA8dHdpekBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBQYXRjaCB0aGF0
IGRlbW9uc3RyYXRlcyB0aGUgY2hhbmdlcyByZXF1aXJlZCB0byBhbGxvdyBXZWJHTAorICAgICAg
ICB0byBzaGFyZSBpdHMgYmFja2luZyBzdG9yZSBkaXJlY3RseSB3aXRoIHRoZSBjb21wb3NpdG9y
LgorICAgICAgICBXZWJHTCByZW5kZXJpbmcgY29udGV4dHMgY3JlYXRlIGFuZCByZW5kZXIgdG8g
RkJPcyBtYW5hZ2VkIGJ5IGEKKyAgICAgICAgRHJhd2luZ0J1ZmZlciBpbnN0YW5jZS4gIEFsbCBQ
bGF0Zm9ybUxheWVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMKKyAgICAgICAgcGVyZm9ybWVkIGJ5
IHRoZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICBDaGFuZ2VzIGFyZSBvbmx5IHJlbGV2YW50IHRv
IENocm9taXVtIHBvcnRzLiAgRnVuY3Rpb25hbGl0eSBpcyAKKyAgICAgICAgdW5jaGFuZ2VkIGZv
ciBvdGhlciBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6IEFsbG93IHNwZWNpZmlj
YXRpb24gZm9yIGFuIG9wdGlvbmFsCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UgdG8g
dGhlIHBhaW50UmVuZGVyaW5nUmVzdWx0cyogcm91dGluZXMgdG8gb3ZlcnJpZGUKKyAgICAgICAg
cmVhZGluZyBmcm9tIEZCIDAuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHNyYy9HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaDoKKwogMjAxMS0xMC0wNiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQu
cmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjk2NzkxLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0
M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk2NjM1KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5o
IgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUg
IkhUTUxDYW52YXNFbGVtZW50LmgiCkBAIC0xNjMsNiArMTY0LDIwIEBAIFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUdyYXAKICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dCh3ZWJDb250ZXh0LnJl
bGVhc2UoKSwgYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlLCB0aHJlYWRVc2FnZSk7CiB9
CiAKK3ZvaWQgZ2V0RHJhd2luZ1BhcmFtZXRlcnMoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZl
ciwgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtM0RPYmplY3QqIGZyYW1lQnVmZmVySWQsIGlu
dCogd2lkdGgsIGludCogaGVpZ2h0KQoreworICAgIGlmIChkcmF3aW5nQnVmZmVyKSB7CisgICAg
ICAgICpmcmFtZUJ1ZmZlcklkID0gZHJhd2luZ0J1ZmZlci0+ZnJhbWVidWZmZXIoKTsKKyAgICAg
ICAgKndpZHRoID0gZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7CisgICAgICAgICpoZWln
aHQgPSBkcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgKmZyYW1lQnVmZmVySWQgPSAwOworICAgICAgICAqd2lkdGggPSBncmFwaGljc0NvbnRleHQz
RC0+d2lkdGgoKTsKKyAgICAgICAgKmhlaWdodCA9IGdyYXBoaWNzQ29udGV4dDNELT5oZWlnaHQo
KTsKKyAgICB9Cit9CisKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNz
Q29udGV4dEZvckFub3RoZXJUaHJlYWQoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0
cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHls
ZSByZW5kZXJTdHlsZSkKQEAgLTMwOCwxMCArMzIzLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpwYWludEZyYW0KICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0LCBEcmF3
aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogewogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZl
ciA9IGNvbnRleHQtPmNhbnZhcygpLT5idWZmZXIoKTsKLSAgICBwYWludEZyYW1lYnVmZmVyVG9D
YW52YXMoMCwgbV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgpLCAhbV9pbXBsLT5nZXRD
b250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwgaW1hZ2VCdWZmZXIpOworICAg
IFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXJJZDsKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsK
KyAgICBnZXREcmF3aW5nUGFyYW1ldGVycyhkcmF3aW5nQnVmZmVyLCBtX2ltcGwuZ2V0KCksICZm
cmFtZWJ1ZmZlcklkLCAmd2lkdGgsICZoZWlnaHQpOworICAgIHBhaW50RnJhbWVidWZmZXJUb0Nh
bnZhcyhmcmFtZWJ1ZmZlcklkLCB3aWR0aCwgaGVpZ2h0LCAhbV9pbXBsLT5nZXRDb250ZXh0QXR0
cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwgaW1hZ2VCdWZmZXIpOwogfQogCiBib29sIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCkBAIC0zMjMsMTYgKzM0MSwyMCBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShE
cmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogewogICAgIGlmIChtX2ltcGwtPmdldENvbnRl
eHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJ
bnRTaXplKG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSkpOworCisgICAgUGxhdGZv
cm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOworICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIGdl
dERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZmZXIsIG1faW1wbC5nZXQoKSwgJmZyYW1lYnVm
ZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURh
dGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKICAgICB1bnNp
Z25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7Ci0g
ICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogbV9pbXBsLT53aWR0aCgpICogbV9pbXBsLT5oZWln
aHQoKTsKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDQgKiB3aWR0aCAqIGhlaWdodDsKIAotICAg
IG1faW1wbC0+cmVhZEJhY2tGcmFtZWJ1ZmZlcihwaXhlbHMsIGJ1ZmZlclNpemUsIDAsIG1faW1w
bC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSk7CisgICAgbV9pbXBsLT5yZWFkQmFja0ZyYW1l
YnVmZmVyKHBpeGVscywgYnVmZmVyU2l6ZSwgZnJhbWVidWZmZXJJZCwgd2lkdGgsIGhlaWdodCk7
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ1ZmZlclNpemU7IGkgKz0gNCkKICAgICAg
ICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7CkBAIC0xMDAyLDcgKzEwMjQs
NyBAQCBydCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsCiAgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICBc
CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcywgSG9zdFdpbmRvdyosIGJvb2wpCitHcmFwaGljc0NvbnRleHQzRDo6
R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMsIEhvc3RXaW5k
b3cqLCBib29sKSA6IG1fZHJhd2luZ0J1ZmZlcigwKQogewogfQogCkBAIC0xMjEzLDggKzEyMzUs
MTYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKAogICAgIHJldHVy
biBtX3ByaXZhdGUtPmxheWVyQ29tcG9zaXRlZCgpOwogfQogCi1ERUxFR0FURV9UT19JTlRFUk5B
TF8xKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMX1IocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURh
dGEsIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMo
Y29udGV4dCwgZ2V0RHJhd2luZ0J1ZmZlcigpKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZURhdGE+
IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEo
Z2V0RHJhd2luZ0J1ZmZlcigpKTsKK30KKwogREVMRUdBVEVfVE9fSU5URVJOQUxfMVIocGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiwgYm9vbCkK
IAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NiArNDYsNyBAQCBjbGFzcyBXZWJWaWV3SW1wbDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgRXh0ZW5zaW9uczNEQ2hyb21pdW07CiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogY2xhc3MgV2ViR0xMYXllckNocm9taXVtOwpAQCAt
OTUsOSArOTYsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBsYXllckNvbXBvc2l0ZWQoKSBjb25zdDsK
ICAgICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKIAotICAgIHZvaWQgcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOworICAgIHZvaWQgcGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCosIERyYXdp
bmdCdWZmZXIqKTsKICAgICB2b2lkIHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhpbnQgZnJhbWVi
dWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBJbWFn
ZUJ1ZmZlciopOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0ltYWdlRGF0YSgpOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKik7CiAgICAgYm9vbCBwYWludHNJbnRv
Q2FudmFzQnVmZmVyKCkgY29uc3Q7CiAgICAgYm9vbCBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9D
YW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110566</attachid>
            <date>2011-10-11 13:37:14 -0700</date>
            <delta_ts>2011-10-11 14:07:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111011163507.patch</filename>
            <type>text/plain</type>
            <size>42286</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2ODU2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzIgQEAKKzIwMTEtMTAtMDYgIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUGF0Y2ggdGhh
dCBkZW1vbnN0cmF0ZXMgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuICBBbGwg
UGxhdGZvcm1MYXllciBsaWZldGltZSBtYW5hZ2VtZW50IGlzCisgICAgICAgIHBlcmZvcm1lZCBi
eSB0aGUgRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgQ2hhbmdlcyBhcmUgb25seSByZWxldmFudCB0
byBDaHJvbWl1bSBwb3J0cy4gIEZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgdW5jaGFuZ2VkIGZv
ciBvdGhlciBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOiBDb25zdHJ1Y3Qg
YSBEcmF3aW5nQnVmZmVyCisgICAgICAgIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYW5kIGZvcndh
cmQgYWxsIGZyYW1lYnVmZmVyIG1hbmFnZW1lbnQgY2FsbHMgdG8KKyAgICAgICAgaXQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRl
eHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xl
YXJJZkNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1l
YnVmZmVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZURyYXdpbmdCdWZmZXIpOiBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBpbnN0YW5j
ZXMgdHJhY2sgdGhlIERyYXdpbmdCdWZmZXIgaW5zdGFuY2VzIHRoYXQgdGhleSBjcmVhdGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzZXREcmF3aW5nQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXREcmF3aW5nQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVDb2xvclRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6
OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZl
cjo6cGxhdGZvcm1Db2xvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpmcmFtZWJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExh
eWVyQ2hyb21pdW06OnNldENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9EcmF3aW5nQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6bXVs
dGlzYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6
ZGlzY2FyZFJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdp
bmdCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnNldFNjaXNzb3JF
bmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0
M0RHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250
ZXh0M0RNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhp
Y3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBo
aWNzQ29udGV4dDNEKToKKwogMjAxMS0xMC0wNiAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIGxhc3QgZnJhbWUgb2YgYSBtdWx0aXBhcnQgcmVzcG9uc2UgaXMgbm90
IGRpc3BsYXllZApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2Myw3ICszNjMsMTIgQEAgUGFzc093blB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdl
YkdMUgogICAgIH0KIAogICAgIGF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gdHJ1ZTsKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyAgICBhdHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gdHJ1ZTsK
KyNlbHNlCiAgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNlOworI2VuZGlmCisK
IAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKIApAQCAtMzc5LDYgKzM4NCw3IEBA
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb24KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZh
cykKICAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCiAg
ICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQogICAgICwgbV9yZXN0b3JlVGltZXIodGhpcykK
ICAgICAsIG1fdmlkZW9DYWNoZSg0KQpAQCAtMzg2LDYgKzM5MiwxNSBAQCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRl
cykKIHsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQor
ICAgIC8vIENyZWF0ZSB0aGUgRHJhd2luZ0J1ZmZlcgorICAgIG1fZHJhd2luZ0J1ZmZlciA9IG1f
Y29udGV4dC0+Y3JlYXRlRHJhd2luZ0J1ZmZlcighbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2lu
Z0J1ZmZlciwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7
CisjZW5kaWYKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1
ZmZlci0+YmluZCgpOworCiAgICAgc2V0dXBGbGFncygpOwogICAgIGluaXRpYWxpemVOZXdDb250
ZXh0KCk7CiB9CkBAIC00NTEsNiArNDY2LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmluaXRpYWxpemVOZQogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAgICAgICBpbml0
VmVydGV4QXR0cmliMCgpOwogCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+
aGVpZ2h0KCkpKTsKKwogICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52YXMoKS0+d2lkdGgoKSwg
Y2FudmFzKCktPmhlaWdodCgpKTsKICAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZh
cygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwogCkBAIC00ODMsNyArNTAxLDkgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0QwogewogICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZykKICAgICAgICAgcmV0dXJuOworCiAgICAgbV9jb250ZXh0LT5tYXJr
Q29udGV4dENoYW5nZWQoKTsKKwogICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7CiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2Fu
dmFzKCktPnJlbmRlckJveCgpOwpAQCAtNTEzLDggKzUzMywxMiBAQCBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y2xlYXJJZkNvbXBvCiAgICAgLy8gRGV0ZXJtaW5lIGlmIGl0J3MgcG9zc2li
bGUgdG8gY29tYmluZSB0aGUgY2xlYXIgdGhlIHVzZXIgYXNrZWQgZm9yIGFuZCB0aGlzIGNsZWFy
LgogICAgIGJvb2wgY29tYmluZWRDbGVhciA9IG1hc2sgJiYgIW1fc2Npc3NvckVuYWJsZWQ7CiAK
LSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nKSB7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCAwKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpOwogICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNrICYgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQogICAgICAgICBtX2NvbnRleHQtPmNsZWFy
Q29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLApAQCAtNTc0LDE3ICs1
OTgsMjkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaQogICAgIH0g
ZWxzZQogICAgICAgICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CiAgICAgY2xl
YXJJZkNvbXBvc2l0ZWQoKTsKKwogICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9s
YXllckNsZWFyZWQpCiAgICAgICAgIHJldHVybjsKKwogICAgIGNhbnZhcygpLT5jbGVhckNvcGll
ZEltYWdlKCk7CiAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOworCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKICAgICBt
X2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKHRoaXMpOworICAgIGlmICht
X2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwogfQogCiBQ
YXNzUmVmUHRyPEltYWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpCiB7CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICBy
ZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7
CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAK
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29u
c3QKQEAgLTYxNiwxNiArNjUyLDI1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNo
YXBlKGludAogCiAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGly
dHksIHNpbmNlIHRoZSBuZXdseSBjcmVhdGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQg
b2ZmCiAgICAgLy8gY2xlYXIgKGFuZCB0aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8p
LgotICAgIG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KEludFNpemUod2lkdGgs
IGhlaWdodCkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBo
ZWlnaHQpOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lk
dGgoKSBjb25zdAogeworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBt
X2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpOworCiAgICAgcmV0dXJuIG1fY29udGV4dC0+
Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOwogfQogCiBpbnQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3QKIHsKKyAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVp
Z2h0KCk7CisKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLmhlaWdodCgpOwogfQogCkBAIC03NDUsNyArNzkwLDExIEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kRnJhbWVidWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2Zy
YW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJC
aW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBJbnN0ZWFkIG9mIGJpbmRp
bmcgZmIgMCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCisgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKICAgICBpZiAoYnVmZmVyKQogICAgICAg
ICBidWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwpAQCAtMTA4NCw5ICsxMTMzLDIxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhcklm
Q29tcG9zaXRlZCgpOwotICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQorICAgIGlmIChpc1Jlc291
cmNlU2FmZSgpKSB7CisgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAo
ZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21t
aXQoKTsKKwogICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGVsc2Ug
eworCisgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDb21t
aXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAg
ICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAgICAgR0MzRGludCBjbGlw
cGVkWCwgY2xpcHBlZFk7CiAgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRI
ZWlnaHQ7CiAgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRG
cmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRY
LCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgewpAQCAtMTA5OCw2
ICsxMTU5LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIpOworCisgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVk
ZWQKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKICAgICB9CiAgICAgLy8gRklY
TUU6IGlmIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgY29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93
IHNob3VsZCBiZSBleGVjdXRlZC4KICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUpOwpAQCAtMTI3NCw3ICsxMzM5LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVGcmFtZWIKICAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJp
bmRpbmcpIHsKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwogICAgICAgICAvLyBI
YXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGludGVybmFs
IGZiby4KLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIDApOwogICAgIH0KIH0KIApAQCAtMTM2MSw4ICsxNDI5LDExIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdDM0QKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkKKyAgICBpZiAoY2FwID09IEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKICAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9
IGZhbHNlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CiAg
ICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KQEAgLTE3MDMsOCArMTc3NCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZW5hYmxlKEdDM0RlCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRh
dGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09IEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKSB7CiAgICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOwor
ICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CiAgICAgbV9jb250
ZXh0LT5lbmFibGUoY2FwKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQpAQCAtMjg3Niw3ICsyOTUwLDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFk
UGl4ZWxzKEcKICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKICAgICB2b2lkKiBkYXRh
ID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOworCisgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIg
aWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICBpZiAoIW1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5j
b21taXQoKTsKKwogICAgIG1fY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCisgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlm
IG5lZWRlZAorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVy
KQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKwogI2lmIE9TKERBUldJTikKICAg
ICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVuIEdMIGRyaXZlciBidWcgb24gTWFj
IGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNo
b3VsZCBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KQEAgLTQxMTksMTQgKzQyMDMsMTQg
QEAgaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZQogewogICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0V2lkdGgoKTsKLSAgICByZXR1
cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7CisgICAg
cmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCkg
OiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsKIH0KIAog
aW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpCiB7
CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQo
KTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhl
aWdodCgpOworICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNp
emUoKS5oZWlnaHQoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5o
ZWlnaHQoKTsKIH0KIAogV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVGV4dHVyZUJpbmRpbmcoR0MzRGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3Vi
ZU1hcCkKQEAgLTQ4MjIsNiArNDkwNiwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
bWF5YmVSZXN0b3JlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICAvLyBDb25zdHJ1Y3Qg
YSBuZXcgZHJhd2luZyBidWZmZXIgd2l0aCB0aGUgbmV3IEdyYXBoaWNzQ29udGV4dDNELgorICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5kaXNjYXJk
UmVzb3VyY2VzKCk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRl
RHJhd2luZ0J1ZmZlcighbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciwgbV9kcmF3
aW5nQnVmZmVyLT5zaXplKCkpOworICAgIH0KKwogICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CiAg
ICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwogICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAogCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKQEAgLTM1NSw2ICszNTYsMTAgQEAgcHVibGljOgogCiAgICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiAKKyAgICAvLyBPcHRpb25hbCBzdHJ1Y3R1
cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGluc3RlYWQgb2YgZGlyZWN0bHkK
KyAgICAvLyB0byB0aGUgYmFjay1idWZmZXIgb2YgbV9jb250ZXh0LgorICAgIFJlZlB0cjxEcmF3
aW5nQnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7CisKICAgICBjbGFzcyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRSZXN0b3JlVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc3RvcmVUaW1lcihXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQpIDogbV9jb250ZXh0KGNvbnRleHQpIHsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmNwcAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDEy
IEBAIHVpbnQ4X3QgY29udmVydENvbG9yMTZCaWdUbzgodWludDE2X3QgdmEKIH0gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQogCiAKLVBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZURyYXdpbmdCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1Bhc3NSZWZQ
dHI8RHJhd2luZ0J1ZmZlcj4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURyYXdpbmdCdWZmZXIo
Ym9vbCBzZXBhcmF0ZUJhY2tpbmdCdWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAg
cmV0dXJuIERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBzaXplKTsKKyAgICBBU1NFUlQoIW1f
ZHJhd2luZ0J1ZmZlcik7CisgICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IGRyYXdpbmdCdWZmZXIo
RHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKHRoaXMsIHNpemUsIHNlcGFyYXRlQmFja2luZ0J1ZmZlcikp
OworICAgIG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdpbmdCdWZmZXIuZ2V0KCk7CisgICAgcmV0dXJu
IGRyYXdpbmdCdWZmZXI7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkRS
ZXNvdXJjZVNhZmUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHVucGFja0FsaWdu
bWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MDAsOCArNTAwLDEwIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZvaWQgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAKLSAgICBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZURyYXdpbmdCdWZm
ZXIoY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKCkpOwotICAgIAorICAgIFBhc3NSZWZQdHI8RHJh
d2luZ0J1ZmZlcj4gY3JlYXRlRHJhd2luZ0J1ZmZlcihib29sIHNlcGFyYXRlQmFja2luZ0J1ZmZl
ciwgY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKCkpOworICAgIHZvaWQgc2V0RHJhd2luZ0J1ZmZl
cihEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKSB7IG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdp
bmdCdWZmZXI7IH0KKyAgICBEcmF3aW5nQnVmZmVyKiBnZXREcmF3aW5nQnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9kcmF3aW5nQnVmZmVyOyB9CisKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRG
T1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQogICAgIC8vIFdp
dGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIg
RkJPLgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKQEAgLTk1MSw2ICs5NTMsOCBAQCBwdWJs
aWM6CiAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1fc3ludGhldGljRXJyb3JzOwogI2VuZGlm
CiAKKyAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7CisKICAgICBmcmllbmQgY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU+IG1fcHJpdmF0ZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsOCArMzIsMTQgQEAKIAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAorI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJDYW52
YXMyRExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNv
bG9yVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKQEAgLTQ4LDcgKzU0LDYgQEAgc3RhdGljIHVuc2lnbmVkIGdlbmVyYXRlQ29sb3JUZXh0dXJl
KEdyYQogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpOwogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwogICAgIGNvbnRleHQtPnRleEltYWdl
MkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAg
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBvZmZzY3JlZW5Db2xvclRleHR1cmUsIDApOwogCiAgICAgcmV0dXJu
IG9mZnNjcmVlbkNvbG9yVGV4dHVyZTsKIH0KQEAgLTU2LDI3ICs2MSwyNCBAQCBzdGF0aWMgdW5z
aWduZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUoR3JhCiBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRTaXplJiBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKLSAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgIDogbV9zZXBhcmF0ZUJh
Y2tpbmdUZXh0dXJlKHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgLCBtX3NjaXNzb3JFbmFi
bGVkKGZhbHNlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3NpemUoLTEsIC0x
KQogICAgICwgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZChtdWx0aXNhbXBsZUV4dGVu
c2lvblN1cHBvcnRlZCkKICAgICAsIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9y
dGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKICAgICAsIG1fZmJvKDAp
CiAgICAgLCBtX2NvbG9yQnVmZmVyKDApCisgICAgLCBtX2JhY2tpbmdDb2xvckJ1ZmZlcigwKQog
ICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fZGVwdGhCdWZmZXIoMCkKICAg
ICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiB7Ci0gICAgbV9mYm8gPSBjb250ZXh0LT5jcmVh
dGVGcmFtZWJ1ZmZlcigpOwotICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBtX2NvbG9yQnVmZmVyID0gZ2VuZXJh
dGVDb2xvclRleHR1cmUoY29udGV4dCwgc2l6ZSk7Ci0gICAgY3JlYXRlU2Vjb25kYXJ5QnVmZmVy
cygpOwotICAgIGlmICghcmVzZXQoc2l6ZSkpIHsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW5pdGlhbGl6ZShzaXplKTsKIH0KIAogRHJh
d2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQpAQCAtODcsMTUgKzg5LDQzIEBAIERyYXdpbmdC
dWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKICAgICBjbGVhcigpOwogfQogCit2b2lkIERyYXdpbmdC
dWZmZXI6OmluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX2ZibyA9IG1f
Y29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKworICAgIGlmIChtX3NlcGFyYXRlQmFja2lu
Z1RleHR1cmUpCisgICAgICAgIG1fYmFja2luZ0NvbG9yQnVmZmVyID0gZ2VuZXJhdGVDb2xvclRl
eHR1cmUobV9jb250ZXh0LmdldCgpLCBzaXplKTsKKworICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIG1fY29s
b3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShtX2NvbnRleHQuZ2V0KCksIHNpemUpOwor
ICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyLCAwKTsKKyAgICBjcmVhdGVTZWNv
bmRhcnlCdWZmZXJzKCk7CisgICAgaWYgKCFyZXNldChzaXplKSkgeworICAgICAgICBtX2NvbnRl
eHQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1M
YXllcigpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAorICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG11bHRpc2FtcGxlKCkpCiAg
ICAgICAgIGNvbW1pdCgpOwotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisK
KyAgICBpZiAobV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKSB7CisgICAgICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwor
ICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBtX2JhY2tpbmdDb2xvckJ1ZmZlcik7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sb3JG
b3JtYXQgPSBtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEgPyBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSA6IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7CisgICAgICAgIG1fY29u
dGV4dC0+Y29weVRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGNv
bG9yRm9ybWF0LCAwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCAwKTsKKyAg
ICB9CisKKyAgICBpZiAobXVsdGlzYW1wbGUoKSkKKyAgICAgICAgYmluZCgpOworCiAgICAgbV9j
b250ZXh0LT5mbHVzaCgpOwogfQogI2VuZGlmCkBAIC0xMDksNyArMTM5LDEyIEBAIFBsYXRmb3Jt
TGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGEKIAogUGxhdGZvcm0zRE9iamVjdCBEcmF3
aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9j
b2xvckJ1ZmZlcjsKKyAgICByZXR1cm4gbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlID8gbV9iYWNr
aW5nQ29sb3JCdWZmZXIgOiBtX2NvbG9yQnVmZmVyOworfQorCitQbGF0Zm9ybTNET2JqZWN0IERy
YXdpbmdCdWZmZXI6OmZyYW1lYnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mYm87CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gOTY2
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExh
eWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNs
dWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIK
ICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCkBAIC04NSwxMCAr
ODYsOCBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvCiAgICAgfQog
ICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29t
cG9zaXRvci4KICAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSAmJiBtX3RleHR1cmVVcGRh
dGVkKSB7Ci0gICAgICAgIC8vIHByZXBhcmVUZXh0dXJlIGNvcGllcyB0aGUgY29udGVudHMgb2Yg
dGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBpbnRvIHRoZSB0ZXh0dXJlCi0gICAgICAgIC8v
IHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCi0gICAgICAgIC8vCi0gICAgICAgIG1fY29udGV4dC0+
cHJlcGFyZVRleHR1cmUoKTsKKyAgICAgICAgLy8gcHVibGlzaFRvUGxhdGZvcm1MYXllciBwcmVw
YXJlcyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBmb3IgdXNl
IGJ5IHRoZSBjb21wb3NpdG9yLgorICAgICAgICBjb250ZXh0KCktPmdldERyYXdpbmdCdWZmZXIo
KS0+cHVibGlzaFRvUGxhdGZvcm1MYXllcigpOwogICAgICAgICBtX2NvbnRleHQtPm1hcmtMYXll
ckNvbXBvc2l0ZWQoKTsKICAgICAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgbV90
ZXh0dXJlVXBkYXRlZCA9IGZhbHNlOwpAQCAtMTMyLDcgKzEzMSw3IEBAIHZvaWQgV2ViR0xMYXll
ckNocm9taXVtOjpzZXRDb250ZXh0KGNvbnMKICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9IG1fY29udGV4dC0+cGxhdGZv
cm1UZXh0dXJlKCk7CisgICAgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9IG1fY29udGV4dC0+Z2V0
RHJhd2luZ0J1ZmZlcigpLT5wbGF0Zm9ybUNvbG9yQnVmZmVyKCk7CiAgICAgaWYgKHRleHR1cmVJ
ZCAhPSBtX3RleHR1cmVJZCB8fCBjb250ZXh0Q2hhbmdlZCkgewogICAgICAgICBtX3RleHR1cmVD
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlZCA9IHRydWU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
OCBAQAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDgsNyArNTAsNyBAQCBzdGF0aWMgaW50
IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzID0KICNlbmRpZgogc3RhdGljIGludCBzX2N1cnJl
bnRSZXNvdXJjZVVzZVBpeGVscyA9IDA7CiAKLVBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJh
d2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRT
aXplJiBzaXplKQorUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVh
dGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wg
c2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMg
PSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CiAgICAgYm9vbCBtdWx0aXNhbXBsZVN1cHBvcnRl
ZCA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikgJiYg
ZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikg
JiYgZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX09FU19yZ2I4X3JnYmE4Iik7CkBAIC02MCw3ICs2
Miw3IEBAIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjoKICAgICBib29s
IHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9P
RVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKICAgICBpZiAocGFja2VkRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKQogICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfcGFja2Vk
X2RlcHRoX3N0ZW5jaWwiKTsKLSAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZl
ciA9IGFkb3B0UmVmKG5ldyBEcmF3aW5nQnVmZmVyKGNvbnRleHQsIHNpemUsIG11bHRpc2FtcGxl
U3VwcG9ydGVkLCBwYWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpKTsKKyAgICBSZWZQdHI8RHJh
d2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZlciA9IGFkb3B0UmVmKG5ldyBEcmF3aW5nQnVmZmVyKGNv
bnRleHQsIHNpemUsIG11bHRpc2FtcGxlU3VwcG9ydGVkLCBwYWNrZWREZXB0aFN0ZW5jaWxTdXBw
b3J0ZWQsIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpKTsKICAgICByZXR1cm4gKGRyYXdpbmdCdWZm
ZXItPm1fY29udGV4dCkgPyBkcmF3aW5nQnVmZmVyLnJlbGVhc2UoKSA6IDA7CiB9CiAKQEAgLTc4
LDYgKzgwLDExIEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXIoKQogICAgICAgICBtX2NvbG9y
QnVmZmVyID0gMDsKICAgICB9CiAKKyAgICBpZiAobV9iYWNraW5nQ29sb3JCdWZmZXIpIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fYmFja2luZ0NvbG9yQnVmZmVyKTsKKyAg
ICAgICAgbV9iYWNraW5nQ29sb3JCdWZmZXIgPSAwOworICAgIH0KKwogICAgIGlmIChtX211bHRp
c2FtcGxlQ29sb3JCdWZmZXIpIHsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVSZW5kZXJidWZm
ZXIobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKICAgICAgICAgbV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyID0gMDsKQEAgLTI2OSwxMCArMjc2LDE2IEBAIGJvb2wgRHJhd2luZ0J1ZmZlcjo6cmVz
ZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAKICAgICAgICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZl
cik7Ci0gICAgICAgIAogICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgp
LCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgMCk7CiAKICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUy
RChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZm
ZXIsIDApOworCisgICAgICAgIC8vIHJlc2l6ZSB0aGUgYmFja2luZyBjb2xvciBidWZmZXIKKyAg
ICAgICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkgeworICAgICAgICAgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9iYWNraW5n
Q29sb3JCdWZmZXIpOworICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIDApOworICAgICAgICB9CisKICAgICAgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CiAKICAgICAgICAgaWYg
KCFtdWx0aXNhbXBsZSgpKQpAQCAtMjkzLDIzICszMDYsNTYgQEAgdm9pZCBEcmF3aW5nQnVmZmVy
Ojpjb21taXQobG9uZyB4LCBsb25nCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgCisKICAgICBpZiAod2lkdGggPCAwKQogICAgICAgICB3aWR0aCA9IG1f
c2l6ZS53aWR0aCgpOwogICAgIGlmIChoZWlnaHQgPCAwKQogICAgICAgICBoZWlnaHQgPSBtX3Np
emUuaGVpZ2h0KCk7Ci0gICAgICAgIAorCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICAKKwogICAgIGlmIChtX211bHRpc2FtcGxlRkJPKSB7CiAgICAgICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEV4dGVuc2lvbnMzRDo6UkVBRF9GUkFNRUJVRkZFUiwgbV9t
dWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEV4dGVu
c2lvbnMzRDo6RFJBV19GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+YmxpdEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklULCBHcmFw
aGljc0NvbnRleHQzRDo6TElORUFSKTsKKworICAgICAgICBpZiAobV9zY2lzc29yRW5hYmxlZCkK
KyAgICAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKTsKKworICAgICAgICAvLyBVc2UgTkVBUkVTVCwgYmVjYXVzZSB0aGVyZSBpcyBubyBz
Y2FsZSBwZXJmb3JtZWQgZHVyaW5nIHRoZSBibGl0LgorICAgICAgICBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+YmxpdEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklULCBHcmFwaGlj
c0NvbnRleHQzRDo6TkVBUkVTVCk7CisKKyAgICAgICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCisg
ICAgICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKTsKICAgICB9Ci0gICAgCisKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKIH0KIAorYm9vbCBEcmF3aW5nQnVm
ZmVyOjptdWx0aXNhbXBsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dCAmJiBtX2Nv
bnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVF
eHRlbnNpb25TdXBwb3J0ZWQ7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBEcmF3aW5nQnVm
ZmVyOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgcmV0dXJuIG1f
Y29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKK30KKwordm9pZCBE
cmF3aW5nQnVmZmVyOjpkaXNjYXJkUmVzb3VyY2VzKCkKK3sKKyAgICBtX2NvbG9yQnVmZmVyID0g
MDsKKyAgICBtX2JhY2tpbmdDb2xvckJ1ZmZlciA9IDA7CisgICAgbV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyID0gMDsKKworICAgIG1fZGVwdGhTdGVuY2lsQnVmZmVyID0gMDsKKyAgICBtX2RlcHRo
QnVmZmVyID0gMDsKKworICAgIG1fc3RlbmNpbEJ1ZmZlciA9IDA7CisKKyAgICBtX211bHRpc2Ft
cGxlRkJPID0gMDsKKyAgICBtX2ZibyA9IDA7Cit9CisKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Ymlu
ZCgpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJldmlzaW9uIDk2NjM1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlczNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CkBAIC00MywxMCArNDQsOCBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi1jbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW07Ci0jZW5kaWYKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOworY2xhc3MgSW1hZ2VEYXRhOwogCiAvLyBNYW5hZ2VzIGEgcmVuZGVyaW5nIHRh
cmdldCAoZnJhbWVidWZmZXIgKyBhdHRhY2htZW50KSBmb3IgYSBjYW52YXMuICBDYW4gcHVibGlz
aCBpdHMgcmVuZGVyaW5nCiAvLyByZXN1bHRzIHRvIGEgUGxhdGZvcm1MYXllciBmb3IgY29tcG9z
aXRpbmcuCkBAIC03NSwxMCArNzQsMjIgQEAgcHVibGljOgogCiAgICAgLy8gQ29waWVzIHRoZSBt
dWx0aXNhbXBsZSBjb2xvciBidWZmZXIgdG8gdGhlIG5vcm1hbCBjb2xvciBidWZmZXIgYW5kIGxl
YXZlcyBtX2ZibyBib3VuZAogICAgIHZvaWQgY29tbWl0KGxvbmcgeCA9IDAsIGxvbmcgeSA9IDAs
IGxvbmcgd2lkdGggPSAtMSwgbG9uZyBoZWlnaHQgPSAtMSk7Ci0gICAgCi0gICAgYm9vbCBtdWx0
aXNhbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmdldENvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQ7IH0KLSAgICAKKworICAgIC8vIGNvbW1pdCBzaG91bGQgY29weSB0aGUgZnVsbCBtdWx0aXNh
bXBsZSBidWZmZXIsIGFuZCBub3QgcmVzcGVjdCB0aGUKKyAgICAvLyBjdXJyZW50IHNjaXNzb3Ig
Ym91bmRzLiBUcmFjayB0aGUgc3RhdGUgb2YgdGhlIHNjaXNzb3IgdGVzdCBzbyB0aGF0IGl0Cisg
ICAgLy8gY2FuIGJlIGRpc2FibGVkIGR1cmluZyBjYWxscyB0byBjb21taXQuCisgICAgdm9pZCBz
ZXRTY2lzc29yRW5hYmxlZChib29sIHNjaXNzb3JFbmFibGVkKSB7IG1fc2Npc3NvckVuYWJsZWQg
PSBzY2lzc29yRW5hYmxlZDsgfQorCisgICAgYm9vbCBtdWx0aXNhbXBsZSgpIGNvbnN0OworCiAg
ICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3Q7CisgICAgUGxh
dGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcigpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisKKyAgICAvLyBJbW1l
ZGlhdGVseSByZWxlYXNlcyBvd25lcnNoaXAgb2YgYWxsIHJlc291cmNlcy4gQ2FsbCB1cG9uIGxv
c3Mgb2YgdGhlCisgICAgLy8gZ3JhcGhpY3MgY29udGV4dCB0byBwcmV2ZW50IGZyZWVpbmcgaW52
YWxpZCByZXNvdXJjZXMuCisgICAgdm9pZCBkaXNjYXJkUmVzb3VyY2VzKCk7CiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpOwpAQCAtODgsOSArOTksMTUgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9
CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gY3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOwotICAgIAotICAgIERyYXdpbmdC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJiwgYm9vbCBtdWx0aXNhbXBs
ZUV4dGVuc2lvblN1cHBvcnRlZCwgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBw
b3J0ZWQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZShHcmFw
aGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29sKTsKKworICAgIERyYXdpbmdCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJiwgYm9vbCBtdWx0aXNhbXBsZUV4
dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVu
Y2lsRXh0ZW5zaW9uU3VwcG9ydGVkLCBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpOworCisg
ICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IEludFNpemUmKTsKKworICAgIGJvb2wgbV9zZXBhcmF0
ZUJhY2tpbmdUZXh0dXJlOworICAgIGJvb2wgbV9zY2lzc29yRW5hYmxlZDsKIAogICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIEludFNpemUgbV9zaXplOwpAQCAt
OTgsNiArMTE1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uU3VwcG9ydGVkOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CiAgICAgUGxhdGZv
cm0zRE9iamVjdCBtX2NvbG9yQnVmZmVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9iYWNraW5n
Q29sb3JCdWZmZXI7CiAKICAgICAvLyBUaGlzIGlzIHVzZWQgd2hlbiB3ZSBoYXZlIE9FU19wYWNr
ZWRfZGVwdGhfc3RlbmNpbC4KICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVwdGhTdGVuY2lsQnVm
ZmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3
aW5nQnVmZmVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQkocmV2aXNpb24gOTY2MzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2ls
RXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9y
dGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlQmFja2luZ1Rl
eHR1cmUpCisgICAgOiAgbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKHNlcGFyYXRlQmFja2luZ1Rl
eHR1cmUpCisgICAgLCBtX3NjaXNzb3JFbmFibGVkKGZhbHNlKW1fY29udGV4dChjb250ZXh0KQog
ICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3Rl
bmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0
ZWQpCkBAIC01Miw2ICs1NCw5IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhp
Y3NDb24KICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcigwKQogeworICAgIC8vIFN1cHBvcnQgZm9yIGEgc2VwYXJhdGUgYmFja2luZyB0ZXh0
dXJlIGhhcyBvbmx5IGJlZW4gZW5hYmxlZCBmb3IKKyAgICAvLyB0aGUgY2hyb21pdW0gcG9ydC4K
KyAgICBBU1NFUlQoIW1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKICAgICBBU1NFUlQobV9mYm8p
OwogICAgIGlmICghbV9mYm8pIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVm
ZmVyUXQuY3BwCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4
ICszNCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRTaXplJiBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKLSAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgIDogbV9zZXBhcmF0ZUJh
Y2tpbmdUZXh0dXJlKHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgLCBtX3NjaXNzb3JFbmFi
bGVkKGZhbHNlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3NpemUoLTEsIC0x
KQogICAgICwgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZChtdWx0aXNhbXBsZUV4dGVu
c2lvblN1cHBvcnRlZCkKICAgICAsIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9y
dGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKQEAgLTQ3LDYgKzUwLDkg
QEAgRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbgogICAgICwgbV9tdWx0
aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiB7CisgICAg
Ly8gU3VwcG9ydCBmb3IgYSBzZXBhcmF0ZSBiYWNraW5nIHRleHR1cmUgaGFzIG9ubHkgYmVlbiBl
bmFibGVkIGZvcgorICAgIC8vIHRoZSBjaHJvbWl1bSBwb3J0LgorICAgIEFTU0VSVCghbV9zZXBh
cmF0ZUJhY2tpbmdUZXh0dXJlKQogICAgIEFTU0VSVChtX2Zibyk7CiAgICAgaWYgKCFtX2Zibykg
ewogICAgICAgICBjbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCShyZXZp
c2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFw
aGljc0NvbnRleHQzREd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogICAgICwgbV9tdWx0aXNhbXBs
ZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQogICAgICwg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCisgICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKIHsK
ICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmFkZEFjdGl2ZUdyYXBoaWNzQ29udGV4dCh0
aGlzKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBo
aWNzQ29udGV4dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQkocmV2aXNpb24gOTY2MzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksNyBAQCBHcmFwaGljc0NvbnRleHQz
RDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAg
LCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxl
Q29sb3JCdWZmZXIoMCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQogICAgICwgbV9wcml2YXRl
KGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcykpKQogewogICAgIFVO
VVNFRF9QQVJBTShob3N0V2luZG93KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCShyZXZp
c2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dDNEUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNiArMzA2LDcgQEAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogICAgICwgbV9tdWx0aXNhbXBs
ZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQogICAgICwg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCisgICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKICAg
ICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKHRoaXMs
IGhvc3RXaW5kb3cpKSkKIHsKICNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2ODU1KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAxMS0x
MC0wNiAgSmVmZiBUaW1hbnVzICA8dHdpekBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9t
aXVtXSBQYXRjaCB0aGF0IGRlbW9uc3RyYXRlcyB0aGUgY2hhbmdlcyByZXF1aXJlZCB0byBhbGxv
dyBXZWJHTAorICAgICAgICB0byBzaGFyZSBpdHMgYmFja2luZyBzdG9yZSBkaXJlY3RseSB3aXRo
IHRoZSBjb21wb3NpdG9yLgorICAgICAgICBXZWJHTCByZW5kZXJpbmcgY29udGV4dHMgY3JlYXRl
IGFuZCByZW5kZXIgdG8gRkJPcyBtYW5hZ2VkIGJ5IGEKKyAgICAgICAgRHJhd2luZ0J1ZmZlciBp
bnN0YW5jZS4gIEFsbCBQbGF0Zm9ybUxheWVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMKKyAgICAg
ICAgcGVyZm9ybWVkIGJ5IHRoZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICBDaGFuZ2VzIGFyZSBv
bmx5IHJlbGV2YW50IHRvIENocm9taXVtIHBvcnRzLiAgRnVuY3Rpb25hbGl0eSBpcyAKKyAgICAg
ICAgdW5jaGFuZ2VkIGZvciBvdGhlciBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6
IEFsbG93IHNwZWNpZmljYXRpb24gZm9yIGFuIG9wdGlvbmFsCisgICAgICAgIERyYXdpbmdCdWZm
ZXIgaW5zdGFuY2UgdG8gdGhlIHBhaW50UmVuZGVyaW5nUmVzdWx0cyogcm91dGluZXMgdG8gb3Zl
cnJpZGUKKyAgICAgICAgcmVhZGluZyBmcm9tIEZCIDAuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAg
ICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaDoKKwogMjAxMS0xMC0wNiAgU2hlcmlm
ZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjk2NzkxLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk2
NjM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJv
bWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hy
b21lQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJF
eHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCkBAIC0xNjMsNiArMTY0LDIwIEBA
IFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUdyYXAKICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4
dCh3ZWJDb250ZXh0LnJlbGVhc2UoKSwgYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlLCB0
aHJlYWRVc2FnZSk7CiB9CiAKK3ZvaWQgZ2V0RHJhd2luZ1BhcmFtZXRlcnMoRHJhd2luZ0J1ZmZl
ciogZHJhd2luZ0J1ZmZlciwgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3ND
b250ZXh0M0QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtM0RPYmplY3QqIGZy
YW1lQnVmZmVySWQsIGludCogd2lkdGgsIGludCogaGVpZ2h0KQoreworICAgIGlmIChkcmF3aW5n
QnVmZmVyKSB7CisgICAgICAgICpmcmFtZUJ1ZmZlcklkID0gZHJhd2luZ0J1ZmZlci0+ZnJhbWVi
dWZmZXIoKTsKKyAgICAgICAgKndpZHRoID0gZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7
CisgICAgICAgICpoZWlnaHQgPSBkcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgKmZyYW1lQnVmZmVySWQgPSAwOworICAgICAgICAqd2lkdGggPSBn
cmFwaGljc0NvbnRleHQzRC0+d2lkdGgoKTsKKyAgICAgICAgKmhlaWdodCA9IGdyYXBoaWNzQ29u
dGV4dDNELT5oZWlnaHQoKTsKKyAgICB9Cit9CisKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQog
CiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZvckFub3RoZXJUaHJlYWQoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4
dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKQEAgLTMwOCwxMCArMzIzLDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludEZyYW0KICNlbmRpZgogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogewogICAgIEltYWdlQnVm
ZmVyKiBpbWFnZUJ1ZmZlciA9IGNvbnRleHQtPmNhbnZhcygpLT5idWZmZXIoKTsKLSAgICBwYWlu
dEZyYW1lYnVmZmVyVG9DYW52YXMoMCwgbV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgp
LCAhbV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwgaW1h
Z2VCdWZmZXIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXJJZDsKKyAgICBpbnQg
d2lkdGgsIGhlaWdodDsKKyAgICBnZXREcmF3aW5nUGFyYW1ldGVycyhkcmF3aW5nQnVmZmVyLCBt
X2ltcGwuZ2V0KCksICZmcmFtZWJ1ZmZlcklkLCAmd2lkdGgsICZoZWlnaHQpOworICAgIHBhaW50
RnJhbWVidWZmZXJUb0NhbnZhcyhmcmFtZWJ1ZmZlcklkLCB3aWR0aCwgaGVpZ2h0LCAhbV9pbXBs
LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwgaW1hZ2VCdWZmZXIp
OwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wb3NpdGVkUmVz
dWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCkBAIC0zMjMsMTYg
KzM0MSwyMCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitQYXNzUmVmUHRy
PEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogewogICAgIGlmICht
X2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFn
ZURhdGE6OmNyZWF0ZShJbnRTaXplKG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSkp
OworCisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOworICAgIGludCB3aWR0aCwg
aGVpZ2h0OworICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZmZXIsIG1faW1wbC5n
ZXQoKSwgJmZyYW1lYnVmZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgICBSZWZQdHI8SW1h
Z2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKHdpZHRoLCBoZWln
aHQpKTsKICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0
YSgpLT5kYXRhKCk7Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogbV9pbXBsLT53aWR0aCgp
ICogbV9pbXBsLT5oZWlnaHQoKTsKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDQgKiB3aWR0aCAq
IGhlaWdodDsKIAotICAgIG1faW1wbC0+cmVhZEJhY2tGcmFtZWJ1ZmZlcihwaXhlbHMsIGJ1ZmZl
clNpemUsIDAsIG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSk7CisgICAgbV9pbXBs
LT5yZWFkQmFja0ZyYW1lYnVmZmVyKHBpeGVscywgYnVmZmVyU2l6ZSwgZnJhbWVidWZmZXJJZCwg
d2lkdGgsIGhlaWdodCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ1ZmZlclNpemU7
IGkgKz0gNCkKICAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7CkBA
IC0xMDAyLDcgKzEwMjQsNyBAQCBydCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIg
YTIsCiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBh
NywgYTgsIGE5KTsgICBcCiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcywgSG9zdFdpbmRvdyosIGJvb2wpCitHcmFw
aGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMsIEhvc3RXaW5kb3cqLCBib29sKSA6IG1fZHJhd2luZ0J1ZmZlcigwKQogewogfQogCkBA
IC0xMjEzLDggKzEyMzUsMTYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3Np
dGVkKAogICAgIHJldHVybiBtX3ByaXZhdGUtPmxheWVyQ29tcG9zaXRlZCgpOwogfQogCi1ERUxF
R0FURV9UT19JTlRFUk5BTF8xKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzLCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMX1IocGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEsIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoY29udGV4dCwgZ2V0RHJhd2luZ0J1ZmZlcigpKTsKK30KKworUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YSgpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoZ2V0RHJhd2luZ0J1ZmZlcigpKTsKK30KKwogREVMRUdBVEVfVE9fSU5U
RVJOQUxfMVIocGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzLCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0KiwgYm9vbCkKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZh
c0J1ZmZlcigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBXZWJWaWV3SW1wbDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgRXh0ZW5zaW9uczNEQ2hy
b21pdW07CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogY2xhc3MgV2ViR0xMYXll
ckNocm9taXVtOwpAQCAtOTUsOSArOTYsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBsYXllckNvbXBv
c2l0ZWQoKSBjb25zdDsKICAgICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKIAotICAgIHZv
aWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCop
OworICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCosIERyYXdpbmdCdWZmZXIqKTsKICAgICB2b2lkIHBhaW50RnJhbWVidWZmZXJUb0Nh
bnZhcyhpbnQgZnJhbWVidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBJbWFnZUJ1ZmZlciopOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKik7CiAgICAg
Ym9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CiAgICAgYm9vbCBwYWludENvbXBv
c2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110572</attachid>
            <date>2011-10-11 14:07:28 -0700</date>
            <delta_ts>2011-10-12 10:47:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111011170520.patch</filename>
            <type>text/plain</type>
            <size>42288</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2ODU2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzIgQEAKKzIwMTEtMTAtMDYgIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUGF0Y2ggdGhh
dCBkZW1vbnN0cmF0ZXMgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuICBBbGwg
UGxhdGZvcm1MYXllciBsaWZldGltZSBtYW5hZ2VtZW50IGlzCisgICAgICAgIHBlcmZvcm1lZCBi
eSB0aGUgRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgQ2hhbmdlcyBhcmUgb25seSByZWxldmFudCB0
byBDaHJvbWl1bSBwb3J0cy4gIEZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgdW5jaGFuZ2VkIGZv
ciBvdGhlciBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOiBDb25zdHJ1Y3Qg
YSBEcmF3aW5nQnVmZmVyCisgICAgICAgIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYW5kIGZvcndh
cmQgYWxsIGZyYW1lYnVmZmVyIG1hbmFnZW1lbnQgY2FsbHMgdG8KKyAgICAgICAgaXQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRl
eHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xl
YXJJZkNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1l
YnVmZmVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZURyYXdpbmdCdWZmZXIpOiBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBpbnN0YW5j
ZXMgdHJhY2sgdGhlIERyYXdpbmdCdWZmZXIgaW5zdGFuY2VzIHRoYXQgdGhleSBjcmVhdGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzZXREcmF3aW5nQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXREcmF3aW5nQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVDb2xvclRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6
OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZl
cjo6cGxhdGZvcm1Db2xvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpmcmFtZWJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExh
eWVyQ2hyb21pdW06OnNldENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9EcmF3aW5nQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6bXVs
dGlzYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6
ZGlzY2FyZFJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdp
bmdCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnNldFNjaXNzb3JF
bmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0
M0RHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250
ZXh0M0RNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhp
Y3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBo
aWNzQ29udGV4dDNEKToKKwogMjAxMS0xMC0wNiAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIGxhc3QgZnJhbWUgb2YgYSBtdWx0aXBhcnQgcmVzcG9uc2UgaXMgbm90
IGRpc3BsYXllZApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2Myw3ICszNjMsMTIgQEAgUGFzc093blB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdl
YkdMUgogICAgIH0KIAogICAgIGF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gdHJ1ZTsKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyAgICBhdHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gdHJ1ZTsK
KyNlbHNlCiAgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNlOworI2VuZGlmCisK
IAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKIApAQCAtMzc5LDYgKzM4NCw3IEBA
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb24KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZh
cykKICAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCiAg
ICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQogICAgICwgbV9yZXN0b3JlVGltZXIodGhpcykK
ICAgICAsIG1fdmlkZW9DYWNoZSg0KQpAQCAtMzg2LDYgKzM5MiwxNSBAQCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRl
cykKIHsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQor
ICAgIC8vIENyZWF0ZSB0aGUgRHJhd2luZ0J1ZmZlcgorICAgIG1fZHJhd2luZ0J1ZmZlciA9IG1f
Y29udGV4dC0+Y3JlYXRlRHJhd2luZ0J1ZmZlcighbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2lu
Z0J1ZmZlciwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7
CisjZW5kaWYKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1
ZmZlci0+YmluZCgpOworCiAgICAgc2V0dXBGbGFncygpOwogICAgIGluaXRpYWxpemVOZXdDb250
ZXh0KCk7CiB9CkBAIC00NTEsNiArNDY2LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmluaXRpYWxpemVOZQogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAgICAgICBpbml0
VmVydGV4QXR0cmliMCgpOwogCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+
aGVpZ2h0KCkpKTsKKwogICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52YXMoKS0+d2lkdGgoKSwg
Y2FudmFzKCktPmhlaWdodCgpKTsKICAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZh
cygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwogCkBAIC00ODMsNyArNTAxLDkgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0QwogewogICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZykKICAgICAgICAgcmV0dXJuOworCiAgICAgbV9jb250ZXh0LT5tYXJr
Q29udGV4dENoYW5nZWQoKTsKKwogICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7CiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2Fu
dmFzKCktPnJlbmRlckJveCgpOwpAQCAtNTEzLDggKzUzMywxMiBAQCBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y2xlYXJJZkNvbXBvCiAgICAgLy8gRGV0ZXJtaW5lIGlmIGl0J3MgcG9zc2li
bGUgdG8gY29tYmluZSB0aGUgY2xlYXIgdGhlIHVzZXIgYXNrZWQgZm9yIGFuZCB0aGlzIGNsZWFy
LgogICAgIGJvb2wgY29tYmluZWRDbGVhciA9IG1hc2sgJiYgIW1fc2Npc3NvckVuYWJsZWQ7CiAK
LSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nKSB7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCAwKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpOwogICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNrICYgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQogICAgICAgICBtX2NvbnRleHQtPmNsZWFy
Q29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLApAQCAtNTc0LDE3ICs1
OTgsMjkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaQogICAgIH0g
ZWxzZQogICAgICAgICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CiAgICAgY2xl
YXJJZkNvbXBvc2l0ZWQoKTsKKwogICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9s
YXllckNsZWFyZWQpCiAgICAgICAgIHJldHVybjsKKwogICAgIGNhbnZhcygpLT5jbGVhckNvcGll
ZEltYWdlKCk7CiAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOworCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKICAgICBt
X2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKHRoaXMpOworICAgIGlmICht
X2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwogfQogCiBQ
YXNzUmVmUHRyPEltYWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpCiB7CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICBy
ZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7
CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAK
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29u
c3QKQEAgLTYxNiwxNiArNjUyLDI1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNo
YXBlKGludAogCiAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGly
dHksIHNpbmNlIHRoZSBuZXdseSBjcmVhdGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQg
b2ZmCiAgICAgLy8gY2xlYXIgKGFuZCB0aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8p
LgotICAgIG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KEludFNpemUod2lkdGgs
IGhlaWdodCkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBo
ZWlnaHQpOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lk
dGgoKSBjb25zdAogeworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBt
X2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpOworCiAgICAgcmV0dXJuIG1fY29udGV4dC0+
Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOwogfQogCiBpbnQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3QKIHsKKyAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVp
Z2h0KCk7CisKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLmhlaWdodCgpOwogfQogCkBAIC03NDUsNyArNzkwLDExIEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kRnJhbWVidWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2Zy
YW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJC
aW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBJbnN0ZWFkIG9mIGJpbmRp
bmcgZmIgMCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCisgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKICAgICBpZiAoYnVmZmVyKQogICAgICAg
ICBidWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwpAQCAtMTA4NCw5ICsxMTMzLDIxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhcklm
Q29tcG9zaXRlZCgpOwotICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQorICAgIGlmIChpc1Jlc291
cmNlU2FmZSgpKSB7CisgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAo
ZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21t
aXQoKTsKKwogICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGVsc2Ug
eworCisgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDb21t
aXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAg
ICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAgICAgR0MzRGludCBjbGlw
cGVkWCwgY2xpcHBlZFk7CiAgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRI
ZWlnaHQ7CiAgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRG
cmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRY
LCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgewpAQCAtMTA5OCw2
ICsxMTU5LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIpOworCisgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVk
ZWQKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKICAgICB9CiAgICAgLy8gRklY
TUU6IGlmIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgY29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93
IHNob3VsZCBiZSBleGVjdXRlZC4KICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUpOwpAQCAtMTI3NCw3ICsxMzM5LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVGcmFtZWIKICAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJp
bmRpbmcpIHsKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwogICAgICAgICAvLyBI
YXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGludGVybmFs
IGZiby4KLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIDApOwogICAgIH0KIH0KIApAQCAtMTM2MSw4ICsxNDI5LDExIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdDM0QKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkKKyAgICBpZiAoY2FwID09IEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKICAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9
IGZhbHNlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CiAg
ICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KQEAgLTE3MDMsOCArMTc3NCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZW5hYmxlKEdDM0RlCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRh
dGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09IEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKSB7CiAgICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOwor
ICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CiAgICAgbV9jb250
ZXh0LT5lbmFibGUoY2FwKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQpAQCAtMjg3Niw3ICsyOTUwLDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFk
UGl4ZWxzKEcKICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKICAgICB2b2lkKiBkYXRh
ID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOworCisgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIg
aWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICBpZiAoIW1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5j
b21taXQoKTsKKwogICAgIG1fY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCisgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlm
IG5lZWRlZAorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVy
KQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKwogI2lmIE9TKERBUldJTikKICAg
ICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVuIEdMIGRyaXZlciBidWcgb24gTWFj
IGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNo
b3VsZCBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KQEAgLTQxMTksMTQgKzQyMDMsMTQg
QEAgaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZQogewogICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0V2lkdGgoKTsKLSAgICByZXR1
cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7CisgICAg
cmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCkg
OiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsKIH0KIAog
aW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpCiB7
CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQo
KTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhl
aWdodCgpOworICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNp
emUoKS5oZWlnaHQoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5o
ZWlnaHQoKTsKIH0KIAogV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVGV4dHVyZUJpbmRpbmcoR0MzRGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3Vi
ZU1hcCkKQEAgLTQ4MjIsNiArNDkwNiwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
bWF5YmVSZXN0b3JlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICAvLyBDb25zdHJ1Y3Qg
YSBuZXcgZHJhd2luZyBidWZmZXIgd2l0aCB0aGUgbmV3IEdyYXBoaWNzQ29udGV4dDNELgorICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5kaXNjYXJk
UmVzb3VyY2VzKCk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRl
RHJhd2luZ0J1ZmZlcighbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciwgbV9kcmF3
aW5nQnVmZmVyLT5zaXplKCkpOworICAgIH0KKwogICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CiAg
ICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwogICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAogCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKQEAgLTM1NSw2ICszNTYsMTAgQEAgcHVibGljOgogCiAgICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiAKKyAgICAvLyBPcHRpb25hbCBzdHJ1Y3R1
cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGluc3RlYWQgb2YgZGlyZWN0bHkK
KyAgICAvLyB0byB0aGUgYmFjay1idWZmZXIgb2YgbV9jb250ZXh0LgorICAgIFJlZlB0cjxEcmF3
aW5nQnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7CisKICAgICBjbGFzcyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRSZXN0b3JlVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc3RvcmVUaW1lcihXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQpIDogbV9jb250ZXh0KGNvbnRleHQpIHsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmNwcAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDEy
IEBAIHVpbnQ4X3QgY29udmVydENvbG9yMTZCaWdUbzgodWludDE2X3QgdmEKIH0gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQogCiAKLVBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZURyYXdpbmdCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1Bhc3NSZWZQ
dHI8RHJhd2luZ0J1ZmZlcj4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURyYXdpbmdCdWZmZXIo
Ym9vbCBzZXBhcmF0ZUJhY2tpbmdCdWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAg
cmV0dXJuIERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBzaXplKTsKKyAgICBBU1NFUlQoIW1f
ZHJhd2luZ0J1ZmZlcik7CisgICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IGRyYXdpbmdCdWZmZXIo
RHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKHRoaXMsIHNpemUsIHNlcGFyYXRlQmFja2luZ0J1ZmZlcikp
OworICAgIG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdpbmdCdWZmZXIuZ2V0KCk7CisgICAgcmV0dXJu
IGRyYXdpbmdCdWZmZXI7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkRS
ZXNvdXJjZVNhZmUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHVucGFja0FsaWdu
bWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MDAsOCArNTAwLDEwIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZvaWQgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAKLSAgICBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZURyYXdpbmdCdWZm
ZXIoY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKCkpOwotICAgIAorICAgIFBhc3NSZWZQdHI8RHJh
d2luZ0J1ZmZlcj4gY3JlYXRlRHJhd2luZ0J1ZmZlcihib29sIHNlcGFyYXRlQmFja2luZ0J1ZmZl
ciwgY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKCkpOworICAgIHZvaWQgc2V0RHJhd2luZ0J1ZmZl
cihEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKSB7IG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdp
bmdCdWZmZXI7IH0KKyAgICBEcmF3aW5nQnVmZmVyKiBnZXREcmF3aW5nQnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9kcmF3aW5nQnVmZmVyOyB9CisKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRG
T1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQogICAgIC8vIFdp
dGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIg
RkJPLgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKQEAgLTk1MSw2ICs5NTMsOCBAQCBwdWJs
aWM6CiAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1fc3ludGhldGljRXJyb3JzOwogI2VuZGlm
CiAKKyAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7CisKICAgICBmcmllbmQgY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU+IG1fcHJpdmF0ZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsOCArMzIsMTQgQEAKIAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAorI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJDYW52
YXMyRExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNv
bG9yVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKQEAgLTQ4LDcgKzU0LDYgQEAgc3RhdGljIHVuc2lnbmVkIGdlbmVyYXRlQ29sb3JUZXh0dXJl
KEdyYQogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpOwogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwogICAgIGNvbnRleHQtPnRleEltYWdl
MkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAg
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBvZmZzY3JlZW5Db2xvclRleHR1cmUsIDApOwogCiAgICAgcmV0dXJu
IG9mZnNjcmVlbkNvbG9yVGV4dHVyZTsKIH0KQEAgLTU2LDI3ICs2MSwyNCBAQCBzdGF0aWMgdW5z
aWduZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUoR3JhCiBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRTaXplJiBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKLSAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgIDogbV9zZXBhcmF0ZUJh
Y2tpbmdUZXh0dXJlKHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgLCBtX3NjaXNzb3JFbmFi
bGVkKGZhbHNlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3NpemUoLTEsIC0x
KQogICAgICwgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZChtdWx0aXNhbXBsZUV4dGVu
c2lvblN1cHBvcnRlZCkKICAgICAsIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9y
dGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKICAgICAsIG1fZmJvKDAp
CiAgICAgLCBtX2NvbG9yQnVmZmVyKDApCisgICAgLCBtX2JhY2tpbmdDb2xvckJ1ZmZlcigwKQog
ICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fZGVwdGhCdWZmZXIoMCkKICAg
ICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiB7Ci0gICAgbV9mYm8gPSBjb250ZXh0LT5jcmVh
dGVGcmFtZWJ1ZmZlcigpOwotICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBtX2NvbG9yQnVmZmVyID0gZ2VuZXJh
dGVDb2xvclRleHR1cmUoY29udGV4dCwgc2l6ZSk7Ci0gICAgY3JlYXRlU2Vjb25kYXJ5QnVmZmVy
cygpOwotICAgIGlmICghcmVzZXQoc2l6ZSkpIHsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW5pdGlhbGl6ZShzaXplKTsKIH0KIAogRHJh
d2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQpAQCAtODcsMTUgKzg5LDQzIEBAIERyYXdpbmdC
dWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKICAgICBjbGVhcigpOwogfQogCit2b2lkIERyYXdpbmdC
dWZmZXI6OmluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX2ZibyA9IG1f
Y29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKworICAgIGlmIChtX3NlcGFyYXRlQmFja2lu
Z1RleHR1cmUpCisgICAgICAgIG1fYmFja2luZ0NvbG9yQnVmZmVyID0gZ2VuZXJhdGVDb2xvclRl
eHR1cmUobV9jb250ZXh0LmdldCgpLCBzaXplKTsKKworICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIG1fY29s
b3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShtX2NvbnRleHQuZ2V0KCksIHNpemUpOwor
ICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyLCAwKTsKKyAgICBjcmVhdGVTZWNv
bmRhcnlCdWZmZXJzKCk7CisgICAgaWYgKCFyZXNldChzaXplKSkgeworICAgICAgICBtX2NvbnRl
eHQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1M
YXllcigpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAorICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG11bHRpc2FtcGxlKCkpCiAg
ICAgICAgIGNvbW1pdCgpOwotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisK
KyAgICBpZiAobV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKSB7CisgICAgICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwor
ICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBtX2JhY2tpbmdDb2xvckJ1ZmZlcik7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sb3JG
b3JtYXQgPSBtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEgPyBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSA6IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7CisgICAgICAgIG1fY29u
dGV4dC0+Y29weVRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGNv
bG9yRm9ybWF0LCAwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCAwKTsKKyAg
ICB9CisKKyAgICBpZiAobXVsdGlzYW1wbGUoKSkKKyAgICAgICAgYmluZCgpOworCiAgICAgbV9j
b250ZXh0LT5mbHVzaCgpOwogfQogI2VuZGlmCkBAIC0xMDksNyArMTM5LDEyIEBAIFBsYXRmb3Jt
TGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGEKIAogUGxhdGZvcm0zRE9iamVjdCBEcmF3
aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9j
b2xvckJ1ZmZlcjsKKyAgICByZXR1cm4gbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlID8gbV9iYWNr
aW5nQ29sb3JCdWZmZXIgOiBtX2NvbG9yQnVmZmVyOworfQorCitQbGF0Zm9ybTNET2JqZWN0IERy
YXdpbmdCdWZmZXI6OmZyYW1lYnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mYm87CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gOTY2
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExh
eWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNs
dWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIK
ICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCkBAIC04NSwxMCAr
ODYsOCBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvCiAgICAgfQog
ICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29t
cG9zaXRvci4KICAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSAmJiBtX3RleHR1cmVVcGRh
dGVkKSB7Ci0gICAgICAgIC8vIHByZXBhcmVUZXh0dXJlIGNvcGllcyB0aGUgY29udGVudHMgb2Yg
dGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBpbnRvIHRoZSB0ZXh0dXJlCi0gICAgICAgIC8v
IHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCi0gICAgICAgIC8vCi0gICAgICAgIG1fY29udGV4dC0+
cHJlcGFyZVRleHR1cmUoKTsKKyAgICAgICAgLy8gcHVibGlzaFRvUGxhdGZvcm1MYXllciBwcmVw
YXJlcyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBmb3IgdXNl
IGJ5IHRoZSBjb21wb3NpdG9yLgorICAgICAgICBjb250ZXh0KCktPmdldERyYXdpbmdCdWZmZXIo
KS0+cHVibGlzaFRvUGxhdGZvcm1MYXllcigpOwogICAgICAgICBtX2NvbnRleHQtPm1hcmtMYXll
ckNvbXBvc2l0ZWQoKTsKICAgICAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgbV90
ZXh0dXJlVXBkYXRlZCA9IGZhbHNlOwpAQCAtMTMyLDcgKzEzMSw3IEBAIHZvaWQgV2ViR0xMYXll
ckNocm9taXVtOjpzZXRDb250ZXh0KGNvbnMKICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9IG1fY29udGV4dC0+cGxhdGZv
cm1UZXh0dXJlKCk7CisgICAgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9IG1fY29udGV4dC0+Z2V0
RHJhd2luZ0J1ZmZlcigpLT5wbGF0Zm9ybUNvbG9yQnVmZmVyKCk7CiAgICAgaWYgKHRleHR1cmVJ
ZCAhPSBtX3RleHR1cmVJZCB8fCBjb250ZXh0Q2hhbmdlZCkgewogICAgICAgICBtX3RleHR1cmVD
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlZCA9IHRydWU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
OCBAQAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDgsNyArNTAsNyBAQCBzdGF0aWMgaW50
IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzID0KICNlbmRpZgogc3RhdGljIGludCBzX2N1cnJl
bnRSZXNvdXJjZVVzZVBpeGVscyA9IDA7CiAKLVBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJh
d2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRT
aXplJiBzaXplKQorUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVh
dGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wg
c2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMg
PSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CiAgICAgYm9vbCBtdWx0aXNhbXBsZVN1cHBvcnRl
ZCA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikgJiYg
ZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikg
JiYgZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX09FU19yZ2I4X3JnYmE4Iik7CkBAIC02MCw3ICs2
Miw3IEBAIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjoKICAgICBib29s
IHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9P
RVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKICAgICBpZiAocGFja2VkRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKQogICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfcGFja2Vk
X2RlcHRoX3N0ZW5jaWwiKTsKLSAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZl
ciA9IGFkb3B0UmVmKG5ldyBEcmF3aW5nQnVmZmVyKGNvbnRleHQsIHNpemUsIG11bHRpc2FtcGxl
U3VwcG9ydGVkLCBwYWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpKTsKKyAgICBSZWZQdHI8RHJh
d2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZlciA9IGFkb3B0UmVmKG5ldyBEcmF3aW5nQnVmZmVyKGNv
bnRleHQsIHNpemUsIG11bHRpc2FtcGxlU3VwcG9ydGVkLCBwYWNrZWREZXB0aFN0ZW5jaWxTdXBw
b3J0ZWQsIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpKTsKICAgICByZXR1cm4gKGRyYXdpbmdCdWZm
ZXItPm1fY29udGV4dCkgPyBkcmF3aW5nQnVmZmVyLnJlbGVhc2UoKSA6IDA7CiB9CiAKQEAgLTc4
LDYgKzgwLDExIEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXIoKQogICAgICAgICBtX2NvbG9y
QnVmZmVyID0gMDsKICAgICB9CiAKKyAgICBpZiAobV9iYWNraW5nQ29sb3JCdWZmZXIpIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fYmFja2luZ0NvbG9yQnVmZmVyKTsKKyAg
ICAgICAgbV9iYWNraW5nQ29sb3JCdWZmZXIgPSAwOworICAgIH0KKwogICAgIGlmIChtX211bHRp
c2FtcGxlQ29sb3JCdWZmZXIpIHsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVSZW5kZXJidWZm
ZXIobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKICAgICAgICAgbV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyID0gMDsKQEAgLTI2OSwxMCArMjc2LDE2IEBAIGJvb2wgRHJhd2luZ0J1ZmZlcjo6cmVz
ZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAKICAgICAgICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZl
cik7Ci0gICAgICAgIAogICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgp
LCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgMCk7CiAKICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUy
RChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZm
ZXIsIDApOworCisgICAgICAgIC8vIHJlc2l6ZSB0aGUgYmFja2luZyBjb2xvciBidWZmZXIKKyAg
ICAgICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkgeworICAgICAgICAgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9iYWNraW5n
Q29sb3JCdWZmZXIpOworICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIDApOworICAgICAgICB9CisKICAgICAgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CiAKICAgICAgICAgaWYg
KCFtdWx0aXNhbXBsZSgpKQpAQCAtMjkzLDIzICszMDYsNTYgQEAgdm9pZCBEcmF3aW5nQnVmZmVy
Ojpjb21taXQobG9uZyB4LCBsb25nCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgCisKICAgICBpZiAod2lkdGggPCAwKQogICAgICAgICB3aWR0aCA9IG1f
c2l6ZS53aWR0aCgpOwogICAgIGlmIChoZWlnaHQgPCAwKQogICAgICAgICBoZWlnaHQgPSBtX3Np
emUuaGVpZ2h0KCk7Ci0gICAgICAgIAorCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICAKKwogICAgIGlmIChtX211bHRpc2FtcGxlRkJPKSB7CiAgICAgICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEV4dGVuc2lvbnMzRDo6UkVBRF9GUkFNRUJVRkZFUiwgbV9t
dWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEV4dGVu
c2lvbnMzRDo6RFJBV19GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+YmxpdEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklULCBHcmFw
aGljc0NvbnRleHQzRDo6TElORUFSKTsKKworICAgICAgICBpZiAobV9zY2lzc29yRW5hYmxlZCkK
KyAgICAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKTsKKworICAgICAgICAvLyBVc2UgTkVBUkVTVCwgYmVjYXVzZSB0aGVyZSBpcyBubyBz
Y2FsZSBwZXJmb3JtZWQgZHVyaW5nIHRoZSBibGl0LgorICAgICAgICBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+YmxpdEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklULCBHcmFwaGlj
c0NvbnRleHQzRDo6TkVBUkVTVCk7CisKKyAgICAgICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCisg
ICAgICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKTsKICAgICB9Ci0gICAgCisKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKIH0KIAorYm9vbCBEcmF3aW5nQnVm
ZmVyOjptdWx0aXNhbXBsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dCAmJiBtX2Nv
bnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVF
eHRlbnNpb25TdXBwb3J0ZWQ7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBEcmF3aW5nQnVm
ZmVyOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgcmV0dXJuIG1f
Y29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKK30KKwordm9pZCBE
cmF3aW5nQnVmZmVyOjpkaXNjYXJkUmVzb3VyY2VzKCkKK3sKKyAgICBtX2NvbG9yQnVmZmVyID0g
MDsKKyAgICBtX2JhY2tpbmdDb2xvckJ1ZmZlciA9IDA7CisgICAgbV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyID0gMDsKKworICAgIG1fZGVwdGhTdGVuY2lsQnVmZmVyID0gMDsKKyAgICBtX2RlcHRo
QnVmZmVyID0gMDsKKworICAgIG1fc3RlbmNpbEJ1ZmZlciA9IDA7CisKKyAgICBtX211bHRpc2Ft
cGxlRkJPID0gMDsKKyAgICBtX2ZibyA9IDA7Cit9CisKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Ymlu
ZCgpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJldmlzaW9uIDk2NjM1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlczNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CkBAIC00MywxMCArNDQsOCBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi1jbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW07Ci0jZW5kaWYKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOworY2xhc3MgSW1hZ2VEYXRhOwogCiAvLyBNYW5hZ2VzIGEgcmVuZGVyaW5nIHRh
cmdldCAoZnJhbWVidWZmZXIgKyBhdHRhY2htZW50KSBmb3IgYSBjYW52YXMuICBDYW4gcHVibGlz
aCBpdHMgcmVuZGVyaW5nCiAvLyByZXN1bHRzIHRvIGEgUGxhdGZvcm1MYXllciBmb3IgY29tcG9z
aXRpbmcuCkBAIC03NSwxMCArNzQsMjIgQEAgcHVibGljOgogCiAgICAgLy8gQ29waWVzIHRoZSBt
dWx0aXNhbXBsZSBjb2xvciBidWZmZXIgdG8gdGhlIG5vcm1hbCBjb2xvciBidWZmZXIgYW5kIGxl
YXZlcyBtX2ZibyBib3VuZAogICAgIHZvaWQgY29tbWl0KGxvbmcgeCA9IDAsIGxvbmcgeSA9IDAs
IGxvbmcgd2lkdGggPSAtMSwgbG9uZyBoZWlnaHQgPSAtMSk7Ci0gICAgCi0gICAgYm9vbCBtdWx0
aXNhbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmdldENvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQ7IH0KLSAgICAKKworICAgIC8vIGNvbW1pdCBzaG91bGQgY29weSB0aGUgZnVsbCBtdWx0aXNh
bXBsZSBidWZmZXIsIGFuZCBub3QgcmVzcGVjdCB0aGUKKyAgICAvLyBjdXJyZW50IHNjaXNzb3Ig
Ym91bmRzLiBUcmFjayB0aGUgc3RhdGUgb2YgdGhlIHNjaXNzb3IgdGVzdCBzbyB0aGF0IGl0Cisg
ICAgLy8gY2FuIGJlIGRpc2FibGVkIGR1cmluZyBjYWxscyB0byBjb21taXQuCisgICAgdm9pZCBz
ZXRTY2lzc29yRW5hYmxlZChib29sIHNjaXNzb3JFbmFibGVkKSB7IG1fc2Npc3NvckVuYWJsZWQg
PSBzY2lzc29yRW5hYmxlZDsgfQorCisgICAgYm9vbCBtdWx0aXNhbXBsZSgpIGNvbnN0OworCiAg
ICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3Q7CisgICAgUGxh
dGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcigpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisKKyAgICAvLyBJbW1l
ZGlhdGVseSByZWxlYXNlcyBvd25lcnNoaXAgb2YgYWxsIHJlc291cmNlcy4gQ2FsbCB1cG9uIGxv
c3Mgb2YgdGhlCisgICAgLy8gZ3JhcGhpY3MgY29udGV4dCB0byBwcmV2ZW50IGZyZWVpbmcgaW52
YWxpZCByZXNvdXJjZXMuCisgICAgdm9pZCBkaXNjYXJkUmVzb3VyY2VzKCk7CiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpOwpAQCAtODgsOSArOTksMTUgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9
CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gY3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOwotICAgIAotICAgIERyYXdpbmdC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJiwgYm9vbCBtdWx0aXNhbXBs
ZUV4dGVuc2lvblN1cHBvcnRlZCwgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBw
b3J0ZWQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZShHcmFw
aGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29sKTsKKworICAgIERyYXdpbmdCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJiwgYm9vbCBtdWx0aXNhbXBsZUV4
dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVu
Y2lsRXh0ZW5zaW9uU3VwcG9ydGVkLCBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpOworCisg
ICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IEludFNpemUmKTsKKworICAgIGJvb2wgbV9zZXBhcmF0
ZUJhY2tpbmdUZXh0dXJlOworICAgIGJvb2wgbV9zY2lzc29yRW5hYmxlZDsKIAogICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIEludFNpemUgbV9zaXplOwpAQCAt
OTgsNiArMTE1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uU3VwcG9ydGVkOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CiAgICAgUGxhdGZv
cm0zRE9iamVjdCBtX2NvbG9yQnVmZmVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9iYWNraW5n
Q29sb3JCdWZmZXI7CiAKICAgICAvLyBUaGlzIGlzIHVzZWQgd2hlbiB3ZSBoYXZlIE9FU19wYWNr
ZWRfZGVwdGhfc3RlbmNpbC4KICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVwdGhTdGVuY2lsQnVm
ZmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3
aW5nQnVmZmVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQkocmV2aXNpb24gOTY2MzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2ls
RXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9y
dGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlQmFja2luZ1Rl
eHR1cmUpCisgICAgOiAgbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKHNlcGFyYXRlQmFja2luZ1Rl
eHR1cmUpCisgICAgLCBtX3NjaXNzb3JFbmFibGVkKGZhbHNlKW1fY29udGV4dChjb250ZXh0KQog
ICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3Rl
bmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0
ZWQpCkBAIC01Miw2ICs1NCw5IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhp
Y3NDb24KICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcigwKQogeworICAgIC8vIFN1cHBvcnQgZm9yIGEgc2VwYXJhdGUgYmFja2luZyB0ZXh0
dXJlIGhhcyBvbmx5IGJlZW4gZW5hYmxlZCBmb3IKKyAgICAvLyB0aGUgY2hyb21pdW0gcG9ydC4K
KyAgICBBU1NFUlQoIW1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSk7CiAgICAgQVNTRVJUKG1fZmJv
KTsKICAgICBpZiAoIW1fZmJvKSB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1
ZmZlclF0LmNwcAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
OCArMzQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1
ZmZlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCi0gICAg
OiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBw
YWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICA6IG1fc2VwYXJhdGVC
YWNraW5nVGV4dHVyZShzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgICwgbV9zY2lzc29yRW5h
YmxlZChmYWxzZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKC0xLCAt
MSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRl
bnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBv
cnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCkBAIC00Nyw2ICs1MCw5
IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAsIG1fbXVs
dGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogeworICAg
IC8vIFN1cHBvcnQgZm9yIGEgc2VwYXJhdGUgYmFja2luZyB0ZXh0dXJlIGhhcyBvbmx5IGJlZW4g
ZW5hYmxlZCBmb3IKKyAgICAvLyB0aGUgY2hyb21pdW0gcG9ydC4KKyAgICBBU1NFUlQoIW1fc2Vw
YXJhdGVCYWNraW5nVGV4dHVyZSk7CiAgICAgQVNTRVJUKG1fZmJvKTsKICAgICBpZiAoIW1fZmJv
KSB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREd0ay5jcHAJKHJl
dmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dy
YXBoaWNzQ29udGV4dDNER3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCBH
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgLCBtX211bHRpc2Ft
cGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCiAgICAg
LCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQog
ewogICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YWRkQWN0aXZlR3JhcGhpY3NDb250ZXh0
KHRoaXMpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0M0RNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA5NjYzNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQz
RE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSw3IEBAIEdyYXBoaWNzQ29udGV4
dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAg
ICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fbXVsdGlzYW1w
bGVDb2xvckJ1ZmZlcigwKQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCiAgICAgLCBtX3ByaXZh
dGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzKSkpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJKHJl
dmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0M0RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNiw2ICszMDYsNyBAQCBH
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgLCBtX211bHRpc2Ft
cGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCiAgICAg
LCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQog
ICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhp
cywgaG9zdFdpbmRvdykpKQogewogI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTY4NTUpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEx
LTEwLTA2ICBKZWZmIFRpbWFudXMgIDx0d2l6QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hy
b21pdW1dIFBhdGNoIHRoYXQgZGVtb25zdHJhdGVzIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRvIGFs
bG93IFdlYkdMCisgICAgICAgIHRvIHNoYXJlIGl0cyBiYWNraW5nIHN0b3JlIGRpcmVjdGx5IHdp
dGggdGhlIGNvbXBvc2l0b3IuCisgICAgICAgIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0cyBjcmVh
dGUgYW5kIHJlbmRlciB0byBGQk9zIG1hbmFnZWQgYnkgYQorICAgICAgICBEcmF3aW5nQnVmZmVy
IGluc3RhbmNlLiAgQWxsIFBsYXRmb3JtTGF5ZXIgbGlmZXRpbWUgbWFuYWdlbWVudCBpcworICAg
ICAgICBwZXJmb3JtZWQgYnkgdGhlIERyYXdpbmdCdWZmZXIuCisgICAgICAgIENoYW5nZXMgYXJl
IG9ubHkgcmVsZXZhbnQgdG8gQ2hyb21pdW0gcG9ydHMuICBGdW5jdGlvbmFsaXR5IGlzIAorICAg
ICAgICB1bmNoYW5nZWQgZm9yIG90aGVyIHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyMDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNw
cDogQWxsb3cgc3BlY2lmaWNhdGlvbiBmb3IgYW4gb3B0aW9uYWwKKyAgICAgICAgRHJhd2luZ0J1
ZmZlciBpbnN0YW5jZSB0byB0aGUgcGFpbnRSZW5kZXJpbmdSZXN1bHRzKiByb3V0aW5lcyB0byBv
dmVycmlkZQorICAgICAgICByZWFkaW5nIGZyb20gRkIgMC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAg
ICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOgorCiAyMDExLTEwLTA2ICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByOTY3OTEuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAkocmV2aXNpb24g
OTY2MzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENo
cm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJD
aHJvbWVDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKQEAgLTE2Myw2ICsxNjQsMjAg
QEAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlR3JhcAogICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250
ZXh0KHdlYkNvbnRleHQucmVsZWFzZSgpLCBhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUs
IHRocmVhZFVzYWdlKTsKIH0KIAordm9pZCBnZXREcmF3aW5nUGFyYW1ldGVycyhEcmF3aW5nQnVm
ZmVyKiBkcmF3aW5nQnVmZmVyLCBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGlj
c0NvbnRleHQzRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCog
ZnJhbWVCdWZmZXJJZCwgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQpCit7CisgICAgaWYgKGRyYXdp
bmdCdWZmZXIpIHsKKyAgICAgICAgKmZyYW1lQnVmZmVySWQgPSBkcmF3aW5nQnVmZmVyLT5mcmFt
ZWJ1ZmZlcigpOworICAgICAgICAqd2lkdGggPSBkcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgo
KTsKKyAgICAgICAgKmhlaWdodCA9IGRyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAqZnJhbWVCdWZmZXJJZCA9IDA7CisgICAgICAgICp3aWR0aCA9
IGdyYXBoaWNzQ29udGV4dDNELT53aWR0aCgpOworICAgICAgICAqaGVpZ2h0ID0gZ3JhcGhpY3ND
b250ZXh0M0QtPmhlaWdodCgpOworICAgIH0KK30KKwogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0Rm9yQW5vdGhlclRocmVhZChHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQpAQCAtMzA4LDEwICszMjMsMTMgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50RnJhbQogI2VuZGlmCiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhD
YW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CiAgICAgSW1hZ2VC
dWZmZXIqIGltYWdlQnVmZmVyID0gY29udGV4dC0+Y2FudmFzKCktPmJ1ZmZlcigpOwotICAgIHBh
aW50RnJhbWVidWZmZXJUb0NhbnZhcygwLCBtX2ltcGwtPndpZHRoKCksIG1faW1wbC0+aGVpZ2h0
KCksICFtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBp
bWFnZUJ1ZmZlcik7CisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOworICAgIGlu
dCB3aWR0aCwgaGVpZ2h0OworICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZmZXIs
IG1faW1wbC5nZXQoKSwgJmZyYW1lYnVmZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7CisgICAgcGFp
bnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1lYnVmZmVySWQsIHdpZHRoLCBoZWlnaHQsICFtX2lt
cGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZl
cik7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludENvbXBvc2l0ZWRS
ZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKQEAgLTMyMywx
NiArMzQxLDIwIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludENvbXAKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQ
dHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CiAgICAgaWYg
KG1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIAotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IElt
YWdlRGF0YTo6Y3JlYXRlKEludFNpemUobV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgp
KSk7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVySWQ7CisgICAgaW50IHdpZHRo
LCBoZWlnaHQ7CisgICAgZ2V0RHJhd2luZ1BhcmFtZXRlcnMoZHJhd2luZ0J1ZmZlciwgbV9pbXBs
LmdldCgpLCAmZnJhbWVidWZmZXJJZCwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIFJlZlB0cjxJ
bWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUod2lkdGgsIGhl
aWdodCkpOwogICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5k
YXRhKCktPmRhdGEoKTsKLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDQgKiBtX2ltcGwtPndpZHRo
KCkgKiBtX2ltcGwtPmhlaWdodCgpOworICAgIHNpemVfdCBidWZmZXJTaXplID0gNCAqIHdpZHRo
ICogaGVpZ2h0OwogCi0gICAgbV9pbXBsLT5yZWFkQmFja0ZyYW1lYnVmZmVyKHBpeGVscywgYnVm
ZmVyU2l6ZSwgMCwgbV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgpKTsKKyAgICBtX2lt
cGwtPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCBidWZmZXJTaXplLCBmcmFtZWJ1ZmZlcklk
LCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnVmZmVyU2l6
ZTsgaSArPSA0KQogICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsK
QEAgLTEwMDIsNyArMTAyNCw3IEBAIHJ0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0
MiBhMiwKICAgICByZXR1cm4gbV9wcml2YXRlLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYs
IGE3LCBhOCwgYTkpOyAgIFwKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgYm9vbCkKK0dy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0
cmlidXRlcywgSG9zdFdpbmRvdyosIGJvb2wpIDogbV9kcmF3aW5nQnVmZmVyKDApCiB7CiB9CiAK
QEAgLTEyMTMsOCArMTIzNSwxNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBv
c2l0ZWQoCiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bGF5ZXJDb21wb3NpdGVkKCk7CiB9CiAKLURF
TEVHQVRFX1RPX0lOVEVSTkFMXzEocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMsIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfUihwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSwgUGFzc1JlZlB0cjxJbWFnZURhdGE+KQordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5wYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyhjb250ZXh0LCBnZXREcmF3aW5nQnVmZmVyKCkpOworfQorCitQYXNz
UmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhKCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5wYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0ltYWdlRGF0YShnZXREcmF3aW5nQnVmZmVyKCkpOworfQorCiBERUxFR0FURV9UT19J
TlRFUk5BTF8xUihwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMsIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQqLCBib29sKQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludHNJbnRvQ2Fu
dmFzQnVmZmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCShyZXZpc2lvbiA5NjYzNSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIFdlYlZpZXdJbXBsOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBFeHRlbnNpb25zM0RD
aHJvbWl1bTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBjbGFzcyBXZWJHTExh
eWVyQ2hyb21pdW07CkBAIC05NSw5ICs5Niw5IEBAIHB1YmxpYzoKICAgICBib29sIGxheWVyQ29t
cG9zaXRlZCgpIGNvbnN0OwogICAgIHZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgpOwogCi0gICAg
dm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
Kik7CisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJp
bmdDb250ZXh0KiwgRHJhd2luZ0J1ZmZlciopOwogICAgIHZvaWQgcGFpbnRGcmFtZWJ1ZmZlclRv
Q2FudmFzKGludCBmcmFtZWJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHByZW11
bHRpcGx5QWxwaGEsIEltYWdlQnVmZmVyKik7Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgUGFzc1JlZlB0cjxJbWFnZURh
dGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKTsKICAg
ICBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKICAgICBib29sIHBhaW50Q29t
cG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110703</attachid>
            <date>2011-10-12 10:47:22 -0700</date>
            <delta_ts>2011-10-16 15:34:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111012134515.patch</filename>
            <type>text/plain</type>
            <size>43824</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MjczKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTEtMTAtMTIgIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUGF0Y2ggdGhh
dCBkZW1vbnN0cmF0ZXMgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuICBBbGwg
UGxhdGZvcm1MYXllciBsaWZldGltZSBtYW5hZ2VtZW50IGlzCisgICAgICAgIHBlcmZvcm1lZCBi
eSB0aGUgRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgQ2hhbmdlcyBhcmUgb25seSByZWxldmFudCB0
byBDaHJvbWl1bSBwb3J0cy4gIEZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgdW5jaGFuZ2VkIGZv
ciBvdGhlciBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOiBDb25zdHJ1Y3Qg
YSBEcmF3aW5nQnVmZmVyCisgICAgICAgIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYW5kIGZvcndh
cmQgYWxsIGZyYW1lYnVmZmVyIG1hbmFnZW1lbnQgY2FsbHMgdG8KKyAgICAgICAgaXQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRl
eHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xl
YXJJZkNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1l
YnVmZmVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZURyYXdpbmdCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJh
d2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlQ29sb3JU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9ybUxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtQ29sb3JCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6ZnJhbWVidWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnNldENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6c2V0RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9t
aXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
TGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZl
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmNsZWFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmNsZWFyRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d2luZ0J1ZmZlcjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6Om11
bHRpc2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6
OmRpc2NhcmRSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3
aW5nQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpzZXRTY2lzc29y
RW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVm
ZmVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L3F0L0RyYXdpbmdCdWZmZXJRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKwog
MjAxMS0xMC0xMiAgU2VyZ2V5IEdsYXp1bm92ICA8c2VyZy5nbGF6dW5vdkBnbWFpbC5jb20+CiAK
ICAgICAgICAgU2NyaXB0Q29udHJvbGxlcjo6ZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTCBnZXRzIGNv
bmZ1c2VkIGJ5IHN5bmNocm9ub3VzIGZyYW1lIGxvYWRzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9u
IDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTEgQEAKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIK
KworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNl
bmRpZgorCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJPRVNTdGFuZGFy
ZERlcml2YXRpdmVzLmgiCiAjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCkBAIC0zNjMsNyAr
MzY4LDEyIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFIKICAgICB9
CiAKICAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRydWU7CisjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IHRydWU7CisjZWxzZQogICAg
IGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBmYWxzZTsKKyNlbmRpZgorCiAKICAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShh
dHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CiAKQEAgLTM3OSw2ICszODksNyBAQCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzKQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCiAgICAgLCBt
X2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQogICAgICwgbV9yZXN0
b3JlQWxsb3dlZChmYWxzZSkKICAgICAsIG1fcmVzdG9yZVRpbWVyKHRoaXMpCiAgICAgLCBtX3Zp
ZGVvQ2FjaGUoNCkKQEAgLTM4Niw2ICszOTcsMTcgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpX
ZWJHTFJlbmRlcmluZ0NvbgogICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiB7CiAgICAg
QVNTRVJUKG1fY29udGV4dCk7CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBDcmVh
dGUgdGhlIERyYXdpbmdCdWZmZXIgYW5kIGluaXRpYWxpemUgdGhlIHBsYXRmb3JtIGxheWVyLgor
ICAgIG1fZHJhd2luZ0J1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRlRHJhd2luZ0J1ZmZlcighbV9h
dHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgo
KSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisgICAgbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCkt
PnNldERyYXdpbmdCdWZmZXIobV9kcmF3aW5nQnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPnBsYXRm
b3JtTGF5ZXIoKS0+c2V0Q29udGV4dChtX2NvbnRleHQuZ2V0KCkpOworI2VuZGlmCisKKyAgICBp
ZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKwog
ICAgIHNldHVwRmxhZ3MoKTsKICAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwogfQpAQCAtNDUx
LDYgKzQ3Myw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmUKICAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKICAgICAgICAgaW5pdFZlcnRleEF0dHJpYjAoKTsK
IAorICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVz
ZXQoSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisKICAg
ICBtX2NvbnRleHQtPnJlc2hhcGUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQo
KSk7CiAgICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2Fu
dmFzKCktPmhlaWdodCgpKTsKIApAQCAtNDgzLDcgKzUwOCw5IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjptYXJrQ29udGV4dEMKIHsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcp
CiAgICAgICAgIHJldHVybjsKKwogICAgIG1fY29udGV4dC0+bWFya0NvbnRleHRDaGFuZ2VkKCk7
CisKICAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5yZW5kZXJCb3go
KTsKQEAgLTUxMyw4ICs1NDAsMTIgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
SWZDb21wbwogICAgIC8vIERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhl
IGNsZWFyIHRoZSB1c2VyIGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4KICAgICBib29sIGNvbWJp
bmVkQ2xlYXIgPSBtYXNrICYmICFtX3NjaXNzb3JFbmFibGVkOwogCi0gICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nKQotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZykgeworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5iaW5kKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgfQog
ICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsK
ICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9CVUZGRVJfQklUKSkKICAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY29sb3JNYXNr
WzBdID8gbV9jbGVhckNvbG9yWzBdIDogMCwKQEAgLTU3NCwxNyArNjA1LDI5IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmkKICAgICB9IGVsc2UKICAgICAgICAgY2Fu
dmFzKCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOwogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7
CisKICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkgJiYgIW1fbGF5ZXJDbGVhcmVkKQogICAg
ICAgICByZXR1cm47CisKICAgICBjYW52YXMoKS0+Y2xlYXJDb3BpZWRJbWFnZSgpOwogICAgIG1f
bWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKLSAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKHRoaXMpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKyAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKHRoaXMsIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisgICAgaWYg
KG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CiB9CiAK
IFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKIHsKICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAg
IHJldHVybiBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7Cisg
ICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQo
KTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBtX2NvbnRleHQtPnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisgICAgaWYg
KG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAg
cmV0dXJuIGltYWdlRGF0YTsKIH0KIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50
c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdApAQCAtNjE2LDE2ICs2NTksMjUgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50CiAKICAgICAvLyBXZSBkb24ndCBoYXZlIHRv
IG1hcmsgdGhlIGNhbnZhcyBhcyBkaXJ0eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2Ug
YnVmZmVyIHdpbGwgYWxzbyBzdGFydCBvZmYKICAgICAvLyBjbGVhciAoYW5kIHRoaXMgbWF0Y2hl
cyB3aGF0IHJlc2hhcGUgd2lsbCBkbykuCi0gICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBo
ZWlnaHQpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+cmVzZXQoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgZWxzZQorICAgICAgICBtX2Nv
bnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CiB9CiAKIGludCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0CiB7CisgICAgaWYgKG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7CisK
ICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRo
KCk7CiB9CiAKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWlnaHQo
KSBjb25zdAogeworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2Ry
YXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKKwogICAgIHJldHVybiBtX2NvbnRleHQtPmdl
dEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7CiB9CiAKQEAgLTc0NSw3ICs3OTcs
MTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwotICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwor
ICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7CisgICAg
ICAgIC8vIEluc3RlYWQgb2YgYmluZGluZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4K
KyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwog
ICAgIGlmIChidWZmZXIpCiAgICAgICAgIGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0xMDg0LDkgKzExNDAsMjEg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZQogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVzb3VyY2VT
YWZlKCkpCisgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKKyAgICAgICAgLy8gQ29tbWl0IERy
YXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAgICAgIG1fY29udGV4dC0+Y29weVRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWln
aHQsIGJvcmRlcik7Ci0gICAgZWxzZSB7CisKKyAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVm
ZmVyIGlmIG5lZWRlZAorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJh
d2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwg
Zm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsK
KwogICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKICAgICAgICAgR0MzRHNpemVp
IGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKICAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1
ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBw
ZWRIZWlnaHQpKSB7CkBAIC0xMDk4LDYgKzExNjYsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNvcHlUZXhJbWFnZQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisKKyAgICAgICAgLy8gUmVzdG9y
ZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5k
aW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Ymlu
ZCgpOwogICAgIH0KICAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21w
bGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgogICAgIHRleC0+c2V0
TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CkBAIC0xMjc0LDcgKzEzNDYsMTAgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUZyYW1lYgogICAgIGlmIChmcmFtZWJ1
ZmZlciA9PSBtX2ZyYW1lYnVmZmVyQmluZGluZykgewogICAgICAgICBtX2ZyYW1lYnVmZmVyQmlu
ZGluZyA9IDA7CiAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVidWZmZXIgaGVyZSB0
byBiaW5kIGJhY2sgdG8gaW50ZXJuYWwgZmJvLgotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgICAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CiAgICAgfQogfQogCkBAIC0xMzYxLDggKzE0
MzYsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUoR0MzRAogewogICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KQorICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewogICAg
ICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Np
c3NvckVuYWJsZWQpOworICAgIH0KICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMTcwMyw4ICsxNzgxLDExIEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGUKIHsKICAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkKKyAgICBp
ZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKICAgICAgICAgbV9z
Y2lzc29yRW5hYmxlZCA9IHRydWU7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Npc3NvckVuYWJs
ZWQpOworICAgIH0KICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXApOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yODc2LDcgKzI5NTcsMTcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMoRwogICAgIH0KICAgICBjbGVhcklmQ29tcG9z
aXRlZCgpOwogICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMtPmJhc2VBZGRyZXNzKCk7CisKKyAgICAv
LyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5n
KQorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAgbV9jb250ZXh0LT5yZWFkUGl4
ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisKKyAgICAvLyBS
ZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgp
OworCiAjaWYgT1MoREFSV0lOKQogICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBzZWN0aW9uIHdo
ZW4gR0wgZHJpdmVyIGJ1ZyBvbiBNYWMgaXMgZml4ZWQsIGkuZS4sCiAgICAgLy8gd2hlbiBhbHBo
YSBpcyBvZmYsIHJlYWRQaXhlbHMgc2hvdWxkIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAw
LgpAQCAtNDExOSwxNCArNDIxMCwxNCBAQCBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRC
b3VuZEZyYW1lCiB7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5vYmplY3QoKSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5n
LT5nZXRXaWR0aCgpOwotICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkud2lkdGgoKTsKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5n
QnVmZmVyLT5zaXplKCkud2lkdGgoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZl
clNpemUoKS53aWR0aCgpOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3Vu
ZEZyYW1lYnVmZmVySGVpZ2h0KCkKIHsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1
ZmZlckJpbmRpbmctPmdldEhlaWdodCgpOwotICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVy
bmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZl
ciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRl
cm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOwogfQogCiBXZWJHTFRleHR1cmUqIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXh0dXJlQmluZGluZyhHQzNEZW51bSB0YXJnZXQs
IGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQpAQCAtNDgyMiw2ICs0OTEzLDEyIEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3RvcmUKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRoZSBuZXcg
R3JhcGhpY3NDb250ZXh0M0QuCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKKyAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyID0gbV9jb250ZXh0LT5jcmVhdGVEcmF3aW5nQnVmZmVyKCFtX2F0dHJpYnV0ZXMucHJlc2Vy
dmVEcmF3aW5nQnVmZmVyLCBtX2RyYXdpbmdCdWZmZXItPnNpemUoKSk7CisgICAgfQorCiAgICAg
bV9jb250ZXh0ID0gY29udGV4dDsKICAgICBtX2NvbnRleHRMb3N0ID0gZmFsc2U7CiAgICAgaW5p
dGlhbGl6ZU5ld0NvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFdlYkdMUmVuZGVyaW5nQ29udGV4dF9oCiAK
ICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1
ZmZlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGbG9hdDMyQXJy
YXkuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgpAQCAtMzU1LDYgKzM1NiwxMCBA
QCBwdWJsaWM6CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKIAor
ICAgIC8vIE9wdGlvbmFsIHN0cnVjdHVyZSBmb3IgcmVuZGVyaW5nIHRvIGEgRHJhd2luZ0J1ZmZl
ciwgaW5zdGVhZCBvZiBkaXJlY3RseQorICAgIC8vIHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2Nv
bnRleHQuCisgICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IG1fZHJhd2luZ0J1ZmZlcjsKKwogICAg
IGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc3RvcmVUaW1lciA6IHB1YmxpYyBUaW1lckJh
c2UgewogICAgIHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
UmVzdG9yZVRpbWVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkgOiBtX2NvbnRleHQo
Y29udGV4dCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsOSArNTgsOSBAQCB1aW50OF90IGNvbnZlcnRDb2xvcjE2QmlnVG84KHVp
bnQxNl90IHZhCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAogCi1QYXNzUmVmUHRyPERyYXdp
bmdCdWZmZXI+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVEcmF3aW5nQnVmZmVyKGNvbnN0IElu
dFNpemUmIHNpemUpCitQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVEcmF3aW5nQnVmZmVyKGJvb2wgc2VwYXJhdGVCYWNraW5nQnVmZmVyLCBjb25zdCBJ
bnRTaXplJiBzaXplKQogewotICAgIHJldHVybiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUodGhpcywg
c2l6ZSk7CisgICAgcmV0dXJuIERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBzaXplLCBzZXBh
cmF0ZUJhY2tpbmdCdWZmZXIpOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFn
ZTJEUmVzb3VyY2VTYWZlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGlu
dCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCB1bnBhY2tB
bGlnbm1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAwLDggKzUwMCw4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZvaWQgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAKLSAgICBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZURyYXdpbmdC
dWZmZXIoY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKCkpOwotICAgIAorICAgIFBhc3NSZWZQdHI8
RHJhd2luZ0J1ZmZlcj4gY3JlYXRlRHJhd2luZ0J1ZmZlcihib29sIHNlcGFyYXRlQmFja2luZ0J1
ZmZlciwgY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKCkpOworCiAjaWYgUExBVEZPUk0oTUFDKSB8
fCBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkKICAg
ICAvLyBXaXRoIG11bHRpc2FtcGxpbmcgb24sIGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZCTyB0byBy
ZWd1bGFyIEZCTy4KICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CkBAIC03OTEsOCArNzkxLDgg
QEAgcHVibGljOgogICAgIHZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgpOwogICAgIGJvb2wgbGF5
ZXJDb21wb3NpdGVkKCkgY29uc3Q7CiAKLSAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICB2b2lkIHBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqLCBEcmF3aW5nQnVm
ZmVyKik7CisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
SW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKTsKICAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3Vs
dHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7CiAKICNpZiBQTEFURk9STShRVCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdC
dWZmZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gOTY2
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5n
QnVmZmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKICNp
bmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTQ4LDcgKzQ5LDYgQEAgc3RhdGljIHVuc2lnbmVkIGdlbmVyYXRlQ29sb3JUZXh0dXJl
KEdyYQogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpOwogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwogICAgIGNvbnRleHQtPnRleEltYWdl
MkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAg
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBvZmZzY3JlZW5Db2xvclRleHR1cmUsIDApOwogCiAgICAgcmV0dXJu
IG9mZnNjcmVlbkNvbG9yVGV4dHVyZTsKIH0KQEAgLTU2LDI3ICs1NiwyNCBAQCBzdGF0aWMgdW5z
aWduZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUoR3JhCiBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRTaXplJiBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKLSAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgIDogbV9zZXBhcmF0ZUJh
Y2tpbmdUZXh0dXJlKHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgLCBtX3NjaXNzb3JFbmFi
bGVkKGZhbHNlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3NpemUoLTEsIC0x
KQogICAgICwgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZChtdWx0aXNhbXBsZUV4dGVu
c2lvblN1cHBvcnRlZCkKICAgICAsIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9y
dGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKICAgICAsIG1fZmJvKDAp
CiAgICAgLCBtX2NvbG9yQnVmZmVyKDApCisgICAgLCBtX2JhY2tpbmdDb2xvckJ1ZmZlcigwKQog
ICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fZGVwdGhCdWZmZXIoMCkKICAg
ICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiB7Ci0gICAgbV9mYm8gPSBjb250ZXh0LT5jcmVh
dGVGcmFtZWJ1ZmZlcigpOwotICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBtX2NvbG9yQnVmZmVyID0gZ2VuZXJh
dGVDb2xvclRleHR1cmUoY29udGV4dCwgc2l6ZSk7Ci0gICAgY3JlYXRlU2Vjb25kYXJ5QnVmZmVy
cygpOwotICAgIGlmICghcmVzZXQoc2l6ZSkpIHsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW5pdGlhbGl6ZShzaXplKTsKIH0KIAogRHJh
d2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQpAQCAtODcsMTUgKzg0LDQzIEBAIERyYXdpbmdC
dWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKICAgICBjbGVhcigpOwogfQogCit2b2lkIERyYXdpbmdC
dWZmZXI6OmluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX2ZibyA9IG1f
Y29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKworICAgIGlmIChtX3NlcGFyYXRlQmFja2lu
Z1RleHR1cmUpCisgICAgICAgIG1fYmFja2luZ0NvbG9yQnVmZmVyID0gZ2VuZXJhdGVDb2xvclRl
eHR1cmUobV9jb250ZXh0LmdldCgpLCBzaXplKTsKKworICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIG1fY29s
b3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShtX2NvbnRleHQuZ2V0KCksIHNpemUpOwor
ICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyLCAwKTsKKyAgICBjcmVhdGVTZWNv
bmRhcnlCdWZmZXJzKCk7CisgICAgaWYgKCFyZXNldChzaXplKSkgeworICAgICAgICBtX2NvbnRl
eHQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1M
YXllcigpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAorICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG11bHRpc2FtcGxlKCkpCiAg
ICAgICAgIGNvbW1pdCgpOwotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisK
KyAgICBpZiAobV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKSB7CisgICAgICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwor
ICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBtX2JhY2tpbmdDb2xvckJ1ZmZlcik7CisgICAgICAgIHVuc2lnbmVkIGNvbG9yRm9ybWF0
ID0gbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFscGhhID8gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEgOiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOworICAgICAgICBtX2NvbnRleHQt
PmNvcHlUZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBjb2xvckZv
cm1hdCwgMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSwgMCk7CisgICAgfQor
CisgICAgaWYgKG11bHRpc2FtcGxlKCkpCisgICAgICAgIGJpbmQoKTsKKwogICAgIG1fY29udGV4
dC0+Zmx1c2goKTsKIH0KICNlbmRpZgpAQCAtMTA5LDcgKzEzNCwxMiBAQCBQbGF0Zm9ybUxheWVy
KiBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUxhCiAKIFBsYXRmb3JtM0RPYmplY3QgRHJhd2luZ0J1
ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29sb3JC
dWZmZXI7CisgICAgcmV0dXJuIG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSA/IG1fYmFja2luZ0Nv
bG9yQnVmZmVyIDogbV9jb2xvckJ1ZmZlcjsKK30KKworUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5n
QnVmZmVyOjpmcmFtZWJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmJvOwogfQogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgpAQCAtMTY0LDYgKzE2NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZl
Q29udGVudHNUZXh0dXJlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1
cmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcHJvdGVjdFZpc2libGVUaWxlVGV4dHVyZXMoKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCop
IHsgfQogCiAgICAgLy8gVGhlc2UgZXhpc3QganVzdCBmb3IgZGVidWdnaW5nICh2aWEgZHJhd0Rl
YnVnQm9yZGVyKCkpLgogICAgIHZvaWQgc2V0RGVidWdCb3JkZXJDb2xvcihjb25zdCBDb2xvciYp
OwpAQCAtMTk5LDYgKzIwMSw5IEBAIHB1YmxpYzoKICAgICBDQ0xheWVyVHJlZUhvc3QqIGxheWVy
VHJlZUhvc3QoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUhvc3QuZ2V0KCk7IH0KICAgICB2
b2lkIGNsZWFudXBSZXNvdXJjZXNSZWN1cnNpdmUoKTsKIAorICAgIHZvaWQgc2V0RHJhd2luZ0J1
ZmZlcihQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGRyYXdpbmdCdWZmZXIpIHsgbV9kcmF3aW5n
QnVmZmVyID0gZHJhd2luZ0J1ZmZlcjsgfQorICAgIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4g
ZHJhd2luZ0J1ZmZlcigpIHsgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlcjsgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgQ0NMYXllckRlbGVnYXRlKiBtX2RlbGVnYXRlOwogICAgIGV4cGxpY2l0IExheWVyQ2hy
b21pdW0oQ0NMYXllckRlbGVnYXRlKik7CkBAIC0yNzUsNiArMjgwLDggQEAgcHJpdmF0ZToKICAg
ICBJbnRSZWN0IG1fZHJhd2FibGVDb250ZW50UmVjdDsKIAogICAgIFN0cmluZyBtX25hbWU7CisK
KyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVmZmVyOwogfTsKIAogdm9pZCBz
b3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIHZvaWQqKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vV2ViR0xMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJXZWJHTExheWVyQ2hy
b21pdW0uaCIKIAorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJFeHRlbnNp
b25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCkBAIC04NSwxMCArODYsOCBAQCB2b2lkIFdlYkdM
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvCiAgICAgfQogICAgIC8vIFVwZGF0ZSB0aGUg
Y29udGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KICAgICBpZiAo
IW1fZGlydHlSZWN0LmlzRW1wdHkoKSAmJiBtX3RleHR1cmVVcGRhdGVkKSB7Ci0gICAgICAgIC8v
IHByZXBhcmVUZXh0dXJlIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVu
ZGVyIHRhcmdldCBpbnRvIHRoZSB0ZXh0dXJlCi0gICAgICAgIC8vIHVzZWQgYnkgdGhlIGNvbXBv
c2l0b3IuCi0gICAgICAgIC8vCi0gICAgICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsK
KyAgICAgICAgLy8gcHVibGlzaFRvUGxhdGZvcm1MYXllciBwcmVwYXJlcyB0aGUgY29udGVudHMg
b2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBmb3IgdXNlIGJ5IHRoZSBjb21wb3NpdG9y
LgorICAgICAgICBkcmF3aW5nQnVmZmVyKCktPnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKTsKICAg
ICAgICAgbV9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAgICAgICAgIHJlc2V0TmVl
ZHNEaXNwbGF5KCk7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSBmYWxzZTsKQEAgLTEzMiw3
ICsxMzEsNyBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zCiAgICAg
aWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIGludCB0ZXh0
dXJlSWQgPSBtX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpOworICAgIHVuc2lnbmVkIGludCB0
ZXh0dXJlSWQgPSBkcmF3aW5nQnVmZmVyKCktPnBsYXRmb3JtQ29sb3JCdWZmZXIoKTsKICAgICBp
ZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkIHx8IGNvbnRleHRDaGFuZ2VkKSB7CiAgICAgICAg
IG1fdGV4dHVyZUNoYW5nZWQgPSB0cnVlOwogICAgICAgICBtX3RleHR1cmVVcGRhdGVkID0gdHJ1
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA5NjYzNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJv
bWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFRleHR1cmVVcGRhdGVkKCk7CiAgICAgYm9vbCBwYWludFJlbmRlcmVkUmVzdWx0c1RvQ2Fu
dmFzKEltYWdlQnVmZmVyKik7CiAKLSAgICB2b2lkIHNldENvbnRleHQoY29uc3QgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZXh0KGNvbnN0IEdy
YXBoaWNzQ29udGV4dDNEKik7CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSB7IHJl
dHVybiBtX2NvbnRleHQ7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHJldmlzaW9u
IDk2NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiRHJh
d2luZ0J1ZmZlci5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00OCw3ICs1MCw3IEBAIHN0YXRpYyBpbnQgc19tYXhpbXVtUmVzb3VyY2VV
c2VQaXhlbHMgPQogI2VuZGlmCiBzdGF0aWMgaW50IHNfY3VycmVudFJlc291cmNlVXNlUGl4ZWxz
ID0gMDsKIAotUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCitQYXNzUmVm
UHRyPERyYXdpbmdCdWZmZXI+IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0
dXJlKQogewogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdldEV4dGVu
c2lvbnMoKTsKICAgICBib29sIG11bHRpc2FtcGxlU3VwcG9ydGVkID0gZXh0ZW5zaW9ucy0+c3Vw
cG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKSAmJiBleHRlbnNpb25zLT5zdXBwb3J0
cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSAmJiBleHRlbnNpb25zLT5zdXBw
b3J0cygiR0xfT0VTX3JnYjhfcmdiYTgiKTsKQEAgLTYwLDcgKzYyLDcgQEAgUGFzc1JlZlB0cjxE
cmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOgogICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2ls
U3VwcG9ydGVkID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhfc3Rl
bmNpbCIpOwogICAgIGlmIChwYWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpCiAgICAgICAgIGV4
dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwot
ICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyID0gYWRvcHRSZWYobmV3IERy
YXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSwgbXVsdGlzYW1wbGVTdXBwb3J0ZWQsIHBhY2tlZERl
cHRoU3RlbmNpbFN1cHBvcnRlZCkpOworICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5n
QnVmZmVyID0gYWRvcHRSZWYobmV3IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSwgbXVsdGlz
YW1wbGVTdXBwb3J0ZWQsIHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCwgc2VwYXJhdGVCYWNr
aW5nVGV4dHVyZSkpOwogICAgIHJldHVybiAoZHJhd2luZ0J1ZmZlci0+bV9jb250ZXh0KSA/IGRy
YXdpbmdCdWZmZXIucmVsZWFzZSgpIDogMDsKIH0KIApAQCAtNzgsNiArODAsMTEgQEAgdm9pZCBE
cmF3aW5nQnVmZmVyOjpjbGVhcigpCiAgICAgICAgIG1fY29sb3JCdWZmZXIgPSAwOwogICAgIH0K
IAorICAgIGlmIChtX2JhY2tpbmdDb2xvckJ1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPmRl
bGV0ZVRleHR1cmUobV9iYWNraW5nQ29sb3JCdWZmZXIpOworICAgICAgICBtX2JhY2tpbmdDb2xv
ckJ1ZmZlciA9IDA7CisgICAgfQorCiAgICAgaWYgKG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcikg
ewogICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX211bHRpc2FtcGxlQ29s
b3JCdWZmZXIpOwogICAgICAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSAwOwpAQCAtMTY2
LDcgKzE3Myw3IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXJGcmFtZWJ1ZmZlcigpCiAgICAg
dW5zaWduZWQgY2hhciBkZXB0aE1hc2sgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBpbnQgc3RlbmNp
bE1hc2sgPSAweGZmZmZmZmZmOwogICAgIHVuc2lnbmVkIGNoYXIgaXNTY2lzc29yRW5hYmxlZCA9
IGZhbHNlOwotICAgIHVuc2lnbmVkIGxvbmcgY2xlYXJNYXNrID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0JVRkZFUl9CSVQ7CisgICAgdW5zaWduZWQgY2xlYXJNYXNrID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7CiAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKICAg
ICAgICAgbV9jb250ZXh0LT5nZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFS
X1ZBTFVFLCAmY2xlYXJEZXB0aCk7CiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxKTsK
QEAgLTIzMyw3ICsyNDAsNyBAQCBib29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNp
emUmCiAgICAgaWYgKG5ld1NpemUgIT0gbV9zaXplKSB7CiAgICAgICAgIG1fc2l6ZSA9IG5ld1Np
emU7CiAKLSAgICAgICAgdW5zaWduZWQgbG9uZyBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZv
cm1hdCwgaW50ZXJuYWxSZW5kZXJidWZmZXJGb3JtYXQ7CisgICAgICAgIHVuc2lnbmVkIGludGVy
bmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0LCBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZvcm1hdDsK
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuYWxwaGEpIHsKICAgICAgICAgICAgIGludGVybmFsQ29s
b3JGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKICAgICAgICAgICAgIGNvbG9yRm9y
bWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CkBAIC0yNjksMTAgKzI3NiwxNiBAQCBib29s
IERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAgICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwog
CiAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG1fY29sb3JCdWZmZXIpOwotICAgICAgICAKICAgICAgICAgbV9jb250ZXh0LT50ZXhJ
bWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9y
bWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwogCiAgICAgICAgIG1fY29udGV4dC0+
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBtX2NvbG9yQnVmZmVyLCAwKTsKKworICAgICAgICAvLyByZXNpemUgdGhlIGJhY2tp
bmcgY29sb3IgYnVmZmVyCisgICAgICAgIGlmIChtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUpIHsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1fYmFja2luZ0NvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+
dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xv
ckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDApOwogCiAgICAgICAgIGlmICghbXVsdGlzYW1wbGUoKSkKQEAgLTI5MywyMyArMzA2LDU2IEBA
IHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y29tbWl0KGxvbmcgeCwgbG9uZwogewogICAgIGlmICghbV9j
b250ZXh0KQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgaWYgKHdpZHRoIDwgMCkK
ICAgICAgICAgd2lkdGggPSBtX3NpemUud2lkdGgoKTsKICAgICBpZiAoaGVpZ2h0IDwgMCkKICAg
ICAgICAgaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOwotICAgICAgICAKKwogICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgCisKICAgICBpZiAobV9tdWx0aXNhbXBsZUZC
TykgewogICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OlJF
QURfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogICAgICAgICBtX2NvbnRleHQtPmJp
bmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OkRSQVdfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAg
ICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3
aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisKKyAgICAgICAgaWYg
KG1fc2Npc3NvckVuYWJsZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisKKyAgICAgICAgLy8gVXNlIE5FQVJFU1QsIGJl
Y2F1c2UgdGhlcmUgaXMgbm8gc2NhbGUgcGVyZm9ybWVkIGR1cmluZyB0aGUgYmxpdC4KKyAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0
aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
QlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOworCisgICAgICAgIGlmICht
X3NjaXNzb3JFbmFibGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgfQotICAgIAorCiAgICAgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiB9
CiAKK2Jvb2wgRHJhd2luZ0J1ZmZlcjo6bXVsdGlzYW1wbGUoKSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlh
cyAmJiBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkOworfQorCitQYXNzUmVmUHRyPElt
YWdlRGF0YT4gRHJhd2luZ0J1ZmZlcjo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEo
KQoreworICAgIHJldHVybiBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhKHRoaXMpOworfQorCit2b2lkIERyYXdpbmdCdWZmZXI6OmRpc2NhcmRSZXNvdXJjZXMoKQor
eworICAgIG1fY29sb3JCdWZmZXIgPSAwOworICAgIG1fYmFja2luZ0NvbG9yQnVmZmVyID0gMDsK
KyAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSAwOworCisgICAgbV9kZXB0aFN0ZW5jaWxC
dWZmZXIgPSAwOworICAgIG1fZGVwdGhCdWZmZXIgPSAwOworCisgICAgbV9zdGVuY2lsQnVmZmVy
ID0gMDsKKworICAgIG1fbXVsdGlzYW1wbGVGQk8gPSAwOworICAgIG1fZmJvID0gMDsKK30KKwog
dm9pZCBEcmF3aW5nQnVmZmVyOjpiaW5kKCkKIHsKICAgICBpZiAoIW1fY29udGV4dCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuaAkocmV2aXNpb24gOTY2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgi
CiAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTQzLDEwICs0NCw4IEBACiAjZW5k
aWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLWNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bTsK
LSNlbmRpZgorY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBJbWFnZURhdGE7CiAKIC8v
IE1hbmFnZXMgYSByZW5kZXJpbmcgdGFyZ2V0IChmcmFtZWJ1ZmZlciArIGF0dGFjaG1lbnQpIGZv
ciBhIGNhbnZhcy4gIENhbiBwdWJsaXNoIGl0cyByZW5kZXJpbmcKIC8vIHJlc3VsdHMgdG8gYSBQ
bGF0Zm9ybUxheWVyIGZvciBjb21wb3NpdGluZy4KQEAgLTc1LDEwICs3NCwyMiBAQCBwdWJsaWM6
CiAKICAgICAvLyBDb3BpZXMgdGhlIG11bHRpc2FtcGxlIGNvbG9yIGJ1ZmZlciB0byB0aGUgbm9y
bWFsIGNvbG9yIGJ1ZmZlciBhbmQgbGVhdmVzIG1fZmJvIGJvdW5kCiAgICAgdm9pZCBjb21taXQo
bG9uZyB4ID0gMCwgbG9uZyB5ID0gMCwgbG9uZyB3aWR0aCA9IC0xLCBsb25nIGhlaWdodCA9IC0x
KTsKLSAgICAKLSAgICBib29sIG11bHRpc2FtcGxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0
ICYmIG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgJiYgbV9tdWx0
aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZDsgfQotICAgIAorCisgICAgLy8gY29tbWl0IHNob3Vs
ZCBjb3B5IHRoZSBmdWxsIG11bHRpc2FtcGxlIGJ1ZmZlciwgYW5kIG5vdCByZXNwZWN0IHRoZQor
ICAgIC8vIGN1cnJlbnQgc2Npc3NvciBib3VuZHMuIFRyYWNrIHRoZSBzdGF0ZSBvZiB0aGUgc2Np
c3NvciB0ZXN0IHNvIHRoYXQgaXQKKyAgICAvLyBjYW4gYmUgZGlzYWJsZWQgZHVyaW5nIGNhbGxz
IHRvIGNvbW1pdC4KKyAgICB2b2lkIHNldFNjaXNzb3JFbmFibGVkKGJvb2wgc2Npc3NvckVuYWJs
ZWQpIHsgbV9zY2lzc29yRW5hYmxlZCA9IHNjaXNzb3JFbmFibGVkOyB9CisKKyAgICBib29sIG11
bHRpc2FtcGxlKCkgY29uc3Q7CisKICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtQ29sb3JC
dWZmZXIoKSBjb25zdDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKCkgY29uc3Q7
CisKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFn
ZURhdGEoKTsKKworICAgIC8vIEltbWVkaWF0ZWx5IHJlbGVhc2VzIG93bmVyc2hpcCBvZiBhbGwg
cmVzb3VyY2VzLiBDYWxsIHVwb24gbG9zcyBvZiB0aGUKKyAgICAvLyBncmFwaGljcyBjb250ZXh0
IHRvIHByZXZlbnQgZnJlZWluZyBpbnZhbGlkIHJlc291cmNlcy4KKyAgICB2b2lkIGRpc2NhcmRS
ZXNvdXJjZXMoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCk7CkBAIC04OCw5ICs5OSwxNSBAQCBwdWJsaWM6CiAg
ICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXpl
Jik7Ci0gICAgCi0gICAgRHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IElu
dFNpemUmLCBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLCBib29sIHBhY2tlZERl
cHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RHJh
d2luZ0J1ZmZlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIGJv
b2wpOworCisgICAgRHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNp
emUmLCBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAg
ICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsIGJvb2wgc2VwYXJh
dGVCYWNraW5nVGV4dHVyZSk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYp
OworCisgICAgYm9vbCBtX3NlcGFyYXRlQmFja2luZ1RleHR1cmU7CisgICAgYm9vbCBtX3NjaXNz
b3JFbmFibGVkOwogCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiAg
ICAgSW50U2l6ZSBtX3NpemU7CkBAIC05OCw2ICsxMTUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQ7CiAgICAgUGxhdGZvcm0zRE9i
amVjdCBtX2ZibzsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fY29sb3JCdWZmZXI7CisgICAgUGxh
dGZvcm0zRE9iamVjdCBtX2JhY2tpbmdDb2xvckJ1ZmZlcjsKIAogICAgIC8vIFRoaXMgaXMgdXNl
ZCB3aGVuIHdlIGhhdmUgT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsLgogICAgIFBsYXRmb3JtM0RP
YmplY3QgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFjLm1t
CShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksMTEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSW50U2l6ZSYgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0
aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCi0gICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICA6IG1fc2VwYXJhdGVCYWNraW5nVGV4
dHVyZShzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgICwgbV9zY2lzc29yRW5hYmxlZChmYWxz
ZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAs
IG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBw
b3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNr
ZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCkBAIC01Miw2ICs1NSw5IEBAIERyYXdp
bmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAsIG1fbXVsdGlzYW1wbGVG
Qk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogeworICAgIC8vIFN1cHBv
cnQgZm9yIGEgc2VwYXJhdGUgYmFja2luZyB0ZXh0dXJlIGhhcyBvbmx5IGJlZW4gZW5hYmxlZCBm
b3IKKyAgICAvLyB0aGUgY2hyb21pdW0gcG9ydC4KKyAgICBBU1NFUlQoIW1fc2VwYXJhdGVCYWNr
aW5nVGV4dHVyZSk7CiAgICAgQVNTRVJUKG1fZmJvKTsKICAgICBpZiAoIW1fZmJvKSB7CiAgICAg
ICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
cXQvRHJhd2luZ0J1ZmZlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNwcAkocmV2aXNpb24gOTY2MzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1ZmZl
clF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1
cHBvcnRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0
ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25T
dXBwb3J0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVCYWNr
aW5nVGV4dHVyZSkKKyAgICA6IG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZShzZXBhcmF0ZUJhY2tp
bmdUZXh0dXJlKQorICAgICwgbV9zY2lzc29yRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fY29udGV4
dChjb250ZXh0KQogICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRl
bnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3Bh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb25TdXBwb3J0ZWQpCkBAIC00Nyw2ICs1MCw5IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdC
dWZmZXIoR3JhcGhpY3NDb24KICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVs
dGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogeworICAgIC8vIFN1cHBvcnQgZm9yIGEgc2VwYXJhdGUg
YmFja2luZyB0ZXh0dXJlIGhhcyBvbmx5IGJlZW4gZW5hYmxlZCBmb3IKKyAgICAvLyB0aGUgY2hy
b21pdW0gcG9ydC4KKyAgICBBU1NFUlQoIW1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSk7CiAgICAg
QVNTRVJUKG1fZmJvKTsKICAgICBpZiAoIW1fZmJvKSB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTcyNzMpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisy
MDExLTEwLTEyICBKZWZmIFRpbWFudXMgIDx0d2l6QGNocm9taXVtLm9yZz4KKworICAgICAgICBb
Q2hyb21pdW1dIFBhdGNoIHRoYXQgZGVtb25zdHJhdGVzIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRv
IGFsbG93IFdlYkdMCisgICAgICAgIHRvIHNoYXJlIGl0cyBiYWNraW5nIHN0b3JlIGRpcmVjdGx5
IHdpdGggdGhlIGNvbXBvc2l0b3IuCisgICAgICAgIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0cyBj
cmVhdGUgYW5kIHJlbmRlciB0byBGQk9zIG1hbmFnZWQgYnkgYQorICAgICAgICBEcmF3aW5nQnVm
ZmVyIGluc3RhbmNlLiAgQWxsIFBsYXRmb3JtTGF5ZXIgbGlmZXRpbWUgbWFuYWdlbWVudCBpcwor
ICAgICAgICBwZXJmb3JtZWQgYnkgdGhlIERyYXdpbmdCdWZmZXIuCisgICAgICAgIENoYW5nZXMg
YXJlIG9ubHkgcmVsZXZhbnQgdG8gQ2hyb21pdW0gcG9ydHMuICBGdW5jdGlvbmFsaXR5IGlzIAor
ICAgICAgICB1bmNoYW5nZWQgZm9yIG90aGVyIHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyMDEKKworICAgICAgICAqIHNyYy9HcmFwaGlj
c0NvbnRleHQzRENocm9taXVtLmNwcDogQWxsb3cgc3BlY2lmaWNhdGlvbiBmb3IgYW4gb3B0aW9u
YWwKKyAgICAgICAgRHJhd2luZ0J1ZmZlciBpbnN0YW5jZSB0byB0aGUgcGFpbnRSZW5kZXJpbmdS
ZXN1bHRzKiByb3V0aW5lcyB0byBvdmVycmlkZQorICAgICAgICByZWFkaW5nIGZyb20gRkIgMC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmg6CisK
IDIwMTEtMTAtMTIgIFNlcmdleSBHbGF6dW5vdiAgPHNlcmcuZ2xhenVub3ZAZ21haWwuY29tPgog
CiAgICAgICAgIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVJZkphdmFTY3JpcHRVUkwgZ2V0cyBj
b25mdXNlZCBieSBzeW5jaHJvbm91cyBmcmFtZSBsb2FkcwpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJ
KHJldmlzaW9uIDk2NjM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0RDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNp
bmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIK
ICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCkBAIC0xNjMs
NiArMTY0LDIwIEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUdyYXAKICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRG
cm9tV2ViQ29udGV4dCh3ZWJDb250ZXh0LnJlbGVhc2UoKSwgYXR0cnMsIGhvc3RXaW5kb3csIHJl
bmRlclN0eWxlLCB0aHJlYWRVc2FnZSk7CiB9CiAKK3ZvaWQgZ2V0RHJhd2luZ1BhcmFtZXRlcnMo
RHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQz
RCogZ3JhcGhpY3NDb250ZXh0M0QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3Jt
M0RPYmplY3QqIGZyYW1lQnVmZmVySWQsIGludCogd2lkdGgsIGludCogaGVpZ2h0KQoreworICAg
IGlmIChkcmF3aW5nQnVmZmVyKSB7CisgICAgICAgICpmcmFtZUJ1ZmZlcklkID0gZHJhd2luZ0J1
ZmZlci0+ZnJhbWVidWZmZXIoKTsKKyAgICAgICAgKndpZHRoID0gZHJhd2luZ0J1ZmZlci0+c2l6
ZSgpLndpZHRoKCk7CisgICAgICAgICpoZWlnaHQgPSBkcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVp
Z2h0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKmZyYW1lQnVmZmVySWQgPSAwOworICAgICAg
ICAqd2lkdGggPSBncmFwaGljc0NvbnRleHQzRC0+d2lkdGgoKTsKKyAgICAgICAgKmhlaWdodCA9
IGdyYXBoaWNzQ29udGV4dDNELT5oZWlnaHQoKTsKKyAgICB9Cit9CisKIH0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZvckFub3RoZXJUaHJlYWQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdy
YXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKQEAgLTMwOCwxMCArMzIz
LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludEZyYW0KICNlbmRpZgog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogewog
ICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNvbnRleHQtPmNhbnZhcygpLT5idWZmZXIo
KTsKLSAgICBwYWludEZyYW1lYnVmZmVyVG9DYW52YXMoMCwgbV9pbXBsLT53aWR0aCgpLCBtX2lt
cGwtPmhlaWdodCgpLCAhbV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxp
ZWRBbHBoYSwgaW1hZ2VCdWZmZXIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXJJ
ZDsKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBnZXREcmF3aW5nUGFyYW1ldGVycyhkcmF3
aW5nQnVmZmVyLCBtX2ltcGwuZ2V0KCksICZmcmFtZWJ1ZmZlcklkLCAmd2lkdGgsICZoZWlnaHQp
OworICAgIHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhmcmFtZWJ1ZmZlcklkLCB3aWR0aCwgaGVp
Z2h0LCAhbV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwg
aW1hZ2VCdWZmZXIpOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
CkBAIC0zMjMsMTYgKzM0MSwyMCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFp
bnRDb21wCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgp
CitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQog
ewogICAgIGlmIChtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFs
cGhhKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFn
ZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKG1faW1wbC0+d2lkdGgoKSwgbV9pbXBs
LT5oZWlnaHQoKSkpOworCisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOworICAg
IGludCB3aWR0aCwgaGVpZ2h0OworICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZm
ZXIsIG1faW1wbC5nZXQoKSwgJmZyYW1lYnVmZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7CisKKyAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXpl
KHdpZHRoLCBoZWlnaHQpKTsKICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEt
PmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogbV9p
bXBsLT53aWR0aCgpICogbV9pbXBsLT5oZWlnaHQoKTsKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9
IDQgKiB3aWR0aCAqIGhlaWdodDsKIAotICAgIG1faW1wbC0+cmVhZEJhY2tGcmFtZWJ1ZmZlcihw
aXhlbHMsIGJ1ZmZlclNpemUsIDAsIG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSk7
CisgICAgbV9pbXBsLT5yZWFkQmFja0ZyYW1lYnVmZmVyKHBpeGVscywgYnVmZmVyU2l6ZSwgZnJh
bWVidWZmZXJJZCwgd2lkdGgsIGhlaWdodCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJ1ZmZlclNpemU7IGkgKz0gNCkKICAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxz
W2kgKyAyXSk7CkBAIC0xMDU1LDkgKzEwNzcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpp
c1Jlc291cmNlU2FmZSgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZv
cm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAg
IFdlYkdMTGF5ZXJDaHJvbWl1bSogY2FudmFzTGF5ZXIgPSBtX3ByaXZhdGUtPnBsYXRmb3JtTGF5
ZXIoKTsKLSAgICBjYW52YXNMYXllci0+c2V0Q29udGV4dCh0aGlzKTsKLSAgICByZXR1cm4gY2Fu
dmFzTGF5ZXI7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGxhdGZvcm1MYXllcigpOwogfQogI2Vu
ZGlmCiAKQEAgLTEyMTMsOCArMTIzMywxNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXll
ckNvbXBvc2l0ZWQoCiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bGF5ZXJDb21wb3NpdGVkKCk7CiB9
CiAKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMs
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfUihwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSwgUGFzc1JlZlB0cjxJbWFnZURhdGE+KQordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhjb250
ZXh0LCBkcmF3aW5nQnVmZmVyKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNz
Q29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVy
KiBkcmF3aW5nQnVmZmVyKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKGRyYXdpbmdCdWZmZXIpOworfQorCiBERUxFR0FURV9UT19JTlRF
Uk5BTF8xUihwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMsIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqLCBib29sKQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludHNJbnRvQ2FudmFz
QnVmZmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCShyZXZpc2lvbiA5NjYzNSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIFdlYlZpZXdJbXBsOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBFeHRlbnNpb25zM0RDaHJv
bWl1bTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBjbGFzcyBXZWJHTExheWVy
Q2hyb21pdW07CkBAIC05NSw5ICs5Niw5IEBAIHB1YmxpYzoKICAgICBib29sIGxheWVyQ29tcG9z
aXRlZCgpIGNvbnN0OwogICAgIHZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgpOwogCi0gICAgdm9p
ZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7
CisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0KiwgRHJhd2luZ0J1ZmZlciopOwogICAgIHZvaWQgcGFpbnRGcmFtZWJ1ZmZlclRvQ2Fu
dmFzKGludCBmcmFtZWJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHByZW11bHRp
cGx5QWxwaGEsIEltYWdlQnVmZmVyKik7Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+
IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKTsKICAgICBi
b29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKICAgICBib29sIHBhaW50Q29tcG9z
aXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111188</attachid>
            <date>2011-10-16 15:34:54 -0700</date>
            <delta_ts>2011-10-16 17:03:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111016183239.patch</filename>
            <type>text/plain</type>
            <size>48144</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NTc3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMTAtMTYgIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUGF0Y2ggdGhh
dCBkZW1vbnN0cmF0ZXMgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuICBBbGwg
UGxhdGZvcm1MYXllciBsaWZldGltZSBtYW5hZ2VtZW50IGlzCisgICAgICAgIHBlcmZvcm1lZCBi
eSB0aGUgRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgQ2hhbmdlcyBhcmUgb25seSByZWxldmFudCB0
byBDaHJvbWl1bSBwb3J0cy4gIEZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgdW5jaGFuZ2VkIGZv
ciBvdGhlciBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOiAgQ29uc3RydWN0
IGEgRHJhd2luZ0J1ZmZlcgorICAgICAgICBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCBmb3J3
YXJkIGFsbCBmcmFtZWJ1ZmZlciBtYW5hZ2VtZW50IGNhbGxzIHRvCisgICAgICAgIGl0LgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250
ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFySWZDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRl
eEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxl
dGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFt
ZWJ1ZmZlcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVEcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Ry
YXdpbmdCdWZmZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmF0ZUNvbG9y
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1MYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmZyYW1lYnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpzZXRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldERyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6ZHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TExheWVyQ2hyb21pdW06OnNldENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd2luZ0J1ZmZlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1
ZmZlcjo6Y2xlYXJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjb21taXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6bXVsdGlzYW1wbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6ZGlzY2FyZFJlc291cmNlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdpbmdCdWZmZXI6OnNldFNjaXNzb3JFbmFibGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1h
Z2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQz
RFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorCiAyMDExLTEwLTE2ICBEbWl0
cnkgTG9tb3YgIDxkc2xvbW92QGdvb2dsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTg2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDk3
NTAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTEgQEAKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKwor
I2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNlbmRp
ZgorCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJPRVNTdGFuZGFyZERl
cml2YXRpdmVzLmgiCiAjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCkBAIC0zNjMsNyArMzY4
LDEyIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFIKICAgICB9CiAK
ICAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRydWU7CisjaWYgUExBVEZPUk0oQ0hST01J
VU0pCisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IHRydWU7CisjZWxzZQogICAgIGF0
dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBmYWxzZTsKKyNlbmRpZgorCiAKICAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRy
aWJ1dGVzLCBob3N0V2luZG93KSk7CiAKQEAgLTM3OSw2ICszODksNyBAQCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVz
KQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCiAgICAgLCBtX2Nv
bnRleHQoY29udGV4dCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQogICAgICwgbV9yZXN0b3Jl
QWxsb3dlZChmYWxzZSkKICAgICAsIG1fcmVzdG9yZVRpbWVyKHRoaXMpCiAgICAgLCBtX3ZpZGVv
Q2FjaGUoNCkKQEAgLTM4Niw2ICszOTcsMTcgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJH
TFJlbmRlcmluZ0NvbgogICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNT
RVJUKG1fY29udGV4dCk7CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBDcmVhdGUg
dGhlIERyYXdpbmdCdWZmZXIgYW5kIGluaXRpYWxpemUgdGhlIHBsYXRmb3JtIGxheWVyLgorICAg
IG1fZHJhd2luZ0J1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRlRHJhd2luZ0J1ZmZlcighbV9hdHRy
aWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwg
Y2FudmFzKCktPmhlaWdodCgpKSk7CisgICAgbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCktPnNl
dERyYXdpbmdCdWZmZXIobV9kcmF3aW5nQnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPnBsYXRmb3Jt
TGF5ZXIoKS0+c2V0Q29udGV4dChtX2NvbnRleHQuZ2V0KCkpOworI2VuZGlmCisKKyAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKwogICAg
IHNldHVwRmxhZ3MoKTsKICAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwogfQpAQCAtNDUxLDYg
KzQ3Myw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmUKICAgICBp
ZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKICAgICAgICAgaW5pdFZlcnRleEF0dHJpYjAoKTsKIAor
ICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQo
SW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisKICAgICBt
X2NvbnRleHQtPnJlc2hhcGUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7
CiAgICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFz
KCktPmhlaWdodCgpKTsKIApAQCAtNDgzLDcgKzUwOCw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjptYXJrQ29udGV4dEMKIHsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCiAg
ICAgICAgIHJldHVybjsKKwogICAgIG1fY29udGV4dC0+bWFya0NvbnRleHRDaGFuZ2VkKCk7CisK
ICAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5yZW5kZXJCb3goKTsK
QEAgLTUxMyw4ICs1NDAsMTIgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZD
b21wbwogICAgIC8vIERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNs
ZWFyIHRoZSB1c2VyIGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4KICAgICBib29sIGNvbWJpbmVk
Q2xlYXIgPSBtYXNrICYmICFtX3NjaXNzb3JFbmFibGVkOwogCi0gICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nKQotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykg
eworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5iaW5kKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgfQogICAg
IG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAg
ICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9C
VUZGRVJfQklUKSkKICAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY29sb3JNYXNrWzBd
ID8gbV9jbGVhckNvbG9yWzBdIDogMCwKQEAgLTU3NCwxNyArNjA1LDI5IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmkKICAgICB9IGVsc2UKICAgICAgICAgY2FudmFz
KCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOwogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisK
ICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkgJiYgIW1fbGF5ZXJDbGVhcmVkKQogICAgICAg
ICByZXR1cm47CisKICAgICBjYW52YXMoKS0+Y2xlYXJDb3BpZWRJbWFnZSgpOwogICAgIG1fbWFy
a2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKLSAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKHRoaXMpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKyAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKHRoaXMsIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CiB9CiAKIFBh
c3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKCkKIHsKICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIHJl
dHVybiBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsK
KyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBtX2NvbnRleHQtPnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvSW1hZ2VEYXRhKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgcmV0
dXJuIGltYWdlRGF0YTsKIH0KIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50c0lu
dG9DYW52YXNCdWZmZXIoKSBjb25zdApAQCAtNjE2LDE2ICs2NTksMjUgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50CiAKICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIG1h
cmsgdGhlIGNhbnZhcyBhcyBkaXJ0eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2UgYnVm
ZmVyIHdpbGwgYWxzbyBzdGFydCBvZmYKICAgICAvLyBjbGVhciAoYW5kIHRoaXMgbWF0Y2hlcyB3
aGF0IHJlc2hhcGUgd2lsbCBkbykuCi0gICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWln
aHQpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
cmVzZXQoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRl
eHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CiB9CiAKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0CiB7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKKyAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7CisKICAg
ICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7
CiB9CiAKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWlnaHQoKSBj
b25zdAogeworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdp
bmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKKwogICAgIHJldHVybiBtX2NvbnRleHQtPmdldElu
dGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7CiB9CiAKQEAgLTc0NSw3ICs3OTcsMTEg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZgogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwotICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOworICAg
IGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAg
IC8vIEluc3RlYWQgb2YgYmluZGluZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KKyAg
ICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwogICAg
IGlmIChidWZmZXIpCiAgICAgICAgIGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0xMDg0LDkgKzExNDAsMjEgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZQogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVzb3VyY2VTYWZl
KCkpCisgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKKyAgICAgICAgLy8gQ29tbWl0IERyYXdp
bmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAgaWYg
KCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAgICAgIG1fY29udGV4dC0+Y29weVRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IGJvcmRlcik7Ci0gICAgZWxzZSB7CisKKyAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVy
IGlmIG5lZWRlZAorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2lu
Z0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9y
IG11bHRpc2FtcGxpbmcpCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9k
cmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwog
ICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKICAgICAgICAgR0MzRHNpemVpIGNs
aXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKICAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZl
ckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRI
ZWlnaHQpKSB7CkBAIC0xMDk4LDYgKzExNjYsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvcHlUZXhJbWFnZQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisKKyAgICAgICAgLy8gUmVzdG9yZSBE
cmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgp
OwogICAgIH0KICAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0
ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgogICAgIHRleC0+c2V0TGV2
ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CkBAIC0xMjc0LDcgKzEzNDYsMTAgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUZyYW1lYgogICAgIGlmIChmcmFtZWJ1ZmZl
ciA9PSBtX2ZyYW1lYnVmZmVyQmluZGluZykgewogICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGlu
ZyA9IDA7CiAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVidWZmZXIgaGVyZSB0byBi
aW5kIGJhY2sgdG8gaW50ZXJuYWwgZmJvLgotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgICAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CiAgICAgfQogfQogCkBAIC0xMzYxLDggKzE0MzYs
MTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUoR0MzRAogewogICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKQor
ICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewogICAgICAg
ICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Npc3Nv
ckVuYWJsZWQpOworICAgIH0KICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMTcwMyw4ICsxNzgxLDExIEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGUKIHsKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkKKyAgICBpZiAo
Y2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKICAgICAgICAgbV9zY2lz
c29yRW5hYmxlZCA9IHRydWU7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQp
OworICAgIH0KICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXApOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yODc2LDcgKzI5NTcsMTcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMoRwogICAgIH0KICAgICBjbGVhcklmQ29tcG9zaXRl
ZCgpOwogICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMtPmJhc2VBZGRyZXNzKCk7CisKKyAgICAvLyBD
b21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQor
ICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxz
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisKKyAgICAvLyBSZXN0
b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGlu
ZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwor
CiAjaWYgT1MoREFSV0lOKQogICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBzZWN0aW9uIHdoZW4g
R0wgZHJpdmVyIGJ1ZyBvbiBNYWMgaXMgZml4ZWQsIGkuZS4sCiAgICAgLy8gd2hlbiBhbHBoYSBp
cyBvZmYsIHJlYWRQaXhlbHMgc2hvdWxkIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgpA
QCAtNDExOSwxNCArNDIxMCwxNCBAQCBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3Vu
ZEZyYW1lCiB7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJC
aW5kaW5nLT5vYmplY3QoKSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5n
ZXRXaWR0aCgpOwotICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkud2lkdGgoKTsKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVm
ZmVyLT5zaXplKCkud2lkdGgoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS53aWR0aCgpOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZy
YW1lYnVmZmVySGVpZ2h0KCkKIHsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPmdldEhlaWdodCgpOwotICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/
IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5h
bEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOwogfQogCiBXZWJHTFRleHR1cmUqIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXh0dXJlQmluZGluZyhHQzNEZW51bSB0YXJnZXQsIGJv
b2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQpAQCAtNDgyMiw2ICs0OTEzLDEyIEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3RvcmUKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRoZSBuZXcgR3Jh
cGhpY3NDb250ZXh0M0QuCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVy
ID0gbV9jb250ZXh0LT5jcmVhdGVEcmF3aW5nQnVmZmVyKCFtX2F0dHJpYnV0ZXMucHJlc2VydmVE
cmF3aW5nQnVmZmVyLCBtX2RyYXdpbmdCdWZmZXItPnNpemUoKSk7CisgICAgfQorCiAgICAgbV9j
b250ZXh0ID0gY29udGV4dDsKICAgICBtX2NvbnRleHRMb3N0ID0gZmFsc2U7CiAgICAgaW5pdGlh
bGl6ZU5ld0NvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA5NzUwMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFdlYkdMUmVuZGVyaW5nQ29udGV4dF9oCiAKICNp
bmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZl
ci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGbG9hdDMyQXJyYXku
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgpAQCAtMzU1LDYgKzM1NiwxMCBAQCBw
dWJsaWM6CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKIAorICAg
IC8vIE9wdGlvbmFsIHN0cnVjdHVyZSBmb3IgcmVuZGVyaW5nIHRvIGEgRHJhd2luZ0J1ZmZlciwg
aW5zdGVhZCBvZiBkaXJlY3RseQorICAgIC8vIHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2NvbnRl
eHQuCisgICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IG1fZHJhd2luZ0J1ZmZlcjsKKwogICAgIGNs
YXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc3RvcmVUaW1lciA6IHB1YmxpYyBUaW1lckJhc2Ug
ewogICAgIHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVz
dG9yZVRpbWVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkgOiBtX2NvbnRleHQoY29u
dGV4dCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA5NzUwMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgsOSArNTgsOSBAQCB1aW50OF90IGNvbnZlcnRDb2xvcjE2QmlnVG84KHVpbnQx
Nl90IHZhCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAogCi1QYXNzUmVmUHRyPERyYXdpbmdC
dWZmZXI+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVEcmF3aW5nQnVmZmVyKGNvbnN0IEludFNp
emUmIHNpemUpCitQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGVEcmF3aW5nQnVmZmVyKGJvb2wgc2VwYXJhdGVCYWNraW5nQnVmZmVyLCBjb25zdCBJbnRT
aXplJiBzaXplKQogewotICAgIHJldHVybiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUodGhpcywgc2l6
ZSk7CisgICAgcmV0dXJuIERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBzaXplLCBzZXBhcmF0
ZUJhY2tpbmdCdWZmZXIpOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJE
UmVzb3VyY2VTYWZlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCB1bnBhY2tBbGln
bm1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDk3NTAzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAt
NTAwLDggKzUwMCw4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZvaWQgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAKLSAgICBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZURyYXdpbmdCdWZm
ZXIoY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKCkpOwotICAgIAorICAgIFBhc3NSZWZQdHI8RHJh
d2luZ0J1ZmZlcj4gY3JlYXRlRHJhd2luZ0J1ZmZlcihib29sIHNlcGFyYXRlQmFja2luZ0J1ZmZl
ciwgY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKCkpOworCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQ
TEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkKICAgICAv
LyBXaXRoIG11bHRpc2FtcGxpbmcgb24sIGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZCTyB0byByZWd1
bGFyIEZCTy4KICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CkBAIC03OTEsOCArNzkxLDggQEAg
cHVibGljOgogICAgIHZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgpOwogICAgIGJvb2wgbGF5ZXJD
b21wb3NpdGVkKCkgY29uc3Q7CiAKLSAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4g
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICB2b2lkIHBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqLCBEcmF3aW5nQnVmZmVy
Kik7CisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1h
Z2VEYXRhKERyYXdpbmdCdWZmZXIqKTsKICAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNU
b0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7CiAKICNpZiBQTEFURk9STShRVCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZm
ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gOTc1MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVm
ZmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNs
dWRlICJEcmF3aW5nQnVmZmVyLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQ4LDcgKzQ5LDYgQEAgc3RhdGljIHVuc2lnbmVkIGdlbmVyYXRlQ29sb3JUZXh0dXJlKEdy
YQogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6
OkNMQU1QX1RPX0VER0UpOwogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwogICAgIGNvbnRleHQtPnRleEltYWdlMkRS
ZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAgY29u
dGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBvZmZzY3JlZW5Db2xvclRleHR1cmUsIDApOwogCiAgICAgcmV0dXJuIG9m
ZnNjcmVlbkNvbG9yVGV4dHVyZTsKIH0KQEAgLTU2LDI3ICs1NiwyNCBAQCBzdGF0aWMgdW5zaWdu
ZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUoR3JhCiBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJbnRTaXplJiBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKLSAgICA6IG1f
Y29udGV4dChjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBhY2tl
ZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgIDogbV9zZXBhcmF0ZUJhY2tp
bmdUZXh0dXJlKHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgLCBtX3NjaXNzb3JFbmFibGVk
KGZhbHNlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3NpemUoLTEsIC0xKQog
ICAgICwgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZChtdWx0aXNhbXBsZUV4dGVuc2lv
blN1cHBvcnRlZCkKICAgICAsIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVk
KHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKICAgICAsIG1fZmJvKDApCiAg
ICAgLCBtX2NvbG9yQnVmZmVyKDApCisgICAgLCBtX2JhY2tpbmdDb2xvckJ1ZmZlcigwKQogICAg
ICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fZGVwdGhCdWZmZXIoMCkKICAgICAs
IG1fc3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9t
dWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiB7Ci0gICAgbV9mYm8gPSBjb250ZXh0LT5jcmVhdGVG
cmFtZWJ1ZmZlcigpOwotICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBtX2NvbG9yQnVmZmVyID0gZ2VuZXJhdGVD
b2xvclRleHR1cmUoY29udGV4dCwgc2l6ZSk7Ci0gICAgY3JlYXRlU2Vjb25kYXJ5QnVmZmVycygp
OwotICAgIGlmICghcmVzZXQoc2l6ZSkpIHsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW5pdGlhbGl6ZShzaXplKTsKIH0KIAogRHJhd2lu
Z0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQpAQCAtODcsMTUgKzg0LDQzIEBAIERyYXdpbmdCdWZm
ZXI6On5EcmF3aW5nQnVmZmVyKCkKICAgICBjbGVhcigpOwogfQogCit2b2lkIERyYXdpbmdCdWZm
ZXI6OmluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX2ZibyA9IG1fY29u
dGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKworICAgIGlmIChtX3NlcGFyYXRlQmFja2luZ1Rl
eHR1cmUpCisgICAgICAgIG1fYmFja2luZ0NvbG9yQnVmZmVyID0gZ2VuZXJhdGVDb2xvclRleHR1
cmUobV9jb250ZXh0LmdldCgpLCBzaXplKTsKKworICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIG1fY29sb3JC
dWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShtX2NvbnRleHQuZ2V0KCksIHNpemUpOworICAg
IG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyLCAwKTsKKyAgICBjcmVhdGVTZWNvbmRh
cnlCdWZmZXJzKCk7CisgICAgaWYgKCFyZXNldChzaXplKSkgeworICAgICAgICBtX2NvbnRleHQu
Y2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1MYXll
cigpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAorICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG11bHRpc2FtcGxlKCkpCiAgICAg
ICAgIGNvbW1pdCgpOwotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBpZiAobV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKSB7CisgICAgICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAg
ICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBtX2JhY2tpbmdDb2xvckJ1ZmZlcik7CisgICAgICAgIHVuc2lnbmVkIGNvbG9yRm9ybWF0ID0g
bV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFscGhhID8gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEgOiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOworICAgICAgICBtX2NvbnRleHQtPmNv
cHlUZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBjb2xvckZvcm1h
dCwgMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSwgMCk7CisgICAgfQorCisg
ICAgaWYgKG11bHRpc2FtcGxlKCkpCisgICAgICAgIGJpbmQoKTsKKwogICAgIG1fY29udGV4dC0+
Zmx1c2goKTsKIH0KICNlbmRpZgpAQCAtMTA5LDcgKzEzNCwxMiBAQCBQbGF0Zm9ybUxheWVyKiBE
cmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUxhCiAKIFBsYXRmb3JtM0RPYmplY3QgRHJhd2luZ0J1ZmZl
cjo6cGxhdGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29sb3JCdWZm
ZXI7CisgICAgcmV0dXJuIG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSA/IG1fYmFja2luZ0NvbG9y
QnVmZmVyIDogbV9jb2xvckJ1ZmZlcjsKK30KKworUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVm
ZmVyOjpmcmFtZWJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmJvOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA5NzUwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsNyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
CisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpA
QCAtMTY0LDYgKzE2NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZlQ29u
dGVudHNUZXh0dXJlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUo
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcHJvdGVjdFZpc2libGVUaWxlVGV4dHVyZXMoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCopIHsg
fQogCiAgICAgLy8gVGhlc2UgZXhpc3QganVzdCBmb3IgZGVidWdnaW5nICh2aWEgZHJhd0RlYnVn
Qm9yZGVyKCkpLgogICAgIHZvaWQgc2V0RGVidWdCb3JkZXJDb2xvcihjb25zdCBDb2xvciYpOwpA
QCAtMTk5LDYgKzIwMSw5IEBAIHB1YmxpYzoKICAgICBDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJl
ZUhvc3QoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUhvc3QuZ2V0KCk7IH0KICAgICB2b2lk
IGNsZWFudXBSZXNvdXJjZXNSZWN1cnNpdmUoKTsKIAorICAgIHZvaWQgc2V0RHJhd2luZ0J1ZmZl
cihQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGRyYXdpbmdCdWZmZXIpIHsgbV9kcmF3aW5nQnVm
ZmVyID0gZHJhd2luZ0J1ZmZlcjsgfQorICAgIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gZHJh
d2luZ0J1ZmZlcigpIHsgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlcjsgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgQ0NMYXllckRlbGVnYXRlKiBtX2RlbGVnYXRlOwogICAgIGV4cGxpY2l0IExheWVyQ2hyb21p
dW0oQ0NMYXllckRlbGVnYXRlKik7CkBAIC0yNzUsNiArMjgwLDggQEAgcHJpdmF0ZToKICAgICBJ
bnRSZWN0IG1fZHJhd2FibGVDb250ZW50UmVjdDsKIAogICAgIFN0cmluZyBtX25hbWU7CisKKyAg
ICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVmZmVyOwogfTsKIAogdm9pZCBzb3J0
TGF5ZXJzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gOTc1MDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21p
dW0uaCIKIAorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25z
M0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCkBAIC04NSwxMCArODYsOCBAQCB2b2lkIFdlYkdMTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvCiAgICAgfQogICAgIC8vIFVwZGF0ZSB0aGUgY29u
dGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KICAgICBpZiAoIW1f
ZGlydHlSZWN0LmlzRW1wdHkoKSAmJiBtX3RleHR1cmVVcGRhdGVkKSB7Ci0gICAgICAgIC8vIHBy
ZXBhcmVUZXh0dXJlIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVy
IHRhcmdldCBpbnRvIHRoZSB0ZXh0dXJlCi0gICAgICAgIC8vIHVzZWQgYnkgdGhlIGNvbXBvc2l0
b3IuCi0gICAgICAgIC8vCi0gICAgICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKKyAg
ICAgICAgLy8gcHVibGlzaFRvUGxhdGZvcm1MYXllciBwcmVwYXJlcyB0aGUgY29udGVudHMgb2Yg
dGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBmb3IgdXNlIGJ5IHRoZSBjb21wb3NpdG9yLgor
ICAgICAgICBkcmF3aW5nQnVmZmVyKCktPnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKTsKICAgICAg
ICAgbV9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAgICAgICAgIHJlc2V0TmVlZHNE
aXNwbGF5KCk7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSBmYWxzZTsKQEAgLTEzMiw3ICsx
MzEsNyBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zCiAgICAgaWYg
KCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIGludCB0ZXh0dXJl
SWQgPSBtX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpOworICAgIHVuc2lnbmVkIGludCB0ZXh0
dXJlSWQgPSBkcmF3aW5nQnVmZmVyKCktPnBsYXRmb3JtQ29sb3JCdWZmZXIoKTsKICAgICBpZiAo
dGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkIHx8IGNvbnRleHRDaGFuZ2VkKSB7CiAgICAgICAgIG1f
dGV4dHVyZUNoYW5nZWQgPSB0cnVlOwogICAgICAgICBtX3RleHR1cmVVcGRhdGVkID0gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA5NzUwMykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFRleHR1cmVVcGRhdGVkKCk7CiAgICAgYm9vbCBwYWludFJlbmRlcmVkUmVzdWx0c1RvQ2FudmFz
KEltYWdlQnVmZmVyKik7CiAKLSAgICB2b2lkIHNldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZXh0KGNvbnN0IEdyYXBo
aWNzQ29udGV4dDNEKik7CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSB7IHJldHVy
biBtX2NvbnRleHQ7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNw
cAkocmV2aXNpb24gOTc1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjYsMTMgKzcy
NiwxNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAg
ICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBw
b3J0cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIpOwogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNz
Q29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVy
KiBkcmF3aW5nQnVmZmVyKQogeworICAgIC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGlt
cGxlbWVudGVkIGluIENocm9taXVtIHBvcnRzLgorICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEg
PSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKDEsIDEpKTsKICAgICByZXR1cm4gaW1hZ2VEYXRh
LnJlbGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9E
cmF3aW5nQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHJldmlzaW9uIDk3NTAzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogCiAj
aW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
KyNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OCw3
ICs1MCw3IEBAIHN0YXRpYyBpbnQgc19tYXhpbXVtUmVzb3VyY2VVc2VQaXhlbHMgPQogI2VuZGlm
CiBzdGF0aWMgaW50IHNfY3VycmVudFJlc291cmNlVXNlUGl4ZWxzID0gMDsKIAotUGFzc1JlZlB0
cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCitQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+
IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQogewogICAgIEV4dGVu
c2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKICAgICBib29s
IG11bHRpc2FtcGxlU3VwcG9ydGVkID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2Zy
YW1lYnVmZmVyX2JsaXQiKSAmJiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVi
dWZmZXJfbXVsdGlzYW1wbGUiKSAmJiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfT0VTX3JnYjhf
cmdiYTgiKTsKQEAgLTYwLDcgKzYyLDcgQEAgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3
aW5nQnVmZmVyOgogICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0gZXh0ZW5z
aW9ucy0+c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwogICAgIGlmIChw
YWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpCiAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVu
YWJsZWQoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAgIFJlZlB0cjxEcmF3aW5n
QnVmZmVyPiBkcmF3aW5nQnVmZmVyID0gYWRvcHRSZWYobmV3IERyYXdpbmdCdWZmZXIoY29udGV4
dCwgc2l6ZSwgbXVsdGlzYW1wbGVTdXBwb3J0ZWQsIHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRl
ZCkpOworICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyID0gYWRvcHRSZWYo
bmV3IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSwgbXVsdGlzYW1wbGVTdXBwb3J0ZWQsIHBh
Y2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCwgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkpOwogICAg
IHJldHVybiAoZHJhd2luZ0J1ZmZlci0+bV9jb250ZXh0KSA/IGRyYXdpbmdCdWZmZXIucmVsZWFz
ZSgpIDogMDsKIH0KIApAQCAtNzgsNiArODAsMTEgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpjbGVh
cigpCiAgICAgICAgIG1fY29sb3JCdWZmZXIgPSAwOwogICAgIH0KIAorICAgIGlmIChtX2JhY2tp
bmdDb2xvckJ1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9iYWNr
aW5nQ29sb3JCdWZmZXIpOworICAgICAgICBtX2JhY2tpbmdDb2xvckJ1ZmZlciA9IDA7CisgICAg
fQorCiAgICAgaWYgKG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcikgewogICAgICAgICBtX2NvbnRl
eHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogICAgICAg
ICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSAwOwpAQCAtMTY2LDcgKzE3Myw3IEBAIHZvaWQg
RHJhd2luZ0J1ZmZlcjo6Y2xlYXJGcmFtZWJ1ZmZlcigpCiAgICAgdW5zaWduZWQgY2hhciBkZXB0
aE1hc2sgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZm
OwogICAgIHVuc2lnbmVkIGNoYXIgaXNTY2lzc29yRW5hYmxlZCA9IGZhbHNlOwotICAgIHVuc2ln
bmVkIGxvbmcgY2xlYXJNYXNrID0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7
CisgICAgdW5zaWduZWQgY2xlYXJNYXNrID0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZF
Ul9CSVQ7CiAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKICAgICAgICAgbV9jb250ZXh0LT5n
ZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0
aCk7CiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxKTsKQEAgLTIzMyw3ICsyNDAsNyBA
QCBib29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAgaWYgKG5ld1Np
emUgIT0gbV9zaXplKSB7CiAgICAgICAgIG1fc2l6ZSA9IG5ld1NpemU7CiAKLSAgICAgICAgdW5z
aWduZWQgbG9uZyBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxSZW5k
ZXJidWZmZXJGb3JtYXQ7CisgICAgICAgIHVuc2lnbmVkIGludGVybmFsQ29sb3JGb3JtYXQsIGNv
bG9yRm9ybWF0LCBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZvcm1hdDsKICAgICAgICAgaWYgKGF0dHJp
YnV0ZXMuYWxwaGEpIHsKICAgICAgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQTsKICAgICAgICAgICAgIGNvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkE7CkBAIC0yNjksMTAgKzI3NiwxNiBAQCBib29sIERyYXdpbmdCdWZmZXI6OnJl
c2V0KGNvbnN0IEludFNpemUmCiAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogCiAgICAgICAgIG1fY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZm
ZXIpOwotICAgICAgICAKICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIDApOwogCiAgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVm
ZmVyLCAwKTsKKworICAgICAgICAvLyByZXNpemUgdGhlIGJhY2tpbmcgY29sb3IgYnVmZmVyCisg
ICAgICAgIGlmIChtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUpIHsKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmFja2lu
Z0NvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgfQorCiAgICAgICAgIG1fY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwogCiAgICAgICAgIGlm
ICghbXVsdGlzYW1wbGUoKSkKQEAgLTI5MywyMyArMzA2LDU2IEBAIHZvaWQgRHJhd2luZ0J1ZmZl
cjo6Y29tbWl0KGxvbmcgeCwgbG9uZwogewogICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAorCiAgICAgaWYgKHdpZHRoIDwgMCkKICAgICAgICAgd2lkdGggPSBt
X3NpemUud2lkdGgoKTsKICAgICBpZiAoaGVpZ2h0IDwgMCkKICAgICAgICAgaGVpZ2h0ID0gbV9z
aXplLmhlaWdodCgpOwotICAgICAgICAKKwogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgCisKICAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykgewogICAgICAgICBtX2Nv
bnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OlJFQURfRlJBTUVCVUZGRVIsIG1f
bXVsdGlzYW1wbGVGQk8pOwogICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRl
bnNpb25zM0Q6OkRSQVdfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisKKyAgICAgICAgaWYgKG1fc2Npc3NvckVuYWJsZWQp
CisgICAgICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCk7CisKKyAgICAgICAgLy8gVXNlIE5FQVJFU1QsIGJlY2F1c2UgdGhlcmUgaXMgbm8g
c2NhbGUgcGVyZm9ybWVkIGR1cmluZyB0aGUgYmxpdC4KKyAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCwgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5FQVJFU1QpOworCisgICAgICAgIGlmIChtX3NjaXNzb3JFbmFibGVkKQor
ICAgICAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1Jf
VEVTVCk7CiAgICAgfQotICAgIAorCiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiB9CiAKK2Jvb2wgRHJhd2luZ0J1
ZmZlcjo6bXVsdGlzYW1wbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHQgJiYgbV9j
b250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyAmJiBtX211bHRpc2FtcGxl
RXh0ZW5zaW9uU3VwcG9ydGVkOworfQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gRHJhd2luZ0J1
ZmZlcjo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQoreworICAgIHJldHVybiBt
X2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKHRoaXMpOworfQorCit2
b2lkIERyYXdpbmdCdWZmZXI6OmRpc2NhcmRSZXNvdXJjZXMoKQoreworICAgIG1fY29sb3JCdWZm
ZXIgPSAwOworICAgIG1fYmFja2luZ0NvbG9yQnVmZmVyID0gMDsKKyAgICBtX211bHRpc2FtcGxl
Q29sb3JCdWZmZXIgPSAwOworCisgICAgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgPSAwOworICAgIG1f
ZGVwdGhCdWZmZXIgPSAwOworCisgICAgbV9zdGVuY2lsQnVmZmVyID0gMDsKKworICAgIG1fbXVs
dGlzYW1wbGVGQk8gPSAwOworICAgIG1fZmJvID0gMDsKK30KKwogdm9pZCBEcmF3aW5nQnVmZmVy
OjpiaW5kKCkKIHsKICAgICBpZiAoIW1fY29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAkocmV2aXNpb24g
OTc1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1R5cGVzM0QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAKICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KQEAgLTQzLDEwICs0NCw4IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLWNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bTsKLSNlbmRpZgorY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CitjbGFzcyBJbWFnZURhdGE7CiAKIC8vIE1hbmFnZXMgYSByZW5kZXJp
bmcgdGFyZ2V0IChmcmFtZWJ1ZmZlciArIGF0dGFjaG1lbnQpIGZvciBhIGNhbnZhcy4gIENhbiBw
dWJsaXNoIGl0cyByZW5kZXJpbmcKIC8vIHJlc3VsdHMgdG8gYSBQbGF0Zm9ybUxheWVyIGZvciBj
b21wb3NpdGluZy4KQEAgLTc1LDEwICs3NCwyMiBAQCBwdWJsaWM6CiAKICAgICAvLyBDb3BpZXMg
dGhlIG11bHRpc2FtcGxlIGNvbG9yIGJ1ZmZlciB0byB0aGUgbm9ybWFsIGNvbG9yIGJ1ZmZlciBh
bmQgbGVhdmVzIG1fZmJvIGJvdW5kCiAgICAgdm9pZCBjb21taXQobG9uZyB4ID0gMCwgbG9uZyB5
ID0gMCwgbG9uZyB3aWR0aCA9IC0xLCBsb25nIGhlaWdodCA9IC0xKTsKLSAgICAKLSAgICBib29s
IG11bHRpc2FtcGxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+Z2V0
Q29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgJiYgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1
cHBvcnRlZDsgfQotICAgIAorCisgICAgLy8gY29tbWl0IHNob3VsZCBjb3B5IHRoZSBmdWxsIG11
bHRpc2FtcGxlIGJ1ZmZlciwgYW5kIG5vdCByZXNwZWN0IHRoZQorICAgIC8vIGN1cnJlbnQgc2Np
c3NvciBib3VuZHMuIFRyYWNrIHRoZSBzdGF0ZSBvZiB0aGUgc2Npc3NvciB0ZXN0IHNvIHRoYXQg
aXQKKyAgICAvLyBjYW4gYmUgZGlzYWJsZWQgZHVyaW5nIGNhbGxzIHRvIGNvbW1pdC4KKyAgICB2
b2lkIHNldFNjaXNzb3JFbmFibGVkKGJvb2wgc2Npc3NvckVuYWJsZWQpIHsgbV9zY2lzc29yRW5h
YmxlZCA9IHNjaXNzb3JFbmFibGVkOyB9CisKKyAgICBib29sIG11bHRpc2FtcGxlKCkgY29uc3Q7
CisKICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtQ29sb3JCdWZmZXIoKSBjb25zdDsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKCkgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRy
PEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKworICAgIC8v
IEltbWVkaWF0ZWx5IHJlbGVhc2VzIG93bmVyc2hpcCBvZiBhbGwgcmVzb3VyY2VzLiBDYWxsIHVw
b24gbG9zcyBvZiB0aGUKKyAgICAvLyBncmFwaGljcyBjb250ZXh0IHRvIHByZXZlbnQgZnJlZWlu
ZyBpbnZhbGlkIHJlc291cmNlcy4KKyAgICB2b2lkIGRpc2NhcmRSZXNvdXJjZXMoKTsKIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKCk7CkBAIC04OCw5ICs5OSwxNSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
eHQ7IH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBj
cmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7Ci0gICAgCi0gICAgRHJh
d2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29sIG11bHRp
c2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLCBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lv
blN1cHBvcnRlZCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gY3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIGJvb2wpOworCisgICAgRHJhd2lu
Z0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29sIG11bHRpc2Ft
cGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSk7
CisKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYpOworCisgICAgYm9vbCBtX3Nl
cGFyYXRlQmFja2luZ1RleHR1cmU7CisgICAgYm9vbCBtX3NjaXNzb3JFbmFibGVkOwogCiAgICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiAgICAgSW50U2l6ZSBtX3NpemU7
CkBAIC05OCw2ICsxMTUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb25TdXBwb3J0ZWQ7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsKICAgICBQ
bGF0Zm9ybTNET2JqZWN0IG1fY29sb3JCdWZmZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2Jh
Y2tpbmdDb2xvckJ1ZmZlcjsKIAogICAgIC8vIFRoaXMgaXMgdXNlZCB3aGVuIHdlIGhhdmUgT0VT
X3BhY2tlZF9kZXB0aF9zdGVuY2lsLgogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9kZXB0aFN0ZW5j
aWxCdWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFj
L0RyYXdpbmdCdWZmZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFjLm1tCShyZXZpc2lvbiA5NzUwMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZl
ck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1
cHBvcnRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0
ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25T
dXBwb3J0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVCYWNr
aW5nVGV4dHVyZSkKKyAgICA6IG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZShzZXBhcmF0ZUJhY2tp
bmdUZXh0dXJlKQorICAgICwgbV9zY2lzc29yRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fY29udGV4
dChjb250ZXh0KQogICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRl
bnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3Bh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb25TdXBwb3J0ZWQpCkBAIC01Miw2ICs1NSw5IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdC
dWZmZXIoR3JhcGhpY3NDb24KICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVs
dGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogeworICAgIC8vIFN1cHBvcnQgZm9yIGEgc2VwYXJhdGUg
YmFja2luZyB0ZXh0dXJlIGhhcyBvbmx5IGJlZW4gZW5hYmxlZCBmb3IKKyAgICAvLyB0aGUgY2hy
b21pdW0gcG9ydC4KKyAgICBBU1NFUlQoIW1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSk7CiAgICAg
QVNTRVJUKG1fZmJvKTsKICAgICBpZiAoIW1fZmJvKSB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
cXQvRHJhd2luZ0J1ZmZlclF0LmNwcAkocmV2aXNpb24gOTc1MDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsOCArMzQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRHJhd2luZ0J1ZmZl
cjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBw
b3J0ZWQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICA6
IG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZShzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgICwg
bV9zY2lzc29yRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwg
bV9zaXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVs
dGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4
dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCkBA
IC00Nyw2ICs1MCw5IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24K
ICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cigwKQogeworICAgIC8vIFN1cHBvcnQgZm9yIGEgc2VwYXJhdGUgYmFja2luZyB0ZXh0dXJlIGhh
cyBvbmx5IGJlZW4gZW5hYmxlZCBmb3IKKyAgICAvLyB0aGUgY2hyb21pdW0gcG9ydC4KKyAgICBB
U1NFUlQoIW1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSk7CiAgICAgQVNTRVJUKG1fZmJvKTsKICAg
ICBpZiAoIW1fZmJvKSB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTC5jcHAJKHJldmlzaW9uIDk3NTAzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI4LDggKzEyOCwxMCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpp
c1Jlc291cmNlU2FmZSgpCiB9CiAKICNpZiAhUExBVEZPUk0oUVQpCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250
ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZl
ciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBp
bXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIp
OwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKICAg
ICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwogCkBAIC0xNjIs
OCArMTY0LDEwIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50Q29tcG9zaXRlZFIKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRl
eHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQorUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0
YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogeworICAgIC8vIERyYXdpbmdCdWZmZXIg
c3VwcG9ydCBvbmx5IGltcGxlbWVudGVkIGluIENocm9taXVtIHBvcnRzLgorICAgIEFTU0VSVCgh
ZHJhd2luZ0J1ZmZlcik7CiAgICAgLy8gUmVhZGluZyBwcmVtdWx0aXBsaWVkIGFscGhhIHdvdWxk
IGludm9sdmUgdW5wcmVtdWx0aXBseWluZywgd2hpY2ggaXMKICAgICAvLyBsb3NzeQogICAgIGlm
IChtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3Bw
CShyZXZpc2lvbiA5NzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsOCArNDIwLDEw
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmUKICAgICBtX3ByaXZh
dGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQq
IGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBk
cmF3aW5nQnVmZmVyKQogeworICAgIC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGltcGxl
bWVudGVkIGluIENocm9taXVtIHBvcnRzLgorICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7CiAg
ICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIEhUTUxDYW52YXNF
bGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1h
Z2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwpAQCAtNDMwLDggKzQzMiwxMCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1JlCiB9CiAKICNpZiBkZWZpbmVkKFFUX09Q
RU5HTF9FU18yKQotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdC
dWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CisgICAgLy8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9u
bHkgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0gcG9ydHMuCisgICAgQVNTRVJUKCFkcmF3aW5nQnVm
ZmVyKTsKICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBmb3IgcHJv
cGVyIG5vbi1wcmVtdWx0aXBsaWVkLWFscGhhCiAgICAgLy8gc3VwcG9ydC4KICAgICByZXR1cm4g
MDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5NzU3NykKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjYgQEAKKzIwMTEtMTAtMTYgIEplZmYgVGltYW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtDaHJvbWl1bV0gUGF0Y2ggdGhhdCBkZW1vbnN0cmF0ZXMgdGhlIGNoYW5nZXMgcmVx
dWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAgICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUg
ZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRvci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNv
bnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRvIEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERy
YXdpbmdCdWZmZXIgaW5zdGFuY2UuICBBbGwgUGxhdGZvcm1MYXllciBsaWZldGltZSBtYW5hZ2Vt
ZW50IGlzCisgICAgICAgIHBlcmZvcm1lZCBieSB0aGUgRHJhd2luZ0J1ZmZlci4KKyAgICAgICAg
Q2hhbmdlcyBhcmUgb25seSByZWxldmFudCB0byBDaHJvbWl1bSBwb3J0cy4gIEZ1bmN0aW9uYWxp
dHkgaXMgCisgICAgICAgIHVuY2hhbmdlZCBmb3Igb3RoZXIgcG9ydHMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzIwMQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNE
Q2hyb21pdW0uY3BwOiBBbGxvdyBzcGVjaWZpY2F0aW9uIGZvciBhbiBvcHRpb25hbAorICAgICAg
ICBEcmF3aW5nQnVmZmVyIGluc3RhbmNlIHRvIHRoZSBwYWludFJlbmRlcmluZ1Jlc3VsdHMqIHJv
dXRpbmVzIHRvIG92ZXJyaWRlCisgICAgICAgIHJlYWRpbmcgZnJvbSBGQiAwLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEp
OgorICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaDoKKwogMjAxMS0xMC0x
NiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIEFsd2F5cyBlbmFi
bGUgRU5BQkxFKERPTV9TVE9SQUdFKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk3
NTAzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJv
bWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hy
b21lQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJF
eHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCkBAIC0xNjMsNiArMTY0LDIwIEBA
IFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUdyYXAKICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4
dCh3ZWJDb250ZXh0LnJlbGVhc2UoKSwgYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlLCB0
aHJlYWRVc2FnZSk7CiB9CiAKK3ZvaWQgZ2V0RHJhd2luZ1BhcmFtZXRlcnMoRHJhd2luZ0J1ZmZl
ciogZHJhd2luZ0J1ZmZlciwgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3ND
b250ZXh0M0QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtM0RPYmplY3QqIGZy
YW1lQnVmZmVySWQsIGludCogd2lkdGgsIGludCogaGVpZ2h0KQoreworICAgIGlmIChkcmF3aW5n
QnVmZmVyKSB7CisgICAgICAgICpmcmFtZUJ1ZmZlcklkID0gZHJhd2luZ0J1ZmZlci0+ZnJhbWVi
dWZmZXIoKTsKKyAgICAgICAgKndpZHRoID0gZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7
CisgICAgICAgICpoZWlnaHQgPSBkcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgKmZyYW1lQnVmZmVySWQgPSAwOworICAgICAgICAqd2lkdGggPSBn
cmFwaGljc0NvbnRleHQzRC0+d2lkdGgoKTsKKyAgICAgICAgKmhlaWdodCA9IGdyYXBoaWNzQ29u
dGV4dDNELT5oZWlnaHQoKTsKKyAgICB9Cit9CisKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQog
CiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZvckFub3RoZXJUaHJlYWQoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4
dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKQEAgLTMwOCwxMCArMzIzLDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludEZyYW0KICNlbmRpZgogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogewogICAgIEltYWdlQnVm
ZmVyKiBpbWFnZUJ1ZmZlciA9IGNvbnRleHQtPmNhbnZhcygpLT5idWZmZXIoKTsKLSAgICBwYWlu
dEZyYW1lYnVmZmVyVG9DYW52YXMoMCwgbV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgp
LCAhbV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwgaW1h
Z2VCdWZmZXIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXJJZDsKKyAgICBpbnQg
d2lkdGgsIGhlaWdodDsKKyAgICBnZXREcmF3aW5nUGFyYW1ldGVycyhkcmF3aW5nQnVmZmVyLCBt
X2ltcGwuZ2V0KCksICZmcmFtZWJ1ZmZlcklkLCAmd2lkdGgsICZoZWlnaHQpOworICAgIHBhaW50
RnJhbWVidWZmZXJUb0NhbnZhcyhmcmFtZWJ1ZmZlcklkLCB3aWR0aCwgaGVpZ2h0LCAhbV9pbXBs
LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwgaW1hZ2VCdWZmZXIp
OwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wb3NpdGVkUmVz
dWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCkBAIC0zMjMsMTYg
KzM0MSwyMCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitQYXNzUmVmUHRy
PEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogewogICAgIGlmICht
X2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFn
ZURhdGE6OmNyZWF0ZShJbnRTaXplKG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSkp
OworCisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOworICAgIGludCB3aWR0aCwg
aGVpZ2h0OworICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZmZXIsIG1faW1wbC5n
ZXQoKSwgJmZyYW1lYnVmZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgICBSZWZQdHI8SW1h
Z2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKHdpZHRoLCBoZWln
aHQpKTsKICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0
YSgpLT5kYXRhKCk7Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogbV9pbXBsLT53aWR0aCgp
ICogbV9pbXBsLT5oZWlnaHQoKTsKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDQgKiB3aWR0aCAq
IGhlaWdodDsKIAotICAgIG1faW1wbC0+cmVhZEJhY2tGcmFtZWJ1ZmZlcihwaXhlbHMsIGJ1ZmZl
clNpemUsIDAsIG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSk7CisgICAgbV9pbXBs
LT5yZWFkQmFja0ZyYW1lYnVmZmVyKHBpeGVscywgYnVmZmVyU2l6ZSwgZnJhbWVidWZmZXJJZCwg
d2lkdGgsIGhlaWdodCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ1ZmZlclNpemU7
IGkgKz0gNCkKICAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7CkBA
IC0xMDU1LDkgKzEwNzcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Jlc291cmNlU2Fm
ZSgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogR3Jh
cGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAgIFdlYkdMTGF5ZXJD
aHJvbWl1bSogY2FudmFzTGF5ZXIgPSBtX3ByaXZhdGUtPnBsYXRmb3JtTGF5ZXIoKTsKLSAgICBj
YW52YXNMYXllci0+c2V0Q29udGV4dCh0aGlzKTsKLSAgICByZXR1cm4gY2FudmFzTGF5ZXI7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGxhdGZvcm1MYXllcigpOwogfQogI2VuZGlmCiAKQEAgLTEy
MTMsOCArMTIzMywxNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQo
CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bGF5ZXJDb21wb3NpdGVkKCk7CiB9CiAKLURFTEVHQVRF
X1RPX0lOVEVSTkFMXzEocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMsIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfUihwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0ltYWdlRGF0YSwgUGFzc1JlZlB0cjxJbWFnZURhdGE+KQordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhjb250ZXh0LCBkcmF3aW5n
QnVmZmVyKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVm
ZmVyKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1h
Z2VEYXRhKGRyYXdpbmdCdWZmZXIpOworfQorCiBERUxFR0FURV9UT19JTlRFUk5BTF8xUihwYWlu
dENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqLCBib29s
KQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5oCShyZXZpc2lvbiA5NzUwMykKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw2ICs0Niw3IEBAIGNsYXNzIFdlYlZpZXdJbXBsOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBFeHRlbnNpb25zM0RDaHJvbWl1bTsKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBjbGFzcyBXZWJHTExheWVyQ2hyb21pdW07CkBA
IC05NSw5ICs5Niw5IEBAIHB1YmxpYzoKICAgICBib29sIGxheWVyQ29tcG9zaXRlZCgpIGNvbnN0
OwogICAgIHZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgpOwogCi0gICAgdm9pZCBwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgdm9pZCBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiwgRHJh
d2luZ0J1ZmZlciopOwogICAgIHZvaWQgcGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGludCBmcmFt
ZWJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIElt
YWdlQnVmZmVyKik7Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKTsKICAgICBib29sIHBhaW50c0lu
dG9DYW52YXNCdWZmZXIoKSBjb25zdDsKICAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNU
b0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111190</attachid>
            <date>2011-10-16 17:03:15 -0700</date>
            <delta_ts>2011-11-08 13:32:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111016200100.patch</filename>
            <type>text/plain</type>
            <size>49112</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NTc3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMTAtMTYgIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUGF0Y2ggdGhh
dCBkZW1vbnN0cmF0ZXMgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuICBBbGwg
UGxhdGZvcm1MYXllciBsaWZldGltZSBtYW5hZ2VtZW50IGlzCisgICAgICAgIHBlcmZvcm1lZCBi
eSB0aGUgRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgQ2hhbmdlcyBhcmUgb25seSByZWxldmFudCB0
byBDaHJvbWl1bSBwb3J0cy4gIEZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgdW5jaGFuZ2VkIGZv
ciBvdGhlciBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOiAgQ29uc3RydWN0
IGEgRHJhd2luZ0J1ZmZlcgorICAgICAgICBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCBmb3J3
YXJkIGFsbCBmcmFtZWJ1ZmZlciBtYW5hZ2VtZW50IGNhbGxzIHRvCisgICAgICAgIGl0LgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250
ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFySWZDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRl
eEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxl
dGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFt
ZWJ1ZmZlcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVEcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Ry
YXdpbmdCdWZmZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmF0ZUNvbG9y
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1MYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmZyYW1lYnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpzZXRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldERyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6ZHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TExheWVyQ2hyb21pdW06OnNldENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd2luZ0J1ZmZlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1
ZmZlcjo6Y2xlYXJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjb21taXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6bXVsdGlzYW1wbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6ZGlzY2FyZFJlc291cmNlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdpbmdCdWZmZXI6OnNldFNjaXNzb3JFbmFibGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1h
Z2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQz
RFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorCiAyMDExLTEwLTE2ICBEbWl0
cnkgTG9tb3YgIDxkc2xvbW92QGdvb2dsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTg2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQkocmV2aXNp
b24gOTc1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQkod29ya2luZyBjb3B5KQpA
QCAtODgsNiArODgsNyBAQCBXRUJDT1JFX0lOQ0xVREVQQVRIID0gXAogICAgICQkU09VUkNFX0RJ
Ui9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzIFwKICAgICAkJFNPVVJDRV9ESVIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzIFwKICAgICAkJFNPVVJDRV9ESVIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybSBcCisgICAgJCRTT1VSQ0VfRElSL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1IFwKICAgICAkJFNPVVJDRV9ESVIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAgXAogICAgICQkU09VUkNFX0RJUi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMgXAogICAgICQkU09VUkNFX0RJUi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTc1MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw2ICs0NCwxMSBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaWYgUExBVEZPUk0oQ0hST01J
VU0pCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2VuZGlmCisKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCIKICNpbmNs
dWRlICJPRVNUZXh0dXJlRmxvYXQuaCIKQEAgLTM2Myw3ICszNjgsMTIgQEAgUGFzc093blB0cjxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMUgogICAgIH0KIAogICAgIGF0dHJpYnV0ZXMubm9F
eHRlbnNpb25zID0gdHJ1ZTsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBhdHRyaWJ1dGVz
LnNoYXJlUmVzb3VyY2VzID0gdHJ1ZTsKKyNlbHNlCiAgICAgYXR0cmlidXRlcy5zaGFyZVJlc291
cmNlcyA9IGZhbHNlOworI2VuZGlmCisKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3cp
KTsKIApAQCAtMzc5LDYgKzM4OSw3IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5k
ZXJpbmdDb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKICAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAg
ICwgbV9kcmF3aW5nQnVmZmVyKDApCiAgICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQogICAg
ICwgbV9yZXN0b3JlVGltZXIodGhpcykKICAgICAsIG1fdmlkZW9DYWNoZSg0KQpAQCAtMzg2LDYg
KzM5NywxNyBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAg
LCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKKwor
I2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIC8vIENyZWF0ZSB0aGUgRHJhd2luZ0J1ZmZlciBh
bmQgaW5pdGlhbGl6ZSB0aGUgcGxhdGZvcm0gbGF5ZXIuCisgICAgbV9kcmF3aW5nQnVmZmVyID0g
bV9jb250ZXh0LT5jcmVhdGVEcmF3aW5nQnVmZmVyKCFtX2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3
aW5nQnVmZmVyLCBJbnRTaXplKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkp
KTsKKyAgICBtX2NvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKS0+c2V0RHJhd2luZ0J1ZmZlcihtX2Ry
YXdpbmdCdWZmZXIpOworICAgIG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpLT5zZXRDb250ZXh0
KG1fY29udGV4dC5nZXQoKSk7CisjZW5kaWYKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworCiAgICAgc2V0dXBGbGFncygpOwogICAg
IGluaXRpYWxpemVOZXdDb250ZXh0KCk7CiB9CkBAIC00NTEsNiArNDczLDkgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZQogICAgIGlmICghaXNHTEVTMkNvbXBsaWFu
dCgpKQogICAgICAgICBpbml0VmVydGV4QXR0cmliMCgpOwogCisgICAgaWYgKG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKGNhbnZhcygpLT53
aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKKwogICAgIG1fY29udGV4dC0+cmVzaGFwZShj
YW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKICAgICBtX2NvbnRleHQtPnZp
ZXdwb3J0KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwogCkBA
IC00ODMsNyArNTA4LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0
QwogewogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKICAgICAgICAgcmV0dXJuOworCiAg
ICAgbV9jb250ZXh0LT5tYXJrQ29udGV4dENoYW5nZWQoKTsKKwogICAgIG1fbGF5ZXJDbGVhcmVk
ID0gZmFsc2U7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFJlbmRlckJv
eCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwpAQCAtNTEzLDggKzU0MCwxMiBA
QCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJJZkNvbXBvCiAgICAgLy8gRGV0ZXJt
aW5lIGlmIGl0J3MgcG9zc2libGUgdG8gY29tYmluZSB0aGUgY2xlYXIgdGhlIHVzZXIgYXNrZWQg
Zm9yIGFuZCB0aGlzIGNsZWFyLgogICAgIGJvb2wgY29tYmluZWRDbGVhciA9IG1hc2sgJiYgIW1f
c2Npc3NvckVuYWJsZWQ7CiAKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAg
IG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgMCk7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7CisgICAgICAgIGlmIChtX2Ry
YXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIGlmIChjb21iaW5lZENsZWFy
ICYmIChtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQogICAgICAg
ICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0g
OiAwLApAQCAtNTc0LDE3ICs2MDUsNDAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBh
aW50UmVuZGVyaQogICAgIH0gZWxzZQogICAgICAgICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50YXRp
b25Db3B5KCk7CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKwogICAgIGlmICghbV9tYXJrZWRD
YW52YXNEaXJ0eSAmJiAhbV9sYXllckNsZWFyZWQpCiAgICAgICAgIHJldHVybjsKKwogICAgIGNh
bnZhcygpLT5jbGVhckNvcGllZEltYWdlKCk7CiAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZh
bHNlOwotICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhpcyk7
CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNv
bW1pdCgpOworICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhp
cywgbV9kcmF3aW5nQnVmZmVyLmdldCgpKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsK
KyAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RP
clplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfQogfQogCiBQYXNzUmVmUHRyPElt
YWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0lt
YWdlRGF0YSgpCiB7CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICByZXR1cm4gbV9jb250
ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIGlmIChtX2RyYXdp
bmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisgICAgUmVmUHRy
PEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YShtX2RyYXdpbmdCdWZmZXIuZ2V0KCkpOworCisgICAgaWYgKG1fZHJhd2luZ0J1
ZmZlcikgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICBt
X2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9CisKKyAgICByZXR1
cm4gaW1hZ2VEYXRhOwogfQogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRzSW50
b0NhbnZhc0J1ZmZlcigpIGNvbnN0CkBAIC02MTYsMTYgKzY3MCwyNSBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cmVzaGFwZShpbnQKIAogICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gbWFy
ayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUgbmV3bHkgY3JlYXRlZCBpbWFnZSBidWZm
ZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgogICAgIC8vIGNsZWFyIChhbmQgdGhpcyBtYXRjaGVzIHdo
YXQgcmVzaGFwZSB3aWxsIGRvKS4KLSAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdo
dCk7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5y
ZXNldChJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4
dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKIH0KIAogaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKIHsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVy
KQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKKwogICAg
IHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsK
IH0KIAogaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNv
bnN0CiB7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1fZHJhd2lu
Z0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOworCiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKIH0KIApAQCAtNzQ1LDcgKzgwOCwxMSBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBidWZmZXI7Ci0gICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVyKSk7CisgICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAg
Ly8gSW5zdGVhZCBvZiBiaW5kaW5nIGZiIDAsIGJpbmQgdGhlIGRyYXdpbmcgYnVmZmVyLgorICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVyKSk7CiAgICAg
aWYgKGJ1ZmZlcikKICAgICAgICAgYnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTEwODQsOSArMTE1MSwyMSBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICBpZiAoaXNSZXNvdXJjZVNhZmUo
KSkKKyAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkgeworICAgICAgICAvLyBDb21taXQgRHJhd2lu
Z0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICBpZiAo
IW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1f
ZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyKTsKLSAgICBlbHNlIHsKKworICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIg
aWYgbmVlZGVkCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5n
QnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3Ig
bXVsdGlzYW1wbGluZykKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2Ry
YXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAg
ICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOwogICAgICAgICBHQzNEc2l6ZWkgY2xp
cHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwogICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVy
SGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhl
aWdodCkpIHsKQEAgLTEwOTgsNiArMTE3NywxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleEltYWdlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKworICAgICAgICAvLyBSZXN0b3JlIERy
YXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7
CiAgICAgfQogICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRl
LCBub25lIG9mIHRoZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCiAgICAgdGV4LT5zZXRMZXZl
bEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKQEAgLTEyNzQsNyArMTM1NywxMCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWViCiAgICAgaWYgKGZyYW1lYnVmZmVy
ID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7CiAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5n
ID0gMDsKICAgICAgICAgLy8gSGF2ZSB0byBjYWxsIGJpbmRGcmFtZWJ1ZmZlciBoZXJlIHRvIGJp
bmQgYmFjayB0byBpbnRlcm5hbCBmYm8uCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIGlmIChtX2Ry
YXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKICAgICB9CiB9CiAKQEAgLTEzNjEsOCArMTQ0Nywx
MSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZShHQzNECiB7CiAgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisg
ICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CiAgICAgICAg
IG1fc2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikK
KyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29y
RW5hYmxlZCk7CisgICAgfQogICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXApOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0xNzAzLDggKzE3OTIsMTEgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZShHQzNEZQogewogICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKQorICAgIGlmIChj
YXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewogICAgICAgICBtX3NjaXNz
b3JFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7
CisgICAgfQogICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI4NzYsNyArMjk2OCwxNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHCiAgICAgfQogICAgIGNsZWFySWZDb21wb3NpdGVk
KCk7CiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKKworICAgIC8vIENv
bW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisg
ICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMo
eCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKworICAgIC8vIFJlc3Rv
cmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisK
ICNpZiBPUyhEQVJXSU4pCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24gd2hlbiBH
TCBkcml2ZXIgYnVnIG9uIE1hYyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyB3aGVuIGFscGhhIGlz
IG9mZiwgcmVhZFBpeGVscyBzaG91bGQgc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAuCkBA
IC00MTE5LDE0ICs0MjIxLDE0IEBAIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5k
RnJhbWUKIHsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9iamVjdCgpKQogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdl
dFdpZHRoKCk7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS53aWR0aCgpOworICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZm
ZXItPnNpemUoKS53aWR0aCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLndpZHRoKCk7CiB9CiAKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJh
bWVidWZmZXJIZWlnaHQoKQogewogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVy
QmluZGluZy0+Z2V0SGVpZ2h0KCk7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8g
bV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCkgOiBtX2NvbnRleHQtPmdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7CiB9CiAKIFdlYkdMVGV4dHVyZSogV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKEdDM0RlbnVtIHRhcmdldCwgYm9v
bCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApCkBAIC00ODIyLDYgKzQ5MjQsMTIgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZQogICAgICAgICByZXR1cm47CiAgICAgfQog
CisgICAgLy8gQ29uc3RydWN0IGEgbmV3IGRyYXdpbmcgYnVmZmVyIHdpdGggdGhlIG5ldyBHcmFw
aGljc0NvbnRleHQzRC4KKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fZHJh
d2luZ0J1ZmZlci0+ZGlzY2FyZFJlc291cmNlcygpOworICAgICAgICBtX2RyYXdpbmdCdWZmZXIg
PSBtX2NvbnRleHQtPmNyZWF0ZURyYXdpbmdCdWZmZXIoIW1fYXR0cmlidXRlcy5wcmVzZXJ2ZURy
YXdpbmdCdWZmZXIsIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpKTsKKyAgICB9CisKICAgICBtX2Nv
bnRleHQgPSBjb250ZXh0OwogICAgIG1fY29udGV4dExvc3QgPSBmYWxzZTsKICAgICBpbml0aWFs
aXplTmV3Q29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDk3NTAzKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgV2ViR0xSZW5kZXJpbmdDb250ZXh0X2gKIAogI2lu
Y2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVy
LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCkBAIC0zNTUsNiArMzU2LDEwIEBAIHB1
YmxpYzoKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogCisgICAg
Ly8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciByZW5kZXJpbmcgdG8gYSBEcmF3aW5nQnVmZmVyLCBp
bnN0ZWFkIG9mIGRpcmVjdGx5CisgICAgLy8gdG8gdGhlIGJhY2stYnVmZmVyIG9mIG1fY29udGV4
dC4KKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVmZmVyOworCiAgICAgY2xh
c3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzdG9yZVRpbWVyIDogcHVibGljIFRpbWVyQmFzZSB7
CiAgICAgcHVibGljOgogICAgICAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXN0
b3JlVGltZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KSA6IG1fY29udGV4dChjb250
ZXh0KSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDk3NTAzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OCw5ICs1OCw5IEBAIHVpbnQ4X3QgY29udmVydENvbG9yMTZCaWdUbzgodWludDE2
X3QgdmEKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiAKLVBhc3NSZWZQdHI8RHJhd2luZ0J1
ZmZlcj4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURyYXdpbmdCdWZmZXIoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK1Bhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZURyYXdpbmdCdWZmZXIoYm9vbCBzZXBhcmF0ZUJhY2tpbmdCdWZmZXIsIGNvbnN0IEludFNp
emUmIHNpemUpCiB7Ci0gICAgcmV0dXJuIERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBzaXpl
KTsKKyAgICByZXR1cm4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKHRoaXMsIHNpemUsIHNlcGFyYXRl
QmFja2luZ0J1ZmZlcik7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkRS
ZXNvdXJjZVNhZmUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHVucGFja0FsaWdu
bWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gOTc1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MDAsOCArNTAwLDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9pZCBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKIAotICAgIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gY3JlYXRlRHJhd2luZ0J1ZmZl
cihjb25zdCBJbnRTaXplJiA9IEludFNpemUoKSk7Ci0gICAgCisgICAgUGFzc1JlZlB0cjxEcmF3
aW5nQnVmZmVyPiBjcmVhdGVEcmF3aW5nQnVmZmVyKGJvb2wgc2VwYXJhdGVCYWNraW5nQnVmZmVy
LCBjb25zdCBJbnRTaXplJiA9IEludFNpemUoKSk7CisKICNpZiBQTEFURk9STShNQUMpIHx8IFBM
QVRGT1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQogICAgIC8v
IFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3Vs
YXIgRkJPLgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKQEAgLTc5MSw4ICs3OTEsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAgICAgYm9vbCBsYXllckNv
bXBvc2l0ZWQoKSBjb25zdDsKIAotICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIHZvaWQgcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCosIERyYXdpbmdCdWZmZXIq
KTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFn
ZURhdGEoRHJhd2luZ0J1ZmZlciopOwogICAgIGJvb2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1Rv
Q2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKIAogI2lmIFBMQVRGT1JNKFFUKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZl
ckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NzUwMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZm
ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1
ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDgsNyArNDksNiBAQCBzdGF0aWMgdW5zaWduZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUoR3Jh
CiAgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6
Q0xBTVBfVE9fRURHRSk7CiAgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CiAgICAgY29udGV4dC0+dGV4SW1hZ2UyRFJl
c291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKLSAgICBjb250
ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIG9mZnNjcmVlbkNvbG9yVGV4dHVyZSwgMCk7CiAKICAgICByZXR1cm4gb2Zm
c2NyZWVuQ29sb3JUZXh0dXJlOwogfQpAQCAtNTYsMjcgKzU2LDI0IEBAIHN0YXRpYyB1bnNpZ25l
ZCBnZW5lcmF0ZUNvbG9yVGV4dHVyZShHcmEKIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludFNpemUmIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
bXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgIDogbV9j
b250ZXh0KGNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2Vk
RGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgOiBtX3NlcGFyYXRlQmFja2lu
Z1RleHR1cmUoc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICAsIG1fc2Npc3NvckVuYWJsZWQo
ZmFsc2UpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2l6ZSgtMSwgLTEpCiAg
ICAgLCBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9u
U3VwcG9ydGVkKQogICAgICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQo
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9mYm8oMCkKICAg
ICAsIG1fY29sb3JCdWZmZXIoMCkKKyAgICAsIG1fYmFja2luZ0NvbG9yQnVmZmVyKDApCiAgICAg
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9kZXB0aEJ1ZmZlcigwKQogICAgICwg
bV9zdGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKIHsKLSAgICBtX2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZy
YW1lYnVmZmVyKCk7Ci0gICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIG1fY29sb3JCdWZmZXIgPSBnZW5lcmF0ZUNv
bG9yVGV4dHVyZShjb250ZXh0LCBzaXplKTsKLSAgICBjcmVhdGVTZWNvbmRhcnlCdWZmZXJzKCk7
Ci0gICAgaWYgKCFyZXNldChzaXplKSkgewotICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbml0aWFsaXplKHNpemUpOwogfQogCiBEcmF3aW5n
QnVmZmVyOjp+RHJhd2luZ0J1ZmZlcigpCkBAIC04NywxNSArODQsNDMgQEAgRHJhd2luZ0J1ZmZl
cjo6fkRyYXdpbmdCdWZmZXIoKQogICAgIGNsZWFyKCk7CiB9CiAKK3ZvaWQgRHJhd2luZ0J1ZmZl
cjo6aW5pdGlhbGl6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIG1fZmJvID0gbV9jb250
ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworCisgICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4
dHVyZSkKKyAgICAgICAgbV9iYWNraW5nQ29sb3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVy
ZShtX2NvbnRleHQuZ2V0KCksIHNpemUpOworCisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgbV9jb2xvckJ1
ZmZlciA9IGdlbmVyYXRlQ29sb3JUZXh0dXJlKG1fY29udGV4dC5nZXQoKSwgc2l6ZSk7CisgICAg
bV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOworICAgIGNyZWF0ZVNlY29uZGFy
eUJ1ZmZlcnMoKTsKKyAgICBpZiAoIXJlc2V0KHNpemUpKSB7CisgICAgICAgIG1fY29udGV4dC5j
bGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogdm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9ybUxheWVy
KCkKIHsKICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBpZiAobXVsdGlzYW1wbGUoKSkKICAgICAg
ICAgY29tbWl0KCk7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAg
IGlmIChtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUpIHsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAg
ICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IG1fYmFja2luZ0NvbG9yQnVmZmVyKTsKKyAgICAgICAgdW5zaWduZWQgY29sb3JGb3JtYXQgPSBt
X2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEgPyBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSA6IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7CisgICAgICAgIG1fY29udGV4dC0+Y29w
eVRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGNvbG9yRm9ybWF0
LCAwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCAwKTsKKyAgICB9CisKKyAg
ICBpZiAobXVsdGlzYW1wbGUoKSkKKyAgICAgICAgYmluZCgpOworCiAgICAgbV9jb250ZXh0LT5m
bHVzaCgpOwogfQogI2VuZGlmCkBAIC0xMDksNyArMTM0LDEyIEBAIFBsYXRmb3JtTGF5ZXIqIERy
YXdpbmdCdWZmZXI6OnBsYXRmb3JtTGEKIAogUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVy
OjpwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb2xvckJ1ZmZl
cjsKKyAgICByZXR1cm4gbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlID8gbV9iYWNraW5nQ29sb3JC
dWZmZXIgOiBtX2NvbG9yQnVmZmVyOworfQorCitQbGF0Zm9ybTNET2JqZWN0IERyYXdpbmdCdWZm
ZXI6OmZyYW1lYnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mYm87CiB9CiAKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgJKHJldmlzaW9uIDk3NTAzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw2ICszNCw3IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAK
KyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBA
IC0xNjQsNiArMTY1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1bnJlc2VydmVDb250
ZW50c1RleHR1cmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZSgp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKikgeyB9
CiAKICAgICAvLyBUaGVzZSBleGlzdCBqdXN0IGZvciBkZWJ1Z2dpbmcgKHZpYSBkcmF3RGVidWdC
b3JkZXIoKSkuCiAgICAgdm9pZCBzZXREZWJ1Z0JvcmRlckNvbG9yKGNvbnN0IENvbG9yJik7CkBA
IC0xOTksNiArMjAxLDkgQEAgcHVibGljOgogICAgIENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVl
SG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdC5nZXQoKTsgfQogICAgIHZvaWQg
Y2xlYW51cFJlc291cmNlc1JlY3Vyc2l2ZSgpOwogCisgICAgdm9pZCBzZXREcmF3aW5nQnVmZmVy
KFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZlcikgeyBtX2RyYXdpbmdCdWZm
ZXIgPSBkcmF3aW5nQnVmZmVyOyB9CisgICAgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3
aW5nQnVmZmVyKCkgeyByZXR1cm4gbV9kcmF3aW5nQnVmZmVyOyB9CisKIHByb3RlY3RlZDoKICAg
ICBDQ0xheWVyRGVsZWdhdGUqIG1fZGVsZWdhdGU7CiAgICAgZXhwbGljaXQgTGF5ZXJDaHJvbWl1
bShDQ0xheWVyRGVsZWdhdGUqKTsKQEAgLTI3NSw2ICsyODAsOCBAQCBwcml2YXRlOgogICAgIElu
dFJlY3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0OwogCiAgICAgU3RyaW5nIG1fbmFtZTsKKworICAg
IFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7CiB9OwogCiB2b2lkIHNvcnRM
YXllcnMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgdm9pZCopOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NzUwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1
bS5oIgogCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJM
YXllclJlbmRlcmVyQ2hyb21pdW0uaCIKQEAgLTg1LDEwICs4Niw4IEBAIHZvaWQgV2ViR0xMYXll
ckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG8KICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSBjb250
ZW50cyBvZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgogICAgIGlmICghbV9k
aXJ0eVJlY3QuaXNFbXB0eSgpICYmIG1fdGV4dHVyZVVwZGF0ZWQpIHsKLSAgICAgICAgLy8gcHJl
cGFyZVRleHR1cmUgY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgb2ZmLXNjcmVlbiByZW5kZXIg
dGFyZ2V0IGludG8gdGhlIHRleHR1cmUKLSAgICAgICAgLy8gdXNlZCBieSB0aGUgY29tcG9zaXRv
ci4KLSAgICAgICAgLy8KLSAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOworICAg
ICAgICAvLyBwdWJsaXNoVG9QbGF0Zm9ybUxheWVyIHByZXBhcmVzIHRoZSBjb250ZW50cyBvZiB0
aGUgb2ZmLXNjcmVlbiByZW5kZXIgdGFyZ2V0IGZvciB1c2UgYnkgdGhlIGNvbXBvc2l0b3IuCisg
ICAgICAgIGRyYXdpbmdCdWZmZXIoKS0+cHVibGlzaFRvUGxhdGZvcm1MYXllcigpOwogICAgICAg
ICBtX2NvbnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKICAgICAgICAgcmVzZXROZWVkc0Rp
c3BsYXkoKTsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlZCA9IGZhbHNlOwpAQCAtMTMyLDcgKzEz
MSw3IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjpzZXRDb250ZXh0KGNvbnMKICAgICBpZiAo
IW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdW5zaWduZWQgaW50IHRleHR1cmVJ
ZCA9IG1fY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCk7CisgICAgdW5zaWduZWQgaW50IHRleHR1
cmVJZCA9IGRyYXdpbmdCdWZmZXIoKS0+cGxhdGZvcm1Db2xvckJ1ZmZlcigpOwogICAgIGlmICh0
ZXh0dXJlSWQgIT0gbV90ZXh0dXJlSWQgfHwgY29udGV4dENoYW5nZWQpIHsKICAgICAgICAgbV90
ZXh0dXJlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSB0cnVlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgJKHJldmlzaW9uIDk3NTAzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
VGV4dHVyZVVwZGF0ZWQoKTsKICAgICBib29sIHBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMo
SW1hZ2VCdWZmZXIqKTsKIAotICAgIHZvaWQgc2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCk7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRleHQoY29uc3QgR3JhcGhp
Y3NDb250ZXh0M0QqKTsKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIHsgcmV0dXJu
IG1fY29udGV4dDsgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3Bw
CShyZXZpc2lvbiA5NzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyNiwxMyArNzI2
LDE3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogeworICAg
IC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGltcGxlbWVudGVkIGluIENocm9taXVtIHBv
cnRzLgorICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIq
IGRyYXdpbmdCdWZmZXIpCiB7CisgICAgLy8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1w
bGVtZW50ZWQgaW4gQ2hyb21pdW0gcG9ydHMuCisgICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUoMSwgMSkpOwogICAgIHJldHVybiBpbWFnZURhdGEu
cmVsZWFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0Ry
YXdpbmdCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkocmV2aXNpb24gOTc1MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAKICNp
bmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgor
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ4LDcg
KzUwLDcgQEAgc3RhdGljIGludCBzX21heGltdW1SZXNvdXJjZVVzZVBpeGVscyA9CiAjZW5kaWYK
IHN0YXRpYyBpbnQgc19jdXJyZW50UmVzb3VyY2VVc2VQaXhlbHMgPSAwOwogCi1QYXNzUmVmUHRy
PERyYXdpbmdCdWZmZXI+IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1Bhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4g
RHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJ
bnRTaXplJiBzaXplLCBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCiB7CiAgICAgRXh0ZW5z
aW9uczNEKiBleHRlbnNpb25zID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwogICAgIGJvb2wg
bXVsdGlzYW1wbGVTdXBwb3J0ZWQgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJh
bWVidWZmZXJfYmxpdCIpICYmIGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9tdWx0aXNhbXBsZSIpICYmIGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9PRVNfcmdiOF9y
Z2JhOCIpOwpAQCAtNjAsNyArNjIsNyBAQCBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IERyYXdp
bmdCdWZmZXI6CiAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBleHRlbnNp
b25zLT5zdXBwb3J0cygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CiAgICAgaWYgKHBh
Y2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCkKICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5h
YmxlZCgiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0gICAgUmVmUHRyPERyYXdpbmdC
dWZmZXI+IGRyYXdpbmdCdWZmZXIgPSBhZG9wdFJlZihuZXcgRHJhd2luZ0J1ZmZlcihjb250ZXh0
LCBzaXplLCBtdWx0aXNhbXBsZVN1cHBvcnRlZCwgcGFja2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVk
KSk7CisgICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IGRyYXdpbmdCdWZmZXIgPSBhZG9wdFJlZihu
ZXcgRHJhd2luZ0J1ZmZlcihjb250ZXh0LCBzaXplLCBtdWx0aXNhbXBsZVN1cHBvcnRlZCwgcGFj
a2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVkLCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKSk7CiAgICAg
cmV0dXJuIChkcmF3aW5nQnVmZmVyLT5tX2NvbnRleHQpID8gZHJhd2luZ0J1ZmZlci5yZWxlYXNl
KCkgOiAwOwogfQogCkBAIC03OCw2ICs4MCwxMSBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OmNsZWFy
KCkKICAgICAgICAgbV9jb2xvckJ1ZmZlciA9IDA7CiAgICAgfQogCisgICAgaWYgKG1fYmFja2lu
Z0NvbG9yQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX2JhY2tp
bmdDb2xvckJ1ZmZlcik7CisgICAgICAgIG1fYmFja2luZ0NvbG9yQnVmZmVyID0gMDsKKyAgICB9
CisKICAgICBpZiAobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKSB7CiAgICAgICAgIG1fY29udGV4
dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CiAgICAgICAg
IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlciA9IDA7CkBAIC0xNjYsNyArMTczLDcgQEAgdm9pZCBE
cmF3aW5nQnVmZmVyOjpjbGVhckZyYW1lYnVmZmVyKCkKICAgICB1bnNpZ25lZCBjaGFyIGRlcHRo
TWFzayA9IGZhbHNlOwogICAgIHVuc2lnbmVkIGludCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmY7
CiAgICAgdW5zaWduZWQgY2hhciBpc1NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgdW5zaWdu
ZWQgbG9uZyBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsK
KyAgICB1bnNpZ25lZCBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVS
X0JJVDsKICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkgewogICAgICAgICBtX2NvbnRleHQtPmdl
dEZsb2F0dihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRo
KTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEpOwpAQCAtMjMzLDcgKzI0MCw3IEBA
IGJvb2wgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICBpZiAobmV3U2l6
ZSAhPSBtX3NpemUpIHsKICAgICAgICAgbV9zaXplID0gbmV3U2l6ZTsKIAotICAgICAgICB1bnNp
Z25lZCBsb25nIGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0LCBpbnRlcm5hbFJlbmRl
cmJ1ZmZlckZvcm1hdDsKKyAgICAgICAgdW5zaWduZWQgaW50ZXJuYWxDb2xvckZvcm1hdCwgY29s
b3JGb3JtYXQsIGludGVybmFsUmVuZGVyYnVmZmVyRm9ybWF0OwogICAgICAgICBpZiAoYXR0cmli
dXRlcy5hbHBoYSkgewogICAgICAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBOwogICAgICAgICAgICAgY29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTsKQEAgLTI2OSwxMCArMjc2LDE2IEBAIGJvb2wgRHJhd2luZ0J1ZmZlcjo6cmVz
ZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAKICAgICAgICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZl
cik7Ci0gICAgICAgIAogICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgp
LCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgMCk7CiAKICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUy
RChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZm
ZXIsIDApOworCisgICAgICAgIC8vIHJlc2l6ZSB0aGUgYmFja2luZyBjb2xvciBidWZmZXIKKyAg
ICAgICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkgeworICAgICAgICAgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9iYWNraW5n
Q29sb3JCdWZmZXIpOworICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIDApOworICAgICAgICB9CisKICAgICAgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CiAKICAgICAgICAgaWYg
KCFtdWx0aXNhbXBsZSgpKQpAQCAtMjkzLDIzICszMDYsNTYgQEAgdm9pZCBEcmF3aW5nQnVmZmVy
Ojpjb21taXQobG9uZyB4LCBsb25nCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgCisKICAgICBpZiAod2lkdGggPCAwKQogICAgICAgICB3aWR0aCA9IG1f
c2l6ZS53aWR0aCgpOwogICAgIGlmIChoZWlnaHQgPCAwKQogICAgICAgICBoZWlnaHQgPSBtX3Np
emUuaGVpZ2h0KCk7Ci0gICAgICAgIAorCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICAKKwogICAgIGlmIChtX211bHRpc2FtcGxlRkJPKSB7CiAgICAgICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEV4dGVuc2lvbnMzRDo6UkVBRF9GUkFNRUJVRkZFUiwgbV9t
dWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEV4dGVu
c2lvbnMzRDo6RFJBV19GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+YmxpdEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklULCBHcmFw
aGljc0NvbnRleHQzRDo6TElORUFSKTsKKworICAgICAgICBpZiAobV9zY2lzc29yRW5hYmxlZCkK
KyAgICAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKTsKKworICAgICAgICAvLyBVc2UgTkVBUkVTVCwgYmVjYXVzZSB0aGVyZSBpcyBubyBz
Y2FsZSBwZXJmb3JtZWQgZHVyaW5nIHRoZSBibGl0LgorICAgICAgICBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+YmxpdEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklULCBHcmFwaGlj
c0NvbnRleHQzRDo6TkVBUkVTVCk7CisKKyAgICAgICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCisg
ICAgICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKTsKICAgICB9Ci0gICAgCisKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKIH0KIAorYm9vbCBEcmF3aW5nQnVm
ZmVyOjptdWx0aXNhbXBsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dCAmJiBtX2Nv
bnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVF
eHRlbnNpb25TdXBwb3J0ZWQ7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBEcmF3aW5nQnVm
ZmVyOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgcmV0dXJuIG1f
Y29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEodGhpcyk7Cit9CisKK3Zv
aWQgRHJhd2luZ0J1ZmZlcjo6ZGlzY2FyZFJlc291cmNlcygpCit7CisgICAgbV9jb2xvckJ1ZmZl
ciA9IDA7CisgICAgbV9iYWNraW5nQ29sb3JCdWZmZXIgPSAwOworICAgIG1fbXVsdGlzYW1wbGVD
b2xvckJ1ZmZlciA9IDA7CisKKyAgICBtX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IDA7CisgICAgbV9k
ZXB0aEJ1ZmZlciA9IDA7CisKKyAgICBtX3N0ZW5jaWxCdWZmZXIgPSAwOworCisgICAgbV9tdWx0
aXNhbXBsZUZCTyA9IDA7CisgICAgbV9mYm8gPSAwOworfQorCiB2b2lkIERyYXdpbmdCdWZmZXI6
OmJpbmQoKQogewogICAgIGlmICghbV9jb250ZXh0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCShyZXZpc2lvbiA5
NzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIAogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgpAQCAtNDMsMTAgKzQ0LDggQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLSNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotY2xhc3MgQ2FudmFzMkRMYXllckNocm9taXVtOwotI2VuZGlmCitjbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKK2NsYXNzIEltYWdlRGF0YTsKIAogLy8gTWFuYWdlcyBhIHJlbmRlcmlu
ZyB0YXJnZXQgKGZyYW1lYnVmZmVyICsgYXR0YWNobWVudCkgZm9yIGEgY2FudmFzLiAgQ2FuIHB1
Ymxpc2ggaXRzIHJlbmRlcmluZwogLy8gcmVzdWx0cyB0byBhIFBsYXRmb3JtTGF5ZXIgZm9yIGNv
bXBvc2l0aW5nLgpAQCAtNzUsMTAgKzc0LDIyIEBAIHB1YmxpYzoKIAogICAgIC8vIENvcGllcyB0
aGUgbXVsdGlzYW1wbGUgY29sb3IgYnVmZmVyIHRvIHRoZSBub3JtYWwgY29sb3IgYnVmZmVyIGFu
ZCBsZWF2ZXMgbV9mYm8gYm91bmQKICAgICB2b2lkIGNvbW1pdChsb25nIHggPSAwLCBsb25nIHkg
PSAwLCBsb25nIHdpZHRoID0gLTEsIGxvbmcgaGVpZ2h0ID0gLTEpOwotICAgIAotICAgIGJvb2wg
bXVsdGlzYW1wbGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5nZXRD
b250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyAmJiBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3Vw
cG9ydGVkOyB9Ci0gICAgCisKKyAgICAvLyBjb21taXQgc2hvdWxkIGNvcHkgdGhlIGZ1bGwgbXVs
dGlzYW1wbGUgYnVmZmVyLCBhbmQgbm90IHJlc3BlY3QgdGhlCisgICAgLy8gY3VycmVudCBzY2lz
c29yIGJvdW5kcy4gVHJhY2sgdGhlIHN0YXRlIG9mIHRoZSBzY2lzc29yIHRlc3Qgc28gdGhhdCBp
dAorICAgIC8vIGNhbiBiZSBkaXNhYmxlZCBkdXJpbmcgY2FsbHMgdG8gY29tbWl0LgorICAgIHZv
aWQgc2V0U2Npc3NvckVuYWJsZWQoYm9vbCBzY2lzc29yRW5hYmxlZCkgeyBtX3NjaXNzb3JFbmFi
bGVkID0gc2Npc3NvckVuYWJsZWQ7IH0KKworICAgIGJvb2wgbXVsdGlzYW1wbGUoKSBjb25zdDsK
KwogICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0OworICAg
IFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIoKSBjb25zdDsKKworICAgIFBhc3NSZWZQdHI8
SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworCisgICAgLy8g
SW1tZWRpYXRlbHkgcmVsZWFzZXMgb3duZXJzaGlwIG9mIGFsbCByZXNvdXJjZXMuIENhbGwgdXBv
biBsb3NzIG9mIHRoZQorICAgIC8vIGdyYXBoaWNzIGNvbnRleHQgdG8gcHJldmVudCBmcmVlaW5n
IGludmFsaWQgcmVzb3VyY2VzLgorICAgIHZvaWQgZGlzY2FyZFJlc291cmNlcygpOwogCiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKTsKQEAgLTg4LDkgKzk5LDE1IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4
dDsgfQogCiBwcml2YXRlOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNy
ZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsKLSAgICAKLSAgICBEcmF3
aW5nQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgbXVsdGlz
YW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9u
U3VwcG9ydGVkKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGUo
R3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJiwgYm9vbCk7CisKKyAgICBEcmF3aW5n
QnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgbXVsdGlzYW1w
bGVFeHRlbnNpb25TdXBwb3J0ZWQsCisgICAgICAgICAgICAgICAgICBib29sIHBhY2tlZERlcHRo
U3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCwgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKTsK
KworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBJbnRTaXplJik7CisKKyAgICBib29sIG1fc2Vw
YXJhdGVCYWNraW5nVGV4dHVyZTsKKyAgICBib29sIG1fc2Npc3NvckVuYWJsZWQ7CiAKICAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKICAgICBJbnRTaXplIG1fc2l6ZTsK
QEAgLTk4LDYgKzExNSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3BhY2tlZERlcHRoU3RlbmNp
bEV4dGVuc2lvblN1cHBvcnRlZDsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOwogICAgIFBs
YXRmb3JtM0RPYmplY3QgbV9jb2xvckJ1ZmZlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fYmFj
a2luZ0NvbG9yQnVmZmVyOwogCiAgICAgLy8gVGhpcyBpcyB1c2VkIHdoZW4gd2UgaGF2ZSBPRVNf
cGFja2VkX2RlcHRoX3N0ZW5jaWwuCiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2RlcHRoU3RlbmNp
bEJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMv
RHJhd2luZ0J1ZmZlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0JKHJldmlzaW9uIDk3NTAzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVy
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3Vw
cG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBhY2tlZERlcHRoU3Rl
bmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1
cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZUJhY2tp
bmdUZXh0dXJlKQorICAgIDogbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKHNlcGFyYXRlQmFja2lu
Z1RleHR1cmUpCisgICAgLCBtX3NjaXNzb3JFbmFibGVkKGZhbHNlKQorICAgICwgbV9jb250ZXh0
KGNvbnRleHQpCiAgICAgLCBtX3NpemUoLTEsIC0xKQogICAgICwgbV9tdWx0aXNhbXBsZUV4dGVu
c2lvblN1cHBvcnRlZChtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCkKICAgICAsIG1fcGFj
a2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVu
c2lvblN1cHBvcnRlZCkKQEAgLTUyLDYgKzU1LDkgQEAgRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1
ZmZlcihHcmFwaGljc0NvbgogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKDApCiB7CisgICAgLy8gU3VwcG9ydCBmb3IgYSBzZXBhcmF0ZSBi
YWNraW5nIHRleHR1cmUgaGFzIG9ubHkgYmVlbiBlbmFibGVkIGZvcgorICAgIC8vIHRoZSBjaHJv
bWl1bSBwb3J0LgorICAgIEFTU0VSVCghbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKTsKICAgICBB
U1NFUlQobV9mYm8pOwogICAgIGlmICghbV9mYm8pIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9x
dC9EcmF3aW5nQnVmZmVyUXQuY3BwCShyZXZpc2lvbiA5NzUwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw4ICszNCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBEcmF3aW5nQnVmZmVy
OjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBv
cnRlZCkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgIDog
bV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgLCBt
X3NjaXNzb3JFbmFibGVkKGZhbHNlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBt
X3NpemUoLTEsIC0xKQogICAgICwgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZChtdWx0
aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCkKICAgICAsIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uU3VwcG9ydGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKQEAg
LTQ3LDYgKzUwLDkgQEAgRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0Nvbgog
ICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
KDApCiB7CisgICAgLy8gU3VwcG9ydCBmb3IgYSBzZXBhcmF0ZSBiYWNraW5nIHRleHR1cmUgaGFz
IG9ubHkgYmVlbiBlbmFibGVkIGZvcgorICAgIC8vIHRoZSBjaHJvbWl1bSBwb3J0LgorICAgIEFT
U0VSVCghbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKTsKICAgICBBU1NFUlQobV9mYm8pOwogICAg
IGlmICghbV9mYm8pIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcAkocmV2aXNpb24gOTc1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjgsOCArMTI4LDEwIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omlz
UmVzb3VyY2VTYWZlKCkKIH0KIAogI2lmICFQTEFURk9STShRVCkKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVy
KiBkcmF3aW5nQnVmZmVyKQogeworICAgIC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGlt
cGxlbWVudGVkIGluIENocm9taXVtIHBvcnRzLgorICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7
CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwogICAg
IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CiAKQEAgLTE2Miw4
ICsxNjQsMTAgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRDb21wb3NpdGVkUgogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitQYXNzUmVmUHRyPEltYWdl
RGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CisgICAgLy8gRHJhd2luZ0J1ZmZlciBz
dXBwb3J0IG9ubHkgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0gcG9ydHMuCisgICAgQVNTRVJUKCFk
cmF3aW5nQnVmZmVyKTsKICAgICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQg
aW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGljaCBpcwogICAgIC8vIGxvc3N5CiAgICAgaWYg
KG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJ
KHJldmlzaW9uIDk3NTAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMCw4ICs0MjAsMTAg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZQogICAgIG1fcHJpdmF0
ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRy
YXdpbmdCdWZmZXIpCiB7CisgICAgLy8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVt
ZW50ZWQgaW4gQ2hyb21pdW0gcG9ydHMuCisgICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKICAg
ICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgSFRNTENhbnZhc0Vs
ZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwogICAgIEltYWdlQnVmZmVyKiBpbWFn
ZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CkBAIC00MzAsOCArNDMyLDEwIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmUKIH0KIAogI2lmIGRlZmluZWQoUVRfT1BF
TkdMX0VTXzIpCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1
ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25s
eSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdCdWZm
ZXIpOwogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIGltcGxlbWVudGVkIGZvciBwcm9w
ZXIgbm9uLXByZW11bHRpcGxpZWQtYWxwaGEKICAgICAvLyBzdXBwb3J0LgogICAgIHJldHVybiAw
OwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NTc3KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
NiBAQAorMjAxMS0xMC0xNiAgSmVmZiBUaW1hbnVzICA8dHdpekBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW0Nocm9taXVtXSBQYXRjaCB0aGF0IGRlbW9uc3RyYXRlcyB0aGUgY2hhbmdlcyByZXF1
aXJlZCB0byBhbGxvdyBXZWJHTAorICAgICAgICB0byBzaGFyZSBpdHMgYmFja2luZyBzdG9yZSBk
aXJlY3RseSB3aXRoIHRoZSBjb21wb3NpdG9yLgorICAgICAgICBXZWJHTCByZW5kZXJpbmcgY29u
dGV4dHMgY3JlYXRlIGFuZCByZW5kZXIgdG8gRkJPcyBtYW5hZ2VkIGJ5IGEKKyAgICAgICAgRHJh
d2luZ0J1ZmZlciBpbnN0YW5jZS4gIEFsbCBQbGF0Zm9ybUxheWVyIGxpZmV0aW1lIG1hbmFnZW1l
bnQgaXMKKyAgICAgICAgcGVyZm9ybWVkIGJ5IHRoZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICBD
aGFuZ2VzIGFyZSBvbmx5IHJlbGV2YW50IHRvIENocm9taXVtIHBvcnRzLiAgRnVuY3Rpb25hbGl0
eSBpcyAKKyAgICAgICAgdW5jaGFuZ2VkIGZvciBvdGhlciBwb3J0cy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RD
aHJvbWl1bS5jcHA6IEFsbG93IHNwZWNpZmljYXRpb24gZm9yIGFuIG9wdGlvbmFsCisgICAgICAg
IERyYXdpbmdCdWZmZXIgaW5zdGFuY2UgdG8gdGhlIHBhaW50UmVuZGVyaW5nUmVzdWx0cyogcm91
dGluZXMgdG8gb3ZlcnJpZGUKKyAgICAgICAgcmVhZGluZyBmcm9tIEZCIDAuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6
CisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOgorCiAyMDExLTEwLTE2
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWx3YXlzIGVuYWJs
ZSBFTkFCTEUoRE9NX1NUT1JBR0UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9H
cmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAkocmV2aXNpb24gOTc1
MDMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9t
aXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJv
bWVDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKQEAgLTE2Myw2ICsxNjQsMjAgQEAg
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlR3JhcAogICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0
KHdlYkNvbnRleHQucmVsZWFzZSgpLCBhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUsIHRo
cmVhZFVzYWdlKTsKIH0KIAordm9pZCBnZXREcmF3aW5nUGFyYW1ldGVycyhEcmF3aW5nQnVmZmVy
KiBkcmF3aW5nQnVmZmVyLCBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0Nv
bnRleHQzRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCogZnJh
bWVCdWZmZXJJZCwgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQpCit7CisgICAgaWYgKGRyYXdpbmdC
dWZmZXIpIHsKKyAgICAgICAgKmZyYW1lQnVmZmVySWQgPSBkcmF3aW5nQnVmZmVyLT5mcmFtZWJ1
ZmZlcigpOworICAgICAgICAqd2lkdGggPSBkcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsK
KyAgICAgICAgKmhlaWdodCA9IGRyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICAqZnJhbWVCdWZmZXJJZCA9IDA7CisgICAgICAgICp3aWR0aCA9IGdy
YXBoaWNzQ29udGV4dDNELT53aWR0aCgpOworICAgICAgICAqaGVpZ2h0ID0gZ3JhcGhpY3NDb250
ZXh0M0QtPmhlaWdodCgpOworICAgIH0KK30KKwogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAK
IFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
Y3JlYXRlR3JhcGhpY3NDb250ZXh0Rm9yQW5vdGhlclRocmVhZChHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0
M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQpAQCAtMzA4LDEwICszMjMsMTMgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50RnJhbQogI2VuZGlmCiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQq
IGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CiAgICAgSW1hZ2VCdWZm
ZXIqIGltYWdlQnVmZmVyID0gY29udGV4dC0+Y2FudmFzKCktPmJ1ZmZlcigpOwotICAgIHBhaW50
RnJhbWVidWZmZXJUb0NhbnZhcygwLCBtX2ltcGwtPndpZHRoKCksIG1faW1wbC0+aGVpZ2h0KCks
ICFtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFn
ZUJ1ZmZlcik7CisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOworICAgIGludCB3
aWR0aCwgaGVpZ2h0OworICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZmZXIsIG1f
aW1wbC5nZXQoKSwgJmZyYW1lYnVmZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7CisgICAgcGFpbnRG
cmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1lYnVmZmVySWQsIHdpZHRoLCBoZWlnaHQsICFtX2ltcGwt
PmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7
CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludENvbXBvc2l0ZWRSZXN1
bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKQEAgLTMyMywxNiAr
MzQxLDIwIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludENvbXAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8
SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CiAgICAgaWYgKG1f
aW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpCiAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdl
RGF0YTo6Y3JlYXRlKEludFNpemUobV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgpKSk7
CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVySWQ7CisgICAgaW50IHdpZHRoLCBo
ZWlnaHQ7CisgICAgZ2V0RHJhd2luZ1BhcmFtZXRlcnMoZHJhd2luZ0J1ZmZlciwgbV9pbXBsLmdl
dCgpLCAmZnJhbWVidWZmZXJJZCwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIFJlZlB0cjxJbWFn
ZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUod2lkdGgsIGhlaWdo
dCkpOwogICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRh
KCktPmRhdGEoKTsKLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDQgKiBtX2ltcGwtPndpZHRoKCkg
KiBtX2ltcGwtPmhlaWdodCgpOworICAgIHNpemVfdCBidWZmZXJTaXplID0gNCAqIHdpZHRoICog
aGVpZ2h0OwogCi0gICAgbV9pbXBsLT5yZWFkQmFja0ZyYW1lYnVmZmVyKHBpeGVscywgYnVmZmVy
U2l6ZSwgMCwgbV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgpKTsKKyAgICBtX2ltcGwt
PnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCBidWZmZXJTaXplLCBmcmFtZWJ1ZmZlcklkLCB3
aWR0aCwgaGVpZ2h0KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnVmZmVyU2l6ZTsg
aSArPSA0KQogICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKQEAg
LTEwNTUsOSArMTA3Nyw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVzb3VyY2VTYWZl
KCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9ybUxheWVyKiBHcmFw
aGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7Ci0gICAgV2ViR0xMYXllckNo
cm9taXVtKiBjYW52YXNMYXllciA9IG1fcHJpdmF0ZS0+cGxhdGZvcm1MYXllcigpOwotICAgIGNh
bnZhc0xheWVyLT5zZXRDb250ZXh0KHRoaXMpOwotICAgIHJldHVybiBjYW52YXNMYXllcjsKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5wbGF0Zm9ybUxheWVyKCk7CiB9CiAjZW5kaWYKIApAQCAtMTIx
Myw4ICsxMjMzLDE2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgK
ICAgICByZXR1cm4gbV9wcml2YXRlLT5sYXllckNvbXBvc2l0ZWQoKTsKIH0KIAotREVMRUdBVEVf
VE9fSU5URVJOQUxfMShwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcywgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF9SKHBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhLCBQYXNzUmVmUHRyPEltYWdlRGF0YT4pCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKGNvbnRleHQsIGRyYXdpbmdC
dWZmZXIpOworfQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZm
ZXIpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFn
ZURhdGEoZHJhd2luZ0J1ZmZlcik7Cit9CisKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKHBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcywgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCosIGJvb2wp
CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25z
dApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmgJKHJldmlzaW9uIDk3NTAzKQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDcgQEAgY2xhc3MgV2ViVmlld0ltcGw7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNzIEV4dGVuc2lvbnMzRENocm9taXVtOwogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIGNsYXNzIFdlYkdMTGF5ZXJDaHJvbWl1bTsKQEAg
LTk1LDkgKzk2LDkgQEAgcHVibGljOgogICAgIGJvb2wgbGF5ZXJDb21wb3NpdGVkKCkgY29uc3Q7
CiAgICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAKLSAgICB2b2lkIHBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKKyAgICB2b2lkIHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqLCBEcmF3
aW5nQnVmZmVyKik7CiAgICAgdm9pZCBwYWludEZyYW1lYnVmZmVyVG9DYW52YXMoaW50IGZyYW1l
YnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgSW1h
Z2VCdWZmZXIqKTsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoKTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciopOwogICAgIGJvb2wgcGFpbnRzSW50
b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogICAgIGJvb2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1Rv
Q2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114144</attachid>
            <date>2011-11-08 13:32:33 -0800</date>
            <delta_ts>2011-11-08 14:00:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111108162936.patch</filename>
            <type>text/plain</type>
            <size>59888</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NTk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTggQEAKKzIwMTEtMTEtMDggIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUGF0Y2ggdGhh
dCBpbXBsZW1lbnRpbmcgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuIEFsbCBQ
bGF0Zm9ybUxheWVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMKKyAgICAgICAgcGVyZm9ybWVkIGJ5
IHRoZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICBDaGFuZ2VzIGFyZSBvbmx5IHJlbGV2YW50IHRv
IENocm9taXVtIHBvcnRzLiBGdW5jdGlvbmFsaXR5IGlzCisgICAgICAgIHVuY2hhbmdlZCBmb3Ig
b3RoZXIgcG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzIwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDogQ29uc3RydWN0IGEg
RHJhd2luZ0J1ZmZlcgorICAgICAgICBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCBmb3J3YXJk
IGFsbCBmcmFtZWJ1ZmZlciBtYW5hZ2VtZW50IGNhbGxzIHRvCisgICAgICAgIGl0LgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
SWZDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZWJ1ZmZlcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oOiAgV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNlcworICAgICAgICBh
cmUgbm8gbG9uZ2VyIHRyYWNrZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QuIENhbGxlcnMgY2FuIG5v
dyBwYXNzIGEKKyAgICAgICAgRHJhd2luZ0J1ZmZlciBpbnN0YW5jZSB0byBwcm92aWRlIGFjY2Vz
cyB0byB0aGUgV2ViR0xMYXllckNocm9taXVtIGRhdGEuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlQ29sb3JUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpmcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjp+V2ViR0xM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJh
d3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21p
dW06OnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TExheWVyQ2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDogV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNl
cworICAgICAgICBoYXZlIGEgcmF3IHJlZmVyZW5jZSB0byB0aGVpciBvd25pbmcgRHJhd2luZ0J1
ZmZlci4gIFRoaXMgcmVmZXJlbmNlIGlzIHNldCB0byBOVUxMIG9uCisgICAgICAgIGRlc3RydWN0
aW9uIG9mIHRoZSBEcmF3aW5nQnVmZmVyLiAgVGhpcyBmb2xsb3dzIHRoZSBvbGQgY29kZSwgd2hp
Y2ggaGFkIHRoZSBXZWJHTExheWVyQ2hyb21pdW0KKyAgICAgICAgcmVmZXIgcmF3bHkgdG8gYSBH
cmFwaGljc0NvbnRleHQzRCBpbnN0YW5jZSwgd2hpY2ggd2FzIGFsc28gcmV2b2tlZCBkdXJpbmcg
dGVhci1kb3duIG9mIHRoZQorICAgICAgICBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmNwcDogVGhlIERyYXdpbmdCdWZmZXIgaXMgbm93IHRoZQorICAgICAgICBjZW50cmFs
IHBvaW50IGJldHdlZW4gdGhlIEdyYXBoaWNzQ29udGV4dDNELCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQsIGFuZAorICAgICAgICBXZWJHTExheWVyQ2hyb21pdW0gY2xhc3Nlcy4gIEdyYXBoaWNzQ29u
dGV4dDNELCBhbmQgV2ViR0xMYXllckNocm9taXVtIG9ubHkKKyAgICAgICAgZGVwZW5kIG9uIHRo
ZSBEcmF3aW5nQnVmZmVyIGludGVyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhckZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpt
dWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpkaXNjYXJkUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6c2V0U2Npc3Nv
ckVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1
ZmZlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSk6CisKIDIwMTEtMTEtMDggIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgog
CiAgICAgICAgIFJlbW92ZSBnZXQoKSBkZWZpbmVkIGluIENyZWRlbnRpYWxTdG9yYWdlU291cC5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUs
NyArMzY1LDEyIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFIKICAg
ICB9CiAKICAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRydWU7CisjaWYgUExBVEZPUk0o
Q0hST01JVU0pCisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IHRydWU7CisjZWxzZQog
ICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBmYWxzZTsKKyNlbmRpZgorCiAKICAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CiAKQEAgLTM4MSw2ICszODYsNyBAQCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRy
aWJ1dGVzKQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCiAgICAg
LCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQogICAgICwgbV9y
ZXN0b3JlQWxsb3dlZChmYWxzZSkKICAgICAsIG1fcmVzdG9yZVRpbWVyKHRoaXMpCiAgICAgLCBt
X3ZpZGVvQ2FjaGUoNCkKQEAgLTM4OCw2ICszOTQsMTUgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiB7CiAg
ICAgQVNTRVJUKG1fY29udGV4dCk7CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBD
cmVhdGUgdGhlIERyYXdpbmdCdWZmZXIgYW5kIGluaXRpYWxpemUgdGhlIHBsYXRmb3JtIGxheWVy
LgorICAgIG1fZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShtX2NvbnRleHQu
Z2V0KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSksICFt
X2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKTsKKyNlbmRpZgorCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisKICAgICBz
ZXR1cEZsYWdzKCk7CiAgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKIH0KQEAgLTQ1Myw2ICs0
NjgsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5lCiAgICAgaWYg
KCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CiAKKyAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KElu
dFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOworCiAgICAgbV9j
b250ZXh0LT5yZXNoYXBlKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwog
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSk7CiAKQEAgLTQ5Myw3ICs1MTEsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6bWFya0NvbnRleHRDCiB7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQogICAg
ICAgICByZXR1cm47CisKICAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOworCiAg
ICAgbV9sYXllckNsZWFyZWQgPSBmYWxzZTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7CkBA
IC01MjMsOCArNTQzLDEyIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcklmQ29t
cG8KICAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVh
ciB0aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIuCiAgICAgYm9vbCBjb21iaW5lZENs
ZWFyID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsKIAotICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsK
KyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgIH0KICAgICBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAg
aWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVG
RkVSX0JJVCkpCiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NvbG9yTWFza1swXSA/
IG1fY2xlYXJDb2xvclswXSA6IDAsCkBAIC01ODAsMjEgKzYwNCw0NiBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpCiAgICAgLy8gaGFwcGVuZWQgYWZ0ZXIgaXQgd2Fz
IGNvbXBvc2l0ZWQgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgaWYg
KG1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkgJiYgIW1fYXR0cmlidXRlcy5wcmVzZXJ2ZURy
YXdpbmdCdWZmZXIpIHsKICAgICAgICAgbV9jb250ZXh0LT5wYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXModGhpcyk7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyh0aGlzKTsK
ICAgICAgICAgY2FudmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIGNhbnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKICAgICBjbGVhcklmQ29t
cG9zaXRlZCgpOworCiAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFtX2xheWVyQ2xl
YXJlZCkKICAgICAgICAgcmV0dXJuOworCiAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2Uo
KTsKICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7Ci0gICAgbV9jb250ZXh0LT5wYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisgICAgbV9jb250ZXh0LT5w
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzLCBtX2RyYXdpbmdCdWZmZXIuZ2V0KCkp
OworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGlu
Zy5nZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJp
bmQoKTsKKyAgICB9CiB9CiAKIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKIHsKICAgICBjbGVhcklm
Q29tcG9zaXRlZCgpOwotICAgIHJldHVybiBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhKCk7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5jb21taXQoKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBt
X2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKG1fZHJhd2luZ0J1ZmZl
ci5nZXQoKSk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZm
ZXJCaW5kaW5nLmdldCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1
ZmZlci0+YmluZCgpOworICAgIH0KKworICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAKIGJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKQEAg
LTYyNiwxNiArNjc1LDI1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGlu
dAogCiAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHksIHNp
bmNlIHRoZSBuZXdseSBjcmVhdGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2ZmCiAg
ICAgLy8gY2xlYXIgKGFuZCB0aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgotICAg
IG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KEludFNpemUod2lkdGgsIGhlaWdo
dCkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQp
OwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgoKSBj
b25zdAogeworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdp
bmdCdWZmZXItPnNpemUoKS53aWR0aCgpOworCiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3QKIHsKKyAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCk7
CisKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhl
aWdodCgpOwogfQogCkBAIC03NTcsNyArODE1LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpiaW5kRnJhbWVidWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2ZyYW1lYnVm
ZmVyQmluZGluZyA9IGJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcih0YXJn
ZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmIG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBJbnN0ZWFkIG9mIGJpbmRpbmcgZmIg
MCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Ymlu
ZCgpOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcih0YXJn
ZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKICAgICBpZiAoYnVmZmVyKQogICAgICAgICBidWZm
ZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwpAQCAtMTA5Niw5ICsxMTU4LDIxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhcklmQ29tcG9z
aXRlZCgpOwotICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQorICAgIGlmIChpc1Jlc291cmNlU2Fm
ZSgpKSB7CisgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwg
Zm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsK
KwogICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGVsc2UgeworCisg
ICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAgaWYgKCFt
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDb21taXQgRHJh
d2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICBp
ZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAgICAgR0MzRGludCBjbGlwcGVkWCwg
Y2xpcHBlZFk7CiAgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7
CiAgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1
ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xp
cHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgewpAQCAtMTExMCw2ICsxMTg0
LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIpOworCisgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAg
ICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKICAgICB9CiAgICAgLy8gRklYTUU6IGlm
IHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgY29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93IHNob3Vs
ZCBiZSBleGVjdXRlZC4KICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpOwpAQCAtMTE0MSw3ICsxMjE5LDE1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
b3B5VGV4U3ViSW0KICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKICAgICBpZiAoaXNS
ZXNvdXJjZVNhZmUoKSkKKyAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVk
IChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNv
bW1pdCgpOworCiAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAgICAg
Ly8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgICAgICBpZiAoIW1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1
ZmZlci0+YmluZCgpOwogICAgIGVsc2UgewogICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlw
cGVkWTsKICAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKQEAg
LTExNjUsMTEgKzEyNTEsMjggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhT
dWJJbQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgemVyby5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoY2xpcHBlZFdpZHRoID4gMCAmJiBj
bGlwcGVkSGVpZ2h0ID4gMCkgeworICAgICAgICAgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVm
ZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAgICAgICAgICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAgICAgICAgICAgICBt
X2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQgKyBjbGlw
cGVkWCAtIHgsIHlvZmZzZXQgKyBjbGlwcGVkWSAtIHksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbGlwcGVkWCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwg
Y2xpcHBlZEhlaWdodCk7CisKKyAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZl
ciBpZiBuZWVkZWQKKyAgICAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5k
KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVs
dGlzYW1wbGluZykKKyAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9k
cmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7
CisKICAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAgICAgICAg
IC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAgICAgIGlmICghbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgICAgIG1f
ZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICB9CiAgICAgfQogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0xMjg2LDcgKzEzODksMTAgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUZyYW1lYgogICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBt
X2ZyYW1lYnVmZmVyQmluZGluZykgewogICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IDA7
CiAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVidWZmZXIgaGVyZSB0byBiaW5kIGJh
Y2sgdG8gaW50ZXJuYWwgZmJvLgotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgICAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgMCk7CiAgICAgfQogfQogCkBAIC0xMzczLDggKzE0NzksMTEgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUoR0MzRAogewogICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKQorICAgIGlm
IChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewogICAgICAgICBtX3Nj
aXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Npc3NvckVuYWJs
ZWQpOworICAgIH0KICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMTcxNSw4ICsxODI0LDExIEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGUKIHsKICAgICBpZiAoaXNDb250ZXh0TG9z
dCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlm
IChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkKKyAgICBpZiAoY2FwID09
IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKICAgICAgICAgbV9zY2lzc29yRW5h
YmxlZCA9IHRydWU7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOworICAg
IH0KICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXApOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CkBAIC0yOTIzLDcgKzMwMzUsMTcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnJlYWRQaXhlbHMoRwogICAgIH0KICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwog
ICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMtPmJhc2VBZGRyZXNzKCk7CisKKyAgICAvLyBDb21taXQg
RHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgIGlm
ICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHks
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisKKyAgICAvLyBSZXN0b3JlIERy
YXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBt
X2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworCiAjaWYg
T1MoREFSV0lOKQogICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBzZWN0aW9uIHdoZW4gR0wgZHJp
dmVyIGJ1ZyBvbiBNYWMgaXMgZml4ZWQsIGkuZS4sCiAgICAgLy8gd2hlbiBhbHBoYSBpcyBvZmYs
IHJlYWRQaXhlbHMgc2hvdWxkIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgpAQCAtMzk3
NSw2ICs0MDk3LDE2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZVJlc3RvcmUK
ICAgICBtYXliZVJlc3RvcmVDb250ZXh0KFN5bnRoZXRpY0xvc3RDb250ZXh0KTsKIH0KIAorI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK1BsYXRmb3JtTGF5ZXIqIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgaWYgKG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+cGxhdGZvcm1MYXllcigpOwor
CisgICAgcmV0dXJuIG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpOworfQorI2VuZGlmCisKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVPYmplY3QoV2ViR0xPYmplY3QqIG9iamVj
dCkKIHsKICAgICBtX2NhbnZhc09iamVjdHMucmVtb3ZlKG9iamVjdCk7CkBAIC00MTY2LDE0ICs0
Mjk4LDE0IEBAIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWUKIHsKICAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVj
dCgpKQogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldFdpZHRoKCk7Ci0g
ICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgp
OworICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53
aWR0aCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7
CiB9CiAKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJIZWln
aHQoKQogewogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0
SGVpZ2h0KCk7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS5oZWlnaHQoKTsKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVm
ZmVyLT5zaXplKCkuaGVpZ2h0KCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkuaGVpZ2h0KCk7CiB9CiAKIFdlYkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVt
c0ZvckN1YmVNYXApCkBAIC00ODc5LDYgKzUwMTEsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6Om1heWJlUmVzdG9yZQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgLy8gQ29u
c3RydWN0IGEgbmV3IGRyYXdpbmcgYnVmZmVyIHdpdGggdGhlIG5ldyBHcmFwaGljc0NvbnRleHQz
RC4KKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
ZGlzY2FyZFJlc291cmNlcygpOworICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVm
ZmVyOjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBtX2RyYXdpbmdCdWZmZXItPnNpemUoKSwgIW1f
YXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpOworICAgIH0KKwogICAgIG1fY29udGV4
dCA9IGNvbnRleHQ7CiAgICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwogICAgIGluaXRpYWxpemVO
ZXdDb250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogI2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAogCiAjaW5jbHVk
ZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIK
ICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKQEAgLTI5Miw3ICsyOTMsNyBAQCBwdWJsaWM6
CiAKICAgICBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCk7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKICNlbmRpZgogCiAgICAgdm9pZCByZXNoYXBlKGlu
dCB3aWR0aCwgaW50IGhlaWdodCk7CkBAIC0zNTgsNiArMzU5LDEwIEBAIHB1YmxpYzoKIAogICAg
IFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogCisgICAgLy8gT3B0aW9uYWwg
c3RydWN0dXJlIGZvciByZW5kZXJpbmcgdG8gYSBEcmF3aW5nQnVmZmVyLCBpbnN0ZWFkIG9mIGRp
cmVjdGx5CisgICAgLy8gdG8gdGhlIGJhY2stYnVmZmVyIG9mIG1fY29udGV4dC4KKyAgICBSZWZQ
dHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVmZmVyOworCiAgICAgY2xhc3MgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0UmVzdG9yZVRpbWVyIDogcHVibGljIFRpbWVyQmFzZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXN0b3JlVGltZXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KSA6IG1fY29udGV4dChjb250ZXh0KSB7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nywx
MiArNTcsNiBAQCB1aW50OF90IGNvbnZlcnRDb2xvcjE2QmlnVG84KHVpbnQxNl90IHZhCiAKIH0g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi0KLVBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURyYXdpbmdCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
LXsKLSAgICByZXR1cm4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKHRoaXMsIHNpemUpOwotfQotCiBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgR0MzRGludCB1bnBhY2tBbGlnbm1lbnQpCiB7CiAgICAgQVNTRVJUKHVu
cGFja0FsaWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVudCA9PSAyIHx8IHVucGFja0FsaWdu
bWVudCA9PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNp
b24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsOCArNTAwLDYgQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgdm9pZCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIFBhc3NSZWZQdHI8RHJh
d2luZ0J1ZmZlcj4gY3JlYXRlRHJhd2luZ0J1ZmZlcihjb25zdCBJbnRTaXplJiA9IEludFNpemUo
KSk7Ci0gICAgCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShDSFJPTUlVTSkgfHwgUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkKICAgICAvLyBXaXRoIG11bHRpc2FtcGxpbmcgb24s
IGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZCTyB0byByZWd1bGFyIEZCTy4KICAgICB2b2lkIHByZXBh
cmVUZXh0dXJlKCk7CkBAIC03OTEsOCArNzg5LDggQEAgcHVibGljOgogICAgIHZvaWQgbWFya0xh
eWVyQ29tcG9zaXRlZCgpOwogICAgIGJvb2wgbGF5ZXJDb21wb3NpdGVkKCkgY29uc3Q7CiAKLSAg
ICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqKTsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9J
bWFnZURhdGEoKTsKKyAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqLCBEcmF3aW5nQnVmZmVyKik7CisgICAgUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKTsK
ICAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0Kik7CiAKICNpZiBQTEFURk9STShRVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1
ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiwxMCBAQAogCiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgog
CisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkV4dGVuc2lv
bnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRl
ICJXZWJHTExheWVyQ2hyb21pdW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OCw3
ICs1MSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNvbG9yVGV4dHVyZShHcmEKICAgICBj
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKTsKICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFKTsKICAgICBjb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VT
YWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgIGNvbnRleHQtPmZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlLCAwKTsKIAogICAgIHJldHVybiBvZmZzY3JlZW5D
b2xvclRleHR1cmU7CiB9CkBAIC01Niw0NiArNTgsNzQgQEAgc3RhdGljIHVuc2lnbmVkIGdlbmVy
YXRlQ29sb3JUZXh0dXJlKEdyYQogRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNh
bXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCi0gICAgOiBtX2NvbnRleHQo
Y29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0
ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICA6IG1fc2VwYXJhdGVCYWNraW5nVGV4dHVy
ZShzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgICwgbV9zY2lzc29yRW5hYmxlZChmYWxzZSkK
KyAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1f
bXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWRE
ZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX2ZibygwKQogICAgICwgbV9j
b2xvckJ1ZmZlcigwKQorICAgICwgbV9iYWNraW5nQ29sb3JCdWZmZXIoMCkKICAgICAsIG1fZGVw
dGhTdGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX2RlcHRoQnVmZmVyKDApCiAgICAgLCBtX3N0ZW5j
aWxCdWZmZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1w
bGVDb2xvckJ1ZmZlcigwKQogewotICAgIG1fZmJvID0gY29udGV4dC0+Y3JlYXRlRnJhbWVidWZm
ZXIoKTsKLSAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgbV9jb2xvckJ1ZmZlciA9IGdlbmVyYXRlQ29sb3JUZXh0
dXJlKGNvbnRleHQsIHNpemUpOwotICAgIGNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMoKTsKLSAgICBp
ZiAoIXJlc2V0KHNpemUpKSB7Ci0gICAgICAgIG1fY29udGV4dC5jbGVhcigpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGluaXRpYWxpemUoc2l6ZSk7CiB9CiAKIERyYXdpbmdCdWZmZXI6
On5EcmF3aW5nQnVmZmVyKCkKIHsKKyAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQorICAgICAgICBt
X3BsYXRmb3JtTGF5ZXItPnNldERyYXdpbmdCdWZmZXIoMCk7CisKICAgICBpZiAoIW1fY29udGV4
dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2xlYXIoKTsKIH0KIAordm9pZCBEcmF3aW5nQnVm
ZmVyOjppbml0aWFsaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgbV9mYm8gPSBtX2Nv
bnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisKKyAgICBpZiAobV9zZXBhcmF0ZUJhY2tpbmdU
ZXh0dXJlKQorICAgICAgICBtX2JhY2tpbmdDb2xvckJ1ZmZlciA9IGdlbmVyYXRlQ29sb3JUZXh0
dXJlKG1fY29udGV4dC5nZXQoKSwgc2l6ZSk7CisKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICBtX2NvbG9y
QnVmZmVyID0gZ2VuZXJhdGVDb2xvclRleHR1cmUobV9jb250ZXh0LmdldCgpLCBzaXplKTsKKyAg
ICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwgMCk7CisgICAgY3JlYXRlU2Vjb25k
YXJ5QnVmZmVycygpOworICAgIGlmICghcmVzZXQoc2l6ZSkpIHsKKyAgICAgICAgbV9jb250ZXh0
LmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiB2b2lkIERyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5
ZXIoKQogewogICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICByZXR1cm47CiAKKyAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGlmIChtdWx0aXNhbXBsZSgpKQogICAg
ICAgICBjb21taXQoKTsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisg
ICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkgeworICAgICAgICBtX2NvbnRleHQtPmJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAg
ICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbV9iYWNraW5nQ29sb3JCdWZmZXIpOworICAgICAgICB1bnNpZ25lZCBjb2xvckZvcm1hdCA9
IG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSA/IEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBIDogR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKKyAgICAgICAgbV9jb250ZXh0LT5j
b3B5VGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgY29sb3JGb3Jt
YXQsIDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCksIDApOworICAgIH0KKwor
ICAgIGlmIChtdWx0aXNhbXBsZSgpKQorICAgICAgICBiaW5kKCk7CisKICAgICBtX2NvbnRleHQt
PmZsdXNoKCk7CiB9CiAjZW5kaWYKQEAgLTEwMywxMyArMTMzLDMxIEBAIHZvaWQgRHJhd2luZ0J1
ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1MYXkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiBQbGF0Zm9ybUxheWVyKiBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkKIHsKLSAg
ICByZXR1cm4gMDsKKyAgICBpZiAoIW1fcGxhdGZvcm1MYXllcikgeworICAgICAgICBtX3BsYXRm
b3JtTGF5ZXIgPSBXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9wbGF0
Zm9ybUxheWVyLT5zZXREcmF3aW5nQnVmZmVyKHRoaXMpOworICAgIH0KKworICAgIHJldHVybiBt
X3BsYXRmb3JtTGF5ZXIuZ2V0KCk7CiB9CiAjZW5kaWYKIAogUGxhdGZvcm0zRE9iamVjdCBEcmF3
aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9j
b2xvckJ1ZmZlcjsKKyAgICByZXR1cm4gbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlID8gbV9iYWNr
aW5nQ29sb3JCdWZmZXIgOiBtX2NvbG9yQnVmZmVyOworfQorCitQbGF0Zm9ybTNET2JqZWN0IERy
YXdpbmdCdWZmZXI6OmZyYW1lYnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mYm87Cit9
CisKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIpCisgICAgICAgIG1fcGxhdGZvcm1M
YXllci0+cGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyhjb250ZXh0LT5jYW52YXMoKS0+YnVm
ZmVyKCkpOworI2VuZGlmCiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVt
LmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBACiAKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUg
IkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCkBAIC00OCw3ICs0OSw2IEBAIFBhc3NSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBX
ZWJHTExheWUKIAogV2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0oQ0NMYXll
ckRlbGVnYXRlKiBkZWxlZ2F0ZSkKICAgICA6IENhbnZhc0xheWVyQ2hyb21pdW0oZGVsZWdhdGUp
Ci0gICAgLCBtX2NvbnRleHQoMCkKICAgICAsIG1fdGV4dHVyZUNoYW5nZWQodHJ1ZSkKICAgICAs
IG1fdGV4dHVyZVVwZGF0ZWQoZmFsc2UpCiB7CkBAIC01NiwxMyArNTYsMTMgQEAgV2ViR0xMYXll
ckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0oQwogCiBXZWJHTExheWVyQ2hyb21pdW06On5X
ZWJHTExheWVyQ2hyb21pdW0oKQogewotICAgIGlmIChtX2NvbnRleHQgJiYgbGF5ZXJUcmVlSG9z
dCgpKQotICAgICAgICBsYXllclRyZWVIb3N0KCktPnN0b3BSYXRlTGltaXRlcihtX2NvbnRleHQp
OworICAgIGlmIChjb250ZXh0KCkgJiYgbGF5ZXJUcmVlSG9zdCgpKQorICAgICAgICBsYXllclRy
ZWVIb3N0KCktPnN0b3BSYXRlTGltaXRlcihjb250ZXh0KCkpOwogfQogCiBib29sIFdlYkdMTGF5
ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKG1fY29udGV4
dCAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FS
QigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUik7CisgICAgcmV0dXJuIChjb250ZXh0
KCkgJiYgY29udGV4dCgpLT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNB
UkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpOwogfQogCiB2b2lkIFdlYkdMTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCog
cmVuZGVyZXJDb250ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJikKQEAgLTg1LDExICs4NSw5IEBAIHZv
aWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG8KICAgICB9CiAgICAgLy8gVXBk
YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgog
ICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpICYmIG1fdGV4dHVyZVVwZGF0ZWQpIHsKLSAg
ICAgICAgLy8gcHJlcGFyZVRleHR1cmUgY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgb2ZmLXNj
cmVlbiByZW5kZXIgdGFyZ2V0IGludG8gdGhlIHRleHR1cmUKLSAgICAgICAgLy8gdXNlZCBieSB0
aGUgY29tcG9zaXRvci4KLSAgICAgICAgLy8KLSAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4
dHVyZSgpOwotICAgICAgICBtX2NvbnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKyAgICAg
ICAgLy8gcHVibGlzaFRvUGxhdGZvcm1MYXllciBwcmVwYXJlcyB0aGUgY29udGVudHMgb2YgdGhl
IG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBmb3IgdXNlIGJ5IHRoZSBjb21wb3NpdG9yLgorICAg
ICAgICBkcmF3aW5nQnVmZmVyKCktPnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKTsKKyAgICAgICAg
Y29udGV4dCgpLT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAgICAgICAgIG1fdXBkYXRlUmVjdCA9
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJvdW5kcygpKTsKICAgICAgICAgcmVzZXROZWVkc0Rp
c3BsYXkoKTsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlZCA9IGZhbHNlOwpAQCAtMTAxLDcgKzk5
LDcgQEAgYm9vbCBXZWJHTExheWVyQ2hyb21pdW06OnBhaW50UmVuZGVyZWRSZQogICAgIGlmICht
X3RleHR1cmVVcGRhdGVkIHx8ICFsYXllclJlbmRlcmVyQ29udGV4dCgpIHx8ICFkcmF3c0NvbnRl
bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50U2l6ZSBmcmFtZWJ1ZmZlclNp
emUgPSBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7CisgICAgSW50U2l6
ZSBmcmFtZWJ1ZmZlclNpemUgPSBjb250ZXh0KCktPmdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCk7CiAgICAgQVNTRVJUKGxheWVyUmVuZGVyZXJDb250ZXh0KCkpOwogCiAgICAgLy8gVGhpcyB3
b3VsZCBpZGVhbGx5IGJlIGRvbmUgaW4gdGhlIHdlYmdsIGNvbnRleHQsIGJ1dCB0aGF0IGlzbid0
IHBvc3NpYmxlIHlldC4KQEAgLTExMCw3ICsxMDgsNyBAQCBib29sIFdlYkdMTGF5ZXJDaHJvbWl1
bTo6cGFpbnRSZW5kZXJlZFJlCiAgICAgbGF5ZXJSZW5kZXJlckNvbnRleHQoKS0+ZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
X3RleHR1cmVJZCwgMCk7CiAKICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9
IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4obGF5ZXJSZW5kZXJlckNvbnRleHQo
KS0+Z2V0RXh0ZW5zaW9ucygpKTsKLSAgICBleHRlbnNpb25zLT5wYWludEZyYW1lYnVmZmVyVG9D
YW52YXMoZnJhbWVidWZmZXIsIGZyYW1lYnVmZmVyU2l6ZS53aWR0aCgpLCBmcmFtZWJ1ZmZlclNp
emUuaGVpZ2h0KCksICFtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlw
bGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CisgICAgZXh0ZW5zaW9ucy0+cGFpbnRGcmFtZWJ1ZmZl
clRvQ2FudmFzKGZyYW1lYnVmZmVyLCBmcmFtZWJ1ZmZlclNpemUud2lkdGgoKSwgZnJhbWVidWZm
ZXJTaXplLmhlaWdodCgpLCAhY29udGV4dCgpLT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11
bHRpcGxpZWRBbHBoYSwgaW1hZ2VCdWZmZXIpOwogICAgIGxheWVyUmVuZGVyZXJDb250ZXh0KCkt
PmRlbGV0ZUZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTEyMSwzMiArMTE5LDM5IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdl
ZCgKICAgICAvLyBJZiBXZWJHTCBjb21tYW5kcyBhcmUgaXNzdWVkIG91dHNpZGUgb2YgYSB0aGUg
YW5pbWF0aW9uIGNhbGxiYWNrcywgdGhlbiB1c2UKICAgICAvLyBjYWxsIHJhdGVMaW1pdE9mZnNj
cmVlbkNvbnRleHRDSFJPTUlVTSgpIHRvIGtlZXAgdGhlIGNvbnRleHQgZnJvbSBnZXR0aW5nIHRv
byBmYXIgYWhlYWQuCiAgICAgaWYgKGxheWVyVHJlZUhvc3QoKSkKLSAgICAgICAgbGF5ZXJUcmVl
SG9zdCgpLT5zdGFydFJhdGVMaW1pdGVyKG1fY29udGV4dCk7CisgICAgICAgIGxheWVyVHJlZUhv
c3QoKS0+c3RhcnRSYXRlTGltaXRlcihjb250ZXh0KCkpOwogfQogCi12b2lkIFdlYkdMTGF5ZXJD
aHJvbWl1bTo6c2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK3Zv
aWQgV2ViR0xMYXllckNocm9taXVtOjpzZXREcmF3aW5nQnVmZmVyKERyYXdpbmdCdWZmZXIqIGRy
YXdpbmdCdWZmZXIpCiB7Ci0gICAgYm9vbCBjb250ZXh0Q2hhbmdlZCA9IChtX2NvbnRleHQgIT0g
Y29udGV4dCk7CisgICAgYm9vbCBkcmF3aW5nQnVmZmVyQ2hhbmdlZCA9IChtX2RyYXdpbmdCdWZm
ZXIgIT0gZHJhd2luZ0J1ZmZlcik7CisgICAgbV9kcmF3aW5nQnVmZmVyID0gZHJhd2luZ0J1ZmZl
cjsKIAotICAgIGlmIChsYXllclRyZWVIb3N0KCkgJiYgY29udGV4dENoYW5nZWQpCi0gICAgICAg
IGxheWVyVHJlZUhvc3QoKS0+c3RvcFJhdGVMaW1pdGVyKG1fY29udGV4dCk7CisgICAgaWYgKGxh
eWVyVHJlZUhvc3QoKSAmJiBkcmF3aW5nQnVmZmVyQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXJUcmVl
SG9zdCgpLT5zdG9wUmF0ZUxpbWl0ZXIoY29udGV4dCgpKTsKIAotICAgIG1fY29udGV4dCA9IGNv
bnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0M0QqPihjb250ZXh0KTsKLQotICAgIGlmICghbV9jb250
ZXh0KQorICAgIGlmICghbV9kcmF3aW5nQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICB1
bnNpZ25lZCBpbnQgdGV4dHVyZUlkID0gbV9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsKLSAg
ICBpZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkIHx8IGNvbnRleHRDaGFuZ2VkKSB7CisgICAg
dW5zaWduZWQgaW50IHRleHR1cmVJZCA9IG1fZHJhd2luZ0J1ZmZlci0+cGxhdGZvcm1Db2xvckJ1
ZmZlcigpOworICAgIGlmICh0ZXh0dXJlSWQgIT0gbV90ZXh0dXJlSWQgfHwgZHJhd2luZ0J1ZmZl
ckNoYW5nZWQpIHsKICAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgIG1f
dGV4dHVyZVVwZGF0ZWQgPSB0cnVlOwogICAgIH0KICAgICBtX3RleHR1cmVJZCA9IHRleHR1cmVJ
ZDsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gbV9jb250
ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMgPSBjb250ZXh0KCktPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CiAg
ICAgbV9oYXNBbHBoYSA9IGF0dHJpYnV0ZXMuYWxwaGE7CiAgICAgbV9wcmVtdWx0aXBsaWVkQWxw
aGEgPSBhdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYTsKIH0KIAorR3JhcGhpY3NDb250ZXh0
M0QqIFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgaWYgKGRyYXdp
bmdCdWZmZXIoKSkKKyAgICAgICAgcmV0dXJuIGRyYXdpbmdCdWZmZXIoKS0+Z3JhcGhpY3NDb250
ZXh0M0QoKS5nZXQoKTsKKworICAgIHJldHVybiAwOworfQorCiBHcmFwaGljc0NvbnRleHQzRCog
V2ViR0xMYXllckNocm9taXVtOjpsYXllclJlbmRlcmVyQ29udGV4dCgpCiB7CiAgICAgLy8gRklY
TUU6IEluIHRoZSB0aHJlYWRlZCBjYXNlLCBwYWludFJlbmRlcmVkUmVzdWx0c1RvQ2FudmFzIG11
c3QgYmUKQEAgLTE1Nyw0ICsxNjIsNSBAQCBHcmFwaGljc0NvbnRleHQzRCogV2ViR0xMYXllckNo
cm9taXVtOjpsCiB9CiAKIH0KKwogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA5OTU5MykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJv
bWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorI2lu
Y2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Mywy
MSArNTQsMjMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjb250ZW50Q2hhbmdlZCgpOwog
ICAgIGJvb2wgcGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopOwogCi0g
ICAgdm9pZCBzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKLSAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgY29uc3Q7CiAKKyAgICB2b2lkIHNldERyYXdp
bmdCdWZmZXIoRHJhd2luZ0J1ZmZlciopOworICAgIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZm
ZXIoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdCdWZmZXI7IH0KIHByaXZhdGU6CiAgICAgZXhw
bGljaXQgV2ViR0xMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwogICAgIGZyaWVuZCBj
bGFzcyBXZWJHTExheWVyQ2hyb21pdW1SYXRlTGltaXRUYXNrOwogCiAgICAgR3JhcGhpY3NDb250
ZXh0M0QqIGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CiAKLSAgICAvLyBHcmFwaGljc0NvbnRleHQz
RDo6cGxhdGZvcm1MYXllciBoYXMgYSBzaWRlLWVmZmVjdCBvZiBhc3NpZ25pbmcgaXRzZWxmCi0g
ICAgLy8gdG8gdGhlIGxheWVyLiBCZWNhdXNlIG9mIHRoYXQgR3JhcGhpY3NDb250ZXh0M0QncyBk
ZXN0cnVjdG9yIHdpbGwgcmVzZXQKLSAgICAvLyBsYXllcidzIGNvbnRleHQgdG8gMC4KLSAgICBH
cmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogICAgIGJvb2wgbV90ZXh0dXJlQ2hhbmdlZDsK
ICAgICBib29sIG1fdGV4dHVyZVVwZGF0ZWQ7CisKKyAgICAvLyBUaGUgRHJhd2luZ0J1ZmZlciBo
b2xkaW5nIHRoZSBXZWJHTCBjb250ZW50cyBmb3IgdGhpcyBsYXllci4KKyAgICAvLyBBIHJlZmVy
ZW5jZSBpcyBub3QgaGVsZCBoZXJlLCBiZWNhdXNlIHRoZSBEcmF3aW5nQnVmZmVyIGFscmVhZHkg
aG9sZHMKKyAgICAvLyBhIHJlZmVyZW5jZSB0byB0aGUgV2ViR0xMYXllckNocm9taXVtLgorICAg
IERyYXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNz
Q29udGV4dDNERWZsLmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MjYsMTMgKzcyNiwxNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBv
c2l0ZWQoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2lu
Z0J1ZmZlcikKIHsKKyAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRl
ZCBpbiBDaHJvbWl1bSBwb3J0cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIpOwogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRl
eHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQorUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0
YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogeworICAgIC8vIERyYXdpbmdCdWZmZXIg
c3VwcG9ydCBvbmx5IGltcGxlbWVudGVkIGluIENocm9taXVtIHBvcnRzLgorICAgIEFTU0VSVCgh
ZHJhd2luZ0J1ZmZlcik7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKDEsIDEpKTsKICAgICBy
ZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHJldmlzaW9uIDk5
NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiRHJhd2lu
Z0J1ZmZlci5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC00OCw3ICs1MCw3IEBAIHN0YXRpYyBpbnQgc19tYXhpbXVtUmVzb3VyY2VVc2VQ
aXhlbHMgPQogI2VuZGlmCiBzdGF0aWMgaW50IHNfY3VycmVudFJlc291cmNlVXNlUGl4ZWxzID0g
MDsKIAotUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCitQYXNzUmVmUHRy
PERyYXdpbmdCdWZmZXI+IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJl
KQogewogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdldEV4dGVuc2lv
bnMoKTsKICAgICBib29sIG11bHRpc2FtcGxlU3VwcG9ydGVkID0gZXh0ZW5zaW9ucy0+c3VwcG9y
dHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKSAmJiBleHRlbnNpb25zLT5zdXBwb3J0cygi
R0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSAmJiBleHRlbnNpb25zLT5zdXBwb3J0
cygiR0xfT0VTX3JnYjhfcmdiYTgiKTsKQEAgLTYwLDcgKzYyLDcgQEAgUGFzc1JlZlB0cjxEcmF3
aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOgogICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNp
bCIpOwogICAgIGlmIChwYWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpCiAgICAgICAgIGV4dGVu
c2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAg
IFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyID0gYWRvcHRSZWYobmV3IERyYXdp
bmdCdWZmZXIoY29udGV4dCwgc2l6ZSwgbXVsdGlzYW1wbGVTdXBwb3J0ZWQsIHBhY2tlZERlcHRo
U3RlbmNpbFN1cHBvcnRlZCkpOworICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVm
ZmVyID0gYWRvcHRSZWYobmV3IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSwgbXVsdGlzYW1w
bGVTdXBwb3J0ZWQsIHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCwgc2VwYXJhdGVCYWNraW5n
VGV4dHVyZSkpOwogICAgIHJldHVybiAoZHJhd2luZ0J1ZmZlci0+bV9jb250ZXh0KSA/IGRyYXdp
bmdCdWZmZXIucmVsZWFzZSgpIDogMDsKIH0KIApAQCAtNzgsNiArODAsMTEgQEAgdm9pZCBEcmF3
aW5nQnVmZmVyOjpjbGVhcigpCiAgICAgICAgIG1fY29sb3JCdWZmZXIgPSAwOwogICAgIH0KIAor
ICAgIGlmIChtX2JhY2tpbmdDb2xvckJ1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPmRlbGV0
ZVRleHR1cmUobV9iYWNraW5nQ29sb3JCdWZmZXIpOworICAgICAgICBtX2JhY2tpbmdDb2xvckJ1
ZmZlciA9IDA7CisgICAgfQorCiAgICAgaWYgKG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcikgewog
ICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIpOwogICAgICAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSAwOwpAQCAtMTY2LDcg
KzE3Myw3IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXJGcmFtZWJ1ZmZlcigpCiAgICAgdW5z
aWduZWQgY2hhciBkZXB0aE1hc2sgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbE1h
c2sgPSAweGZmZmZmZmZmOwogICAgIHVuc2lnbmVkIGNoYXIgaXNTY2lzc29yRW5hYmxlZCA9IGZh
bHNlOwotICAgIHVuc2lnbmVkIGxvbmcgY2xlYXJNYXNrID0gR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0JVRkZFUl9CSVQ7CisgICAgdW5zaWduZWQgY2xlYXJNYXNrID0gR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7CiAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKICAgICAg
ICAgbV9jb250ZXh0LT5nZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZB
TFVFLCAmY2xlYXJEZXB0aCk7CiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxKTsKQEAg
LTE4OCw2ICsxOTUsMTQgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpjbGVhckZyYW1lYnVmZmVyKCkK
ICAgICBtX2NvbnRleHQtPmdldEZsb2F0dihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJf
VkFMVUUsIGNsZWFyQ29sb3IpOwogICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAw
KTsKICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7CisKKyAgICAvLyBUaGUgbXVsdGlz
YW1wbGUgZmJvIHdhcyBqdXN0IGNsZWFyZWQsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gY2xlYXIgdGhl
IG5vbi1tdWx0aXNhbXBsZWQgYnVmZmVyIHRvby4KKyAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykg
eworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7CisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7
CisgICAgfQorCiAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFy
Q29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOwogCiAgICAgaWYgKGF0dHJp
YnV0ZXMuZGVwdGgpIHsKQEAgLTIzMyw3ICsyNDgsNyBAQCBib29sIERyYXdpbmdCdWZmZXI6OnJl
c2V0KGNvbnN0IEludFNpemUmCiAgICAgaWYgKG5ld1NpemUgIT0gbV9zaXplKSB7CiAgICAgICAg
IG1fc2l6ZSA9IG5ld1NpemU7CiAKLSAgICAgICAgdW5zaWduZWQgbG9uZyBpbnRlcm5hbENvbG9y
Rm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxSZW5kZXJidWZmZXJGb3JtYXQ7CisgICAgICAg
IHVuc2lnbmVkIGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0LCBpbnRlcm5hbFJlbmRl
cmJ1ZmZlckZvcm1hdDsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuYWxwaGEpIHsKICAgICAgICAg
ICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKICAgICAg
ICAgICAgIGNvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CkBAIC0yNTAsNyAr
MjY1LDcgQEAgYm9vbCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgICAg
ICAgICAgaW50IG1heFNhbXBsZUNvdW50ID0gMDsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
bV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9TQU1QTEVTLCAmbWF4U2Ft
cGxlQ291bnQpOwotICAgICAgICAgICAgaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oOCwgbWF4
U2FtcGxlQ291bnQpOworICAgICAgICAgICAgaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oNCwg
bWF4U2FtcGxlQ291bnQpOwogCiAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogCkBA
IC0yNjksMTAgKzI4NCwxNiBAQCBib29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNp
emUmCiAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogCiAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIpOwotICAgICAgICAK
ICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDAp
OwogCiAgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyLCAwKTsKKworICAg
ICAgICAvLyByZXNpemUgdGhlIGJhY2tpbmcgY29sb3IgYnVmZmVyCisgICAgICAgIGlmIChtX3Nl
cGFyYXRlQmFja2luZ1RleHR1cmUpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmFja2luZ0NvbG9yQnVmZmVyKTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5o
ZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCAwKTsKKyAgICAgICAgfQorCiAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwogCiAgICAgICAgIGlmICghbXVsdGlzYW1wbGUo
KSkKQEAgLTI5MywyMyArMzE0LDU2IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y29tbWl0KGxvbmcg
eCwgbG9uZwogewogICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICByZXR1cm47Ci0gICAgICAg
IAorCiAgICAgaWYgKHdpZHRoIDwgMCkKICAgICAgICAgd2lkdGggPSBtX3NpemUud2lkdGgoKTsK
ICAgICBpZiAoaGVpZ2h0IDwgMCkKICAgICAgICAgaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOwot
ICAgICAgICAKKwogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgCisK
ICAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykgewogICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OlJFQURfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8p
OwogICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OkRSQVdf
RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PmJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUik7CisKKyAgICAgICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCisgICAgICAgICAgICBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisKKyAg
ICAgICAgLy8gVXNlIE5FQVJFU1QsIGJlY2F1c2UgdGhlcmUgaXMgbm8gc2NhbGUgcGVyZm9ybWVk
IGR1cmluZyB0aGUgYmxpdC4KKyAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmJs
aXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5F
QVJFU1QpOworCisgICAgICAgIGlmIChtX3NjaXNzb3JFbmFibGVkKQorICAgICAgICAgICAgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgfQot
ICAgIAorCiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiB9CiAKK2Jvb2wgRHJhd2luZ0J1ZmZlcjo6bXVsdGlzYW1w
bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5nZXRDb250
ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyAmJiBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9y
dGVkOworfQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gRHJhd2luZ0J1ZmZlcjo6cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQoreworICAgIHJldHVybiBtX2NvbnRleHQtPnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKHRoaXMpOworfQorCit2b2lkIERyYXdpbmdCdWZm
ZXI6OmRpc2NhcmRSZXNvdXJjZXMoKQoreworICAgIG1fY29sb3JCdWZmZXIgPSAwOworICAgIG1f
YmFja2luZ0NvbG9yQnVmZmVyID0gMDsKKyAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSAw
OworCisgICAgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgPSAwOworICAgIG1fZGVwdGhCdWZmZXIgPSAw
OworCisgICAgbV9zdGVuY2lsQnVmZmVyID0gMDsKKworICAgIG1fbXVsdGlzYW1wbGVGQk8gPSAw
OworICAgIG1fZmJvID0gMDsKK30KKwogdm9pZCBEcmF3aW5nQnVmZmVyOjpiaW5kKCkKIHsKICAg
ICBpZiAoIW1fY29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9EcmF3aW5nQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0Qu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
QEAgLTQzLDE1ICs0NCwxOCBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lm
IFBMQVRGT1JNKENIUk9NSVVNKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1jbGFz
cyBDYW52YXMyRExheWVyQ2hyb21pdW07CitjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0Owor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBJbWFnZURhdGE7CisjaWYgUExBVEZPUk0o
Q0hST01JVU0pCitjbGFzcyBXZWJHTExheWVyQ2hyb21pdW07CiAjZW5kaWYKIAogLy8gTWFuYWdl
cyBhIHJlbmRlcmluZyB0YXJnZXQgKGZyYW1lYnVmZmVyICsgYXR0YWNobWVudCkgZm9yIGEgY2Fu
dmFzLiAgQ2FuIHB1Ymxpc2ggaXRzIHJlbmRlcmluZwogLy8gcmVzdWx0cyB0byBhIFBsYXRmb3Jt
TGF5ZXIgZm9yIGNvbXBvc2l0aW5nLgogY2xhc3MgRHJhd2luZ0J1ZmZlciA6IHB1YmxpYyBSZWZD
b3VudGVkPERyYXdpbmdCdWZmZXI+IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
cmF3aW5nQnVmZmVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJiwg
Ym9vbCk7CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCiAgICAgfkRyYXdp
bmdCdWZmZXIoKTsKQEAgLTc1LDEwICs3OSwyMiBAQCBwdWJsaWM6CiAKICAgICAvLyBDb3BpZXMg
dGhlIG11bHRpc2FtcGxlIGNvbG9yIGJ1ZmZlciB0byB0aGUgbm9ybWFsIGNvbG9yIGJ1ZmZlciBh
bmQgbGVhdmVzIG1fZmJvIGJvdW5kCiAgICAgdm9pZCBjb21taXQobG9uZyB4ID0gMCwgbG9uZyB5
ID0gMCwgbG9uZyB3aWR0aCA9IC0xLCBsb25nIGhlaWdodCA9IC0xKTsKLSAgICAKLSAgICBib29s
IG11bHRpc2FtcGxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+Z2V0
Q29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgJiYgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1
cHBvcnRlZDsgfQotICAgIAorCisgICAgLy8gY29tbWl0IHNob3VsZCBjb3B5IHRoZSBmdWxsIG11
bHRpc2FtcGxlIGJ1ZmZlciwgYW5kIG5vdCByZXNwZWN0IHRoZQorICAgIC8vIGN1cnJlbnQgc2Np
c3NvciBib3VuZHMuIFRyYWNrIHRoZSBzdGF0ZSBvZiB0aGUgc2Npc3NvciB0ZXN0IHNvIHRoYXQg
aXQKKyAgICAvLyBjYW4gYmUgZGlzYWJsZWQgZHVyaW5nIGNhbGxzIHRvIGNvbW1pdC4KKyAgICB2
b2lkIHNldFNjaXNzb3JFbmFibGVkKGJvb2wgc2Npc3NvckVuYWJsZWQpIHsgbV9zY2lzc29yRW5h
YmxlZCA9IHNjaXNzb3JFbmFibGVkOyB9CisKKyAgICBib29sIG11bHRpc2FtcGxlKCkgY29uc3Q7
CisKICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtQ29sb3JCdWZmZXIoKSBjb25zdDsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKCkgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRy
PEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKworICAgIC8v
IEltbWVkaWF0ZWx5IHJlbGVhc2VzIG93bmVyc2hpcCBvZiBhbGwgcmVzb3VyY2VzLiBDYWxsIHVw
b24gbG9zcyBvZiB0aGUKKyAgICAvLyBncmFwaGljcyBjb250ZXh0IHRvIHByZXZlbnQgZnJlZWlu
ZyBpbnZhbGlkIHJlc291cmNlcy4KKyAgICB2b2lkIGRpc2NhcmRSZXNvdXJjZXMoKTsKIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKCk7CkBAIC04NywxMCArMTAzLDE2IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0OyB9CiAKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0Kik7CisKIHByaXZhdGU6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
RHJhd2luZ0J1ZmZlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYp
OwotICAgIAotICAgIERyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRT
aXplJiwgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwgYm9vbCBwYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpOworICAgIERyYXdpbmdCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0QqLCBjb25zdCBJbnRTaXplJiwgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBv
cnRlZCwKKyAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9u
U3VwcG9ydGVkLCBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpOworCisgICAgdm9pZCBpbml0
aWFsaXplKGNvbnN0IEludFNpemUmKTsKKworICAgIGJvb2wgbV9zZXBhcmF0ZUJhY2tpbmdUZXh0
dXJlOworICAgIGJvb2wgbV9zY2lzc29yRW5hYmxlZDsKIAogICAgIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gbV9jb250ZXh0OwogICAgIEludFNpemUgbV9zaXplOwpAQCAtOTgsNiArMTIwLDcg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9y
dGVkOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CiAgICAgUGxhdGZvcm0zRE9iamVjdCBt
X2NvbG9yQnVmZmVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9iYWNraW5nQ29sb3JCdWZmZXI7
CiAKICAgICAvLyBUaGlzIGlzIHVzZWQgd2hlbiB3ZSBoYXZlIE9FU19wYWNrZWRfZGVwdGhfc3Rl
bmNpbC4KICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVwdGhTdGVuY2lsQnVmZmVyOwpAQCAtMTEw
LDYgKzEzMywxMCBAQCBwcml2YXRlOgogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBs
ZUZCTzsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcjsKIAor
I2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIFJlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IG1f
cGxhdGZvcm1MYXllcjsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFJldGFpblB0
cjxXZWJHTExheWVyPiBtX3BsYXRmb3JtTGF5ZXI7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdC
dWZmZXJNYWMubW0JKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw4ICszOSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBEcmF3aW5nQnVmZmVyOjpEcmF3aW5n
QnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKLSAg
ICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgIDogbV9zZXBhcmF0
ZUJhY2tpbmdUZXh0dXJlKHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgLCBtX3NjaXNzb3JF
bmFibGVkKGZhbHNlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3NpemUoLTEs
IC0xKQogICAgICwgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZChtdWx0aXNhbXBsZUV4
dGVuc2lvblN1cHBvcnRlZCkKICAgICAsIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3Vw
cG9ydGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKQEAgLTUyLDYgKzU1
LDkgQEAgRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbgogICAgICwgbV9t
dWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiB7Cisg
ICAgLy8gU3VwcG9ydCBmb3IgYSBzZXBhcmF0ZSBiYWNraW5nIHRleHR1cmUgaGFzIG9ubHkgYmVl
biBlbmFibGVkIGZvcgorICAgIC8vIHRoZSBjaHJvbWl1bSBwb3J0LgorICAgIEFTU0VSVCghbV9z
ZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKTsKICAgICBBU1NFUlQobV9mYm8pOwogICAgIGlmICghbV9m
Ym8pIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQuY3BwCShyZXZp
c2lvbiA5OTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9E
cmF3aW5nQnVmZmVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRT
aXplJiBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpc2FtcGxl
RXh0ZW5zaW9uU3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKLSAgICA6IG1fY29udGV4dChjb250
ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNp
bEV4dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBz
ZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgIDogbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKHNl
cGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgLCBtX3NjaXNzb3JFbmFibGVkKGZhbHNlKQorICAg
ICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3NpemUoLTEsIC0xKQogICAgICwgbV9tdWx0
aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZChtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCkK
ICAgICAsIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKHBhY2tlZERlcHRo
U3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKQEAgLTQ3LDYgKzUwLDkgQEAgRHJhd2luZ0J1ZmZl
cjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbgogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQog
ICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiB7CisgICAgLy8gU3VwcG9ydCBmb3Ig
YSBzZXBhcmF0ZSBiYWNraW5nIHRleHR1cmUgaGFzIG9ubHkgYmVlbiBlbmFibGVkIGZvcgorICAg
IC8vIHRoZSBjaHJvbWl1bSBwb3J0LgorICAgIEFTU0VSVCghbV9zZXBhcmF0ZUJhY2tpbmdUZXh0
dXJlKTsKICAgICBBU1NFUlQobV9mYm8pOwogICAgIGlmICghbV9mYm8pIHsKICAgICAgICAgY2xl
YXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAkocmV2aXNp
b24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsOCArMTI4LDEw
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVzb3VyY2VTYWZlKCkKIH0KIAogI2lmICFQ
TEFURk9STShRVCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogeworICAgIC8v
IERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGltcGxlbWVudGVkIGluIENocm9taXVtIHBvcnRz
LgorICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9
IGNhbnZhcy0+YnVmZmVyKCk7CiAKQEAgLTE2Miw4ICsxNjQsMTAgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRDb21wb3NpdGVkUgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YSgpCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZm
ZXIpCiB7CisgICAgLy8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVtZW50ZWQgaW4g
Q2hyb21pdW0gcG9ydHMuCisgICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKICAgICAvLyBSZWFk
aW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3
aGljaCBpcwogICAgIC8vIGxvc3N5CiAgICAgaWYgKG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhh
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0M0RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyMCw4ICs0MjAsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
bWFrZUNvbnRleHRDdXJyZQogICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CisgICAgLy8gRHJh
d2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0gcG9ydHMuCisg
ICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKICAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNh
bnZhcygpOwogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7
CkBAIC00MzAsOCArNDMyLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVy
aW5nUmUKIH0KIAogI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCi1QYXNzUmVmUHRyPEltYWdl
RGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KCkKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAg
ICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBw
b3J0cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIpOwogICAgIC8vIEZJWE1FOiBUaGlzIG5l
ZWRzIHRvIGJlIGltcGxlbWVudGVkIGZvciBwcm9wZXIgbm9uLXByZW11bHRpcGxpZWQtYWxwaGEK
ICAgICAvLyBzdXBwb3J0LgogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDk5NTk3KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAxMS0xMS0wOCAgSmVmZiBUaW1h
bnVzICA8dHdpekBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBQYXRjaCB0aGF0
IGltcGxlbWVudGluZyB0aGUgY2hhbmdlcyByZXF1aXJlZCB0byBhbGxvdyBXZWJHTAorICAgICAg
ICB0byBzaGFyZSBpdHMgYmFja2luZyBzdG9yZSBkaXJlY3RseSB3aXRoIHRoZSBjb21wb3NpdG9y
LgorICAgICAgICBXZWJHTCByZW5kZXJpbmcgY29udGV4dHMgY3JlYXRlIGFuZCByZW5kZXIgdG8g
RkJPcyBtYW5hZ2VkIGJ5IGEKKyAgICAgICAgRHJhd2luZ0J1ZmZlciBpbnN0YW5jZS4gQWxsIFBs
YXRmb3JtTGF5ZXIgbGlmZXRpbWUgbWFuYWdlbWVudCBpcworICAgICAgICBwZXJmb3JtZWQgYnkg
dGhlIERyYXdpbmdCdWZmZXIuCisgICAgICAgIENoYW5nZXMgYXJlIG9ubHkgcmVsZXZhbnQgdG8g
Q2hyb21pdW0gcG9ydHMuIEZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgdW5jaGFuZ2VkIGZvciBv
dGhlciBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6IEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZSBubyBsb25nZXIgY2FjaGVzCisgICAgICAgIHRoZSBXZWJHTExheWVyQ2hyb21pdW0g
aW5zdGFuY2UuICBJbnN0ZWFkLCBpdCBpcyBhY2Nlc3NlZCB2aWEgRHJhd2luZ0J1ZmZlciBpbnN0
YW5jZXMKKyAgICAgICAgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byB0aGUgbmVjZXNzYXJ5IHJvdXRp
bmVzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhp
Y3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRm
b3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgICogc3JjL0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOgorCiAyMDExLTExLTA4ICBZdXJ5IFNlbWlraGF0c2t5
ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGRpc3BsYXkg
bm90aWZpY2F0aW9uIGluIHRoZSBmcm9udC1lbmQgd2hlbiBpbnNwZWN0ZWQgd29ya2VyIHRlcm1p
bmF0ZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNE
Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dy
YXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSwxMCArMzUsMTAgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ2hy
b21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkRyYXdpbmdC
dWZmZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50Lmgi
CkBAIC0xNjMsNiArMTYzLDIwIEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0
ZUdyYXAKICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGlj
c0NvbnRleHRGcm9tV2ViQ29udGV4dCh3ZWJDb250ZXh0LnJlbGVhc2UoKSwgYXR0cnMsIGhvc3RX
aW5kb3csIHJlbmRlclN0eWxlLCB0aHJlYWRVc2FnZSk7CiB9CiAKK3ZvaWQgZ2V0RHJhd2luZ1Bh
cmFtZXRlcnMoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IFBsYXRmb3JtM0RPYmplY3QqIGZyYW1lQnVmZmVySWQsIGludCogd2lkdGgsIGludCogaGVpZ2h0
KQoreworICAgIGlmIChkcmF3aW5nQnVmZmVyKSB7CisgICAgICAgICpmcmFtZUJ1ZmZlcklkID0g
ZHJhd2luZ0J1ZmZlci0+ZnJhbWVidWZmZXIoKTsKKyAgICAgICAgKndpZHRoID0gZHJhd2luZ0J1
ZmZlci0+c2l6ZSgpLndpZHRoKCk7CisgICAgICAgICpoZWlnaHQgPSBkcmF3aW5nQnVmZmVyLT5z
aXplKCkuaGVpZ2h0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKmZyYW1lQnVmZmVySWQgPSAw
OworICAgICAgICAqd2lkdGggPSBncmFwaGljc0NvbnRleHQzRC0+d2lkdGgoKTsKKyAgICAgICAg
KmhlaWdodCA9IGdyYXBoaWNzQ29udGV4dDNELT5oZWlnaHQoKTsKKyAgICB9Cit9CisKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZvckFub3RoZXJUaHJl
YWQoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKQEAgLTIx
MiwxNyArMjI2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnByZXBhcmVUZQog
ICAgIG1faW1wbC0+cHJlcGFyZVRleHR1cmUoKTsKIH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLVdlYkdMTGF5ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpwbGF0Zm9ybUxheWVyKCkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0g
ICAgaWYgKCFtX2NvbXBvc2l0aW5nTGF5ZXIpCi0gICAgICAgIG1fY29tcG9zaXRpbmdMYXllciA9
IFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwotI2VuZGlmCi0gICAgcmV0dXJuIG1fY29t
cG9zaXRpbmdMYXllci5nZXQoKTsKLX0KLSNlbmRpZgotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6bWFya0NvbnRleHRDaGFuZ2VkKCkKIHsKICAgICBtX2xheWVyQ29tcG9zaXRlZCA9
IGZhbHNlOwpAQCAtMzA1LDMxICszMDgsMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnBhaW50RnJhbQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZm
ZXIqIGRyYXdpbmdCdWZmZXIpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY29u
dGV4dC0+Y2FudmFzKCktPmJ1ZmZlcigpOwotICAgIHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcygw
LCBtX2ltcGwtPndpZHRoKCksIG1faW1wbC0+aGVpZ2h0KCksICFtX2ltcGwtPmdldENvbnRleHRB
dHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CisgICAgUGxhdGZv
cm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOworICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIGdl
dERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZmZXIsIG1faW1wbC5nZXQoKSwgJmZyYW1lYnVm
ZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7CisgICAgcGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZy
YW1lYnVmZmVySWQsIHdpZHRoLCBoZWlnaHQsICFtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVz
KCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CiB9CiAKIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCkKIHsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0gICAgaWYgKHBsYXRmb3JtTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtTGF5
ZXIoKS0+cGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyhjb250ZXh0LT5jYW52YXMoKS0+YnVm
ZmVyKCkpOwotI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPEltYWdl
RGF0YT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0lt
YWdlRGF0YSgpCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5n
QnVmZmVyKQogewogICAgIGlmIChtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVs
dGlwbGllZEFscGhhKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKG1faW1wbC0+d2lkdGgo
KSwgbV9pbXBsLT5oZWlnaHQoKSkpOworCisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZl
cklkOworICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRy
YXdpbmdCdWZmZXIsIG1faW1wbC5nZXQoKSwgJmZyYW1lYnVmZmVySWQsICZ3aWR0aCwgJmhlaWdo
dCk7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0
ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBp
bWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUg
PSA0ICogbV9pbXBsLT53aWR0aCgpICogbV9pbXBsLT5oZWlnaHQoKTsKKyAgICBzaXplX3QgYnVm
ZmVyU2l6ZSA9IDQgKiB3aWR0aCAqIGhlaWdodDsKIAotICAgIG1faW1wbC0+cmVhZEJhY2tGcmFt
ZWJ1ZmZlcihwaXhlbHMsIGJ1ZmZlclNpemUsIDAsIG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5o
ZWlnaHQoKSk7CisgICAgbV9pbXBsLT5yZWFkQmFja0ZyYW1lYnVmZmVyKHBpeGVscywgYnVmZmVy
U2l6ZSwgZnJhbWVidWZmZXJJZCwgd2lkdGgsIGhlaWdodCk7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJ1ZmZlclNpemU7IGkgKz0gNCkKICAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tp
XSwgcGl4ZWxzW2kgKyAyXSk7CkBAIC0xMDA5LDkgKzEwMTUsNiBAQCBHcmFwaGljc0NvbnRleHQz
RDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAKIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3ND
b250ZXh0M0QoKQogewotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogY2FudmFzTGF5ZXIgPSBtX3By
aXZhdGUtPnBsYXRmb3JtTGF5ZXIoKTsKLSAgICBpZiAoY2FudmFzTGF5ZXIpCi0gICAgICAgIGNh
bnZhc0xheWVyLT5zZXRDb250ZXh0KDApOwogICAgIG1fcHJpdmF0ZS0+c2V0Q29udGV4dExvc3RD
YWxsYmFjayhudWxscHRyKTsKICAgICBtX3ByaXZhdGUtPnNldFN3YXBCdWZmZXJzQ29tcGxldGVD
YWxsYmFja0NIUk9NSVVNKG51bGxwdHIpOwogfQpAQCAtMTA1Niw5ICsxMDU5LDcgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6aXNSZXNvdXJjZVNhZmUoKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKIHsKLSAgICBXZWJHTExheWVyQ2hyb21pdW0qIGNhbnZhc0xheWVyID0gbV9w
cml2YXRlLT5wbGF0Zm9ybUxheWVyKCk7Ci0gICAgY2FudmFzTGF5ZXItPnNldENvbnRleHQodGhp
cyk7Ci0gICAgcmV0dXJuIGNhbnZhc0xheWVyOworICAgIHJldHVybiAwOwogfQogI2VuZGlmCiAK
QEAgLTEyMTQsOCArMTIxNSwxNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBv
c2l0ZWQoCiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bGF5ZXJDb21wb3NpdGVkKCk7CiB9CiAKLURF
TEVHQVRFX1RPX0lOVEVSTkFMXzEocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMsIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfUihwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSwgUGFzc1JlZlB0cjxJbWFnZURhdGE+KQordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhjb250ZXh0LCBk
cmF3aW5nQnVmZmVyKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3
aW5nQnVmZmVyKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhKGRyYXdpbmdCdWZmZXIpOworfQorCiBERUxFR0FURV9UT19JTlRFUk5BTF8x
UihwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQq
LCBib29sKQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludHNJbnRvQ2FudmFzQnVmZmVy
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NiwxMCArNDYsOCBAQCBjbGFzcyBXZWJWaWV3SW1wbDsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgRXh0ZW5zaW9uczNEQ2hyb21pdW07
Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotY2xhc3MgV2ViR0xMYXllckNocm9t
aXVtOwotI2VuZGlmCiBjbGFzcyBHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyOwog
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVy
OwogCkBAIC05NSwxNyArOTMsMTQgQEAgcHVibGljOgogICAgIGJvb2wgbGF5ZXJDb21wb3NpdGVk
KCkgY29uc3Q7CiAgICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAKLSAgICB2b2lkIHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKKyAg
ICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqLCBEcmF3aW5nQnVmZmVyKik7CiAgICAgdm9pZCBwYWludEZyYW1lYnVmZmVyVG9DYW52YXMo
aW50IGZyYW1lYnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgSW1hZ2VCdWZmZXIqKTsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciopOwogICAgIGJvb2wg
cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogICAgIGJvb2wgcGFpbnRDb21wb3NpdGVk
UmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKIAogICAgIHZvaWQgcHJl
cGFyZVRleHR1cmUoKTsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBX
ZWJHTExheWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5ZXIoKTsKLSNlbmRpZgogICAgIGJvb2wgaXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0OwogCiAgICAgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIo
KTsKQEAgLTMzMCw5ICszMjUsNiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgUmVzb3VyY2VTYWZl
dHkgbV9yZXNvdXJjZVNhZmV0eTsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBtX2NvbXBvc2l0aW5nTGF5ZXI7Ci0jZW5k
aWYKICNpZiBVU0UoU0tJQSkKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUg
Q2FudmFzJ3MgYmFja2luZyBzdG9yZSBkb24ndAogICAgIC8vIG1hdGNoIHRob3NlIHRoYXQgd2Ug
d2VyZSBnaXZlbiBpbiB0aGUgbW9zdCByZWNlbnQgY2FsbCB0bwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114149</attachid>
            <date>2011-11-08 14:00:49 -0800</date>
            <delta_ts>2011-11-08 15:49:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111108165752.patch</filename>
            <type>text/plain</type>
            <size>60040</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NTk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTggQEAKKzIwMTEtMTEtMDggIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUGF0Y2ggdGhh
dCBpbXBsZW1lbnRpbmcgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuIEFsbCBQ
bGF0Zm9ybUxheWVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMKKyAgICAgICAgcGVyZm9ybWVkIGJ5
IHRoZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICBDaGFuZ2VzIGFyZSBvbmx5IHJlbGV2YW50IHRv
IENocm9taXVtIHBvcnRzLiBGdW5jdGlvbmFsaXR5IGlzCisgICAgICAgIHVuY2hhbmdlZCBmb3Ig
b3RoZXIgcG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzIwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDogQ29uc3RydWN0IGEg
RHJhd2luZ0J1ZmZlcgorICAgICAgICBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCBmb3J3YXJk
IGFsbCBmcmFtZWJ1ZmZlciBtYW5hZ2VtZW50IGNhbGxzIHRvCisgICAgICAgIGl0LgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
SWZDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZWJ1ZmZlcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oOiAgV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNlcworICAgICAgICBh
cmUgbm8gbG9uZ2VyIHRyYWNrZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QuIENhbGxlcnMgY2FuIG5v
dyBwYXNzIGEKKyAgICAgICAgRHJhd2luZ0J1ZmZlciBpbnN0YW5jZSB0byBwcm92aWRlIGFjY2Vz
cyB0byB0aGUgV2ViR0xMYXllckNocm9taXVtIGRhdGEuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlQ29sb3JUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpmcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjp+V2ViR0xM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJh
d3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21p
dW06OnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TExheWVyQ2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDogV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNl
cworICAgICAgICBoYXZlIGEgcmF3IHJlZmVyZW5jZSB0byB0aGVpciBvd25pbmcgRHJhd2luZ0J1
ZmZlci4gIFRoaXMgcmVmZXJlbmNlIGlzIHNldCB0byBOVUxMIG9uCisgICAgICAgIGRlc3RydWN0
aW9uIG9mIHRoZSBEcmF3aW5nQnVmZmVyLiAgVGhpcyBmb2xsb3dzIHRoZSBvbGQgY29kZSwgd2hp
Y2ggaGFkIHRoZSBXZWJHTExheWVyQ2hyb21pdW0KKyAgICAgICAgcmVmZXIgcmF3bHkgdG8gYSBH
cmFwaGljc0NvbnRleHQzRCBpbnN0YW5jZSwgd2hpY2ggd2FzIGFsc28gcmV2b2tlZCBkdXJpbmcg
dGVhci1kb3duIG9mIHRoZQorICAgICAgICBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmNwcDogVGhlIERyYXdpbmdCdWZmZXIgaXMgbm93IHRoZQorICAgICAgICBjZW50cmFs
IHBvaW50IGJldHdlZW4gdGhlIEdyYXBoaWNzQ29udGV4dDNELCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQsIGFuZAorICAgICAgICBXZWJHTExheWVyQ2hyb21pdW0gY2xhc3Nlcy4gIEdyYXBoaWNzQ29u
dGV4dDNELCBhbmQgV2ViR0xMYXllckNocm9taXVtIG9ubHkKKyAgICAgICAgZGVwZW5kIG9uIHRo
ZSBEcmF3aW5nQnVmZmVyIGludGVyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhckZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpt
dWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpkaXNjYXJkUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6c2V0U2Npc3Nv
ckVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1
ZmZlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSk6CisKIDIwMTEtMTEtMDggIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgog
CiAgICAgICAgIFJlbW92ZSBnZXQoKSBkZWZpbmVkIGluIENyZWRlbnRpYWxTdG9yYWdlU291cC5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUs
NyArMzY1LDEyIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFIKICAg
ICB9CiAKICAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRydWU7CisjaWYgUExBVEZPUk0o
Q0hST01JVU0pCisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IHRydWU7CisjZWxzZQog
ICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBmYWxzZTsKKyNlbmRpZgorCiAKICAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CiAKQEAgLTM4MSw2ICszODYsNyBAQCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRy
aWJ1dGVzKQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCiAgICAg
LCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQogICAgICwgbV9y
ZXN0b3JlQWxsb3dlZChmYWxzZSkKICAgICAsIG1fcmVzdG9yZVRpbWVyKHRoaXMpCiAgICAgLCBt
X3ZpZGVvQ2FjaGUoNCkKQEAgLTM4OCw2ICszOTQsMTUgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiB7CiAg
ICAgQVNTRVJUKG1fY29udGV4dCk7CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBD
cmVhdGUgdGhlIERyYXdpbmdCdWZmZXIgYW5kIGluaXRpYWxpemUgdGhlIHBsYXRmb3JtIGxheWVy
LgorICAgIG1fZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShtX2NvbnRleHQu
Z2V0KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSksICFt
X2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKTsKKyNlbmRpZgorCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisKICAgICBz
ZXR1cEZsYWdzKCk7CiAgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKIH0KQEAgLTQ1Myw2ICs0
NjgsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5lCiAgICAgaWYg
KCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CiAKKyAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KElu
dFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOworCiAgICAgbV9j
b250ZXh0LT5yZXNoYXBlKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwog
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSk7CiAKQEAgLTQ5Myw3ICs1MTEsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6bWFya0NvbnRleHRDCiB7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQogICAg
ICAgICByZXR1cm47CisKICAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOworCiAg
ICAgbV9sYXllckNsZWFyZWQgPSBmYWxzZTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7CkBA
IC01MjMsOCArNTQzLDEyIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcklmQ29t
cG8KICAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVh
ciB0aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIuCiAgICAgYm9vbCBjb21iaW5lZENs
ZWFyID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsKIAotICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsK
KyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgIH0KICAgICBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAg
aWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVG
RkVSX0JJVCkpCiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NvbG9yTWFza1swXSA/
IG1fY2xlYXJDb2xvclswXSA6IDAsCkBAIC01ODAsMjEgKzYwNCw0NiBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpCiAgICAgLy8gaGFwcGVuZWQgYWZ0ZXIgaXQgd2Fz
IGNvbXBvc2l0ZWQgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgaWYg
KG1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkgJiYgIW1fYXR0cmlidXRlcy5wcmVzZXJ2ZURy
YXdpbmdCdWZmZXIpIHsKICAgICAgICAgbV9jb250ZXh0LT5wYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXModGhpcyk7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyh0aGlzKTsK
ICAgICAgICAgY2FudmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIGNhbnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKICAgICBjbGVhcklmQ29t
cG9zaXRlZCgpOworCiAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFtX2xheWVyQ2xl
YXJlZCkKICAgICAgICAgcmV0dXJuOworCiAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2Uo
KTsKICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7Ci0gICAgbV9jb250ZXh0LT5wYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisgICAgbV9jb250ZXh0LT5w
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzLCBtX2RyYXdpbmdCdWZmZXIuZ2V0KCkp
OworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGlu
Zy5nZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJp
bmQoKTsKKyAgICB9CiB9CiAKIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKIHsKICAgICBjbGVhcklm
Q29tcG9zaXRlZCgpOwotICAgIHJldHVybiBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhKCk7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5jb21taXQoKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBt
X2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKG1fZHJhd2luZ0J1ZmZl
ci5nZXQoKSk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZm
ZXJCaW5kaW5nLmdldCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1
ZmZlci0+YmluZCgpOworICAgIH0KKworICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAKIGJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKQEAg
LTYyNiwxNiArNjc1LDI1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGlu
dAogCiAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHksIHNp
bmNlIHRoZSBuZXdseSBjcmVhdGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2ZmCiAg
ICAgLy8gY2xlYXIgKGFuZCB0aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgotICAg
IG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KEludFNpemUod2lkdGgsIGhlaWdo
dCkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQp
OwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgoKSBj
b25zdAogeworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdp
bmdCdWZmZXItPnNpemUoKS53aWR0aCgpOworCiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3QKIHsKKyAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCk7
CisKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhl
aWdodCgpOwogfQogCkBAIC03NTcsNyArODE1LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpiaW5kRnJhbWVidWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2ZyYW1lYnVm
ZmVyQmluZGluZyA9IGJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcih0YXJn
ZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmIG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBJbnN0ZWFkIG9mIGJpbmRpbmcgZmIg
MCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Ymlu
ZCgpOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcih0YXJn
ZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKICAgICBpZiAoYnVmZmVyKQogICAgICAgICBidWZm
ZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwpAQCAtMTA5Niw5ICsxMTU4LDIxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhcklmQ29tcG9z
aXRlZCgpOwotICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQorICAgIGlmIChpc1Jlc291cmNlU2Fm
ZSgpKSB7CisgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwg
Zm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsK
KwogICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGVsc2UgeworCisg
ICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAgaWYgKCFt
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDb21taXQgRHJh
d2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICBp
ZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAgICAgR0MzRGludCBjbGlwcGVkWCwg
Y2xpcHBlZFk7CiAgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7
CiAgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1
ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xp
cHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgewpAQCAtMTExMCw2ICsxMTg0
LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIpOworCisgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAg
ICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKICAgICB9CiAgICAgLy8gRklYTUU6IGlm
IHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgY29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93IHNob3Vs
ZCBiZSBleGVjdXRlZC4KICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpOwpAQCAtMTE0MSw3ICsxMjE5LDE1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
b3B5VGV4U3ViSW0KICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKICAgICBpZiAoaXNS
ZXNvdXJjZVNhZmUoKSkKKyAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVk
IChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNv
bW1pdCgpOworCiAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAgICAg
Ly8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgICAgICBpZiAoIW1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1
ZmZlci0+YmluZCgpOwogICAgIGVsc2UgewogICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlw
cGVkWTsKICAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKQEAg
LTExNjUsMTEgKzEyNTEsMjggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhT
dWJJbQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgemVyby5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoY2xpcHBlZFdpZHRoID4gMCAmJiBj
bGlwcGVkSGVpZ2h0ID4gMCkgeworICAgICAgICAgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVm
ZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAgICAgICAgICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAgICAgICAgICAgICBt
X2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQgKyBjbGlw
cGVkWCAtIHgsIHlvZmZzZXQgKyBjbGlwcGVkWSAtIHksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbGlwcGVkWCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwg
Y2xpcHBlZEhlaWdodCk7CisKKyAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZl
ciBpZiBuZWVkZWQKKyAgICAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5k
KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVs
dGlzYW1wbGluZykKKyAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9k
cmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7
CisKICAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAgICAgICAg
IC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAgICAgIGlmICghbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgICAgIG1f
ZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICB9CiAgICAgfQogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0xMjg2LDcgKzEzODksMTAgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUZyYW1lYgogICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBt
X2ZyYW1lYnVmZmVyQmluZGluZykgewogICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IDA7
CiAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVidWZmZXIgaGVyZSB0byBiaW5kIGJh
Y2sgdG8gaW50ZXJuYWwgZmJvLgotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgICAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgMCk7CiAgICAgfQogfQogCkBAIC0xMzczLDggKzE0NzksMTEgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUoR0MzRAogewogICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKQorICAgIGlm
IChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewogICAgICAgICBtX3Nj
aXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Npc3NvckVuYWJs
ZWQpOworICAgIH0KICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMTcxNSw4ICsxODI0LDExIEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGUKIHsKICAgICBpZiAoaXNDb250ZXh0TG9z
dCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlm
IChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkKKyAgICBpZiAoY2FwID09
IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKICAgICAgICAgbV9zY2lzc29yRW5h
YmxlZCA9IHRydWU7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOworICAg
IH0KICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXApOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CkBAIC0yOTIzLDcgKzMwMzUsMTcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnJlYWRQaXhlbHMoRwogICAgIH0KICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwog
ICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMtPmJhc2VBZGRyZXNzKCk7CisKKyAgICAvLyBDb21taXQg
RHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgIGlm
ICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHks
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisKKyAgICAvLyBSZXN0b3JlIERy
YXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBt
X2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworCiAjaWYg
T1MoREFSV0lOKQogICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBzZWN0aW9uIHdoZW4gR0wgZHJp
dmVyIGJ1ZyBvbiBNYWMgaXMgZml4ZWQsIGkuZS4sCiAgICAgLy8gd2hlbiBhbHBoYSBpcyBvZmYs
IHJlYWRQaXhlbHMgc2hvdWxkIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgpAQCAtMzk3
NSw2ICs0MDk3LDE2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZVJlc3RvcmUK
ICAgICBtYXliZVJlc3RvcmVDb250ZXh0KFN5bnRoZXRpY0xvc3RDb250ZXh0KTsKIH0KIAorI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK1BsYXRmb3JtTGF5ZXIqIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgaWYgKG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+cGxhdGZvcm1MYXllcigpOwor
CisgICAgcmV0dXJuIG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpOworfQorI2VuZGlmCisKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVPYmplY3QoV2ViR0xPYmplY3QqIG9iamVj
dCkKIHsKICAgICBtX2NhbnZhc09iamVjdHMucmVtb3ZlKG9iamVjdCk7CkBAIC00MTY2LDE0ICs0
Mjk4LDE0IEBAIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWUKIHsKICAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVj
dCgpKQogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldFdpZHRoKCk7Ci0g
ICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgp
OworICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53
aWR0aCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7
CiB9CiAKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJIZWln
aHQoKQogewogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0
SGVpZ2h0KCk7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS5oZWlnaHQoKTsKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVm
ZmVyLT5zaXplKCkuaGVpZ2h0KCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkuaGVpZ2h0KCk7CiB9CiAKIFdlYkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVt
c0ZvckN1YmVNYXApCkBAIC00ODc5LDYgKzUwMTEsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6Om1heWJlUmVzdG9yZQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgLy8gQ29u
c3RydWN0IGEgbmV3IGRyYXdpbmcgYnVmZmVyIHdpdGggdGhlIG5ldyBHcmFwaGljc0NvbnRleHQz
RC4KKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
ZGlzY2FyZFJlc291cmNlcygpOworICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVm
ZmVyOjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBtX2RyYXdpbmdCdWZmZXItPnNpemUoKSwgIW1f
YXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpOworICAgIH0KKwogICAgIG1fY29udGV4
dCA9IGNvbnRleHQ7CiAgICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwogICAgIGluaXRpYWxpemVO
ZXdDb250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogI2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAogCiAjaW5jbHVk
ZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIK
ICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKQEAgLTI5Miw3ICsyOTMsNyBAQCBwdWJsaWM6
CiAKICAgICBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCk7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKICNlbmRpZgogCiAgICAgdm9pZCByZXNoYXBlKGlu
dCB3aWR0aCwgaW50IGhlaWdodCk7CkBAIC0zNTgsNiArMzU5LDEwIEBAIHB1YmxpYzoKIAogICAg
IFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogCisgICAgLy8gT3B0aW9uYWwg
c3RydWN0dXJlIGZvciByZW5kZXJpbmcgdG8gYSBEcmF3aW5nQnVmZmVyLCBpbnN0ZWFkIG9mIGRp
cmVjdGx5CisgICAgLy8gdG8gdGhlIGJhY2stYnVmZmVyIG9mIG1fY29udGV4dC4KKyAgICBSZWZQ
dHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVmZmVyOworCiAgICAgY2xhc3MgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0UmVzdG9yZVRpbWVyIDogcHVibGljIFRpbWVyQmFzZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXN0b3JlVGltZXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KSA6IG1fY29udGV4dChjb250ZXh0KSB7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nywx
MiArNTcsNiBAQCB1aW50OF90IGNvbnZlcnRDb2xvcjE2QmlnVG84KHVpbnQxNl90IHZhCiAKIH0g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi0KLVBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURyYXdpbmdCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
LXsKLSAgICByZXR1cm4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKHRoaXMsIHNpemUpOwotfQotCiBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgR0MzRGludCB1bnBhY2tBbGlnbm1lbnQpCiB7CiAgICAgQVNTRVJUKHVu
cGFja0FsaWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVudCA9PSAyIHx8IHVucGFja0FsaWdu
bWVudCA9PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNp
b24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsOCArNTAwLDYgQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgdm9pZCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIFBhc3NSZWZQdHI8RHJh
d2luZ0J1ZmZlcj4gY3JlYXRlRHJhd2luZ0J1ZmZlcihjb25zdCBJbnRTaXplJiA9IEludFNpemUo
KSk7Ci0gICAgCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShDSFJPTUlVTSkgfHwgUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkKICAgICAvLyBXaXRoIG11bHRpc2FtcGxpbmcgb24s
IGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZCTyB0byByZWd1bGFyIEZCTy4KICAgICB2b2lkIHByZXBh
cmVUZXh0dXJlKCk7CkBAIC03OTEsOCArNzg5LDggQEAgcHVibGljOgogICAgIHZvaWQgbWFya0xh
eWVyQ29tcG9zaXRlZCgpOwogICAgIGJvb2wgbGF5ZXJDb21wb3NpdGVkKCkgY29uc3Q7CiAKLSAg
ICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqKTsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9J
bWFnZURhdGEoKTsKKyAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqLCBEcmF3aW5nQnVmZmVyKik7CisgICAgUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKTsK
ICAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0Kik7CiAKICNpZiBQTEFURk9STShRVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1
ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiwxMCBAQAogCiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgog
CisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkV4dGVuc2lv
bnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRl
ICJXZWJHTExheWVyQ2hyb21pdW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OCw3
ICs1MSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNvbG9yVGV4dHVyZShHcmEKICAgICBj
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKTsKICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFKTsKICAgICBjb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VT
YWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgIGNvbnRleHQtPmZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlLCAwKTsKIAogICAgIHJldHVybiBvZmZzY3JlZW5D
b2xvclRleHR1cmU7CiB9CkBAIC01Niw0NiArNTgsNzQgQEAgc3RhdGljIHVuc2lnbmVkIGdlbmVy
YXRlQ29sb3JUZXh0dXJlKEdyYQogRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNh
bXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCi0gICAgOiBtX2NvbnRleHQo
Y29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0
ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICA6IG1fc2VwYXJhdGVCYWNraW5nVGV4dHVy
ZShzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgICwgbV9zY2lzc29yRW5hYmxlZChmYWxzZSkK
KyAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1f
bXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWRE
ZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX2ZibygwKQogICAgICwgbV9j
b2xvckJ1ZmZlcigwKQorICAgICwgbV9iYWNraW5nQ29sb3JCdWZmZXIoMCkKICAgICAsIG1fZGVw
dGhTdGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX2RlcHRoQnVmZmVyKDApCiAgICAgLCBtX3N0ZW5j
aWxCdWZmZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1w
bGVDb2xvckJ1ZmZlcigwKQogewotICAgIG1fZmJvID0gY29udGV4dC0+Y3JlYXRlRnJhbWVidWZm
ZXIoKTsKLSAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgbV9jb2xvckJ1ZmZlciA9IGdlbmVyYXRlQ29sb3JUZXh0
dXJlKGNvbnRleHQsIHNpemUpOwotICAgIGNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMoKTsKLSAgICBp
ZiAoIXJlc2V0KHNpemUpKSB7Ci0gICAgICAgIG1fY29udGV4dC5jbGVhcigpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGluaXRpYWxpemUoc2l6ZSk7CiB9CiAKIERyYXdpbmdCdWZmZXI6
On5EcmF3aW5nQnVmZmVyKCkKIHsKKyAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQorICAgICAgICBt
X3BsYXRmb3JtTGF5ZXItPnNldERyYXdpbmdCdWZmZXIoMCk7CisKICAgICBpZiAoIW1fY29udGV4
dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2xlYXIoKTsKIH0KIAordm9pZCBEcmF3aW5nQnVm
ZmVyOjppbml0aWFsaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgbV9mYm8gPSBtX2Nv
bnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisKKyAgICBpZiAobV9zZXBhcmF0ZUJhY2tpbmdU
ZXh0dXJlKQorICAgICAgICBtX2JhY2tpbmdDb2xvckJ1ZmZlciA9IGdlbmVyYXRlQ29sb3JUZXh0
dXJlKG1fY29udGV4dC5nZXQoKSwgc2l6ZSk7CisKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICBtX2NvbG9y
QnVmZmVyID0gZ2VuZXJhdGVDb2xvclRleHR1cmUobV9jb250ZXh0LmdldCgpLCBzaXplKTsKKyAg
ICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwgMCk7CisgICAgY3JlYXRlU2Vjb25k
YXJ5QnVmZmVycygpOworICAgIGlmICghcmVzZXQoc2l6ZSkpIHsKKyAgICAgICAgbV9jb250ZXh0
LmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiB2b2lkIERyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5
ZXIoKQogewogICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICByZXR1cm47CiAKKyAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGlmIChtdWx0aXNhbXBsZSgpKQogICAg
ICAgICBjb21taXQoKTsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisg
ICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkgeworICAgICAgICBtX2NvbnRleHQtPmJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAg
ICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbV9iYWNraW5nQ29sb3JCdWZmZXIpOworICAgICAgICB1bnNpZ25lZCBjb2xvckZvcm1hdCA9
IG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSA/IEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBIDogR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKKyAgICAgICAgbV9jb250ZXh0LT5j
b3B5VGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgY29sb3JGb3Jt
YXQsIDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCksIDApOworICAgIH0KKwor
ICAgIGlmIChtdWx0aXNhbXBsZSgpKQorICAgICAgICBiaW5kKCk7CisKICAgICBtX2NvbnRleHQt
PmZsdXNoKCk7CiB9CiAjZW5kaWYKQEAgLTEwMywxMyArMTMzLDIzIEBAIHZvaWQgRHJhd2luZ0J1
ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1MYXkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiBQbGF0Zm9ybUxheWVyKiBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkKIHsKLSAg
ICByZXR1cm4gMDsKKyAgICBpZiAoIW1fcGxhdGZvcm1MYXllcikgeworICAgICAgICBtX3BsYXRm
b3JtTGF5ZXIgPSBXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9wbGF0
Zm9ybUxheWVyLT5zZXREcmF3aW5nQnVmZmVyKHRoaXMpOworICAgIH0KKworICAgIHJldHVybiBt
X3BsYXRmb3JtTGF5ZXIuZ2V0KCk7CiB9CiAjZW5kaWYKIAogUGxhdGZvcm0zRE9iamVjdCBEcmF3
aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9j
b2xvckJ1ZmZlcjsKKyAgICByZXR1cm4gbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlID8gbV9iYWNr
aW5nQ29sb3JCdWZmZXIgOiBtX2NvbG9yQnVmZmVyOworfQorCitQbGF0Zm9ybTNET2JqZWN0IERy
YXdpbmdCdWZmZXI6OmZyYW1lYnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mYm87CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gOTk1
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExh
eWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNs
dWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIK
ICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCkBAIC00OCw3ICs0
OSw2IEBAIFBhc3NSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBXZWJHTExheWUKIAogV2ViR0xM
YXllckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0
ZSkKICAgICA6IENhbnZhc0xheWVyQ2hyb21pdW0oZGVsZWdhdGUpCi0gICAgLCBtX2NvbnRleHQo
MCkKICAgICAsIG1fdGV4dHVyZUNoYW5nZWQodHJ1ZSkKICAgICAsIG1fdGV4dHVyZVVwZGF0ZWQo
ZmFsc2UpCiB7CkBAIC01NiwxMyArNTYsMTMgQEAgV2ViR0xMYXllckNocm9taXVtOjpXZWJHTExh
eWVyQ2hyb21pdW0oQwogCiBXZWJHTExheWVyQ2hyb21pdW06On5XZWJHTExheWVyQ2hyb21pdW0o
KQogewotICAgIGlmIChtX2NvbnRleHQgJiYgbGF5ZXJUcmVlSG9zdCgpKQotICAgICAgICBsYXll
clRyZWVIb3N0KCktPnN0b3BSYXRlTGltaXRlcihtX2NvbnRleHQpOworICAgIGlmIChjb250ZXh0
KCkgJiYgbGF5ZXJUcmVlSG9zdCgpKQorICAgICAgICBsYXllclRyZWVIb3N0KCktPnN0b3BSYXRl
TGltaXRlcihjb250ZXh0KCkpOwogfQogCiBib29sIFdlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd3ND
b250ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpOT19FUlJPUik7CisgICAgcmV0dXJuIChjb250ZXh0KCkgJiYgY29udGV4dCgpLT5n
ZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6Tk9fRVJST1IpOwogfQogCiB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDb250ZXh0LCBD
Q1RleHR1cmVVcGRhdGVyJikKQEAgLTg1LDExICs4NSw5IEBAIHZvaWQgV2ViR0xMYXllckNocm9t
aXVtOjp1cGRhdGVDb21wb3NpdG8KICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBv
ZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgogICAgIGlmICghbV9kaXJ0eVJl
Y3QuaXNFbXB0eSgpICYmIG1fdGV4dHVyZVVwZGF0ZWQpIHsKLSAgICAgICAgLy8gcHJlcGFyZVRl
eHR1cmUgY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgb2ZmLXNjcmVlbiByZW5kZXIgdGFyZ2V0
IGludG8gdGhlIHRleHR1cmUKLSAgICAgICAgLy8gdXNlZCBieSB0aGUgY29tcG9zaXRvci4KLSAg
ICAgICAgLy8KLSAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOwotICAgICAgICBt
X2NvbnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKyAgICAgICAgLy8gcHVibGlzaFRvUGxh
dGZvcm1MYXllciBwcmVwYXJlcyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVy
IHRhcmdldCBmb3IgdXNlIGJ5IHRoZSBjb21wb3NpdG9yLgorICAgICAgICBkcmF3aW5nQnVmZmVy
KCktPnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKTsKKyAgICAgICAgY29udGV4dCgpLT5tYXJrTGF5
ZXJDb21wb3NpdGVkKCk7CiAgICAgICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGJvdW5kcygpKTsKICAgICAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAg
bV90ZXh0dXJlVXBkYXRlZCA9IGZhbHNlOwpAQCAtMTAxLDcgKzk5LDcgQEAgYm9vbCBXZWJHTExh
eWVyQ2hyb21pdW06OnBhaW50UmVuZGVyZWRSZQogICAgIGlmIChtX3RleHR1cmVVcGRhdGVkIHx8
ICFsYXllclJlbmRlcmVyQ29udGV4dCgpIHx8ICFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgSW50U2l6ZSBmcmFtZWJ1ZmZlclNpemUgPSBtX2NvbnRleHQtPmdl
dEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7CisgICAgSW50U2l6ZSBmcmFtZWJ1ZmZlclNpemUg
PSBjb250ZXh0KCktPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7CiAgICAgQVNTRVJUKGxh
eWVyUmVuZGVyZXJDb250ZXh0KCkpOwogCiAgICAgLy8gVGhpcyB3b3VsZCBpZGVhbGx5IGJlIGRv
bmUgaW4gdGhlIHdlYmdsIGNvbnRleHQsIGJ1dCB0aGF0IGlzbid0IHBvc3NpYmxlIHlldC4KQEAg
LTExMCw3ICsxMDgsNyBAQCBib29sIFdlYkdMTGF5ZXJDaHJvbWl1bTo6cGFpbnRSZW5kZXJlZFJl
CiAgICAgbGF5ZXJSZW5kZXJlckNvbnRleHQoKS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNI
TUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCwgMCk7CiAK
ICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVu
c2lvbnMzRENocm9taXVtKj4obGF5ZXJSZW5kZXJlckNvbnRleHQoKS0+Z2V0RXh0ZW5zaW9ucygp
KTsKLSAgICBleHRlbnNpb25zLT5wYWludEZyYW1lYnVmZmVyVG9DYW52YXMoZnJhbWVidWZmZXIs
IGZyYW1lYnVmZmVyU2l6ZS53aWR0aCgpLCBmcmFtZWJ1ZmZlclNpemUuaGVpZ2h0KCksICFtX2Nv
bnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1
ZmZlcik7CisgICAgZXh0ZW5zaW9ucy0+cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1lYnVm
ZmVyLCBmcmFtZWJ1ZmZlclNpemUud2lkdGgoKSwgZnJhbWVidWZmZXJTaXplLmhlaWdodCgpLCAh
Y29udGV4dCgpLT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwgaW1h
Z2VCdWZmZXIpOwogICAgIGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmRlbGV0ZUZyYW1lYnVmZmVy
KGZyYW1lYnVmZmVyKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyMSwzMiArMTE5LDM5IEBA
IHZvaWQgV2ViR0xMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCgKICAgICAvLyBJZiBXZWJH
TCBjb21tYW5kcyBhcmUgaXNzdWVkIG91dHNpZGUgb2YgYSB0aGUgYW5pbWF0aW9uIGNhbGxiYWNr
cywgdGhlbiB1c2UKICAgICAvLyBjYWxsIHJhdGVMaW1pdE9mZnNjcmVlbkNvbnRleHRDSFJPTUlV
TSgpIHRvIGtlZXAgdGhlIGNvbnRleHQgZnJvbSBnZXR0aW5nIHRvbyBmYXIgYWhlYWQuCiAgICAg
aWYgKGxheWVyVHJlZUhvc3QoKSkKLSAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdGFydFJhdGVM
aW1pdGVyKG1fY29udGV4dCk7CisgICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RhcnRSYXRlTGlt
aXRlcihjb250ZXh0KCkpOwogfQogCi12b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4
dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK3ZvaWQgV2ViR0xMYXllckNocm9t
aXVtOjpzZXREcmF3aW5nQnVmZmVyKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7Ci0g
ICAgYm9vbCBjb250ZXh0Q2hhbmdlZCA9IChtX2NvbnRleHQgIT0gY29udGV4dCk7CisgICAgYm9v
bCBkcmF3aW5nQnVmZmVyQ2hhbmdlZCA9IChtX2RyYXdpbmdCdWZmZXIgIT0gZHJhd2luZ0J1ZmZl
cik7CisgICAgbV9kcmF3aW5nQnVmZmVyID0gZHJhd2luZ0J1ZmZlcjsKIAotICAgIGlmIChsYXll
clRyZWVIb3N0KCkgJiYgY29udGV4dENoYW5nZWQpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+
c3RvcFJhdGVMaW1pdGVyKG1fY29udGV4dCk7CisgICAgaWYgKGxheWVyVHJlZUhvc3QoKSAmJiBk
cmF3aW5nQnVmZmVyQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdG9wUmF0ZUxp
bWl0ZXIoY29udGV4dCgpKTsKIAotICAgIG1fY29udGV4dCA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3ND
b250ZXh0M0QqPihjb250ZXh0KTsKLQotICAgIGlmICghbV9jb250ZXh0KQorICAgIGlmICghbV9k
cmF3aW5nQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25lZCBpbnQgdGV4dHVy
ZUlkID0gbV9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsKLSAgICBpZiAodGV4dHVyZUlkICE9
IG1fdGV4dHVyZUlkIHx8IGNvbnRleHRDaGFuZ2VkKSB7CisgICAgdW5zaWduZWQgaW50IHRleHR1
cmVJZCA9IG1fZHJhd2luZ0J1ZmZlci0+cGxhdGZvcm1Db2xvckJ1ZmZlcigpOworICAgIGlmICh0
ZXh0dXJlSWQgIT0gbV90ZXh0dXJlSWQgfHwgZHJhd2luZ0J1ZmZlckNoYW5nZWQpIHsKICAgICAg
ICAgbV90ZXh0dXJlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSB0
cnVlOwogICAgIH0KICAgICBtX3RleHR1cmVJZCA9IHRleHR1cmVJZDsKLSAgICBHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0
cmlidXRlcygpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMg
PSBjb250ZXh0KCktPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgbV9oYXNBbHBoYSA9IGF0
dHJpYnV0ZXMuYWxwaGE7CiAgICAgbV9wcmVtdWx0aXBsaWVkQWxwaGEgPSBhdHRyaWJ1dGVzLnBy
ZW11bHRpcGxpZWRBbHBoYTsKIH0KIAorR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMTGF5ZXJDaHJv
bWl1bTo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgaWYgKGRyYXdpbmdCdWZmZXIoKSkKKyAgICAg
ICAgcmV0dXJuIGRyYXdpbmdCdWZmZXIoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS5nZXQoKTsKKwor
ICAgIHJldHVybiAwOworfQorCiBHcmFwaGljc0NvbnRleHQzRCogV2ViR0xMYXllckNocm9taXVt
OjpsYXllclJlbmRlcmVyQ29udGV4dCgpCiB7CiAgICAgLy8gRklYTUU6IEluIHRoZSB0aHJlYWRl
ZCBjYXNlLCBwYWludFJlbmRlcmVkUmVzdWx0c1RvQ2FudmFzIG11c3QgYmUKQEAgLTE1Nyw0ICsx
NjIsNSBAQCBHcmFwaGljc0NvbnRleHQzRCogV2ViR0xMYXllckNocm9taXVtOjpsCiB9CiAKIH0K
KwogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
CiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZm
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MywyMSArNTQsMjMgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBjb250ZW50Q2hhbmdlZCgpOwogICAgIGJvb2wgcGFpbnRSZW5k
ZXJlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopOwogCi0gICAgdm9pZCBzZXRDb250ZXh0
KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKLSAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KCkgY29uc3Q7CiAKKyAgICB2b2lkIHNldERyYXdpbmdCdWZmZXIoRHJhd2luZ0J1
ZmZlciopOworICAgIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIoKSBjb25zdCB7IHJldHVy
biBtX2RyYXdpbmdCdWZmZXI7IH0KIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViR0xMYXllckNo
cm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwogICAgIGZyaWVuZCBjbGFzcyBXZWJHTExheWVyQ2hy
b21pdW1SYXRlTGltaXRUYXNrOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGxheWVyUmVuZGVy
ZXJDb250ZXh0KCk7CiAKLSAgICAvLyBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllciBo
YXMgYSBzaWRlLWVmZmVjdCBvZiBhc3NpZ25pbmcgaXRzZWxmCi0gICAgLy8gdG8gdGhlIGxheWVy
LiBCZWNhdXNlIG9mIHRoYXQgR3JhcGhpY3NDb250ZXh0M0QncyBkZXN0cnVjdG9yIHdpbGwgcmVz
ZXQKLSAgICAvLyBsYXllcidzIGNvbnRleHQgdG8gMC4KLSAgICBHcmFwaGljc0NvbnRleHQzRCog
bV9jb250ZXh0OwogICAgIGJvb2wgbV90ZXh0dXJlQ2hhbmdlZDsKICAgICBib29sIG1fdGV4dHVy
ZVVwZGF0ZWQ7CisKKyAgICAvLyBUaGUgRHJhd2luZ0J1ZmZlciBob2xkaW5nIHRoZSBXZWJHTCBj
b250ZW50cyBmb3IgdGhpcyBsYXllci4KKyAgICAvLyBBIHJlZmVyZW5jZSBpcyBub3QgaGVsZCBo
ZXJlLCBiZWNhdXNlIHRoZSBEcmF3aW5nQnVmZmVyIGFscmVhZHkgaG9sZHMKKyAgICAvLyBhIHJl
ZmVyZW5jZSB0byB0aGUgV2ViR0xMYXllckNocm9taXVtLgorICAgIERyYXdpbmdCdWZmZXIqIG1f
ZHJhd2luZ0J1ZmZlcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAko
cmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjYsMTMgKzcyNiwx
NyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAv
LyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0
cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEoKQorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29u
dGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBk
cmF3aW5nQnVmZmVyKQogeworICAgIC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGltcGxl
bWVudGVkIGluIENocm9taXVtIHBvcnRzLgorICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJ
bWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKDEsIDEpKTsKICAgICByZXR1cm4gaW1hZ2VEYXRhLnJl
bGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3
aW5nQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogCiAjaW5j
bHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNp
bmNsdWRlICJJbWFnZURhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OCw3ICs1
MCw3IEBAIHN0YXRpYyBpbnQgc19tYXhpbXVtUmVzb3VyY2VVc2VQaXhlbHMgPQogI2VuZGlmCiBz
dGF0aWMgaW50IHNfY3VycmVudFJlc291cmNlVXNlUGl4ZWxzID0gMDsKIAotUGFzc1JlZlB0cjxE
cmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCitQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IERy
YXdpbmdCdWZmZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQogewogICAgIEV4dGVuc2lv
bnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKICAgICBib29sIG11
bHRpc2FtcGxlU3VwcG9ydGVkID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1l
YnVmZmVyX2JsaXQiKSAmJiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZm
ZXJfbXVsdGlzYW1wbGUiKSAmJiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfT0VTX3JnYjhfcmdi
YTgiKTsKQEAgLTYwLDcgKzYyLDcgQEAgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5n
QnVmZmVyOgogICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0gZXh0ZW5zaW9u
cy0+c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwogICAgIGlmIChwYWNr
ZWREZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpCiAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJs
ZWQoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAgIFJlZlB0cjxEcmF3aW5nQnVm
ZmVyPiBkcmF3aW5nQnVmZmVyID0gYWRvcHRSZWYobmV3IERyYXdpbmdCdWZmZXIoY29udGV4dCwg
c2l6ZSwgbXVsdGlzYW1wbGVTdXBwb3J0ZWQsIHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCkp
OworICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyID0gYWRvcHRSZWYobmV3
IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSwgbXVsdGlzYW1wbGVTdXBwb3J0ZWQsIHBhY2tl
ZERlcHRoU3RlbmNpbFN1cHBvcnRlZCwgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkpOwogICAgIHJl
dHVybiAoZHJhd2luZ0J1ZmZlci0+bV9jb250ZXh0KSA/IGRyYXdpbmdCdWZmZXIucmVsZWFzZSgp
IDogMDsKIH0KIApAQCAtNzgsNiArODAsMTEgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpjbGVhcigp
CiAgICAgICAgIG1fY29sb3JCdWZmZXIgPSAwOwogICAgIH0KIAorICAgIGlmIChtX2JhY2tpbmdD
b2xvckJ1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9iYWNraW5n
Q29sb3JCdWZmZXIpOworICAgICAgICBtX2JhY2tpbmdDb2xvckJ1ZmZlciA9IDA7CisgICAgfQor
CiAgICAgaWYgKG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcikgewogICAgICAgICBtX2NvbnRleHQt
PmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogICAgICAgICBt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSAwOwpAQCAtMTY2LDcgKzE3Myw3IEBAIHZvaWQgRHJh
d2luZ0J1ZmZlcjo6Y2xlYXJGcmFtZWJ1ZmZlcigpCiAgICAgdW5zaWduZWQgY2hhciBkZXB0aE1h
c2sgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmOwog
ICAgIHVuc2lnbmVkIGNoYXIgaXNTY2lzc29yRW5hYmxlZCA9IGZhbHNlOwotICAgIHVuc2lnbmVk
IGxvbmcgY2xlYXJNYXNrID0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7Cisg
ICAgdW5zaWduZWQgY2xlYXJNYXNrID0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9C
SVQ7CiAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKICAgICAgICAgbV9jb250ZXh0LT5nZXRG
bG9hdHYoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7
CiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxKTsKQEAgLTE4OCw2ICsxOTUsMTQgQEAg
dm9pZCBEcmF3aW5nQnVmZmVyOjpjbGVhckZyYW1lYnVmZmVyKCkKICAgICBtX2NvbnRleHQtPmdl
dEZsb2F0dihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUUsIGNsZWFyQ29sb3Ip
OwogICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKICAgICBtX2NvbnRleHQt
PmNsZWFyKGNsZWFyTWFzayk7CisKKyAgICAvLyBUaGUgbXVsdGlzYW1wbGUgZmJvIHdhcyBqdXN0
IGNsZWFyZWQsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gY2xlYXIgdGhlIG5vbi1tdWx0aXNhbXBsZWQg
YnVmZmVyIHRvby4KKyAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICBtX2NvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJv
KTsKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVG
RkVSX0JJVCk7CisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgfQorCiAgICAgbV9j
b250ZXh0LT5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29s
b3JbMl0sIGNsZWFyQ29sb3JbM10pOwogCiAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKQEAg
LTIzMyw3ICsyNDgsNyBAQCBib29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUm
CiAgICAgaWYgKG5ld1NpemUgIT0gbV9zaXplKSB7CiAgICAgICAgIG1fc2l6ZSA9IG5ld1NpemU7
CiAKLSAgICAgICAgdW5zaWduZWQgbG9uZyBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1h
dCwgaW50ZXJuYWxSZW5kZXJidWZmZXJGb3JtYXQ7CisgICAgICAgIHVuc2lnbmVkIGludGVybmFs
Q29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0LCBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZvcm1hdDsKICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuYWxwaGEpIHsKICAgICAgICAgICAgIGludGVybmFsQ29sb3JG
b3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKICAgICAgICAgICAgIGNvbG9yRm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CkBAIC0yNTAsNyArMjY1LDcgQEAgYm9vbCBEcmF3
aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgICAgICAgICAgaW50IG1heFNhbXBs
ZUNvdW50ID0gMDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRl
Z2VydihFeHRlbnNpb25zM0Q6Ok1BWF9TQU1QTEVTLCAmbWF4U2FtcGxlQ291bnQpOwotICAgICAg
ICAgICAgaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oOCwgbWF4U2FtcGxlQ291bnQpOworICAg
ICAgICAgICAgaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oNCwgbWF4U2FtcGxlQ291bnQpOwog
CiAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogCkBAIC0yNjksMTAgKzI4NCwxNiBA
QCBib29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAgICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9m
Ym8pOwogCiAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIpOwotICAgICAgICAKICAgICAgICAgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENv
bG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1h
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwogCiAgICAgICAgIG1fY29u
dGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyLCAwKTsKKworICAgICAgICAvLyByZXNpemUgdGhl
IGJhY2tpbmcgY29sb3IgYnVmZmVyCisgICAgICAgIGlmIChtX3NlcGFyYXRlQmFja2luZ1RleHR1
cmUpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1fYmFja2luZ0NvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJu
YWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JG
b3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgfQor
CiAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDApOwogCiAgICAgICAgIGlmICghbXVsdGlzYW1wbGUoKSkKQEAgLTI5MywyMyArMzE0
LDU2IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y29tbWl0KGxvbmcgeCwgbG9uZwogewogICAgIGlm
ICghbV9jb250ZXh0KQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgaWYgKHdpZHRo
IDwgMCkKICAgICAgICAgd2lkdGggPSBtX3NpemUud2lkdGgoKTsKICAgICBpZiAoaGVpZ2h0IDwg
MCkKICAgICAgICAgaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOwotICAgICAgICAKKwogICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgCisKICAgICBpZiAobV9tdWx0aXNh
bXBsZUZCTykgewogICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25z
M0Q6OlJFQURfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogICAgICAgICBtX2NvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OkRSQVdfRlJBTUVCVUZGRVIsIG1fZmJv
KTsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmJsaXRGcmFtZWJ1ZmZlcih4
LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisKKyAgICAg
ICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisKKyAgICAgICAgLy8gVXNlIE5FQVJF
U1QsIGJlY2F1c2UgdGhlcmUgaXMgbm8gc2NhbGUgcGVyZm9ybWVkIGR1cmluZyB0aGUgYmxpdC4K
KyAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmJsaXRGcmFtZWJ1ZmZlcih4LCB5
LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOworCisgICAgICAg
IGlmIChtX3NjaXNzb3JFbmFibGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgfQotICAgIAorCiAgICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zi
byk7CiB9CiAKK2Jvb2wgRHJhd2luZ0J1ZmZlcjo6bXVsdGlzYW1wbGUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFu
dGlhbGlhcyAmJiBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkOworfQorCitQYXNzUmVm
UHRyPEltYWdlRGF0YT4gRHJhd2luZ0J1ZmZlcjo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFn
ZURhdGEoKQoreworICAgIHJldHVybiBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
SW1hZ2VEYXRhKHRoaXMpOworfQorCit2b2lkIERyYXdpbmdCdWZmZXI6OmRpc2NhcmRSZXNvdXJj
ZXMoKQoreworICAgIG1fY29sb3JCdWZmZXIgPSAwOworICAgIG1fYmFja2luZ0NvbG9yQnVmZmVy
ID0gMDsKKyAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSAwOworCisgICAgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIgPSAwOworICAgIG1fZGVwdGhCdWZmZXIgPSAwOworCisgICAgbV9zdGVuY2ls
QnVmZmVyID0gMDsKKworICAgIG1fbXVsdGlzYW1wbGVGQk8gPSAwOworICAgIG1fZmJvID0gMDsK
K30KKwogdm9pZCBEcmF3aW5nQnVmZmVyOjpiaW5kKCkKIHsKICAgICBpZiAoIW1fY29udGV4dCkK
QEAgLTMxOSw2ICszNzMsMTQgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpiaW5kKCkKICAgICBtX2Nv
bnRleHQtPnZpZXdwb3J0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwog
fQogCit2b2lkIERyYXdpbmdCdWZmZXI6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhD
YW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQorICAgICAgICBtX3BsYXRmb3Jt
TGF5ZXItPnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMoY29udGV4dC0+Y2FudmFzKCktPmJ1
ZmZlcigpKTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5oCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKIAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNDMsMTUgKzQ0LDE4IEBA
CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgUExBVEZPUk0oQ0hST01JVU0p
ICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLWNsYXNzIENhbnZhczJETGF5ZXJDaHJv
bWl1bTsKK2NsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7CitjbGFzcyBHcmFwaGljc0NvbnRl
eHQzRDsKK2NsYXNzIEltYWdlRGF0YTsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK2NsYXNzIFdl
YkdMTGF5ZXJDaHJvbWl1bTsKICNlbmRpZgogCiAvLyBNYW5hZ2VzIGEgcmVuZGVyaW5nIHRhcmdl
dCAoZnJhbWVidWZmZXIgKyBhdHRhY2htZW50KSBmb3IgYSBjYW52YXMuICBDYW4gcHVibGlzaCBp
dHMgcmVuZGVyaW5nCiAvLyByZXN1bHRzIHRvIGEgUGxhdGZvcm1MYXllciBmb3IgY29tcG9zaXRp
bmcuCiBjbGFzcyBEcmF3aW5nQnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8RHJhd2luZ0J1ZmZl
cj4gewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0
ZShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29sKTsKICAgICBmcmllbmQg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAKICAgICB+RHJhd2luZ0J1ZmZlcigpOwpAQCAtNzUs
MTAgKzc5LDIyIEBAIHB1YmxpYzoKIAogICAgIC8vIENvcGllcyB0aGUgbXVsdGlzYW1wbGUgY29s
b3IgYnVmZmVyIHRvIHRoZSBub3JtYWwgY29sb3IgYnVmZmVyIGFuZCBsZWF2ZXMgbV9mYm8gYm91
bmQKICAgICB2b2lkIGNvbW1pdChsb25nIHggPSAwLCBsb25nIHkgPSAwLCBsb25nIHdpZHRoID0g
LTEsIGxvbmcgaGVpZ2h0ID0gLTEpOwotICAgIAotICAgIGJvb2wgbXVsdGlzYW1wbGUoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygp
LmFudGlhbGlhcyAmJiBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkOyB9Ci0gICAgCisK
KyAgICAvLyBjb21taXQgc2hvdWxkIGNvcHkgdGhlIGZ1bGwgbXVsdGlzYW1wbGUgYnVmZmVyLCBh
bmQgbm90IHJlc3BlY3QgdGhlCisgICAgLy8gY3VycmVudCBzY2lzc29yIGJvdW5kcy4gVHJhY2sg
dGhlIHN0YXRlIG9mIHRoZSBzY2lzc29yIHRlc3Qgc28gdGhhdCBpdAorICAgIC8vIGNhbiBiZSBk
aXNhYmxlZCBkdXJpbmcgY2FsbHMgdG8gY29tbWl0LgorICAgIHZvaWQgc2V0U2Npc3NvckVuYWJs
ZWQoYm9vbCBzY2lzc29yRW5hYmxlZCkgeyBtX3NjaXNzb3JFbmFibGVkID0gc2Npc3NvckVuYWJs
ZWQ7IH0KKworICAgIGJvb2wgbXVsdGlzYW1wbGUoKSBjb25zdDsKKwogICAgIFBsYXRmb3JtM0RP
YmplY3QgcGxhdGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0OworICAgIFBsYXRmb3JtM0RPYmplY3Qg
ZnJhbWVidWZmZXIoKSBjb25zdDsKKworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworCisgICAgLy8gSW1tZWRpYXRlbHkgcmVsZWFz
ZXMgb3duZXJzaGlwIG9mIGFsbCByZXNvdXJjZXMuIENhbGwgdXBvbiBsb3NzIG9mIHRoZQorICAg
IC8vIGdyYXBoaWNzIGNvbnRleHQgdG8gcHJldmVudCBmcmVlaW5nIGludmFsaWQgcmVzb3VyY2Vz
LgorICAgIHZvaWQgZGlzY2FyZFJlc291cmNlcygpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKTsKQEAgLTg3LDEw
ICsxMDMsMTYgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Z3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAorICAgIHZv
aWQgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQq
KTsKKwogcHJpdmF0ZToKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBjcmVh
dGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7Ci0gICAgCi0gICAgRHJhd2lu
Z0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29sIG11bHRpc2Ft
cGxlRXh0ZW5zaW9uU3VwcG9ydGVkLCBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1
cHBvcnRlZCk7CisgICAgRHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IElu
dFNpemUmLCBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAg
ICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsIGJvb2wgc2Vw
YXJhdGVCYWNraW5nVGV4dHVyZSk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgSW50U2l6
ZSYpOworCisgICAgYm9vbCBtX3NlcGFyYXRlQmFja2luZ1RleHR1cmU7CisgICAgYm9vbCBtX3Nj
aXNzb3JFbmFibGVkOwogCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7
CiAgICAgSW50U2l6ZSBtX3NpemU7CkBAIC05OCw2ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQ7CiAgICAgUGxhdGZvcm0z
RE9iamVjdCBtX2ZibzsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fY29sb3JCdWZmZXI7CisgICAg
UGxhdGZvcm0zRE9iamVjdCBtX2JhY2tpbmdDb2xvckJ1ZmZlcjsKIAogICAgIC8vIFRoaXMgaXMg
dXNlZCB3aGVuIHdlIGhhdmUgT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsLgogICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CkBAIC0xMTAsNiArMTMzLDEwIEBAIHByaXZh
dGU6CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlRkJPOwogICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyOwogCisjaWYgUExBVEZPUk0oQ0hST01J
VU0pCisgICAgUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gbV9wbGF0Zm9ybUxheWVyOworI2Vu
ZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAgICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fcGxh
dGZvcm1MYXllcjsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQkocmV2aXNp
b24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0Ry
YXdpbmdCdWZmZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDExIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNp
emUmIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGVF
eHRlbnNpb25TdXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFj
a2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2ls
RXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNl
cGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgOiBtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUoc2Vw
YXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICAsIG1fc2Npc3NvckVuYWJsZWQoZmFsc2UpCisgICAg
LCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2l6ZSgtMSwgLTEpCiAgICAgLCBtX211bHRp
c2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQog
ICAgICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVwdGhT
dGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQpAQCAtNTIsNiArNTUsOSBAQCBEcmF3aW5nQnVmZmVy
OjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29uCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAg
ICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKIHsKKyAgICAvLyBTdXBwb3J0IGZvciBh
IHNlcGFyYXRlIGJhY2tpbmcgdGV4dHVyZSBoYXMgb25seSBiZWVuIGVuYWJsZWQgZm9yCisgICAg
Ly8gdGhlIGNocm9taXVtIHBvcnQuCisgICAgQVNTRVJUKCFtX3NlcGFyYXRlQmFja2luZ1RleHR1
cmUpOwogICAgIEFTU0VSVChtX2Zibyk7CiAgICAgaWYgKCFtX2ZibykgewogICAgICAgICBjbGVh
cigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L3F0L0RyYXdp
bmdCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L3F0L0RyYXdpbmdCdWZmZXJRdC5jcHAJKHJldmlzaW9uIDk5NTkzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L3F0L0RyYXdpbmdCdWZmZXJRdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIERy
YXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uU3VwcG9ydGVkKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1
cmUpCisgICAgOiBtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUoc2VwYXJhdGVCYWNraW5nVGV4dHVy
ZSkKKyAgICAsIG1fc2Npc3NvckVuYWJsZWQoZmFsc2UpCisgICAgLCBtX2NvbnRleHQoY29udGV4
dCkKICAgICAsIG1fc2l6ZSgtMSwgLTEpCiAgICAgLCBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3Vw
cG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9wYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3Vw
cG9ydGVkKQpAQCAtNDcsNiArNTAsOSBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdy
YXBoaWNzQ29uCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxl
Q29sb3JCdWZmZXIoMCkKIHsKKyAgICAvLyBTdXBwb3J0IGZvciBhIHNlcGFyYXRlIGJhY2tpbmcg
dGV4dHVyZSBoYXMgb25seSBiZWVuIGVuYWJsZWQgZm9yCisgICAgLy8gdGhlIGNocm9taXVtIHBv
cnQuCisgICAgQVNTRVJUKCFtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUpOwogICAgIEFTU0VSVCht
X2Zibyk7CiAgICAgaWYgKCFtX2ZibykgewogICAgICAgICBjbGVhcigpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw4ICsxMjgsMTAgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6aXNSZXNvdXJjZVNhZmUoKQogfQogCiAjaWYgIVBMQVRGT1JNKFFUKQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQsIERy
YXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CisgICAgLy8gRHJhd2luZ0J1ZmZlciBzdXBw
b3J0IG9ubHkgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0gcG9ydHMuCisgICAgQVNTRVJUKCFkcmF3
aW5nQnVmZmVyKTsKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2Fu
dmFzKCk7CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsK
IApAQCAtMTYyLDggKzE2NCwxMCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludENvbXBv
c2l0ZWRSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NS
ZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAvLyBEcmF3
aW5nQnVmZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4KKyAg
ICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIpOwogICAgIC8vIFJlYWRpbmcgcHJlbXVsdGlwbGllZCBh
bHBoYSB3b3VsZCBpbnZvbHZlIHVucHJlbXVsdGlwbHlpbmcsIHdoaWNoIGlzCiAgICAgLy8gbG9z
c3kKICAgICBpZiAobV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIw
LDggKzQyMCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlCiAg
ICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2lu
Z0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQg
b25seSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdC
dWZmZXIpOwogICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBI
VE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CiAgICAgSW1hZ2VC
dWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKQEAgLTQzMCw4ICs0MzIsMTAg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZQogfQogCiAjaWYgZGVm
aW5lZChRVF9PUEVOR0xfRVNfMikKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRl
eHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQorUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0
YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogeworICAgIC8vIERyYXdpbmdCdWZmZXIg
c3VwcG9ydCBvbmx5IGltcGxlbWVudGVkIGluIENocm9taXVtIHBvcnRzLgorICAgIEFTU0VSVCgh
ZHJhd2luZ0J1ZmZlcik7CiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgaW1wbGVtZW50
ZWQgZm9yIHByb3BlciBub24tcHJlbXVsdGlwbGllZC1hbHBoYQogICAgIC8vIHN1cHBvcnQuCiAg
ICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTk1
OTcpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI4IEBACisyMDExLTExLTA4ICBKZWZmIFRpbWFudXMgIDx0d2l6QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBhdGNoIHRoYXQgaW1wbGVtZW50aW5nIHRoZSBj
aGFuZ2VzIHJlcXVpcmVkIHRvIGFsbG93IFdlYkdMCisgICAgICAgIHRvIHNoYXJlIGl0cyBiYWNr
aW5nIHN0b3JlIGRpcmVjdGx5IHdpdGggdGhlIGNvbXBvc2l0b3IuCisgICAgICAgIFdlYkdMIHJl
bmRlcmluZyBjb250ZXh0cyBjcmVhdGUgYW5kIHJlbmRlciB0byBGQk9zIG1hbmFnZWQgYnkgYQor
ICAgICAgICBEcmF3aW5nQnVmZmVyIGluc3RhbmNlLiBBbGwgUGxhdGZvcm1MYXllciBsaWZldGlt
ZSBtYW5hZ2VtZW50IGlzCisgICAgICAgIHBlcmZvcm1lZCBieSB0aGUgRHJhd2luZ0J1ZmZlci4K
KyAgICAgICAgQ2hhbmdlcyBhcmUgb25seSByZWxldmFudCB0byBDaHJvbWl1bSBwb3J0cy4gRnVu
Y3Rpb25hbGl0eSBpcworICAgICAgICB1bmNoYW5nZWQgZm9yIG90aGVyIHBvcnRzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyMDEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9HcmFwaGljc0Nv
bnRleHQzRENocm9taXVtLmNwcDogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIG5vIGxvbmdlciBj
YWNoZXMKKyAgICAgICAgdGhlIFdlYkdMTGF5ZXJDaHJvbWl1bSBpbnN0YW5jZS4gIEluc3RlYWQs
IGl0IGlzIGFjY2Vzc2VkIHZpYSBEcmF3aW5nQnVmZmVyIGluc3RhbmNlcworICAgICAgICBwYXNz
ZWQgYXMgYXJndW1lbnRzIHRvIHRoZSBuZWNlc3Nhcnkgcm91dGluZXMuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmg6CisKIDIwMTEtMTEtMDggIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogZGlzcGxheSBub3RpZmljYXRpb24gaW4gdGhl
IGZyb250LWVuZCB3aGVuIGluc3BlY3RlZCB3b3JrZXIgdGVybWluYXRlcwpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJv
bWl1bS5jcHAJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICsz
NSwxMCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpbmNsdWRlICJDYWNo
ZWRJbWFnZS5oIgotI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJD
aHJvbWVDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKQEAgLTE2Myw2ICsxNjMsMjAg
QEAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlR3JhcAogICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250
ZXh0KHdlYkNvbnRleHQucmVsZWFzZSgpLCBhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUs
IHRocmVhZFVzYWdlKTsKIH0KIAordm9pZCBnZXREcmF3aW5nUGFyYW1ldGVycyhEcmF3aW5nQnVm
ZmVyKiBkcmF3aW5nQnVmZmVyLCBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGlj
c0NvbnRleHQzRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCog
ZnJhbWVCdWZmZXJJZCwgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQpCit7CisgICAgaWYgKGRyYXdp
bmdCdWZmZXIpIHsKKyAgICAgICAgKmZyYW1lQnVmZmVySWQgPSBkcmF3aW5nQnVmZmVyLT5mcmFt
ZWJ1ZmZlcigpOworICAgICAgICAqd2lkdGggPSBkcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgo
KTsKKyAgICAgICAgKmhlaWdodCA9IGRyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAqZnJhbWVCdWZmZXJJZCA9IDA7CisgICAgICAgICp3aWR0aCA9
IGdyYXBoaWNzQ29udGV4dDNELT53aWR0aCgpOworICAgICAgICAqaGVpZ2h0ID0gZ3JhcGhpY3ND
b250ZXh0M0QtPmhlaWdodCgpOworICAgIH0KK30KKwogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0Rm9yQW5vdGhlclRocmVhZChHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQpAQCAtMjEyLDE3ICsyMjYsNiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cHJlcGFyZVRlCiAgICAgbV9pbXBsLT5wcmVwYXJl
VGV4dHVyZSgpOwogfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotV2ViR0xM
YXllckNocm9taXVtKiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtTGF5ZXIoKQot
ewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAoIW1fY29tcG9zaXRp
bmdMYXllcikKLSAgICAgICAgbV9jb21wb3NpdGluZ0xheWVyID0gV2ViR0xMYXllckNocm9taXVt
OjpjcmVhdGUoMCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbV9jb21wb3NpdGluZ0xheWVyLmdldCgp
OwotfQotI2VuZGlmCi0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYXJrQ29udGV4
dENoYW5nZWQoKQogewogICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gZmFsc2U7CkBAIC0zMDUsMzEg
KzMwOCwzNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRGcmFtCiAjZW5k
aWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikK
IHsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjb250ZXh0LT5jYW52YXMoKS0+YnVm
ZmVyKCk7Ci0gICAgcGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKDAsIG1faW1wbC0+d2lkdGgoKSwg
bV9pbXBsLT5oZWlnaHQoKSwgIW1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0
aXBsaWVkQWxwaGEsIGltYWdlQnVmZmVyKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVm
ZmVySWQ7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgZ2V0RHJhd2luZ1BhcmFtZXRlcnMo
ZHJhd2luZ0J1ZmZlciwgbV9pbXBsLmdldCgpLCAmZnJhbWVidWZmZXJJZCwgJndpZHRoLCAmaGVp
Z2h0KTsKKyAgICBwYWludEZyYW1lYnVmZmVyVG9DYW52YXMoZnJhbWVidWZmZXJJZCwgd2lkdGgs
IGhlaWdodCwgIW1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxw
aGEsIGltYWdlQnVmZmVyKTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBh
aW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQogewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAocGxhdGZv
cm1MYXllcigpKQotICAgICAgICByZXR1cm4gcGxhdGZvcm1MYXllcigpLT5wYWludFJlbmRlcmVk
UmVzdWx0c1RvQ2FudmFzKGNvbnRleHQtPmNhbnZhcygpLT5idWZmZXIoKSk7Ci0jZW5kaWYKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQ
dHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CiAgICAgaWYg
KG1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIAotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IElt
YWdlRGF0YTo6Y3JlYXRlKEludFNpemUobV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgp
KSk7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVySWQ7CisgICAgaW50IHdpZHRo
LCBoZWlnaHQ7CisgICAgZ2V0RHJhd2luZ1BhcmFtZXRlcnMoZHJhd2luZ0J1ZmZlciwgbV9pbXBs
LmdldCgpLCAmZnJhbWVidWZmZXJJZCwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIFJlZlB0cjxJ
bWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUod2lkdGgsIGhl
aWdodCkpOwogICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5k
YXRhKCktPmRhdGEoKTsKLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDQgKiBtX2ltcGwtPndpZHRo
KCkgKiBtX2ltcGwtPmhlaWdodCgpOworICAgIHNpemVfdCBidWZmZXJTaXplID0gNCAqIHdpZHRo
ICogaGVpZ2h0OwogCi0gICAgbV9pbXBsLT5yZWFkQmFja0ZyYW1lYnVmZmVyKHBpeGVscywgYnVm
ZmVyU2l6ZSwgMCwgbV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgpKTsKKyAgICBtX2lt
cGwtPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCBidWZmZXJTaXplLCBmcmFtZWJ1ZmZlcklk
LCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnVmZmVyU2l6
ZTsgaSArPSA0KQogICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsK
QEAgLTEwMDksOSArMTAxNSw2IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RChHcmEKIAogR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiB7Ci0gICAg
V2ViR0xMYXllckNocm9taXVtKiBjYW52YXNMYXllciA9IG1fcHJpdmF0ZS0+cGxhdGZvcm1MYXll
cigpOwotICAgIGlmIChjYW52YXNMYXllcikKLSAgICAgICAgY2FudmFzTGF5ZXItPnNldENvbnRl
eHQoMCk7CiAgICAgbV9wcml2YXRlLT5zZXRDb250ZXh0TG9zdENhbGxiYWNrKG51bGxwdHIpOwog
ICAgIG1fcHJpdmF0ZS0+c2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0obnVs
bHB0cik7CiB9CkBAIC0xMDU2LDkgKzEwNTksNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpp
c1Jlc291cmNlU2FmZSgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZv
cm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAg
IFdlYkdMTGF5ZXJDaHJvbWl1bSogY2FudmFzTGF5ZXIgPSBtX3ByaXZhdGUtPnBsYXRmb3JtTGF5
ZXIoKTsKLSAgICBjYW52YXNMYXllci0+c2V0Q29udGV4dCh0aGlzKTsKLSAgICByZXR1cm4gY2Fu
dmFzTGF5ZXI7CisgICAgcmV0dXJuIDA7CiB9CiAjZW5kaWYKIApAQCAtMTIxNCw4ICsxMjE1LDE2
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgKICAgICByZXR1cm4g
bV9wcml2YXRlLT5sYXllckNvbXBvc2l0ZWQoKTsKIH0KIAotREVMRUdBVEVfVE9fSU5URVJOQUxf
MShwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcywgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCop
Ci1ERUxFR0FURV9UT19JTlRFUk5BTF9SKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
LCBQYXNzUmVmUHRyPEltYWdlRGF0YT4pCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0LCBE
cmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKGNvbnRleHQsIGRyYXdpbmdCdWZmZXIpOworfQor
CitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoZHJhd2lu
Z0J1ZmZlcik7Cit9CisKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKHBhaW50Q29tcG9zaXRlZFJl
c3VsdHNUb0NhbnZhcywgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCosIGJvb2wpCiAKIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdApJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEwICs0Niw4IEBA
IGNsYXNzIFdlYlZpZXdJbXBsOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERyYXdp
bmdCdWZmZXI7CiBjbGFzcyBFeHRlbnNpb25zM0RDaHJvbWl1bTsKLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi1jbGFzcyBXZWJHTExheWVyQ2hyb21pdW07Ci0jZW5kaWYKIGNsYXNz
IEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXI7CiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI7CiAKQEAgLTk1LDE3ICs5Mywx
NCBAQCBwdWJsaWM6CiAgICAgYm9vbCBsYXllckNvbXBvc2l0ZWQoKSBjb25zdDsKICAgICB2b2lk
IG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKIAotICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOworICAgIHZvaWQgcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCosIERyYXdpbmdCdWZmZXIq
KTsKICAgICB2b2lkIHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhpbnQgZnJhbWVidWZmZXIsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBJbWFnZUJ1ZmZlciop
OwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSgpOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKik7CiAgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVm
ZmVyKCkgY29uc3Q7CiAgICAgYm9vbCBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCopOwogCiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwogCi0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSog
cGxhdGZvcm1MYXllcigpOwotI2VuZGlmCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29u
c3Q7CiAKICAgICB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOwpAQCAtMzMwLDkgKzMyNSw2
IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBSZXNvdXJjZVNhZmV0eSBtX3Jlc291cmNlU2FmZXR5
OwogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFJlZlB0cjxXZWJHTExh
eWVyQ2hyb21pdW0+IG1fY29tcG9zaXRpbmdMYXllcjsKLSNlbmRpZgogI2lmIFVTRShTS0lBKQog
ICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBDYW52YXMncyBiYWNraW5nIHN0
b3JlIGRvbid0CiAgICAgLy8gbWF0Y2ggdGhvc2UgdGhhdCB3ZSB3ZXJlIGdpdmVuIGluIHRoZSBt
b3N0IHJlY2VudCBjYWxsIHRvCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114166</attachid>
            <date>2011-11-08 15:49:50 -0800</date>
            <delta_ts>2011-11-08 16:50:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111108184653.patch</filename>
            <type>text/plain</type>
            <size>59947</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NTk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTggQEAKKzIwMTEtMTEtMDggIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUGF0Y2ggdGhh
dCBpbXBsZW1lbnRpbmcgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuIEFsbCBQ
bGF0Zm9ybUxheWVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMKKyAgICAgICAgcGVyZm9ybWVkIGJ5
IHRoZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICBDaGFuZ2VzIGFyZSBvbmx5IHJlbGV2YW50IHRv
IENocm9taXVtIHBvcnRzLiBGdW5jdGlvbmFsaXR5IGlzCisgICAgICAgIHVuY2hhbmdlZCBmb3Ig
b3RoZXIgcG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzIwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDogQ29uc3RydWN0IGEg
RHJhd2luZ0J1ZmZlcgorICAgICAgICBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCBmb3J3YXJk
IGFsbCBmcmFtZWJ1ZmZlciBtYW5hZ2VtZW50IGNhbGxzIHRvCisgICAgICAgIGl0LgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
SWZDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZWJ1ZmZlcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oOiAgV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNlcworICAgICAgICBh
cmUgbm8gbG9uZ2VyIHRyYWNrZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QuIENhbGxlcnMgY2FuIG5v
dyBwYXNzIGEKKyAgICAgICAgRHJhd2luZ0J1ZmZlciBpbnN0YW5jZSB0byBwcm92aWRlIGFjY2Vz
cyB0byB0aGUgV2ViR0xMYXllckNocm9taXVtIGRhdGEuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlQ29sb3JUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpmcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjp+V2ViR0xM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJh
d3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21p
dW06OnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TExheWVyQ2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDogV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNl
cworICAgICAgICBoYXZlIGEgcmF3IHJlZmVyZW5jZSB0byB0aGVpciBvd25pbmcgRHJhd2luZ0J1
ZmZlci4gIFRoaXMgcmVmZXJlbmNlIGlzIHNldCB0byBOVUxMIG9uCisgICAgICAgIGRlc3RydWN0
aW9uIG9mIHRoZSBEcmF3aW5nQnVmZmVyLiAgVGhpcyBmb2xsb3dzIHRoZSBvbGQgY29kZSwgd2hp
Y2ggaGFkIHRoZSBXZWJHTExheWVyQ2hyb21pdW0KKyAgICAgICAgcmVmZXIgcmF3bHkgdG8gYSBH
cmFwaGljc0NvbnRleHQzRCBpbnN0YW5jZSwgd2hpY2ggd2FzIGFsc28gcmV2b2tlZCBkdXJpbmcg
dGVhci1kb3duIG9mIHRoZQorICAgICAgICBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmNwcDogVGhlIERyYXdpbmdCdWZmZXIgaXMgbm93IHRoZQorICAgICAgICBjZW50cmFs
IHBvaW50IGJldHdlZW4gdGhlIEdyYXBoaWNzQ29udGV4dDNELCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQsIGFuZAorICAgICAgICBXZWJHTExheWVyQ2hyb21pdW0gY2xhc3Nlcy4gIEdyYXBoaWNzQ29u
dGV4dDNELCBhbmQgV2ViR0xMYXllckNocm9taXVtIG9ubHkKKyAgICAgICAgZGVwZW5kIG9uIHRo
ZSBEcmF3aW5nQnVmZmVyIGludGVyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhckZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpt
dWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpkaXNjYXJkUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6c2V0U2Npc3Nv
ckVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1
ZmZlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSk6CisKIDIwMTEtMTEtMDggIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgog
CiAgICAgICAgIFJlbW92ZSBnZXQoKSBkZWZpbmVkIGluIENyZWRlbnRpYWxTdG9yYWdlU291cC5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUs
NyArMzY1LDEyIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFIKICAg
ICB9CiAKICAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRydWU7CisjaWYgUExBVEZPUk0o
Q0hST01JVU0pCisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IHRydWU7CisjZWxzZQog
ICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBmYWxzZTsKKyNlbmRpZgorCiAKICAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CiAKQEAgLTM4MSw2ICszODYsNyBAQCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRy
aWJ1dGVzKQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCiAgICAg
LCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQogICAgICwgbV9y
ZXN0b3JlQWxsb3dlZChmYWxzZSkKICAgICAsIG1fcmVzdG9yZVRpbWVyKHRoaXMpCiAgICAgLCBt
X3ZpZGVvQ2FjaGUoNCkKQEAgLTM4OCw2ICszOTQsMTUgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiB7CiAg
ICAgQVNTRVJUKG1fY29udGV4dCk7CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBD
cmVhdGUgdGhlIERyYXdpbmdCdWZmZXIgYW5kIGluaXRpYWxpemUgdGhlIHBsYXRmb3JtIGxheWVy
LgorICAgIG1fZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShtX2NvbnRleHQu
Z2V0KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSksICFt
X2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKTsKKyNlbmRpZgorCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisKICAgICBz
ZXR1cEZsYWdzKCk7CiAgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKIH0KQEAgLTQ1Myw2ICs0
NjgsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5lCiAgICAgaWYg
KCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CiAKKyAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KElu
dFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOworCiAgICAgbV9j
b250ZXh0LT5yZXNoYXBlKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwog
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSk7CiAKQEAgLTQ5Myw3ICs1MTEsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6bWFya0NvbnRleHRDCiB7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQogICAg
ICAgICByZXR1cm47CisKICAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOworCiAg
ICAgbV9sYXllckNsZWFyZWQgPSBmYWxzZTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7CkBA
IC01MjMsOCArNTQzLDEyIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcklmQ29t
cG8KICAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVh
ciB0aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIuCiAgICAgYm9vbCBjb21iaW5lZENs
ZWFyID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsKIAotICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsK
KyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgIH0KICAgICBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAg
aWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVG
RkVSX0JJVCkpCiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NvbG9yTWFza1swXSA/
IG1fY2xlYXJDb2xvclswXSA6IDAsCkBAIC01ODAsMjEgKzYwNCw1MCBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpCiAgICAgLy8gaGFwcGVuZWQgYWZ0ZXIgaXQgd2Fz
IGNvbXBvc2l0ZWQgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgaWYg
KG1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkgJiYgIW1fYXR0cmlidXRlcy5wcmVzZXJ2ZURy
YXdpbmdCdWZmZXIpIHsKICAgICAgICAgbV9jb250ZXh0LT5wYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXModGhpcyk7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAg
ICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnBh
aW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyh0aGlzKTsKKyNlbmRpZgorCiAgICAgICAgIGNh
bnZhcygpLT5tYWtlUHJlc2VudGF0aW9uQ29weSgpOwogICAgIH0gZWxzZQogICAgICAgICBjYW52
YXMoKS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsK
KwogICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNsZWFyZWQpCiAgICAg
ICAgIHJldHVybjsKKwogICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdlKCk7CiAgICAgbV9t
YXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXModGhpcyk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXModGhpcywgbV9kcmF3aW5nQnVmZmVyLmdldCgpKTsKKworICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQor
ICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAg
fQogfQogCiBQYXNzUmVmUHRyPEltYWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCiB7CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQo
KTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0
YSgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
Y29tbWl0KCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gbV9jb250ZXh0LT5w
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShtX2RyYXdpbmdCdWZmZXIuZ2V0KCkpOwor
CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5n
ZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCiBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0CkBAIC02MjYsMTYgKzY3
OSwyNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZShpbnQKIAogICAgIC8v
IFdlIGRvbid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUgbmV3
bHkgY3JlYXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgogICAgIC8vIGNsZWFy
IChhbmQgdGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4KLSAgICBtX2NvbnRleHQt
PnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKyAgICBl
bHNlCisgICAgICAgIG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKIH0KIAogaW50
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKIHsKKyAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5z
aXplKCkud2lkdGgoKTsKKwogICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVi
dWZmZXJTaXplKCkud2lkdGgoKTsKIH0KIAogaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJh
d2luZ0J1ZmZlckhlaWdodCgpIGNvbnN0CiB7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOworCiAgICAgcmV0
dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKIH0K
IApAQCAtNzU3LDcgKzgxOSwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZy
YW1lYnVmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
PSBidWZmZXI7Ci0gICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBvYmplY3RP
clplcm8oYnVmZmVyKSk7CisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdp
bmdCdWZmZXIpIHsKKyAgICAgICAgLy8gSW5zdGVhZCBvZiBiaW5kaW5nIGZiIDAsIGJpbmQgdGhl
IGRyYXdpbmcgYnVmZmVyLgorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBvYmplY3RP
clplcm8oYnVmZmVyKSk7CiAgICAgaWYgKGJ1ZmZlcikKICAgICAgICAgYnVmZmVyLT5zZXRIYXNF
dmVyQmVlbkJvdW5kKCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAg
LTEwOTYsOSArMTE2MiwyMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAg
ICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkKKyAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkgeworICAg
ICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNh
bXBsaW5nKQorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAgICAg
bV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
eCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSAgICBlbHNlIHsKKworICAgICAgICAvLyBS
ZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5iaW5kKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIg
aWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAgaWYgKCFtX2ZyYW1l
YnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPmNvbW1pdCgpOworCiAgICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOwog
ICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwogICAgICAgICBp
ZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgp
LCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xp
cHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKQEAgLTExMTAsNiArMTE4OCwxMCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKwor
ICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgIGlmICgh
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5iaW5kKCk7CiAgICAgfQogICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVi
dWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0
ZWQuCiAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKQEAgLTEx
NDEsNyArMTIyMywxNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1Yklt
CiAgICAgfQogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CiAgICAgaWYgKGlzUmVzb3VyY2VTYWZl
KCkpCisgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9y
IG11bHRpc2FtcGxpbmcpCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9k
cmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwog
ICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgICAgIC8vIFJlc3RvcmUg
RHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGlu
ZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQo
KTsKICAgICBlbHNlIHsKICAgICAgICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7CiAgICAg
ICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CkBAIC0xMTY1LDExICsx
MjU1LDI4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW0KICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHplcm8u
Z2V0KCkpOwogICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdo
dCA+IDApIHsKKyAgICAgICAgICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVk
ZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICAgICAgICAgIGlmICghbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5j
b3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0ICsgY2xpcHBlZFggLSB4LCB5
b2Zmc2V0ICsgY2xpcHBlZFkgLSB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWln
aHQpOworCisgICAgICAgICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVk
CisgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwogICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcp
CisgICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZl
cikKKyAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAgICAg
ICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgICAgICAgICAvLyBSZXN0b3Jl
IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJC
aW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmJpbmQoKTsKKyAgICAgICAgfQogICAgIH0KICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQpAQCAtMTI4Niw3ICsxMzkzLDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZWxldGVGcmFtZWIKICAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcpIHsKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwogICAgICAgICAv
LyBIYXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGludGVy
bmFsIGZiby4KLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIDApOwogICAgIH0KIH0KIApAQCAtMTM3Myw4ICsxNDgzLDExIEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdDM0QKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgp
IHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChj
YXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkKKyAgICBpZiAoY2FwID09IEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKICAgICAgICAgbV9zY2lzc29yRW5hYmxl
ZCA9IGZhbHNlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9
CiAgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KQEAgLTE3MTUsOCArMTgyOCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZW5hYmxlKEdDM0RlCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFs
aWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09IEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CiAgICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVl
OworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CiAgICAgbV9j
b250ZXh0LT5lbmFibGUoY2FwKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQpAQCAtMjkyMyw3ICszMDM5LDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZWFkUGl4ZWxzKEcKICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKICAgICB2b2lkKiBk
YXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOworCisgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZm
ZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICBpZiAoIW1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5jb21taXQoKTsKKwogICAgIG1fY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCisgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVy
IGlmIG5lZWRlZAorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKwogI2lmIE9TKERBUldJTikK
ICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVuIEdMIGRyaXZlciBidWcgb24g
TWFjIGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxz
IHNob3VsZCBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KQEAgLTM5NzUsNiArNDEwMSwx
NiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VSZXN0b3JlCiAgICAgbWF5YmVS
ZXN0b3JlQ29udGV4dChTeW50aGV0aWNMb3N0Q29udGV4dCk7CiB9CiAKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCitQbGF0Zm9ybUxheWVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnBsYXRmb3JtTGF5ZXIoKTsKKworICAgIHJldHVy
biBtX2NvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cmVtb3ZlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCiB7CiAgICAg
bV9jYW52YXNPYmplY3RzLnJlbW92ZShvYmplY3QpOwpAQCAtNDE2NiwxNCArNDMwMiwxNCBAQCBp
bnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lCiB7CiAgICAgaWYgKG1fZnJh
bWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKICAgICAg
ICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgpOwotICAgIHJldHVybiBt
X2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsKKyAgICByZXR1
cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKSA6IG1f
Y29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOwogfQogCiBpbnQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCkKIHsKICAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVj
dCgpKQogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEhlaWdodCgpOwot
ICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0
KCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgp
LmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdo
dCgpOwogfQogCiBXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVU
ZXh0dXJlQmluZGluZyhHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFw
KQpAQCAtNDg3OSw2ICs1MDE1LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXli
ZVJlc3RvcmUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8vIENvbnN0cnVjdCBhIG5l
dyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRoZSBuZXcgR3JhcGhpY3NDb250ZXh0M0QuCisgICAgaWYg
KG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNv
dXJjZXMoKTsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyID0gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRl
KG1fY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksICFtX2F0dHJpYnV0ZXMu
cHJlc2VydmVEcmF3aW5nQnVmZmVyKTsKKyAgICB9CisKICAgICBtX2NvbnRleHQgPSBjb250ZXh0
OwogICAgIG1fY29udGV4dExvc3QgPSBmYWxzZTsKICAgICBpbml0aWFsaXplTmV3Q29udGV4dCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKICNkZWZpbmUgV2ViR0xSZW5kZXJpbmdDb250ZXh0X2gKIAogI2luY2x1ZGUgIkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCkBAIC0yOTIsNyArMjkzLDcgQEAgcHVibGljOgogCiAgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0LmdldCgpOyB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1
YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4
dC0+cGxhdGZvcm1MYXllcigpOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpOwpAQCAtMzU4LDYgKzM1OSwxMCBAQCBwdWJsaWM6CiAKICAgICBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKIAorICAgIC8vIE9wdGlvbmFsIHN0cnVjdHVyZSBm
b3IgcmVuZGVyaW5nIHRvIGEgRHJhd2luZ0J1ZmZlciwgaW5zdGVhZCBvZiBkaXJlY3RseQorICAg
IC8vIHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2NvbnRleHQuCisgICAgUmVmUHRyPERyYXdpbmdC
dWZmZXI+IG1fZHJhd2luZ0J1ZmZlcjsKKwogICAgIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4
dFJlc3RvcmVUaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgewogICAgIHB1YmxpYzoKICAgICAgICAg
ZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzdG9yZVRpbWVyKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkgOiBtX2NvbnRleHQoY29udGV4dCkgeyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
Y3BwCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTIgKzU3LDYgQEAg
dWludDhfdCBjb252ZXJ0Q29sb3IxNkJpZ1RvOCh1aW50MTZfdCB2YQogCiB9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKIAotCi1QYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVEcmF3aW5nQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgcmV0
dXJuIERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBzaXplKTsKLX0KLQogYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEdDM0RpbnQgdW5wYWNrQWxpZ25tZW50KQogewogICAgIEFTU0VSVCh1bnBhY2tBbGlnbm1l
bnQgPT0gMSB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gMiB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gNCB8
fCB1bnBhY2tBbGlnbm1lbnQgPT0gOCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDk5NTkzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAwLDggKzUwMCw2IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZv
aWQgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+
IGNyZWF0ZURyYXdpbmdCdWZmZXIoY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKCkpOwotICAgIAog
I2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oUVQpCiAgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9uLCBibGl0IGZyb20g
bXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgp
OwpAQCAtNzkxLDggKzc4OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcmtMYXllckNvbXBvc2l0
ZWQoKTsKICAgICBib29sIGxheWVyQ29tcG9zaXRlZCgpIGNvbnN0OwogCi0gICAgdm9pZCBwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7Ci0gICAg
UGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7
CisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0KiwgRHJhd2luZ0J1ZmZlciopOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKik7CiAgICAgYm9vbCBw
YWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwog
CiAjaWYgUExBVEZPUk0oUVQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNyArMzIsMTAgQEAKIAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAorI2luY2x1ZGUg
IkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiV2ViR0xMYXll
ckNocm9taXVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDgsNyArNTEsNiBAQCBz
dGF0aWMgdW5zaWduZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUoR3JhCiAgICAgY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CiAg
ICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xB
TVBfVE9fRURHRSk7CiAgICAgY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKLSAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRl
eHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9mZnNj
cmVlbkNvbG9yVGV4dHVyZSwgMCk7CiAKICAgICByZXR1cm4gb2Zmc2NyZWVuQ29sb3JUZXh0dXJl
OwogfQpAQCAtNTYsNDYgKzU4LDc0IEBAIHN0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNvbG9yVGV4
dHVyZShHcmEKIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNp
emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNp
b25TdXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVw
dGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRl
QmFja2luZ1RleHR1cmUpCisgICAgOiBtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUoc2VwYXJhdGVC
YWNraW5nVGV4dHVyZSkKKyAgICAsIG1fc2Npc3NvckVuYWJsZWQoZmFsc2UpCisgICAgLCBtX2Nv
bnRleHQoY29udGV4dCkKICAgICAsIG1fc2l6ZSgtMSwgLTEpCiAgICAgLCBtX211bHRpc2FtcGxl
RXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwg
bV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVwdGhTdGVuY2ls
RXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9mYm8oMCkKICAgICAsIG1fY29sb3JCdWZmZXIo
MCkKKyAgICAsIG1fYmFja2luZ0NvbG9yQnVmZmVyKDApCiAgICAgLCBtX2RlcHRoU3RlbmNpbEJ1
ZmZlcigwKQogICAgICwgbV9kZXB0aEJ1ZmZlcigwKQogICAgICwgbV9zdGVuY2lsQnVmZmVyKDAp
CiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZm
ZXIoMCkKIHsKLSAgICBtX2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAg
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
bV9mYm8pOwotICAgIG1fY29sb3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShjb250ZXh0
LCBzaXplKTsKLSAgICBjcmVhdGVTZWNvbmRhcnlCdWZmZXJzKCk7Ci0gICAgaWYgKCFyZXNldChz
aXplKSkgewotICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpbml0aWFsaXplKHNpemUpOwogfQogCiBEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1
ZmZlcigpCiB7CisgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAgICAgICAgbV9wbGF0Zm9ybUxh
eWVyLT5zZXREcmF3aW5nQnVmZmVyKDApOworCiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGNsZWFyKCk7CiB9CiAKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6aW5pdGlh
bGl6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIG1fZmJvID0gbV9jb250ZXh0LT5jcmVh
dGVGcmFtZWJ1ZmZlcigpOworCisgICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAg
ICAgICAgbV9iYWNraW5nQ29sb3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShtX2NvbnRl
eHQuZ2V0KCksIHNpemUpOworCisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgbV9jb2xvckJ1ZmZlciA9IGdl
bmVyYXRlQ29sb3JUZXh0dXJlKG1fY29udGV4dC5nZXQoKSwgc2l6ZSk7CisgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOworICAgIGNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMo
KTsKKyAgICBpZiAoIXJlc2V0KHNpemUpKSB7CisgICAgICAgIG1fY29udGV4dC5jbGVhcigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogdm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCkKIHsKICAg
ICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICBpZiAobXVsdGlzYW1wbGUoKSkKICAgICAgICAgY29tbWl0
KCk7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3Nl
cGFyYXRlQmFja2luZ1RleHR1cmUpIHsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmFja2lu
Z0NvbG9yQnVmZmVyKTsKKyAgICAgICAgdW5zaWduZWQgY29sb3JGb3JtYXQgPSBtX2NvbnRleHQt
PmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEgPyBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSA6
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7CisgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGNvbG9yRm9ybWF0LCAwLCAwLCBz
aXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCAwKTsKKyAgICB9CisKKyAgICBpZiAobXVs
dGlzYW1wbGUoKSkKKyAgICAgICAgYmluZCgpOworCiAgICAgbV9jb250ZXh0LT5mbHVzaCgpOwog
fQogI2VuZGlmCkBAIC0xMDMsMTMgKzEzMywzMSBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OnB1Ymxp
c2hUb1BsYXRmb3JtTGF5CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZv
cm1MYXllciogRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYXllcigpCiB7Ci0gICAgcmV0dXJuIDA7
CisgICAgaWYgKCFtX3BsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgbV9wbGF0Zm9ybUxheWVyID0g
V2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgICAgIG1fcGxhdGZvcm1MYXllci0+
c2V0RHJhd2luZ0J1ZmZlcih0aGlzKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUxh
eWVyLmdldCgpOwogfQogI2VuZGlmCiAKIFBsYXRmb3JtM0RPYmplY3QgRHJhd2luZ0J1ZmZlcjo6
cGxhdGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29sb3JCdWZmZXI7
CisgICAgcmV0dXJuIG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSA/IG1fYmFja2luZ0NvbG9yQnVm
ZmVyIDogbV9jb2xvckJ1ZmZlcjsKK30KKworUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVy
OjpmcmFtZWJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmJvOworfQorCit2b2lkIERy
YXdpbmdCdWZmZXI6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KyAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQorICAgICAgICBtX3BsYXRmb3JtTGF5ZXItPnBhaW50
UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMoY29udGV4dC0+Y2FudmFzKCktPmJ1ZmZlcigpKTsKKyNl
bmRpZgogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
CiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJEcmF3aW5nQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgpAQCAt
NDgsNyArNDksNiBAQCBQYXNzUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gV2ViR0xMYXllCiAK
IFdlYkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSog
ZGVsZWdhdGUpCiAgICAgOiBDYW52YXNMYXllckNocm9taXVtKGRlbGVnYXRlKQotICAgICwgbV9j
b250ZXh0KDApCiAgICAgLCBtX3RleHR1cmVDaGFuZ2VkKHRydWUpCiAgICAgLCBtX3RleHR1cmVV
cGRhdGVkKGZhbHNlKQogewpAQCAtNTYsMTMgKzU2LDEzIEBAIFdlYkdMTGF5ZXJDaHJvbWl1bTo6
V2ViR0xMYXllckNocm9taXVtKEMKIAogV2ViR0xMYXllckNocm9taXVtOjp+V2ViR0xMYXllckNo
cm9taXVtKCkKIHsKLSAgICBpZiAobV9jb250ZXh0ICYmIGxheWVyVHJlZUhvc3QoKSkKLSAgICAg
ICAgbGF5ZXJUcmVlSG9zdCgpLT5zdG9wUmF0ZUxpbWl0ZXIobV9jb250ZXh0KTsKKyAgICBpZiAo
Y29udGV4dCgpICYmIGxheWVyVHJlZUhvc3QoKSkKKyAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5z
dG9wUmF0ZUxpbWl0ZXIoY29udGV4dCgpKTsKIH0KIAogYm9vbCBXZWJHTExheWVyQ2hyb21pdW06
OmRyYXdzQ29udGVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtX2NvbnRleHQgJiYgbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9fRVJST1IpOworICAgIHJldHVybiAoY29udGV4dCgpICYmIGNvbnRl
eHQoKS0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKIH0KIAogdm9pZCBXZWJHTExheWVyQ2hyb21pdW06
OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIHJlbmRlcmVyQ29u
dGV4dCwgQ0NUZXh0dXJlVXBkYXRlciYpCkBAIC04NSwxMSArODUsOSBAQCB2b2lkIFdlYkdMTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvCiAgICAgfQogICAgIC8vIFVwZGF0ZSB0aGUgY29u
dGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KICAgICBpZiAoIW1f
ZGlydHlSZWN0LmlzRW1wdHkoKSAmJiBtX3RleHR1cmVVcGRhdGVkKSB7Ci0gICAgICAgIC8vIHBy
ZXBhcmVUZXh0dXJlIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVy
IHRhcmdldCBpbnRvIHRoZSB0ZXh0dXJlCi0gICAgICAgIC8vIHVzZWQgYnkgdGhlIGNvbXBvc2l0
b3IuCi0gICAgICAgIC8vCi0gICAgICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKLSAg
ICAgICAgbV9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CisgICAgICAgIC8vIHB1Ymxp
c2hUb1BsYXRmb3JtTGF5ZXIgcHJlcGFyZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBvZmYtc2NyZWVu
IHJlbmRlciB0YXJnZXQgZm9yIHVzZSBieSB0aGUgY29tcG9zaXRvci4KKyAgICAgICAgZHJhd2lu
Z0J1ZmZlcigpLT5wdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIGNvbnRleHQoKS0+
bWFya0xheWVyQ29tcG9zaXRlZCgpOwogICAgICAgICBtX3VwZGF0ZVJlY3QgPSBGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBib3VuZHMoKSk7CiAgICAgICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7CiAg
ICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSBmYWxzZTsKQEAgLTEwMSw3ICs5OSw3IEBAIGJvb2wg
V2ViR0xMYXllckNocm9taXVtOjpwYWludFJlbmRlcmVkUmUKICAgICBpZiAobV90ZXh0dXJlVXBk
YXRlZCB8fCAhbGF5ZXJSZW5kZXJlckNvbnRleHQoKSB8fCAhZHJhd3NDb250ZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEludFNpemUgZnJhbWVidWZmZXJTaXplID0gbV9jb250
ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOworICAgIEludFNpemUgZnJhbWVidWZm
ZXJTaXplID0gY29udGV4dCgpLT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOwogICAgIEFT
U0VSVChsYXllclJlbmRlcmVyQ29udGV4dCgpKTsKIAogICAgIC8vIFRoaXMgd291bGQgaWRlYWxs
eSBiZSBkb25lIGluIHRoZSB3ZWJnbCBjb250ZXh0LCBidXQgdGhhdCBpc24ndCBwb3NzaWJsZSB5
ZXQuCkBAIC0xMTAsNyArMTA4LDcgQEAgYm9vbCBXZWJHTExheWVyQ2hyb21pdW06OnBhaW50UmVu
ZGVyZWRSZQogICAgIGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQs
IDApOwogCiAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2Fz
dDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmdldEV4dGVu
c2lvbnMoKSk7Ci0gICAgZXh0ZW5zaW9ucy0+cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1l
YnVmZmVyLCBmcmFtZWJ1ZmZlclNpemUud2lkdGgoKSwgZnJhbWVidWZmZXJTaXplLmhlaWdodCgp
LCAhbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwg
aW1hZ2VCdWZmZXIpOworICAgIGV4dGVuc2lvbnMtPnBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhm
cmFtZWJ1ZmZlciwgZnJhbWVidWZmZXJTaXplLndpZHRoKCksIGZyYW1lYnVmZmVyU2l6ZS5oZWln
aHQoKSwgIWNvbnRleHQoKS0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxw
aGEsIGltYWdlQnVmZmVyKTsKICAgICBsYXllclJlbmRlcmVyQ29udGV4dCgpLT5kZWxldGVGcmFt
ZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMjEsMzIgKzEx
OSwzOSBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y29udGVudENoYW5nZWQoCiAgICAgLy8g
SWYgV2ViR0wgY29tbWFuZHMgYXJlIGlzc3VlZCBvdXRzaWRlIG9mIGEgdGhlIGFuaW1hdGlvbiBj
YWxsYmFja3MsIHRoZW4gdXNlCiAgICAgLy8gY2FsbCByYXRlTGltaXRPZmZzY3JlZW5Db250ZXh0
Q0hST01JVU0oKSB0byBrZWVwIHRoZSBjb250ZXh0IGZyb20gZ2V0dGluZyB0b28gZmFyIGFoZWFk
LgogICAgIGlmIChsYXllclRyZWVIb3N0KCkpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3Rh
cnRSYXRlTGltaXRlcihtX2NvbnRleHQpOworICAgICAgICBsYXllclRyZWVIb3N0KCktPnN0YXJ0
UmF0ZUxpbWl0ZXIoY29udGV4dCgpKTsKIH0KIAotdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnNl
dENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit2b2lkIFdlYkdMTGF5
ZXJDaHJvbWl1bTo6c2V0RHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVy
KQogewotICAgIGJvb2wgY29udGV4dENoYW5nZWQgPSAobV9jb250ZXh0ICE9IGNvbnRleHQpOwor
ICAgIGJvb2wgZHJhd2luZ0J1ZmZlckNoYW5nZWQgPSAobV9kcmF3aW5nQnVmZmVyICE9IGRyYXdp
bmdCdWZmZXIpOworICAgIG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdpbmdCdWZmZXI7CiAKLSAgICBp
ZiAobGF5ZXJUcmVlSG9zdCgpICYmIGNvbnRleHRDaGFuZ2VkKQotICAgICAgICBsYXllclRyZWVI
b3N0KCktPnN0b3BSYXRlTGltaXRlcihtX2NvbnRleHQpOworICAgIGlmIChsYXllclRyZWVIb3N0
KCkgJiYgZHJhd2luZ0J1ZmZlckNoYW5nZWQpCisgICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3Rv
cFJhdGVMaW1pdGVyKGNvbnRleHQoKSk7CiAKLSAgICBtX2NvbnRleHQgPSBjb25zdF9jYXN0PEdy
YXBoaWNzQ29udGV4dDNEKj4oY29udGV4dCk7Ci0KLSAgICBpZiAoIW1fY29udGV4dCkKKyAgICBp
ZiAoIW1fZHJhd2luZ0J1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgdW5zaWduZWQgaW50
IHRleHR1cmVJZCA9IG1fY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCk7Ci0gICAgaWYgKHRleHR1
cmVJZCAhPSBtX3RleHR1cmVJZCB8fCBjb250ZXh0Q2hhbmdlZCkgeworICAgIHVuc2lnbmVkIGlu
dCB0ZXh0dXJlSWQgPSBtX2RyYXdpbmdCdWZmZXItPnBsYXRmb3JtQ29sb3JCdWZmZXIoKTsKKyAg
ICBpZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkIHx8IGRyYXdpbmdCdWZmZXJDaGFuZ2VkKSB7
CiAgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSB0cnVlOwogICAgICAgICBtX3RleHR1cmVVcGRh
dGVkID0gdHJ1ZTsKICAgICB9CiAgICAgbV90ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IG1fY29udGV4dC0+Z2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRy
aWJ1dGVzID0gY29udGV4dCgpLT5nZXRDb250ZXh0QXR0cmlidXRlcygpOwogICAgIG1faGFzQWxw
aGEgPSBhdHRyaWJ1dGVzLmFscGhhOwogICAgIG1fcHJlbXVsdGlwbGllZEFscGhhID0gYXR0cmli
dXRlcy5wcmVtdWx0aXBsaWVkQWxwaGE7CiB9CiAKK0dyYXBoaWNzQ29udGV4dDNEKiBXZWJHTExh
eWVyQ2hyb21pdW06OmNvbnRleHQoKSBjb25zdAoreworICAgIGlmIChkcmF3aW5nQnVmZmVyKCkp
CisgICAgICAgIHJldHVybiBkcmF3aW5nQnVmZmVyKCktPmdyYXBoaWNzQ29udGV4dDNEKCkuZ2V0
KCk7CisKKyAgICByZXR1cm4gMDsKK30KKwogR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMTGF5ZXJD
aHJvbWl1bTo6bGF5ZXJSZW5kZXJlckNvbnRleHQoKQogewogICAgIC8vIEZJWE1FOiBJbiB0aGUg
dGhyZWFkZWQgY2FzZSwgcGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyBtdXN0IGJlCkBAIC0x
NTcsNCArMTYyLDUgQEAgR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMTGF5ZXJDaHJvbWl1bTo6bAog
fQogCiB9CisKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKIAogI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJEcmF3
aW5nQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTMsMjEgKzU0LDIzIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKTsKICAgICBib29sIHBh
aW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKTsKIAotICAgIHZvaWQgc2V0
Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCk7Ci0gICAgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCgpIGNvbnN0OwogCisgICAgdm9pZCBzZXREcmF3aW5nQnVmZmVyKERy
YXdpbmdCdWZmZXIqKTsKKyAgICBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9kcmF3aW5nQnVmZmVyOyB9CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdlYkdM
TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqKTsKICAgICBmcmllbmQgY2xhc3MgV2ViR0xM
YXllckNocm9taXVtUmF0ZUxpbWl0VGFzazsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBsYXll
clJlbmRlcmVyQ29udGV4dCgpOwogCi0gICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3Jt
TGF5ZXIgaGFzIGEgc2lkZS1lZmZlY3Qgb2YgYXNzaWduaW5nIGl0c2VsZgotICAgIC8vIHRvIHRo
ZSBsYXllci4gQmVjYXVzZSBvZiB0aGF0IEdyYXBoaWNzQ29udGV4dDNEJ3MgZGVzdHJ1Y3RvciB3
aWxsIHJlc2V0Ci0gICAgLy8gbGF5ZXIncyBjb250ZXh0IHRvIDAuCi0gICAgR3JhcGhpY3NDb250
ZXh0M0QqIG1fY29udGV4dDsKICAgICBib29sIG1fdGV4dHVyZUNoYW5nZWQ7CiAgICAgYm9vbCBt
X3RleHR1cmVVcGRhdGVkOworCisgICAgLy8gVGhlIERyYXdpbmdCdWZmZXIgaG9sZGluZyB0aGUg
V2ViR0wgY29udGVudHMgZm9yIHRoaXMgbGF5ZXIuCisgICAgLy8gQSByZWZlcmVuY2UgaXMgbm90
IGhlbGQgaGVyZSwgYmVjYXVzZSB0aGUgRHJhd2luZ0J1ZmZlciBhbHJlYWR5IGhvbGRzCisgICAg
Ly8gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMTGF5ZXJDaHJvbWl1bS4KKyAgICBEcmF3aW5nQnVm
ZmVyKiBtX2RyYXdpbmdCdWZmZXI7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVm
bC5jcHAJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI2LDEz
ICs3MjYsMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7
CisgICAgLy8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVtZW50ZWQgaW4gQ2hyb21p
dW0gcG9ydHMuCisgICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1
ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25s
eSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdCdWZm
ZXIpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZSgxLCAxKSk7CiAgICAgcmV0dXJuIGltYWdl
RGF0YS5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCShyZXZpc2lvbiA5OTU5MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIK
IAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDgsNyArNTAsNyBAQCBzdGF0aWMgaW50IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzID0KICNl
bmRpZgogc3RhdGljIGludCBzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVscyA9IDA7CiAKLVBhc3NS
ZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQorUGFzc1JlZlB0cjxEcmF3aW5nQnVm
ZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNv
bnN0IEludFNpemUmIHNpemUsIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKIHsKICAgICBF
eHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CiAgICAg
Ym9vbCBtdWx0aXNhbXBsZVN1cHBvcnRlZCA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdM
RV9mcmFtZWJ1ZmZlcl9ibGl0IikgJiYgZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlIikgJiYgZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX09FU19y
Z2I4X3JnYmE4Iik7CkBAIC02MCw3ICs2Miw3IEBAIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4g
RHJhd2luZ0J1ZmZlcjoKICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IGV4
dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKICAgICBp
ZiAocGFja2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVkKQogICAgICAgICBleHRlbnNpb25zLT5lbnN1
cmVFbmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICBSZWZQdHI8RHJh
d2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZlciA9IGFkb3B0UmVmKG5ldyBEcmF3aW5nQnVmZmVyKGNv
bnRleHQsIHNpemUsIG11bHRpc2FtcGxlU3VwcG9ydGVkLCBwYWNrZWREZXB0aFN0ZW5jaWxTdXBw
b3J0ZWQpKTsKKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZlciA9IGFkb3B0
UmVmKG5ldyBEcmF3aW5nQnVmZmVyKGNvbnRleHQsIHNpemUsIG11bHRpc2FtcGxlU3VwcG9ydGVk
LCBwYWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0ZWQsIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpKTsK
ICAgICByZXR1cm4gKGRyYXdpbmdCdWZmZXItPm1fY29udGV4dCkgPyBkcmF3aW5nQnVmZmVyLnJl
bGVhc2UoKSA6IDA7CiB9CiAKQEAgLTc4LDYgKzgwLDExIEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6
Y2xlYXIoKQogICAgICAgICBtX2NvbG9yQnVmZmVyID0gMDsKICAgICB9CiAKKyAgICBpZiAobV9i
YWNraW5nQ29sb3JCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1f
YmFja2luZ0NvbG9yQnVmZmVyKTsKKyAgICAgICAgbV9iYWNraW5nQ29sb3JCdWZmZXIgPSAwOwor
ICAgIH0KKwogICAgIGlmIChtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpIHsKICAgICAgICAgbV9j
b250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKICAg
ICAgICAgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyID0gMDsKQEAgLTE2Niw3ICsxNzMsNyBAQCB2
b2lkIERyYXdpbmdCdWZmZXI6OmNsZWFyRnJhbWVidWZmZXIoKQogICAgIHVuc2lnbmVkIGNoYXIg
ZGVwdGhNYXNrID0gZmFsc2U7CiAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxNYXNrID0gMHhmZmZm
ZmZmZjsKICAgICB1bnNpZ25lZCBjaGFyIGlzU2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKLSAgICB1
bnNpZ25lZCBsb25nIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJf
QklUOworICAgIHVuc2lnbmVkIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9C
VUZGRVJfQklUOwogICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7CiAgICAgICAgIG1fY29udGV4
dC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFy
RGVwdGgpOwogICAgICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoMSk7CkBAIC0xODgsNiArMTk1
LDE0IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXJGcmFtZWJ1ZmZlcigpCiAgICAgbV9jb250
ZXh0LT5nZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFLCBjbGVh
ckNvbG9yKTsKICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiAgICAgbV9j
b250ZXh0LT5jbGVhcihjbGVhck1hc2spOworCisgICAgLy8gVGhlIG11bHRpc2FtcGxlIGZibyB3
YXMganVzdCBjbGVhcmVkLCBidXQgd2UgYWxzbyBuZWVkIHRvIGNsZWFyIHRoZSBub24tbXVsdGlz
YW1wbGVkIGJ1ZmZlciB0b28uCisgICAgaWYgKG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAg
bV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX2Zibyk7CisgICAgICAgIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0JVRkZFUl9CSVQpOworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgIH0KKwog
ICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBj
bGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKIAogICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRo
KSB7CkBAIC0yMzMsNyArMjQ4LDcgQEAgYm9vbCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJ
bnRTaXplJgogICAgIGlmIChuZXdTaXplICE9IG1fc2l6ZSkgewogICAgICAgICBtX3NpemUgPSBu
ZXdTaXplOwogCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxDb2xvckZvcm1hdCwgY29s
b3JGb3JtYXQsIGludGVybmFsUmVuZGVyYnVmZmVyRm9ybWF0OworICAgICAgICB1bnNpZ25lZCBp
bnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxSZW5kZXJidWZmZXJGb3Jt
YXQ7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmFscGhhKSB7CiAgICAgICAgICAgICBpbnRlcm5h
bENvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CiAgICAgICAgICAgICBjb2xv
ckZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwpAQCAtMjUwLDcgKzI2NSw3IEBAIGJv
b2wgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAgICAgIGludCBt
YXhTYW1wbGVDb3VudCA9IDA7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfU0FNUExFUywgJm1heFNhbXBsZUNvdW50KTsK
LSAgICAgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDgsIG1heFNhbXBsZUNvdW50
KTsKKyAgICAgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNv
dW50KTsKIAogICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKIApAQCAtMjY5LDEwICsy
ODQsMTYgQEAgYm9vbCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgICAg
ICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIG1fZmJvKTsKIAogICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyKTsKLSAgICAgICAgCiAgICAgICAgIG1f
Y29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50
ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29s
b3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKIAogICAgICAg
ICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwgMCk7CisKKyAgICAgICAgLy8gcmVz
aXplIHRoZSBiYWNraW5nIGNvbG9yIGJ1ZmZlcgorICAgICAgICBpZiAobV9zZXBhcmF0ZUJhY2tp
bmdUZXh0dXJlKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBtX2JhY2tpbmdDb2xvckJ1ZmZlcik7CisgICAgICAgICAg
ICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAs
IGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAs
IGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CisgICAg
ICAgIH0KKwogICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwKTsKIAogICAgICAgICBpZiAoIW11bHRpc2FtcGxlKCkpCkBAIC0yOTMs
MjMgKzMxNCw1NiBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OmNvbW1pdChsb25nIHgsIGxvbmcKIHsK
ICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIGlm
ICh3aWR0aCA8IDApCiAgICAgICAgIHdpZHRoID0gbV9zaXplLndpZHRoKCk7CiAgICAgaWYgKGhl
aWdodCA8IDApCiAgICAgICAgIGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSAgICAgICAgCisK
ICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIAorCiAgICAgaWYgKG1f
bXVsdGlzYW1wbGVGQk8pIHsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0
ZW5zaW9uczNEOjpSRUFEX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKICAgICAgICAg
bV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpEUkFXX0ZSQU1FQlVGRkVS
LCBtX2Zibyk7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5ibGl0RnJhbWVi
dWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwor
CisgICAgICAgIGlmIChtX3NjaXNzb3JFbmFibGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworCisgICAgICAgIC8vIFVz
ZSBORUFSRVNULCBiZWNhdXNlIHRoZXJlIGlzIG5vIHNjYWxlIHBlcmZvcm1lZCBkdXJpbmcgdGhl
IGJsaXQuCisgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5ibGl0RnJhbWVidWZm
ZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsKKwor
ICAgICAgICBpZiAobV9zY2lzc29yRW5hYmxlZCkKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIH0KLSAgICAKKwogICAg
IG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9mYm8pOwogfQogCitib29sIERyYXdpbmdCdWZmZXI6Om11bHRpc2FtcGxlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0
ZXMoKS5hbnRpYWxpYXMgJiYgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZDsKK30KKwor
UGFzc1JlZlB0cjxJbWFnZURhdGE+IERyYXdpbmdCdWZmZXI6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0ltYWdlRGF0YSh0aGlzKTsKK30KKwordm9pZCBEcmF3aW5nQnVmZmVyOjpkaXNjYXJk
UmVzb3VyY2VzKCkKK3sKKyAgICBtX2NvbG9yQnVmZmVyID0gMDsKKyAgICBtX2JhY2tpbmdDb2xv
ckJ1ZmZlciA9IDA7CisgICAgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyID0gMDsKKworICAgIG1f
ZGVwdGhTdGVuY2lsQnVmZmVyID0gMDsKKyAgICBtX2RlcHRoQnVmZmVyID0gMDsKKworICAgIG1f
c3RlbmNpbEJ1ZmZlciA9IDA7CisKKyAgICBtX211bHRpc2FtcGxlRkJPID0gMDsKKyAgICBtX2Zi
byA9IDA7Cit9CisKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6YmluZCgpCiB7CiAgICAgaWYgKCFtX2Nv
bnRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2lu
Z0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVk
ZSAiSW50U2l6ZS5oIgogCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC00MywxNSAr
NDQsMTggQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBQTEFURk9STShD
SFJPTUlVTSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotY2xhc3MgQ2FudmFzMkRM
YXllckNocm9taXVtOworY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOworY2xhc3MgSW1hZ2VEYXRhOworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQor
Y2xhc3MgV2ViR0xMYXllckNocm9taXVtOwogI2VuZGlmCiAKIC8vIE1hbmFnZXMgYSByZW5kZXJp
bmcgdGFyZ2V0IChmcmFtZWJ1ZmZlciArIGF0dGFjaG1lbnQpIGZvciBhIGNhbnZhcy4gIENhbiBw
dWJsaXNoIGl0cyByZW5kZXJpbmcKIC8vIHJlc3VsdHMgdG8gYSBQbGF0Zm9ybUxheWVyIGZvciBj
b21wb3NpdGluZy4KIGNsYXNzIERyYXdpbmdCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEcmF3
aW5nQnVmZmVyPiB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZl
cj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIGJvb2wpOwogICAg
IGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIAogICAgIH5EcmF3aW5nQnVmZmVyKCk7
CkBAIC03NSwyMiArNzksMzkgQEAgcHVibGljOgogCiAgICAgLy8gQ29waWVzIHRoZSBtdWx0aXNh
bXBsZSBjb2xvciBidWZmZXIgdG8gdGhlIG5vcm1hbCBjb2xvciBidWZmZXIgYW5kIGxlYXZlcyBt
X2ZibyBib3VuZAogICAgIHZvaWQgY29tbWl0KGxvbmcgeCA9IDAsIGxvbmcgeSA9IDAsIGxvbmcg
d2lkdGggPSAtMSwgbG9uZyBoZWlnaHQgPSAtMSk7Ci0gICAgCi0gICAgYm9vbCBtdWx0aXNhbXBs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmdldENvbnRleHRBdHRy
aWJ1dGVzKCkuYW50aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQ7IH0K
LSAgICAKKworICAgIC8vIGNvbW1pdCBzaG91bGQgY29weSB0aGUgZnVsbCBtdWx0aXNhbXBsZSBi
dWZmZXIsIGFuZCBub3QgcmVzcGVjdCB0aGUKKyAgICAvLyBjdXJyZW50IHNjaXNzb3IgYm91bmRz
LiBUcmFjayB0aGUgc3RhdGUgb2YgdGhlIHNjaXNzb3IgdGVzdCBzbyB0aGF0IGl0CisgICAgLy8g
Y2FuIGJlIGRpc2FibGVkIGR1cmluZyBjYWxscyB0byBjb21taXQuCisgICAgdm9pZCBzZXRTY2lz
c29yRW5hYmxlZChib29sIHNjaXNzb3JFbmFibGVkKSB7IG1fc2Npc3NvckVuYWJsZWQgPSBzY2lz
c29yRW5hYmxlZDsgfQorCisgICAgYm9vbCBtdWx0aXNhbXBsZSgpIGNvbnN0OworCiAgICAgUGxh
dGZvcm0zRE9iamVjdCBwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3Q7CisgICAgUGxhdGZvcm0z
RE9iamVjdCBmcmFtZWJ1ZmZlcigpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+
IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisKKyAgICAvLyBJbW1lZGlhdGVs
eSByZWxlYXNlcyBvd25lcnNoaXAgb2YgYWxsIHJlc291cmNlcy4gQ2FsbCB1cG9uIGxvc3Mgb2Yg
dGhlCisgICAgLy8gZ3JhcGhpY3MgY29udGV4dCB0byBwcmV2ZW50IGZyZWVpbmcgaW52YWxpZCBy
ZXNvdXJjZXMuCisgICAgdm9pZCBkaXNjYXJkUmVzb3VyY2VzKCk7CiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpOwog
ICAgIHZvaWQgcHVibGlzaFRvUGxhdGZvcm1MYXllcigpOworICAgIHZvaWQgcGFpbnRDb21wb3Np
dGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKICNlbmRpZgogCiAg
ICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXpl
Jik7Ci0gICAgCi0gICAgRHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IElu
dFNpemUmLCBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLCBib29sIHBhY2tlZERl
cHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCk7CisgICAgRHJhd2luZ0J1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3Vw
cG9ydGVkLAorICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNp
b25TdXBwb3J0ZWQsIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSk7CisKKyAgICB2b2lkIGlu
aXRpYWxpemUoY29uc3QgSW50U2l6ZSYpOworCisgICAgYm9vbCBtX3NlcGFyYXRlQmFja2luZ1Rl
eHR1cmU7CisgICAgYm9vbCBtX3NjaXNzb3JFbmFibGVkOwogCiAgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBtX2NvbnRleHQ7CiAgICAgSW50U2l6ZSBtX3NpemU7CkBAIC05OCw2ICsxMTks
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBw
b3J0ZWQ7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsKICAgICBQbGF0Zm9ybTNET2JqZWN0
IG1fY29sb3JCdWZmZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2JhY2tpbmdDb2xvckJ1ZmZl
cjsKIAogICAgIC8vIFRoaXMgaXMgdXNlZCB3aGVuIHdlIGhhdmUgT0VTX3BhY2tlZF9kZXB0aF9z
dGVuY2lsLgogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CkBAIC0x
MTAsNiArMTMyLDEwIEBAIHByaXZhdGU6CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2Ft
cGxlRkJPOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyOwog
CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4g
bV9wbGF0Zm9ybUxheWVyOworI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAgICAgUmV0YWlu
UHRyPFdlYkdMTGF5ZXI+IG1fcGxhdGZvcm1MYXllcjsKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2lu
Z0J1ZmZlck1hYy5tbQkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTM5LDggKzM5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIERyYXdpbmdCdWZmZXI6OkRyYXdp
bmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQot
ICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgOiBtX3NlcGFy
YXRlQmFja2luZ1RleHR1cmUoc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICAsIG1fc2Npc3Nv
ckVuYWJsZWQoZmFsc2UpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2l6ZSgt
MSwgLTEpCiAgICAgLCBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxl
RXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25T
dXBwb3J0ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQpAQCAtNTIsNiAr
NTUsOSBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29uCiAgICAgLCBt
X211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKIHsK
KyAgICAvLyBTdXBwb3J0IGZvciBhIHNlcGFyYXRlIGJhY2tpbmcgdGV4dHVyZSBoYXMgb25seSBi
ZWVuIGVuYWJsZWQgZm9yCisgICAgLy8gdGhlIGNocm9taXVtIHBvcnQuCisgICAgQVNTRVJUKCFt
X3NlcGFyYXRlQmFja2luZ1RleHR1cmUpOwogICAgIEFTU0VSVChtX2Zibyk7CiAgICAgaWYgKCFt
X2ZibykgewogICAgICAgICBjbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L3F0L0RyYXdpbmdCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L3F0L0RyYXdpbmdCdWZmZXJRdC5jcHAJKHJl
dmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L3F0
L0RyYXdpbmdCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
dFNpemUmIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1w
bGVFeHRlbnNpb25TdXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVu
Y2lsRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgOiBtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUo
c2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICAsIG1fc2Npc3NvckVuYWJsZWQoZmFsc2UpCisg
ICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2l6ZSgtMSwgLTEpCiAgICAgLCBtX211
bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVk
KQogICAgICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVw
dGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQpAQCAtNDcsNiArNTAsOSBAQCBEcmF3aW5nQnVm
ZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29uCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDAp
CiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKIHsKKyAgICAvLyBTdXBwb3J0IGZv
ciBhIHNlcGFyYXRlIGJhY2tpbmcgdGV4dHVyZSBoYXMgb25seSBiZWVuIGVuYWJsZWQgZm9yCisg
ICAgLy8gdGhlIGNocm9taXVtIHBvcnQuCisgICAgQVNTRVJUKCFtX3NlcGFyYXRlQmFja2luZ1Rl
eHR1cmUpOwogICAgIEFTU0VSVChtX2Zibyk7CiAgICAgaWYgKCFtX2ZibykgewogICAgICAgICBj
bGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCShyZXZp
c2lvbiA5OTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw4ICsxMjgs
MTAgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNSZXNvdXJjZVNhZmUoKQogfQogCiAjaWYg
IVBMQVRGT1JNKFFUKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CisgICAg
Ly8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0gcG9y
dHMuCisgICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKICAgICBIVE1MQ2FudmFzRWxlbWVudCog
Y2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVy
ID0gY2FudmFzLT5idWZmZXIoKTsKIApAQCAtMTYyLDggKzE2NCwxMCBAQCBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpwYWludENvbXBvc2l0ZWRSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1QYXNz
UmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1
ZmZlcikKIHsKKyAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRlZCBp
biBDaHJvbWl1bSBwb3J0cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIpOwogICAgIC8vIFJl
YWRpbmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3b3VsZCBpbnZvbHZlIHVucHJlbXVsdGlwbHlpbmcs
IHdoaWNoIGlzCiAgICAgLy8gbG9zc3kKICAgICBpZiAobV9hdHRycy5wcmVtdWx0aXBsaWVkQWxw
aGEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHQzRFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIwLDggKzQyMCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjptYWtlQ29udGV4dEN1cnJlCiAgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAvLyBE
cmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4K
KyAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIpOwogICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+
Y2FudmFzKCk7CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIo
KTsKQEAgLTQzMCw4ICs0MzIsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5k
ZXJpbmdSZQogfQogCiAjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKLVBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURh
dGEoKQorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogewor
ICAgIC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGltcGxlbWVudGVkIGluIENocm9taXVt
IHBvcnRzLgorICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7CiAgICAgLy8gRklYTUU6IFRoaXMg
bmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgZm9yIHByb3BlciBub24tcHJlbXVsdGlwbGllZC1hbHBo
YQogICAgIC8vIHN1cHBvcnQuCiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkocmV2aXNpb24gOTk1OTcpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDExLTExLTA4ICBKZWZmIFRp
bWFudXMgIDx0d2l6QGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBhdGNoIHRo
YXQgaW1wbGVtZW50aW5nIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRvIGFsbG93IFdlYkdMCisgICAg
ICAgIHRvIHNoYXJlIGl0cyBiYWNraW5nIHN0b3JlIGRpcmVjdGx5IHdpdGggdGhlIGNvbXBvc2l0
b3IuCisgICAgICAgIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0cyBjcmVhdGUgYW5kIHJlbmRlciB0
byBGQk9zIG1hbmFnZWQgYnkgYQorICAgICAgICBEcmF3aW5nQnVmZmVyIGluc3RhbmNlLiBBbGwg
UGxhdGZvcm1MYXllciBsaWZldGltZSBtYW5hZ2VtZW50IGlzCisgICAgICAgIHBlcmZvcm1lZCBi
eSB0aGUgRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgQ2hhbmdlcyBhcmUgb25seSByZWxldmFudCB0
byBDaHJvbWl1bSBwb3J0cy4gRnVuY3Rpb25hbGl0eSBpcworICAgICAgICB1bmNoYW5nZWQgZm9y
IG90aGVyIHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTMyMDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcDogR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlIG5vIGxvbmdlciBjYWNoZXMKKyAgICAgICAgdGhlIFdlYkdMTGF5ZXJDaHJvbWl1
bSBpbnN0YW5jZS4gIEluc3RlYWQsIGl0IGlzIGFjY2Vzc2VkIHZpYSBEcmF3aW5nQnVmZmVyIGlu
c3RhbmNlcworICAgICAgICBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIHRoZSBuZWNlc3Nhcnkgcm91
dGluZXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9JbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFw
aGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxh
dGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgKiBzcmMv
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmg6CisKIDIwMTEtMTEtMDggIFl1cnkgU2VtaWtoYXRz
a3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogZGlzcGxh
eSBub3RpZmljYXRpb24gaW4gdGhlIGZyb250LWVuZCB3aGVuIGluc3BlY3RlZCB3b3JrZXIgdGVy
bWluYXRlcwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0
M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDEwICszNSwxMCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJD
aHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiRHJhd2lu
Z0J1ZmZlci5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQu
aCIKQEAgLTE2Myw2ICsxNjMsMjAgQEAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3Jl
YXRlR3JhcAogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBo
aWNzQ29udGV4dEZyb21XZWJDb250ZXh0KHdlYkNvbnRleHQucmVsZWFzZSgpLCBhdHRycywgaG9z
dFdpbmRvdywgcmVuZGVyU3R5bGUsIHRocmVhZFVzYWdlKTsKIH0KIAordm9pZCBnZXREcmF3aW5n
UGFyYW1ldGVycyhEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBXZWJLaXQ6OldlYkdyYXBo
aWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGxhdGZvcm0zRE9iamVjdCogZnJhbWVCdWZmZXJJZCwgaW50KiB3aWR0aCwgaW50KiBoZWln
aHQpCit7CisgICAgaWYgKGRyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgKmZyYW1lQnVmZmVySWQg
PSBkcmF3aW5nQnVmZmVyLT5mcmFtZWJ1ZmZlcigpOworICAgICAgICAqd2lkdGggPSBkcmF3aW5n
QnVmZmVyLT5zaXplKCkud2lkdGgoKTsKKyAgICAgICAgKmhlaWdodCA9IGRyYXdpbmdCdWZmZXIt
PnNpemUoKS5oZWlnaHQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAqZnJhbWVCdWZmZXJJZCA9
IDA7CisgICAgICAgICp3aWR0aCA9IGdyYXBoaWNzQ29udGV4dDNELT53aWR0aCgpOworICAgICAg
ICAqaGVpZ2h0ID0gZ3JhcGhpY3NDb250ZXh0M0QtPmhlaWdodCgpOworICAgIH0KK30KKwogfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0Rm9yQW5vdGhlclRo
cmVhZChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQpAQCAt
MjEyLDE3ICsyMjYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cHJlcGFyZVRl
CiAgICAgbV9pbXBsLT5wcmVwYXJlVGV4dHVyZSgpOwogfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotV2ViR0xMYXllckNocm9taXVtKiBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnBsYXRmb3JtTGF5ZXIoKQotewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBpZiAoIW1fY29tcG9zaXRpbmdMYXllcikKLSAgICAgICAgbV9jb21wb3NpdGluZ0xheWVy
ID0gV2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUoMCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbV9j
b21wb3NpdGluZ0xheWVyLmdldCgpOwotfQotI2VuZGlmCi0KIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjptYXJrQ29udGV4dENoYW5nZWQoKQogewogICAgIG1fbGF5ZXJDb21wb3NpdGVk
ID0gZmFsc2U7CkBAIC0zMDUsMzEgKzMwOCwzNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6cGFpbnRGcmFtCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQq
IGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1
ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBj
b250ZXh0LT5jYW52YXMoKS0+YnVmZmVyKCk7Ci0gICAgcGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFz
KDAsIG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSwgIW1faW1wbC0+Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEsIGltYWdlQnVmZmVyKTsKKyAgICBQbGF0
Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVySWQ7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAg
Z2V0RHJhd2luZ1BhcmFtZXRlcnMoZHJhd2luZ0J1ZmZlciwgbV9pbXBsLmdldCgpLCAmZnJhbWVi
dWZmZXJJZCwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBwYWludEZyYW1lYnVmZmVyVG9DYW52YXMo
ZnJhbWVidWZmZXJJZCwgd2lkdGgsIGhlaWdodCwgIW1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0
ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEsIGltYWdlQnVmZmVyKTsKIH0KIAogYm9vbCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLSAgICBpZiAocGxhdGZvcm1MYXllcigpKQotICAgICAgICByZXR1cm4gcGxhdGZvcm1M
YXllcigpLT5wYWludFJlbmRlcmVkUmVzdWx0c1RvQ2FudmFzKGNvbnRleHQtPmNhbnZhcygpLT5i
dWZmZXIoKSk7Ci0jZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
SW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqIGRyYXdp
bmdCdWZmZXIpCiB7CiAgICAgaWYgKG1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVt
dWx0aXBsaWVkQWxwaGEpCiAgICAgICAgIHJldHVybiAwOwotICAgIAotICAgIFJlZlB0cjxJbWFn
ZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobV9pbXBsLT53aWR0
aCgpLCBtX2ltcGwtPmhlaWdodCgpKSk7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVm
ZmVySWQ7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgZ2V0RHJhd2luZ1BhcmFtZXRlcnMo
ZHJhd2luZ0J1ZmZlciwgbV9pbXBsLmdldCgpLCAmZnJhbWVidWZmZXJJZCwgJndpZHRoLCAmaGVp
Z2h0KTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3Jl
YXRlKEludFNpemUod2lkdGgsIGhlaWdodCkpOwogICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9
IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKLSAgICBzaXplX3QgYnVmZmVyU2l6
ZSA9IDQgKiBtX2ltcGwtPndpZHRoKCkgKiBtX2ltcGwtPmhlaWdodCgpOworICAgIHNpemVfdCBi
dWZmZXJTaXplID0gNCAqIHdpZHRoICogaGVpZ2h0OwogCi0gICAgbV9pbXBsLT5yZWFkQmFja0Zy
YW1lYnVmZmVyKHBpeGVscywgYnVmZmVyU2l6ZSwgMCwgbV9pbXBsLT53aWR0aCgpLCBtX2ltcGwt
PmhlaWdodCgpKTsKKyAgICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCBidWZm
ZXJTaXplLCBmcmFtZWJ1ZmZlcklkLCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYnVmZmVyU2l6ZTsgaSArPSA0KQogICAgICAgICBzdGQ6OnN3YXAocGl4ZWxz
W2ldLCBwaXhlbHNbaSArIDJdKTsKQEAgLTEwMDksOSArMTAxNSw2IEBAIEdyYXBoaWNzQ29udGV4
dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKIAogR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGlj
c0NvbnRleHQzRCgpCiB7Ci0gICAgV2ViR0xMYXllckNocm9taXVtKiBjYW52YXNMYXllciA9IG1f
cHJpdmF0ZS0+cGxhdGZvcm1MYXllcigpOwotICAgIGlmIChjYW52YXNMYXllcikKLSAgICAgICAg
Y2FudmFzTGF5ZXItPnNldENvbnRleHQoMCk7CiAgICAgbV9wcml2YXRlLT5zZXRDb250ZXh0TG9z
dENhbGxiYWNrKG51bGxwdHIpOwogICAgIG1fcHJpdmF0ZS0+c2V0U3dhcEJ1ZmZlcnNDb21wbGV0
ZUNhbGxiYWNrQ0hST01JVU0obnVsbHB0cik7CiB9CkBAIC0xMDU2LDkgKzEwNTksNyBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjppc1Jlc291cmNlU2FmZSgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3Jt
TGF5ZXIoKSBjb25zdAogewotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogY2FudmFzTGF5ZXIgPSBt
X3ByaXZhdGUtPnBsYXRmb3JtTGF5ZXIoKTsKLSAgICBjYW52YXNMYXllci0+c2V0Q29udGV4dCh0
aGlzKTsKLSAgICByZXR1cm4gY2FudmFzTGF5ZXI7CisgICAgcmV0dXJuIDA7CiB9CiAjZW5kaWYK
IApAQCAtMTIxNCw4ICsxMjE1LDE2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29t
cG9zaXRlZCgKICAgICByZXR1cm4gbV9wcml2YXRlLT5sYXllckNvbXBvc2l0ZWQoKTsKIH0KIAot
REVMRUdBVEVfVE9fSU5URVJOQUxfMShwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcywgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF9SKHBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvSW1hZ2VEYXRhLCBQYXNzUmVmUHRyPEltYWdlRGF0YT4pCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQoreworICAg
IHJldHVybiBtX3ByaXZhdGUtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKGNvbnRleHQs
IGRyYXdpbmdCdWZmZXIpOworfQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqIGRy
YXdpbmdCdWZmZXIpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoZHJhd2luZ0J1ZmZlcik7Cit9CisKIERFTEVHQVRFX1RPX0lOVEVSTkFM
XzFSKHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcywgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCosIGJvb2wpCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZm
ZXIoKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDEwICs0Niw4IEBAIGNsYXNzIFdlYlZpZXdJbXBsOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBFeHRlbnNpb25zM0RDaHJvbWl1
bTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1jbGFzcyBXZWJHTExheWVyQ2hy
b21pdW07Ci0jZW5kaWYKIGNsYXNzIEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXI7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0
ZXI7CiAKQEAgLTk1LDE3ICs5MywxNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBsYXllckNvbXBvc2l0
ZWQoKSBjb25zdDsKICAgICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKIAotICAgIHZvaWQg
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwor
ICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCosIERyYXdpbmdCdWZmZXIqKTsKICAgICB2b2lkIHBhaW50RnJhbWVidWZmZXJUb0NhbnZh
cyhpbnQgZnJhbWVidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBJbWFnZUJ1ZmZlciopOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKik7CiAgICAgYm9v
bCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CiAgICAgYm9vbCBwYWludENvbXBvc2l0
ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwogCiAgICAgdm9pZCBw
cmVwYXJlVGV4dHVyZSgpOwogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAg
IFdlYkdMTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllcigpOwotI2VuZGlmCiAgICAgYm9vbCBp
c0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7CiAKICAgICB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxl
cigpOwpAQCAtMzMwLDkgKzMyNSw2IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBSZXNvdXJjZVNh
ZmV0eSBtX3Jlc291cmNlU2FmZXR5OwogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIFJlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IG1fY29tcG9zaXRpbmdMYXllcjsKLSNl
bmRpZgogI2lmIFVTRShTS0lBKQogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRo
ZSBDYW52YXMncyBiYWNraW5nIHN0b3JlIGRvbid0CiAgICAgLy8gbWF0Y2ggdGhvc2UgdGhhdCB3
ZSB3ZXJlIGdpdmVuIGluIHRoZSBtb3N0IHJlY2VudCBjYWxsIHRvCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114176</attachid>
            <date>2011-11-08 16:50:41 -0800</date>
            <delta_ts>2011-11-08 17:21:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111108194744.patch</filename>
            <type>text/plain</type>
            <size>60025</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NTk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTggQEAKKzIwMTEtMTEtMDggIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUGF0Y2ggdGhh
dCBpbXBsZW1lbnRpbmcgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuIEFsbCBQ
bGF0Zm9ybUxheWVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMKKyAgICAgICAgcGVyZm9ybWVkIGJ5
IHRoZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICBDaGFuZ2VzIGFyZSBvbmx5IHJlbGV2YW50IHRv
IENocm9taXVtIHBvcnRzLiBGdW5jdGlvbmFsaXR5IGlzCisgICAgICAgIHVuY2hhbmdlZCBmb3Ig
b3RoZXIgcG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzIwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDogQ29uc3RydWN0IGEg
RHJhd2luZ0J1ZmZlcgorICAgICAgICBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCBmb3J3YXJk
IGFsbCBmcmFtZWJ1ZmZlciBtYW5hZ2VtZW50IGNhbGxzIHRvCisgICAgICAgIGl0LgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
SWZDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZWJ1ZmZlcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oOiAgV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNlcworICAgICAgICBh
cmUgbm8gbG9uZ2VyIHRyYWNrZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QuIENhbGxlcnMgY2FuIG5v
dyBwYXNzIGEKKyAgICAgICAgRHJhd2luZ0J1ZmZlciBpbnN0YW5jZSB0byBwcm92aWRlIGFjY2Vz
cyB0byB0aGUgV2ViR0xMYXllckNocm9taXVtIGRhdGEuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlQ29sb3JUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpmcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjp+V2ViR0xM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJh
d3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21p
dW06OnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TExheWVyQ2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDogV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNl
cworICAgICAgICBoYXZlIGEgcmF3IHJlZmVyZW5jZSB0byB0aGVpciBvd25pbmcgRHJhd2luZ0J1
ZmZlci4gIFRoaXMgcmVmZXJlbmNlIGlzIHNldCB0byBOVUxMIG9uCisgICAgICAgIGRlc3RydWN0
aW9uIG9mIHRoZSBEcmF3aW5nQnVmZmVyLiAgVGhpcyBmb2xsb3dzIHRoZSBvbGQgY29kZSwgd2hp
Y2ggaGFkIHRoZSBXZWJHTExheWVyQ2hyb21pdW0KKyAgICAgICAgcmVmZXIgcmF3bHkgdG8gYSBH
cmFwaGljc0NvbnRleHQzRCBpbnN0YW5jZSwgd2hpY2ggd2FzIGFsc28gcmV2b2tlZCBkdXJpbmcg
dGVhci1kb3duIG9mIHRoZQorICAgICAgICBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmNwcDogVGhlIERyYXdpbmdCdWZmZXIgaXMgbm93IHRoZQorICAgICAgICBjZW50cmFs
IHBvaW50IGJldHdlZW4gdGhlIEdyYXBoaWNzQ29udGV4dDNELCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQsIGFuZAorICAgICAgICBXZWJHTExheWVyQ2hyb21pdW0gY2xhc3Nlcy4gIEdyYXBoaWNzQ29u
dGV4dDNELCBhbmQgV2ViR0xMYXllckNocm9taXVtIG9ubHkKKyAgICAgICAgZGVwZW5kIG9uIHRo
ZSBEcmF3aW5nQnVmZmVyIGludGVyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhckZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpt
dWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpkaXNjYXJkUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6c2V0U2Npc3Nv
ckVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1
ZmZlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSk6CisKIDIwMTEtMTEtMDggIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgog
CiAgICAgICAgIFJlbW92ZSBnZXQoKSBkZWZpbmVkIGluIENyZWRlbnRpYWxTdG9yYWdlU291cC5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUs
NyArMzY1LDEyIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFIKICAg
ICB9CiAKICAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRydWU7CisjaWYgUExBVEZPUk0o
Q0hST01JVU0pCisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IHRydWU7CisjZWxzZQog
ICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBmYWxzZTsKKyNlbmRpZgorCiAKICAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CiAKQEAgLTM4MSw2ICszODYsNyBAQCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRy
aWJ1dGVzKQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCiAgICAg
LCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQogICAgICwgbV9y
ZXN0b3JlQWxsb3dlZChmYWxzZSkKICAgICAsIG1fcmVzdG9yZVRpbWVyKHRoaXMpCiAgICAgLCBt
X3ZpZGVvQ2FjaGUoNCkKQEAgLTM4OCw2ICszOTQsMTUgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiB7CiAg
ICAgQVNTRVJUKG1fY29udGV4dCk7CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBD
cmVhdGUgdGhlIERyYXdpbmdCdWZmZXIgYW5kIGluaXRpYWxpemUgdGhlIHBsYXRmb3JtIGxheWVy
LgorICAgIG1fZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShtX2NvbnRleHQu
Z2V0KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSksICFt
X2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKTsKKyNlbmRpZgorCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisKICAgICBz
ZXR1cEZsYWdzKCk7CiAgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKIH0KQEAgLTQ1Myw2ICs0
NjgsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5lCiAgICAgaWYg
KCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CiAKKyAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KElu
dFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOworCiAgICAgbV9j
b250ZXh0LT5yZXNoYXBlKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwog
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSk7CiAKQEAgLTQ5Myw3ICs1MTEsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6bWFya0NvbnRleHRDCiB7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQogICAg
ICAgICByZXR1cm47CisKICAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOworCiAg
ICAgbV9sYXllckNsZWFyZWQgPSBmYWxzZTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7CkBA
IC01MjMsOCArNTQzLDEyIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcklmQ29t
cG8KICAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVh
ciB0aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIuCiAgICAgYm9vbCBjb21iaW5lZENs
ZWFyID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsKIAotICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsK
KyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgIH0KICAgICBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAg
aWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVG
RkVSX0JJVCkpCiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NvbG9yTWFza1swXSA/
IG1fY2xlYXJDb2xvclswXSA6IDAsCkBAIC01ODAsMjEgKzYwNCw1MCBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpCiAgICAgLy8gaGFwcGVuZWQgYWZ0ZXIgaXQgd2Fz
IGNvbXBvc2l0ZWQgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgaWYg
KG1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkgJiYgIW1fYXR0cmlidXRlcy5wcmVzZXJ2ZURy
YXdpbmdCdWZmZXIpIHsKICAgICAgICAgbV9jb250ZXh0LT5wYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXModGhpcyk7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFBM
QVRGT1JNKENIUk9NSVVNKQorICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5wYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXModGhpcyk7
CisjZW5kaWYKKwogICAgICAgICBjYW52YXMoKS0+bWFrZVByZXNlbnRhdGlvbkNvcHkoKTsKICAg
ICB9IGVsc2UKICAgICAgICAgY2FudmFzKCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOwogICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7CisKICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkgJiYg
IW1fbGF5ZXJDbGVhcmVkKQogICAgICAgICByZXR1cm47CisKICAgICBjYW52YXMoKS0+Y2xlYXJD
b3BpZWRJbWFnZSgpOwogICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKLSAgICBtX2Nv
bnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKHRoaXMpOworCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKyAgICBt
X2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKHRoaXMsIG1fZHJhd2luZ0J1
ZmZlci5nZXQoKSk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVi
dWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci0+YmluZCgpOworICAgIH0KIH0KIAogUGFzc1JlZlB0cjxJbWFnZURhdGE+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQogewog
ICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGlt
YWdlRGF0YSA9IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEobV9k
cmF3aW5nQnVmZmVyLmdldCgpKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAg
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8o
bV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlRGF0YTsK
IH0KIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIo
KSBjb25zdApAQCAtNjI2LDE2ICs2NzksMjUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnJlc2hhcGUoaW50CiAKICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIG1hcmsgdGhlIGNhbnZhcyBh
cyBkaXJ0eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2UgYnVmZmVyIHdpbGwgYWxzbyBz
dGFydCBvZmYKICAgICAvLyBjbGVhciAoYW5kIHRoaXMgbWF0Y2hlcyB3aGF0IHJlc2hhcGUgd2ls
bCBkbykuCi0gICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOworICAgIGlmICht
X2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KSk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lk
dGgsIGhlaWdodCk7CiB9CiAKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZm
ZXJXaWR0aCgpIGNvbnN0CiB7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7CisKICAgICByZXR1cm4gbV9jb250
ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7CiB9CiAKIGludCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdAogeworICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNpemUo
KS5oZWlnaHQoKTsKKwogICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkuaGVpZ2h0KCk7CiB9CiAKQEAgLTc1Nyw3ICs4MTksMTEgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZgogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwotICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOworICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIEluc3RlYWQgb2Yg
YmluZGluZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KKyAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5iaW5kKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwogICAgIGlmIChidWZmZXIpCiAg
ICAgICAgIGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0xMDk2LDkgKzExNjIsMjEgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNs
ZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpCisgICAgaWYgKGlz
UmVzb3VyY2VTYWZlKCkpIHsKKyAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVl
ZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PmNvbW1pdCgpOworCiAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0gICAg
ZWxzZSB7CisKKyAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAg
ICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcp
CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwogICAgICAgICBHQzNEaW50
IGNsaXBwZWRYLCBjbGlwcGVkWTsKICAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0aCwgY2xp
cHBlZEhlaWdodDsKICAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRC
b3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xp
cHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7CkBAIC0x
MTEwLDYgKzExODgsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFn
ZQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fY29udGV4dC0+
Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIGJvcmRlcik7CisKKyAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlm
IG5lZWRlZAorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwogICAgIH0KICAgICAv
LyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUg
YmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgogICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSk7CkBAIC0xMTQxLDcgKzEyMjMsMTUgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNvcHlUZXhTdWJJbQogICAgIH0KICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwog
ICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQorICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZl
ciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICBpZiAoIW1fZnJh
bWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
KworICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgIGlm
ICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEdDM0RpbnQgY2xp
cHBlZFgsIGNsaXBwZWRZOwogICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVk
SGVpZ2h0OwpAQCAtMTE2NSwxMSArMTI1NSwyOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleFN1YkltCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2NvbnRleHQtPnRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKICAgICAgICAgICAgIGlmIChjbGlwcGVkV2lk
dGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAgICAgLy8gQ29tbWl0
IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAg
ICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikK
KyAgICAgICAgICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwogICAgICAg
ICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCArIGNsaXBwZWRYIC0geCwgeW9mZnNldCArIGNsaXBwZWRZIC0geSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xp
cHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKKworICAgICAgICAgICAgICAgLy8gUmVzdG9yZSBE
cmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPmJpbmQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUu
Zy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5jb21taXQoKTsKKwogICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKwor
ICAgICAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgICAgICAg
ICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAg
ICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgICAgIH0KICAgICB9CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTEyODYsNyArMTM5MywxMCBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWViCiAgICAgaWYgKGZyYW1l
YnVmZmVyID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7CiAgICAgICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nID0gMDsKICAgICAgICAgLy8gSGF2ZSB0byBjYWxsIGJpbmRGcmFtZWJ1ZmZlciBoZXJl
IHRvIGJpbmQgYmFjayB0byBpbnRlcm5hbCBmYm8uCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKICAgICB9CiB9CiAKQEAgLTEzNzMsOCAr
MTQ4MywxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZShHQzNECiB7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RF
U1QpCisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CiAg
ICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9z
Y2lzc29yRW5hYmxlZCk7CisgICAgfQogICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXApOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0xNzE1LDggKzE4MjgsMTEg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZShHQzNEZQogewogICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKQorICAg
IGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewogICAgICAgICBt
X3NjaXNzb3JFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5h
YmxlZCk7CisgICAgfQogICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI5MjMsNyArMzAzOSwxNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHCiAgICAgfQogICAgIGNsZWFySWZDb21w
b3NpdGVkKCk7CiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKKworICAg
IC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxp
bmcpCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICBtX2NvbnRleHQtPnJlYWRQ
aXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKworICAgIC8v
IFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJC
aW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5k
KCk7CisKICNpZiBPUyhEQVJXSU4pCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24g
d2hlbiBHTCBkcml2ZXIgYnVnIG9uIE1hYyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyB3aGVuIGFs
cGhhIGlzIG9mZiwgcmVhZFBpeGVscyBzaG91bGQgc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9m
IDAuCkBAIC0zOTc1LDYgKzQxMDEsMTYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZv
cmNlUmVzdG9yZQogICAgIG1heWJlUmVzdG9yZUNvbnRleHQoU3ludGhldGljTG9zdENvbnRleHQp
OwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorUGxhdGZvcm1MYXllciog
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9y
bUxheWVyKCk7CisKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCk7Cit9Cisj
ZW5kaWYKKwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZU9iamVjdChXZWJHTE9i
amVjdCogb2JqZWN0KQogewogICAgIG1fY2FudmFzT2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKQEAg
LTQxNjYsMTQgKzQzMDIsMTQgQEAgaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZQogewogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0
V2lkdGgoKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLndpZHRoKCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZl
ci0+c2l6ZSgpLndpZHRoKCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCkud2lkdGgoKTsKIH0KIAogaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFt
ZWJ1ZmZlckhlaWdodCgpCiB7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJC
aW5kaW5nLT5nZXRIZWlnaHQoKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZy
YW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOworICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBt
X2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKIH0KIAogV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoR0MzRGVudW0gdGFyZ2V0LCBib29s
IHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKQEAgLTQ4NzksNiArNTAxNSwxMiBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
KyAgICAvLyBDb25zdHJ1Y3QgYSBuZXcgZHJhd2luZyBidWZmZXIgd2l0aCB0aGUgbmV3IEdyYXBo
aWNzQ29udGV4dDNELgorICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5kaXNjYXJkUmVzb3VyY2VzKCk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9
IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCksIG1fZHJhd2luZ0J1ZmZlci0+
c2l6ZSgpLCAhbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcik7CisgICAgfQorCiAg
ICAgbV9jb250ZXh0ID0gY29udGV4dDsKICAgICBtX2NvbnRleHRMb3N0ID0gZmFsc2U7CiAgICAg
aW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA5OTU5MykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFdlYkdMUmVuZGVyaW5nQ29udGV4dF9o
CiAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRHJhd2lu
Z0J1ZmZlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGbG9hdDMy
QXJyYXkuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgpAQCAtMjkyLDcgKzI5Myw3
IEBAIHB1YmxpYzoKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKTsgfQorICAgIHZpcnR1YWwg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCiAKICAgICB2b2lk
IHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKQEAgLTM1OCw2ICszNTksMTAgQEAgcHVi
bGljOgogCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiAKKyAgICAv
LyBPcHRpb25hbCBzdHJ1Y3R1cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGlu
c3RlYWQgb2YgZGlyZWN0bHkKKyAgICAvLyB0byB0aGUgYmFjay1idWZmZXIgb2YgbV9jb250ZXh0
LgorICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7CisKICAgICBjbGFz
cyBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXN0b3JlVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc3Rv
cmVUaW1lcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpIDogbV9jb250ZXh0KGNvbnRl
eHQpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDEyICs1Nyw2IEBAIHVpbnQ4X3QgY29udmVydENvbG9yMTZCaWdUbzgodWludDE2
X3QgdmEKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLQotUGFzc1JlZlB0cjxEcmF3aW5n
QnVmZmVyPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRHJhd2luZ0J1ZmZlcihjb25zdCBJbnRT
aXplJiBzaXplKQotewotICAgIHJldHVybiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUodGhpcywgc2l6
ZSk7Ci19Ci0KIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkRSZXNvdXJjZVNhZmUo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHVucGFja0FsaWdubWVudCkKIHsKICAg
ICBBU1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25tZW50ID09IDIgfHwg
dW5wYWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTUwMCw4ICs1MDAsNiBAQCBw
dWJsaWM6CiAjZW5kaWYKICAgICB2b2lkIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgUGFz
c1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGVEcmF3aW5nQnVmZmVyKGNvbnN0IEludFNpemUm
ID0gSW50U2l6ZSgpKTsKLSAgICAKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKENIUk9N
SVVNKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQogICAgIC8vIFdpdGggbXVsdGlz
YW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIgRkJPLgogICAg
IHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKQEAgLTc5MSw4ICs3ODksOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAgICAgYm9vbCBsYXllckNvbXBvc2l0ZWQoKSBj
b25zdDsKIAotICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCopOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCosIERyYXdpbmdCdWZmZXIqKTsKKyAgICBQYXNz
UmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2lu
Z0J1ZmZlciopOwogICAgIGJvb2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqKTsKIAogI2lmIFBMQVRGT1JNKFFUKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDEwIEBACiAKICNpbmNsdWRlICJEcmF3aW5n
QnVmZmVyLmgiCiAKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVk
ZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgorI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTQ4LDcgKzUxLDYgQEAgc3RhdGljIHVuc2lnbmVkIGdlbmVyYXRlQ29sb3JUZXh0dXJl
KEdyYQogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpOwogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwogICAgIGNvbnRleHQtPnRleEltYWdl
MkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAg
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBvZmZzY3JlZW5Db2xvclRleHR1cmUsIDApOwogCiAgICAgcmV0dXJu
IG9mZnNjcmVlbkNvbG9yVGV4dHVyZTsKIH0KQEAgLTU2LDQ2ICs1OCw3NCBAQCBzdGF0aWMgdW5z
aWduZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUoR3JhCiBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRTaXplJiBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKLSAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgIDogbV9zZXBhcmF0ZUJh
Y2tpbmdUZXh0dXJlKHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgLCBtX3NjaXNzb3JFbmFi
bGVkKGZhbHNlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3NpemUoLTEsIC0x
KQogICAgICwgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZChtdWx0aXNhbXBsZUV4dGVu
c2lvblN1cHBvcnRlZCkKICAgICAsIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9y
dGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKICAgICAsIG1fZmJvKDAp
CiAgICAgLCBtX2NvbG9yQnVmZmVyKDApCisgICAgLCBtX2JhY2tpbmdDb2xvckJ1ZmZlcigwKQog
ICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fZGVwdGhCdWZmZXIoMCkKICAg
ICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiB7Ci0gICAgbV9mYm8gPSBjb250ZXh0LT5jcmVh
dGVGcmFtZWJ1ZmZlcigpOwotICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBtX2NvbG9yQnVmZmVyID0gZ2VuZXJh
dGVDb2xvclRleHR1cmUoY29udGV4dCwgc2l6ZSk7Ci0gICAgY3JlYXRlU2Vjb25kYXJ5QnVmZmVy
cygpOwotICAgIGlmICghcmVzZXQoc2l6ZSkpIHsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW5pdGlhbGl6ZShzaXplKTsKIH0KIAogRHJh
d2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQogeworICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIp
CisgICAgICAgIG1fcGxhdGZvcm1MYXllci0+c2V0RHJhd2luZ0J1ZmZlcigwKTsKKwogICAgIGlm
ICghbV9jb250ZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICBjbGVhcigpOwogfQogCit2b2lk
IERyYXdpbmdCdWZmZXI6OmluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBt
X2ZibyA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKworICAgIGlmIChtX3NlcGFy
YXRlQmFja2luZ1RleHR1cmUpCisgICAgICAgIG1fYmFja2luZ0NvbG9yQnVmZmVyID0gZ2VuZXJh
dGVDb2xvclRleHR1cmUobV9jb250ZXh0LmdldCgpLCBzaXplKTsKKworICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwor
ICAgIG1fY29sb3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShtX2NvbnRleHQuZ2V0KCks
IHNpemUpOworICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyLCAwKTsKKyAgICBj
cmVhdGVTZWNvbmRhcnlCdWZmZXJzKCk7CisgICAgaWYgKCFyZXNldChzaXplKSkgeworICAgICAg
ICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRv
UGxhdGZvcm1MYXllcigpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVybjsK
IAorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG11bHRpc2Ft
cGxlKCkpCiAgICAgICAgIGNvbW1pdCgpOwotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisKKyAgICBpZiAobV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKSB7CisgICAgICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
bV9mYm8pOworICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBtX2JhY2tpbmdDb2xvckJ1ZmZlcik7CisgICAgICAgIHVuc2lnbmVkIGNv
bG9yRm9ybWF0ID0gbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFscGhhID8gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEgOiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOworICAgICAgICBt
X2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
LCBjb2xvckZvcm1hdCwgMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSwgMCk7
CisgICAgfQorCisgICAgaWYgKG11bHRpc2FtcGxlKCkpCisgICAgICAgIGJpbmQoKTsKKwogICAg
IG1fY29udGV4dC0+Zmx1c2goKTsKIH0KICNlbmRpZgpAQCAtMTAzLDEzICsxMzMsMzEgQEAgdm9p
ZCBEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9ybUxheQogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKIFBsYXRmb3JtTGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIoKQogewotICAgIHJldHVybiAwOworICAgIGlmICghbV9wbGF0Zm9ybUxheWVyKSB7CisgICAg
ICAgIG1fcGxhdGZvcm1MYXllciA9IFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAg
ICAgICBtX3BsYXRmb3JtTGF5ZXItPnNldERyYXdpbmdCdWZmZXIodGhpcyk7CisgICAgfQorCisg
ICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllci5nZXQoKTsKIH0KICNlbmRpZgogCiBQbGF0Zm9ybTNE
T2JqZWN0IERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtQ29sb3JCdWZmZXIoKSBjb25zdAogewotICAg
IHJldHVybiBtX2NvbG9yQnVmZmVyOworICAgIHJldHVybiBtX3NlcGFyYXRlQmFja2luZ1RleHR1
cmUgPyBtX2JhY2tpbmdDb2xvckJ1ZmZlciA6IG1fY29sb3JCdWZmZXI7CiB9CiAKK1BsYXRmb3Jt
M0RPYmplY3QgRHJhd2luZ0J1ZmZlcjo6ZnJhbWVidWZmZXIoKSBjb25zdAoreworICAgIHJldHVy
biBtX2ZibzsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgRHJh
d2luZ0J1ZmZlcjo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAgICAgICAg
bV9wbGF0Zm9ybUxheWVyLT5wYWludFJlbmRlcmVkUmVzdWx0c1RvQ2FudmFzKGNvbnRleHQtPmNh
bnZhcygpLT5idWZmZXIoKSk7Cit9CisjZW5kaWYKKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExh
eWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgog
CisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9t
aXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJl
bmRlcmVyQ2hyb21pdW0uaCIKQEAgLTQ4LDcgKzQ5LDYgQEAgUGFzc1JlZlB0cjxXZWJHTExheWVy
Q2hyb21pdW0+IFdlYkdMTGF5ZQogCiBXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJv
bWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDogQ2FudmFzTGF5ZXJDaHJvbWl1
bShkZWxlZ2F0ZSkKLSAgICAsIG1fY29udGV4dCgwKQogICAgICwgbV90ZXh0dXJlQ2hhbmdlZCh0
cnVlKQogICAgICwgbV90ZXh0dXJlVXBkYXRlZChmYWxzZSkKIHsKQEAgLTU2LDEzICs1NiwxMyBA
QCBXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1bShDCiAKIFdlYkdMTGF5ZXJD
aHJvbWl1bTo6fldlYkdMTGF5ZXJDaHJvbWl1bSgpCiB7Ci0gICAgaWYgKG1fY29udGV4dCAmJiBs
YXllclRyZWVIb3N0KCkpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RvcFJhdGVMaW1pdGVy
KG1fY29udGV4dCk7CisgICAgaWYgKGNvbnRleHQoKSAmJiBsYXllclRyZWVIb3N0KCkpCisgICAg
ICAgIGxheWVyVHJlZUhvc3QoKS0+c3RvcFJhdGVMaW1pdGVyKGNvbnRleHQoKSk7CiB9CiAKIGJv
b2wgV2ViR0xMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewotICAgIHJldHVy
biAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jl
c2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKKyAgICByZXR1
cm4gKGNvbnRleHQoKSAmJiBjb250ZXh0KCktPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NS
ZXNldFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUik7CiB9CiAKIHZv
aWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNz
Q29udGV4dDNEKiByZW5kZXJlckNvbnRleHQsIENDVGV4dHVyZVVwZGF0ZXImKQpAQCAtODUsMTEg
Kzg1LDkgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0bwogICAgIH0K
ICAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0dXJlIHVzZWQgYnkgdGhlIGNv
bXBvc2l0b3IuCiAgICAgaWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkgJiYgbV90ZXh0dXJlVXBk
YXRlZCkgewotICAgICAgICAvLyBwcmVwYXJlVGV4dHVyZSBjb3BpZXMgdGhlIGNvbnRlbnRzIG9m
IHRoZSBvZmYtc2NyZWVuIHJlbmRlciB0YXJnZXQgaW50byB0aGUgdGV4dHVyZQotICAgICAgICAv
LyB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgotICAgICAgICAvLwotICAgICAgICBtX2NvbnRleHQt
PnByZXBhcmVUZXh0dXJlKCk7Ci0gICAgICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRl
ZCgpOworICAgICAgICAvLyBwdWJsaXNoVG9QbGF0Zm9ybUxheWVyIHByZXBhcmVzIHRoZSBjb250
ZW50cyBvZiB0aGUgb2ZmLXNjcmVlbiByZW5kZXIgdGFyZ2V0IGZvciB1c2UgYnkgdGhlIGNvbXBv
c2l0b3IuCisgICAgICAgIGRyYXdpbmdCdWZmZXIoKS0+cHVibGlzaFRvUGxhdGZvcm1MYXllcigp
OworICAgICAgICBjb250ZXh0KCktPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKICAgICAgICAgbV91
cGRhdGVSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYm91bmRzKCkpOwogICAgICAgICBy
ZXNldE5lZWRzRGlzcGxheSgpOwogICAgICAgICBtX3RleHR1cmVVcGRhdGVkID0gZmFsc2U7CkBA
IC0xMDEsNyArOTksNyBAQCBib29sIFdlYkdMTGF5ZXJDaHJvbWl1bTo6cGFpbnRSZW5kZXJlZFJl
CiAgICAgaWYgKG1fdGV4dHVyZVVwZGF0ZWQgfHwgIWxheWVyUmVuZGVyZXJDb250ZXh0KCkgfHwg
IWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRTaXplIGZy
YW1lYnVmZmVyU2l6ZSA9IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsK
KyAgICBJbnRTaXplIGZyYW1lYnVmZmVyU2l6ZSA9IGNvbnRleHQoKS0+Z2V0SW50ZXJuYWxGcmFt
ZWJ1ZmZlclNpemUoKTsKICAgICBBU1NFUlQobGF5ZXJSZW5kZXJlckNvbnRleHQoKSk7CiAKICAg
ICAvLyBUaGlzIHdvdWxkIGlkZWFsbHkgYmUgZG9uZSBpbiB0aGUgd2ViZ2wgY29udGV4dCwgYnV0
IHRoYXQgaXNuJ3QgcG9zc2libGUgeWV0LgpAQCAtMTEwLDcgKzEwOCw3IEBAIGJvb2wgV2ViR0xM
YXllckNocm9taXVtOjpwYWludFJlbmRlcmVkUmUKICAgICBsYXllclJlbmRlcmVyQ29udGV4dCgp
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1fdGV4dHVyZUlkLCAwKTsKIAogICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBl
eHRlbnNpb25zID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihsYXllclJlbmRl
cmVyQ29udGV4dCgpLT5nZXRFeHRlbnNpb25zKCkpOwotICAgIGV4dGVuc2lvbnMtPnBhaW50RnJh
bWVidWZmZXJUb0NhbnZhcyhmcmFtZWJ1ZmZlciwgZnJhbWVidWZmZXJTaXplLndpZHRoKCksIGZy
YW1lYnVmZmVyU2l6ZS5oZWlnaHQoKSwgIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KS5wcmVtdWx0aXBsaWVkQWxwaGEsIGltYWdlQnVmZmVyKTsKKyAgICBleHRlbnNpb25zLT5wYWlu
dEZyYW1lYnVmZmVyVG9DYW52YXMoZnJhbWVidWZmZXIsIGZyYW1lYnVmZmVyU2l6ZS53aWR0aCgp
LCBmcmFtZWJ1ZmZlclNpemUuaGVpZ2h0KCksICFjb250ZXh0KCktPmdldENvbnRleHRBdHRyaWJ1
dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CiAgICAgbGF5ZXJSZW5kZXJl
ckNvbnRleHQoKS0+ZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtMTIxLDMyICsxMTksMzkgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OmNv
bnRlbnRDaGFuZ2VkKAogICAgIC8vIElmIFdlYkdMIGNvbW1hbmRzIGFyZSBpc3N1ZWQgb3V0c2lk
ZSBvZiBhIHRoZSBhbmltYXRpb24gY2FsbGJhY2tzLCB0aGVuIHVzZQogICAgIC8vIGNhbGwgcmF0
ZUxpbWl0T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVNKCkgdG8ga2VlcCB0aGUgY29udGV4dCBmcm9t
IGdldHRpbmcgdG9vIGZhciBhaGVhZC4KICAgICBpZiAobGF5ZXJUcmVlSG9zdCgpKQotICAgICAg
ICBsYXllclRyZWVIb3N0KCktPnN0YXJ0UmF0ZUxpbWl0ZXIobV9jb250ZXh0KTsKKyAgICAgICAg
bGF5ZXJUcmVlSG9zdCgpLT5zdGFydFJhdGVMaW1pdGVyKGNvbnRleHQoKSk7CiB9CiAKLXZvaWQg
V2ViR0xMYXllckNocm9taXVtOjpzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KQordm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIoRHJhd2lu
Z0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKLSAgICBib29sIGNvbnRleHRDaGFuZ2VkID0gKG1f
Y29udGV4dCAhPSBjb250ZXh0KTsKKyAgICBib29sIGRyYXdpbmdCdWZmZXJDaGFuZ2VkID0gKG1f
ZHJhd2luZ0J1ZmZlciAhPSBkcmF3aW5nQnVmZmVyKTsKKyAgICBtX2RyYXdpbmdCdWZmZXIgPSBk
cmF3aW5nQnVmZmVyOwogCi0gICAgaWYgKGxheWVyVHJlZUhvc3QoKSAmJiBjb250ZXh0Q2hhbmdl
ZCkKLSAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdG9wUmF0ZUxpbWl0ZXIobV9jb250ZXh0KTsK
KyAgICBpZiAobGF5ZXJUcmVlSG9zdCgpICYmIGRyYXdpbmdCdWZmZXJDaGFuZ2VkKQorICAgICAg
ICBsYXllclRyZWVIb3N0KCktPnN0b3BSYXRlTGltaXRlcihjb250ZXh0KCkpOwogCi0gICAgbV9j
b250ZXh0ID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHQzRCo+KGNvbnRleHQpOwotCi0gICAg
aWYgKCFtX2NvbnRleHQpCisgICAgaWYgKCFtX2RyYXdpbmdCdWZmZXIpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlSWQgPSBtX2NvbnRleHQtPnBsYXRmb3JtVGV4
dHVyZSgpOwotICAgIGlmICh0ZXh0dXJlSWQgIT0gbV90ZXh0dXJlSWQgfHwgY29udGV4dENoYW5n
ZWQpIHsKKyAgICB1bnNpZ25lZCBpbnQgdGV4dHVyZUlkID0gbV9kcmF3aW5nQnVmZmVyLT5wbGF0
Zm9ybUNvbG9yQnVmZmVyKCk7CisgICAgaWYgKHRleHR1cmVJZCAhPSBtX3RleHR1cmVJZCB8fCBk
cmF3aW5nQnVmZmVyQ2hhbmdlZCkgewogICAgICAgICBtX3RleHR1cmVDaGFuZ2VkID0gdHJ1ZTsK
ICAgICAgICAgbV90ZXh0dXJlVXBkYXRlZCA9IHRydWU7CiAgICAgfQogICAgIG1fdGV4dHVyZUlk
ID0gdGV4dHVyZUlkOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMgPSBtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisgICAgR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGNvbnRleHQoKS0+Z2V0Q29udGV4dEF0dHJp
YnV0ZXMoKTsKICAgICBtX2hhc0FscGhhID0gYXR0cmlidXRlcy5hbHBoYTsKICAgICBtX3ByZW11
bHRpcGxpZWRBbHBoYSA9IGF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhOwogfQogCitHcmFw
aGljc0NvbnRleHQzRCogV2ViR0xMYXllckNocm9taXVtOjpjb250ZXh0KCkgY29uc3QKK3sKKyAg
ICBpZiAoZHJhd2luZ0J1ZmZlcigpKQorICAgICAgICByZXR1cm4gZHJhd2luZ0J1ZmZlcigpLT5n
cmFwaGljc0NvbnRleHQzRCgpLmdldCgpOworCisgICAgcmV0dXJuIDA7Cit9CisKIEdyYXBoaWNz
Q29udGV4dDNEKiBXZWJHTExheWVyQ2hyb21pdW06OmxheWVyUmVuZGVyZXJDb250ZXh0KCkKIHsK
ICAgICAvLyBGSVhNRTogSW4gdGhlIHRocmVhZGVkIGNhc2UsIHBhaW50UmVuZGVyZWRSZXN1bHRz
VG9DYW52YXMgbXVzdCBiZQpAQCAtMTU3LDQgKzE2Miw1IEBAIEdyYXBoaWNzQ29udGV4dDNEKiBX
ZWJHTExheWVyQ2hyb21pdW06OmwKIH0KIAogfQorCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgJKHJldmlzaW9u
IDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJDYW52YXNMYXllckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTUzLDIxICs1NCwyMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRD
aGFuZ2VkKCk7CiAgICAgYm9vbCBwYWludFJlbmRlcmVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVm
ZmVyKik7CiAKLSAgICB2b2lkIHNldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250
ZXh0OyB9CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSBjb25zdDsKIAorICAgIHZv
aWQgc2V0RHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVyKik7CisgICAgRHJhd2luZ0J1ZmZlciog
ZHJhd2luZ0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlcjsgfQogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBXZWJHTExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKik7CiAg
ICAgZnJpZW5kIGNsYXNzIFdlYkdMTGF5ZXJDaHJvbWl1bVJhdGVMaW1pdFRhc2s7CiAKICAgICBH
cmFwaGljc0NvbnRleHQzRCogbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKIAotICAgIC8vIEdyYXBo
aWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyIGhhcyBhIHNpZGUtZWZmZWN0IG9mIGFzc2lnbmlu
ZyBpdHNlbGYKLSAgICAvLyB0byB0aGUgbGF5ZXIuIEJlY2F1c2Ugb2YgdGhhdCBHcmFwaGljc0Nv
bnRleHQzRCdzIGRlc3RydWN0b3Igd2lsbCByZXNldAotICAgIC8vIGxheWVyJ3MgY29udGV4dCB0
byAwLgotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAgICAgYm9vbCBtX3RleHR1
cmVDaGFuZ2VkOwogICAgIGJvb2wgbV90ZXh0dXJlVXBkYXRlZDsKKworICAgIC8vIFRoZSBEcmF3
aW5nQnVmZmVyIGhvbGRpbmcgdGhlIFdlYkdMIGNvbnRlbnRzIGZvciB0aGlzIGxheWVyLgorICAg
IC8vIEEgcmVmZXJlbmNlIGlzIG5vdCBoZWxkIGhlcmUsIGJlY2F1c2UgdGhlIERyYXdpbmdCdWZm
ZXIgYWxyZWFkeSBob2xkcworICAgIC8vIGEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTExheWVyQ2hy
b21pdW0uCisgICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3aW5nQnVmZmVyOwogfTsKIAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNE
RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcyNiwxMyArNzI2LDE3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmxheWVyQ29tcG9zaXRlZCgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVm
ZmVyKiBkcmF3aW5nQnVmZmVyKQogeworICAgIC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5
IGltcGxlbWVudGVkIGluIENocm9taXVtIHBvcnRzLgorICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZl
cik7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdy
YXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitQYXNz
UmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CisgICAgLy8gRHJh
d2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0gcG9ydHMuCisg
ICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIFJl
ZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUoMSwg
MSkpOwogICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAko
cmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
RHJhd2luZ0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNs
dWRlICJEcmF3aW5nQnVmZmVyLmgiCiAKICNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ4LDcgKzUwLDcgQEAgc3RhdGljIGludCBzX21heGltdW1S
ZXNvdXJjZVVzZVBpeGVscyA9CiAjZW5kaWYKIHN0YXRpYyBpbnQgc19jdXJyZW50UmVzb3VyY2VV
c2VQaXhlbHMgPSAwOwogCi1QYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IERyYXdpbmdCdWZmZXI6
OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K1Bhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHNlcGFyYXRlQmFj
a2luZ1RleHR1cmUpCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpOwogICAgIGJvb2wgbXVsdGlzYW1wbGVTdXBwb3J0ZWQgPSBleHRlbnNp
b25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpICYmIGV4dGVuc2lvbnMt
PnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpICYmIGV4dGVuc2lv
bnMtPnN1cHBvcnRzKCJHTF9PRVNfcmdiOF9yZ2JhOCIpOwpAQCAtNjAsNyArNjIsNyBAQCBQYXNz
UmVmUHRyPERyYXdpbmdCdWZmZXI+IERyYXdpbmdCdWZmZXI6CiAgICAgYm9vbCBwYWNrZWREZXB0
aFN0ZW5jaWxTdXBwb3J0ZWQgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfT0VTX3BhY2tlZF9k
ZXB0aF9zdGVuY2lsIik7CiAgICAgaWYgKHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCkKICAg
ICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVu
Y2lsIik7Ci0gICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IGRyYXdpbmdCdWZmZXIgPSBhZG9wdFJl
ZihuZXcgRHJhd2luZ0J1ZmZlcihjb250ZXh0LCBzaXplLCBtdWx0aXNhbXBsZVN1cHBvcnRlZCwg
cGFja2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVkKSk7CisgICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+
IGRyYXdpbmdCdWZmZXIgPSBhZG9wdFJlZihuZXcgRHJhd2luZ0J1ZmZlcihjb250ZXh0LCBzaXpl
LCBtdWx0aXNhbXBsZVN1cHBvcnRlZCwgcGFja2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVkLCBzZXBh
cmF0ZUJhY2tpbmdUZXh0dXJlKSk7CiAgICAgcmV0dXJuIChkcmF3aW5nQnVmZmVyLT5tX2NvbnRl
eHQpID8gZHJhd2luZ0J1ZmZlci5yZWxlYXNlKCkgOiAwOwogfQogCkBAIC03OCw2ICs4MCwxMSBA
QCB2b2lkIERyYXdpbmdCdWZmZXI6OmNsZWFyKCkKICAgICAgICAgbV9jb2xvckJ1ZmZlciA9IDA7
CiAgICAgfQogCisgICAgaWYgKG1fYmFja2luZ0NvbG9yQnVmZmVyKSB7CisgICAgICAgIG1fY29u
dGV4dC0+ZGVsZXRlVGV4dHVyZShtX2JhY2tpbmdDb2xvckJ1ZmZlcik7CisgICAgICAgIG1fYmFj
a2luZ0NvbG9yQnVmZmVyID0gMDsKKyAgICB9CisKICAgICBpZiAobV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyKSB7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fbXVsdGlz
YW1wbGVDb2xvckJ1ZmZlcik7CiAgICAgICAgIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlciA9IDA7
CkBAIC0xNjYsNyArMTczLDcgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpjbGVhckZyYW1lYnVmZmVy
KCkKICAgICB1bnNpZ25lZCBjaGFyIGRlcHRoTWFzayA9IGZhbHNlOwogICAgIHVuc2lnbmVkIGlu
dCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmY7CiAgICAgdW5zaWduZWQgY2hhciBpc1NjaXNzb3JF
bmFibGVkID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbG9uZyBjbGVhck1hc2sgPSBHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICB1bnNpZ25lZCBjbGVhck1hc2sgPSBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsKICAgICBpZiAoYXR0cmlidXRlcy5kZXB0
aCkgewogICAgICAgICBtX2NvbnRleHQtPmdldEZsb2F0dihHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRl
cHRoKDEpOwpAQCAtMTg4LDYgKzE5NSwxNCBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OmNsZWFyRnJh
bWVidWZmZXIoKQogICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7CiAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9y
KDAsIDAsIDAsIDApOwogICAgIG1fY29udGV4dC0+Y2xlYXIoY2xlYXJNYXNrKTsKKworICAgIC8v
IFRoZSBtdWx0aXNhbXBsZSBmYm8gd2FzIGp1c3QgY2xlYXJlZCwgYnV0IHdlIGFsc28gbmVlZCB0
byBjbGVhciB0aGUgbm9uLW11bHRpc2FtcGxlZCBidWZmZXIgdG9vLgorICAgIGlmIChtX211bHRp
c2FtcGxlRkJPKSB7CisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBtX2NvbnRleHQtPmNsZWFy
KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKKyAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRp
c2FtcGxlRkJPKTsKKyAgICB9CisKICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoY2xlYXJDb2xv
clswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7CiAKICAg
ICBpZiAoYXR0cmlidXRlcy5kZXB0aCkgewpAQCAtMjMzLDcgKzI0OCw3IEBAIGJvb2wgRHJhd2lu
Z0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICBpZiAobmV3U2l6ZSAhPSBtX3NpemUp
IHsKICAgICAgICAgbV9zaXplID0gbmV3U2l6ZTsKIAotICAgICAgICB1bnNpZ25lZCBsb25nIGlu
dGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0LCBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZvcm1h
dDsKKyAgICAgICAgdW5zaWduZWQgaW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGlu
dGVybmFsUmVuZGVyYnVmZmVyRm9ybWF0OwogICAgICAgICBpZiAoYXR0cmlidXRlcy5hbHBoYSkg
ewogICAgICAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOwogICAgICAgICAgICAgY29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsK
QEAgLTI1MCw3ICsyNjUsNyBAQCBib29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNp
emUmCiAgICAgICAgICAgICBpbnQgbWF4U2FtcGxlQ291bnQgPSAwOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NBTVBM
RVMsICZtYXhTYW1wbGVDb3VudCk7Ci0gICAgICAgICAgICBpbnQgc2FtcGxlQ291bnQgPSBzdGQ6
Om1pbig4LCBtYXhTYW1wbGVDb3VudCk7CisgICAgICAgICAgICBpbnQgc2FtcGxlQ291bnQgPSBz
dGQ6Om1pbig0LCBtYXhTYW1wbGVDb3VudCk7CiAKICAgICAgICAgICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBs
ZUZCTyk7CiAKQEAgLTI2OSwxMCArMjg0LDE2IEBAIGJvb2wgRHJhd2luZ0J1ZmZlcjo6cmVzZXQo
Y29uc3QgSW50U2l6ZSYKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAKICAgICAgICAgbV9jb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7
Ci0gICAgICAgIAogICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBt
X3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgMCk7CiAKICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIs
IDApOworCisgICAgICAgIC8vIHJlc2l6ZSB0aGUgYmFja2luZyBjb2xvciBidWZmZXIKKyAgICAg
ICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkgeworICAgICAgICAgICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9iYWNraW5nQ29s
b3JCdWZmZXIpOworICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIDApOworICAgICAgICB9CisKICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CiAKICAgICAgICAgaWYgKCFt
dWx0aXNhbXBsZSgpKQpAQCAtMjkzLDIzICszMTQsNTYgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpj
b21taXQobG9uZyB4LCBsb25nCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgCisKICAgICBpZiAod2lkdGggPCAwKQogICAgICAgICB3aWR0aCA9IG1fc2l6
ZS53aWR0aCgpOwogICAgIGlmIChoZWlnaHQgPCAwKQogICAgICAgICBoZWlnaHQgPSBtX3NpemUu
aGVpZ2h0KCk7Ci0gICAgICAgIAorCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICAKKwogICAgIGlmIChtX211bHRpc2FtcGxlRkJPKSB7CiAgICAgICAgIG1fY29udGV4
dC0+YmluZEZyYW1lYnVmZmVyKEV4dGVuc2lvbnMzRDo6UkVBRF9GUkFNRUJVRkZFUiwgbV9tdWx0
aXNhbXBsZUZCTyk7CiAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEV4dGVuc2lv
bnMzRDo6RFJBV19GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+YmxpdEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklULCBHcmFwaGlj
c0NvbnRleHQzRDo6TElORUFSKTsKKworICAgICAgICBpZiAobV9zY2lzc29yRW5hYmxlZCkKKyAg
ICAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKTsKKworICAgICAgICAvLyBVc2UgTkVBUkVTVCwgYmVjYXVzZSB0aGVyZSBpcyBubyBzY2Fs
ZSBwZXJmb3JtZWQgZHVyaW5nIHRoZSBibGl0LgorICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+YmxpdEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklULCBHcmFwaGljc0Nv
bnRleHQzRDo6TkVBUkVTVCk7CisKKyAgICAgICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCisgICAg
ICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KTsKICAgICB9Ci0gICAgCisKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKIH0KIAorYm9vbCBEcmF3aW5nQnVmZmVy
OjptdWx0aXNhbXBsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRl
eHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVFeHRl
bnNpb25TdXBwb3J0ZWQ7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBEcmF3aW5nQnVmZmVy
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgcmV0dXJuIG1fY29u
dGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEodGhpcyk7Cit9CisKK3ZvaWQg
RHJhd2luZ0J1ZmZlcjo6ZGlzY2FyZFJlc291cmNlcygpCit7CisgICAgbV9jb2xvckJ1ZmZlciA9
IDA7CisgICAgbV9iYWNraW5nQ29sb3JCdWZmZXIgPSAwOworICAgIG1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlciA9IDA7CisKKyAgICBtX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IDA7CisgICAgbV9kZXB0
aEJ1ZmZlciA9IDA7CisKKyAgICBtX3N0ZW5jaWxCdWZmZXIgPSAwOworCisgICAgbV9tdWx0aXNh
bXBsZUZCTyA9IDA7CisgICAgbV9mYm8gPSAwOworfQorCiB2b2lkIERyYXdpbmdCdWZmZXI6OmJp
bmQoKQogewogICAgIGlmICghbV9jb250ZXh0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCShyZXZpc2lvbiA5OTU5
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzVHlwZXMzRC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIAogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgpAQCAtNDMsMTUgKzQ0LDE4IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLWNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bTsKK2NsYXNzIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEltYWdlRGF0YTsKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKK2NsYXNzIFdlYkdMTGF5ZXJDaHJvbWl1bTsKICNlbmRpZgog
CiAvLyBNYW5hZ2VzIGEgcmVuZGVyaW5nIHRhcmdldCAoZnJhbWVidWZmZXIgKyBhdHRhY2htZW50
KSBmb3IgYSBjYW52YXMuICBDYW4gcHVibGlzaCBpdHMgcmVuZGVyaW5nCiAvLyByZXN1bHRzIHRv
IGEgUGxhdGZvcm1MYXllciBmb3IgY29tcG9zaXRpbmcuCiBjbGFzcyBEcmF3aW5nQnVmZmVyIDog
cHVibGljIFJlZkNvdW50ZWQ8RHJhd2luZ0J1ZmZlcj4gewogcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0
IEludFNpemUmLCBib29sKTsKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAK
ICAgICB+RHJhd2luZ0J1ZmZlcigpOwpAQCAtNzUsMjIgKzc5LDM5IEBAIHB1YmxpYzoKIAogICAg
IC8vIENvcGllcyB0aGUgbXVsdGlzYW1wbGUgY29sb3IgYnVmZmVyIHRvIHRoZSBub3JtYWwgY29s
b3IgYnVmZmVyIGFuZCBsZWF2ZXMgbV9mYm8gYm91bmQKICAgICB2b2lkIGNvbW1pdChsb25nIHgg
PSAwLCBsb25nIHkgPSAwLCBsb25nIHdpZHRoID0gLTEsIGxvbmcgaGVpZ2h0ID0gLTEpOwotICAg
IAotICAgIGJvb2wgbXVsdGlzYW1wbGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQgJiYgbV9j
b250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyAmJiBtX211bHRpc2FtcGxl
RXh0ZW5zaW9uU3VwcG9ydGVkOyB9Ci0gICAgCisKKyAgICAvLyBjb21taXQgc2hvdWxkIGNvcHkg
dGhlIGZ1bGwgbXVsdGlzYW1wbGUgYnVmZmVyLCBhbmQgbm90IHJlc3BlY3QgdGhlCisgICAgLy8g
Y3VycmVudCBzY2lzc29yIGJvdW5kcy4gVHJhY2sgdGhlIHN0YXRlIG9mIHRoZSBzY2lzc29yIHRl
c3Qgc28gdGhhdCBpdAorICAgIC8vIGNhbiBiZSBkaXNhYmxlZCBkdXJpbmcgY2FsbHMgdG8gY29t
bWl0LgorICAgIHZvaWQgc2V0U2Npc3NvckVuYWJsZWQoYm9vbCBzY2lzc29yRW5hYmxlZCkgeyBt
X3NjaXNzb3JFbmFibGVkID0gc2Npc3NvckVuYWJsZWQ7IH0KKworICAgIGJvb2wgbXVsdGlzYW1w
bGUoKSBjb25zdDsKKwogICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1Db2xvckJ1ZmZlcigp
IGNvbnN0OworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIoKSBjb25zdDsKKworICAg
IFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgp
OwogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIEltbWVkaWF0ZWx5
IHJlbGVhc2VzIG93bmVyc2hpcCBvZiBhbGwgcmVzb3VyY2VzLiBDYWxsIHVwb24gbG9zcyBvZiB0
aGUKKyAgICAvLyBncmFwaGljcyBjb250ZXh0IHRvIHByZXZlbnQgZnJlZWluZyBpbnZhbGlkIHJl
c291cmNlcy4KKyAgICB2b2lkIGRpc2NhcmRSZXNvdXJjZXMoKTsKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpOwogICAgIHZvaWQgcHVibGlzaFRvUGxhdGZvcm1MYXllcigpOwor
ICAgIHZvaWQgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqKTsKICNlbmRpZgogCiAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gZ3Jh
cGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAogcHJpdmF0ZToK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGUoR3JhcGhpY3NDb250
ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7Ci0gICAgCi0gICAgRHJhd2luZ0J1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3Vw
cG9ydGVkLCBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCk7CisgICAg
RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29sIG11
bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAgYm9vbCBwYWNr
ZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4
dHVyZSk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYpOworCisgICAgYm9v
bCBtX3NlcGFyYXRlQmFja2luZ1RleHR1cmU7CisgICAgYm9vbCBtX3NjaXNzb3JFbmFibGVkOwog
CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiAgICAgSW50U2l6ZSBt
X3NpemU7CkBAIC05OCw2ICsxMTksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQ7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsK
ICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fY29sb3JCdWZmZXI7CisgICAgUGxhdGZvcm0zRE9iamVj
dCBtX2JhY2tpbmdDb2xvckJ1ZmZlcjsKIAogICAgIC8vIFRoaXMgaXMgdXNlZCB3aGVuIHdlIGhh
dmUgT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsLgogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9kZXB0
aFN0ZW5jaWxCdWZmZXI7CkBAIC0xMTAsNiArMTMyLDEwIEBAIHByaXZhdGU6CiAgICAgUGxhdGZv
cm0zRE9iamVjdCBtX211bHRpc2FtcGxlRkJPOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyOwogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgUmVmUHRy
PFdlYkdMTGF5ZXJDaHJvbWl1bT4gbV9wbGF0Zm9ybUxheWVyOworI2VuZGlmCisKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fcGxhdGZvcm1MYXllcjsKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3
aW5nQnVmZmVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQkocmV2aXNpb24gOTk1OTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2ls
RXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9y
dGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlQmFja2luZ1Rl
eHR1cmUpCisgICAgOiBtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUoc2VwYXJhdGVCYWNraW5nVGV4
dHVyZSkKKyAgICAsIG1fc2Npc3NvckVuYWJsZWQoZmFsc2UpCisgICAgLCBtX2NvbnRleHQoY29u
dGV4dCkKICAgICAsIG1fc2l6ZSgtMSwgLTEpCiAgICAgLCBtX211bHRpc2FtcGxlRXh0ZW5zaW9u
U3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9wYWNrZWRE
ZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9u
U3VwcG9ydGVkKQpAQCAtNTIsNiArNTUsOSBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVy
KEdyYXBoaWNzQ29uCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2Ft
cGxlQ29sb3JCdWZmZXIoMCkKIHsKKyAgICAvLyBTdXBwb3J0IGZvciBhIHNlcGFyYXRlIGJhY2tp
bmcgdGV4dHVyZSBoYXMgb25seSBiZWVuIGVuYWJsZWQgZm9yCisgICAgLy8gdGhlIGNocm9taXVt
IHBvcnQuCisgICAgQVNTRVJUKCFtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUpOwogICAgIEFTU0VS
VChtX2Zibyk7CiAgICAgaWYgKCFtX2ZibykgewogICAgICAgICBjbGVhcigpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L3F0L0RyYXdpbmdCdWZmZXJRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L3F0L0Ry
YXdpbmdCdWZmZXJRdC5jcHAJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L3F0L0RyYXdpbmdCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDggKzM0LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIERyYXdpbmdCdWZmZXI6OkRy
YXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVk
KQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgOiBtX3Nl
cGFyYXRlQmFja2luZ1RleHR1cmUoc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICAsIG1fc2Np
c3NvckVuYWJsZWQoZmFsc2UpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2l6
ZSgtMSwgLTEpCiAgICAgLCBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2Ft
cGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNp
b25TdXBwb3J0ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQpAQCAtNDcs
NiArNTAsOSBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29uCiAgICAg
LCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkK
IHsKKyAgICAvLyBTdXBwb3J0IGZvciBhIHNlcGFyYXRlIGJhY2tpbmcgdGV4dHVyZSBoYXMgb25s
eSBiZWVuIGVuYWJsZWQgZm9yCisgICAgLy8gdGhlIGNocm9taXVtIHBvcnQuCisgICAgQVNTRVJU
KCFtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUpOwogICAgIEFTU0VSVChtX2Zibyk7CiAgICAgaWYg
KCFtX2ZibykgewogICAgICAgICBjbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOCw4ICsxMjgsMTAgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNSZXNv
dXJjZVNhZmUoKQogfQogCiAjaWYgIVBMQVRGT1JNKFFUKQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRy
YXdpbmdCdWZmZXIpCiB7CisgICAgLy8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVt
ZW50ZWQgaW4gQ2hyb21pdW0gcG9ydHMuCisgICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKICAg
ICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CiAgICAgSW1h
Z2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKIApAQCAtMTYyLDggKzE2
NCwxMCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludENvbXBvc2l0ZWRSCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJh
d2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBv
cnQgb25seSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4KKyAgICBBU1NFUlQoIWRyYXdp
bmdCdWZmZXIpOwogICAgIC8vIFJlYWRpbmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3b3VsZCBpbnZv
bHZlIHVucHJlbXVsdGlwbHlpbmcsIHdoaWNoIGlzCiAgICAgLy8gbG9zc3kKICAgICBpZiAobV9h
dHRycy5wcmVtdWx0aXBsaWVkQWxwaGEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkocmV2
aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDggKzQyMCwxMCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlCiAgICAgbV9wcml2YXRlLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2lu
Z0J1ZmZlcikKIHsKKyAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRl
ZCBpbiBDaHJvbWl1bSBwb3J0cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIpOwogICAgIG1f
cHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBIVE1MQ2FudmFzRWxlbWVu
dCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVm
ZmVyID0gY2FudmFzLT5idWZmZXIoKTsKQEAgLTQzMCw4ICs0MzIsMTAgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZQogfQogCiAjaWYgZGVmaW5lZChRVF9PUEVOR0xf
RVNfMikKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNz
Q29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVy
KiBkcmF3aW5nQnVmZmVyKQogeworICAgIC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGlt
cGxlbWVudGVkIGluIENocm9taXVtIHBvcnRzLgorICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7
CiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgZm9yIHByb3BlciBu
b24tcHJlbXVsdGlwbGllZC1hbHBoYQogICAgIC8vIHN1cHBvcnQuCiAgICAgcmV0dXJuIDA7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTk1OTcpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDExLTExLTA4ICBKZWZmIFRpbWFudXMgIDx0d2l6QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbY2hyb21pdW1dIFBhdGNoIHRoYXQgaW1wbGVtZW50aW5nIHRoZSBjaGFuZ2VzIHJlcXVpcmVk
IHRvIGFsbG93IFdlYkdMCisgICAgICAgIHRvIHNoYXJlIGl0cyBiYWNraW5nIHN0b3JlIGRpcmVj
dGx5IHdpdGggdGhlIGNvbXBvc2l0b3IuCisgICAgICAgIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0
cyBjcmVhdGUgYW5kIHJlbmRlciB0byBGQk9zIG1hbmFnZWQgYnkgYQorICAgICAgICBEcmF3aW5n
QnVmZmVyIGluc3RhbmNlLiBBbGwgUGxhdGZvcm1MYXllciBsaWZldGltZSBtYW5hZ2VtZW50IGlz
CisgICAgICAgIHBlcmZvcm1lZCBieSB0aGUgRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgQ2hhbmdl
cyBhcmUgb25seSByZWxldmFudCB0byBDaHJvbWl1bSBwb3J0cy4gRnVuY3Rpb25hbGl0eSBpcwor
ICAgICAgICB1bmNoYW5nZWQgZm9yIG90aGVyIHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyMDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVt
LmNwcDogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIG5vIGxvbmdlciBjYWNoZXMKKyAgICAgICAg
dGhlIFdlYkdMTGF5ZXJDaHJvbWl1bSBpbnN0YW5jZS4gIEluc3RlYWQsIGl0IGlzIGFjY2Vzc2Vk
IHZpYSBEcmF3aW5nQnVmZmVyIGluc3RhbmNlcworICAgICAgICBwYXNzZWQgYXMgYXJndW1lbnRz
IHRvIHRoZSBuZWNlc3Nhcnkgcm91dGluZXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhKToKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmg6CisKIDIwMTEt
MTEtMDggIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
V2ViIEluc3BlY3RvcjogZGlzcGxheSBub3RpZmljYXRpb24gaW4gdGhlIGZyb250LWVuZCB3aGVu
IGluc3BlY3RlZCB3b3JrZXIgdGVybWluYXRlcwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDk5NTkzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0
M0RDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICszNSwxMCBAQAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2lu
Y2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBs
LmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENo
cm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKQEAgLTE2Myw2ICsxNjMsMjAgQEAgUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY3JlYXRlR3JhcAogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KHdlYkNvbnRleHQu
cmVsZWFzZSgpLCBhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUsIHRocmVhZFVzYWdlKTsK
IH0KIAordm9pZCBnZXREcmF3aW5nUGFyYW1ldGVycyhEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVm
ZmVyLCBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCogZnJhbWVCdWZmZXJJZCwg
aW50KiB3aWR0aCwgaW50KiBoZWlnaHQpCit7CisgICAgaWYgKGRyYXdpbmdCdWZmZXIpIHsKKyAg
ICAgICAgKmZyYW1lQnVmZmVySWQgPSBkcmF3aW5nQnVmZmVyLT5mcmFtZWJ1ZmZlcigpOworICAg
ICAgICAqd2lkdGggPSBkcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKKyAgICAgICAgKmhl
aWdodCA9IGRyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAqZnJhbWVCdWZmZXJJZCA9IDA7CisgICAgICAgICp3aWR0aCA9IGdyYXBoaWNzQ29udGV4
dDNELT53aWR0aCgpOworICAgICAgICAqaGVpZ2h0ID0gZ3JhcGhpY3NDb250ZXh0M0QtPmhlaWdo
dCgpOworICAgIH0KK30KKwogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0Rm9yQW5vdGhlclRocmVhZChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0
eWxlIHJlbmRlclN0eWxlKQpAQCAtMjEyLDE3ICsyMjYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6cHJlcGFyZVRlCiAgICAgbV9pbXBsLT5wcmVwYXJlVGV4dHVyZSgpOwogfQog
Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotV2ViR0xMYXllckNocm9taXVtKiBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtTGF5ZXIoKQotewotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAoIW1fY29tcG9zaXRpbmdMYXllcikKLSAgICAg
ICAgbV9jb21wb3NpdGluZ0xheWVyID0gV2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUoMCk7Ci0j
ZW5kaWYKLSAgICByZXR1cm4gbV9jb21wb3NpdGluZ0xheWVyLmdldCgpOwotfQotI2VuZGlmCi0K
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYXJrQ29udGV4dENoYW5nZWQoKQogewog
ICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gZmFsc2U7CkBAIC0zMDUsMzEgKzMwOCwzNCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRGcmFtCiAjZW5kaWYKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKICAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXIgPSBjb250ZXh0LT5jYW52YXMoKS0+YnVmZmVyKCk7Ci0gICAgcGFp
bnRGcmFtZWJ1ZmZlclRvQ2FudmFzKDAsIG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQo
KSwgIW1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEsIGlt
YWdlQnVmZmVyKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVySWQ7CisgICAgaW50
IHdpZHRoLCBoZWlnaHQ7CisgICAgZ2V0RHJhd2luZ1BhcmFtZXRlcnMoZHJhd2luZ0J1ZmZlciwg
bV9pbXBsLmdldCgpLCAmZnJhbWVidWZmZXJJZCwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBwYWlu
dEZyYW1lYnVmZmVyVG9DYW52YXMoZnJhbWVidWZmZXJJZCwgd2lkdGgsIGhlaWdodCwgIW1faW1w
bC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEsIGltYWdlQnVmZmVy
KTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50Q29tcG9zaXRlZFJl
c3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAocGxhdGZvcm1MYXllcigpKQotICAg
ICAgICByZXR1cm4gcGxhdGZvcm1MYXllcigpLT5wYWludFJlbmRlcmVkUmVzdWx0c1RvQ2FudmFz
KGNvbnRleHQtPmNhbnZhcygpLT5idWZmZXIoKSk7Ci0jZW5kaWYKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CiAgICAgaWYgKG1faW1wbC0+Z2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIAotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRl
KEludFNpemUobV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgpKSk7CisKKyAgICBQbGF0
Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVySWQ7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAg
Z2V0RHJhd2luZ1BhcmFtZXRlcnMoZHJhd2luZ0J1ZmZlciwgbV9pbXBsLmdldCgpLCAmZnJhbWVi
dWZmZXJJZCwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdl
RGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUod2lkdGgsIGhlaWdodCkpOwogICAgIHVu
c2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsK
LSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDQgKiBtX2ltcGwtPndpZHRoKCkgKiBtX2ltcGwtPmhl
aWdodCgpOworICAgIHNpemVfdCBidWZmZXJTaXplID0gNCAqIHdpZHRoICogaGVpZ2h0OwogCi0g
ICAgbV9pbXBsLT5yZWFkQmFja0ZyYW1lYnVmZmVyKHBpeGVscywgYnVmZmVyU2l6ZSwgMCwgbV9p
bXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgpKTsKKyAgICBtX2ltcGwtPnJlYWRCYWNrRnJh
bWVidWZmZXIocGl4ZWxzLCBidWZmZXJTaXplLCBmcmFtZWJ1ZmZlcklkLCB3aWR0aCwgaGVpZ2h0
KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnVmZmVyU2l6ZTsgaSArPSA0KQogICAg
ICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKQEAgLTEwMDksOSArMTAx
NSw2IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKIAogR3JhcGhp
Y3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiB7Ci0gICAgV2ViR0xMYXllckNocm9t
aXVtKiBjYW52YXNMYXllciA9IG1fcHJpdmF0ZS0+cGxhdGZvcm1MYXllcigpOwotICAgIGlmIChj
YW52YXNMYXllcikKLSAgICAgICAgY2FudmFzTGF5ZXItPnNldENvbnRleHQoMCk7CiAgICAgbV9w
cml2YXRlLT5zZXRDb250ZXh0TG9zdENhbGxiYWNrKG51bGxwdHIpOwogICAgIG1fcHJpdmF0ZS0+
c2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0obnVsbHB0cik7CiB9CkBAIC0x
MDU2LDkgKzEwNTksNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Jlc291cmNlU2FmZSgp
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogR3JhcGhp
Y3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAgIFdlYkdMTGF5ZXJDaHJv
bWl1bSogY2FudmFzTGF5ZXIgPSBtX3ByaXZhdGUtPnBsYXRmb3JtTGF5ZXIoKTsKLSAgICBjYW52
YXNMYXllci0+c2V0Q29udGV4dCh0aGlzKTsKLSAgICByZXR1cm4gY2FudmFzTGF5ZXI7CisgICAg
cmV0dXJuIDA7CiB9CiAjZW5kaWYKIApAQCAtMTIxNCw4ICsxMjE1LDE2IEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgKICAgICByZXR1cm4gbV9wcml2YXRlLT5sYXll
ckNvbXBvc2l0ZWQoKTsKIH0KIAotREVMRUdBVEVfVE9fSU5URVJOQUxfMShwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcywgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopCi1ERUxFR0FURV9UT19J
TlRFUk5BTF9SKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhLCBQYXNzUmVmUHRyPElt
YWdlRGF0YT4pCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBk
cmF3aW5nQnVmZmVyKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKGNvbnRleHQsIGRyYXdpbmdCdWZmZXIpOworfQorCitQYXNzUmVmUHRyPElt
YWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoZHJhd2luZ0J1ZmZlcik7Cit9CisK
IERFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcywg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCosIGJvb2wpCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHJldmlzaW9u
IDk5NTkzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEwICs0Niw4IEBAIGNsYXNzIFdlYlZpZXdJ
bXBsOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFz
cyBFeHRlbnNpb25zM0RDaHJvbWl1bTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Ci1jbGFzcyBXZWJHTExheWVyQ2hyb21pdW07Ci0jZW5kaWYKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dExvc3RDYWxsYmFja0FkYXB0ZXI7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJz
Q29tcGxldGVDYWxsYmFja0FkYXB0ZXI7CiAKQEAgLTk1LDE3ICs5MywxNCBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBsYXllckNvbXBvc2l0ZWQoKSBjb25zdDsKICAgICB2b2lkIG1hcmtMYXllckNvbXBv
c2l0ZWQoKTsKIAotICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCopOworICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCosIERyYXdpbmdCdWZmZXIqKTsKICAgICB2b2lkIHBh
aW50RnJhbWVidWZmZXJUb0NhbnZhcyhpbnQgZnJhbWVidWZmZXIsIGludCB3aWR0aCwgaW50IGhl
aWdodCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBJbWFnZUJ1ZmZlciopOwotICAgIFBhc3NSZWZQ
dHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIFBh
c3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3
aW5nQnVmZmVyKik7CiAgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CiAg
ICAgYm9vbCBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCopOwogCiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwogCi0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllcigp
OwotI2VuZGlmCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7CiAKICAgICB2b2lk
IHJlbGVhc2VTaGFkZXJDb21waWxlcigpOwpAQCAtMzMwLDkgKzMyNSw2IEBAIHByaXZhdGU6CiAg
ICAgfTsKICAgICBSZXNvdXJjZVNhZmV0eSBtX3Jlc291cmNlU2FmZXR5OwogCi0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFJlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IG1f
Y29tcG9zaXRpbmdMYXllcjsKLSNlbmRpZgogI2lmIFVTRShTS0lBKQogICAgIC8vIElmIHRoZSB3
aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBDYW52YXMncyBiYWNraW5nIHN0b3JlIGRvbid0CiAgICAg
Ly8gbWF0Y2ggdGhvc2UgdGhhdCB3ZSB3ZXJlIGdpdmVuIGluIHRoZSBtb3N0IHJlY2VudCBjYWxs
IHRvCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114180</attachid>
            <date>2011-11-08 17:21:24 -0800</date>
            <delta_ts>2011-11-08 18:01:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111108201827.patch</filename>
            <type>text/plain</type>
            <size>60057</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NTk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTggQEAKKzIwMTEtMTEtMDggIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUGF0Y2ggdGhh
dCBpbXBsZW1lbnRpbmcgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuIEFsbCBQ
bGF0Zm9ybUxheWVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMKKyAgICAgICAgcGVyZm9ybWVkIGJ5
IHRoZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICBDaGFuZ2VzIGFyZSBvbmx5IHJlbGV2YW50IHRv
IENocm9taXVtIHBvcnRzLiBGdW5jdGlvbmFsaXR5IGlzCisgICAgICAgIHVuY2hhbmdlZCBmb3Ig
b3RoZXIgcG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzIwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDogQ29uc3RydWN0IGEg
RHJhd2luZ0J1ZmZlcgorICAgICAgICBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCBmb3J3YXJk
IGFsbCBmcmFtZWJ1ZmZlciBtYW5hZ2VtZW50IGNhbGxzIHRvCisgICAgICAgIGl0LgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
SWZDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZWJ1ZmZlcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oOiAgV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNlcworICAgICAgICBh
cmUgbm8gbG9uZ2VyIHRyYWNrZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QuIENhbGxlcnMgY2FuIG5v
dyBwYXNzIGEKKyAgICAgICAgRHJhd2luZ0J1ZmZlciBpbnN0YW5jZSB0byBwcm92aWRlIGFjY2Vz
cyB0byB0aGUgV2ViR0xMYXllckNocm9taXVtIGRhdGEuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlQ29sb3JUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpmcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjp+V2ViR0xM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJh
d3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21p
dW06OnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TExheWVyQ2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDogV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNl
cworICAgICAgICBoYXZlIGEgcmF3IHJlZmVyZW5jZSB0byB0aGVpciBvd25pbmcgRHJhd2luZ0J1
ZmZlci4gIFRoaXMgcmVmZXJlbmNlIGlzIHNldCB0byBOVUxMIG9uCisgICAgICAgIGRlc3RydWN0
aW9uIG9mIHRoZSBEcmF3aW5nQnVmZmVyLiAgVGhpcyBmb2xsb3dzIHRoZSBvbGQgY29kZSwgd2hp
Y2ggaGFkIHRoZSBXZWJHTExheWVyQ2hyb21pdW0KKyAgICAgICAgcmVmZXIgcmF3bHkgdG8gYSBH
cmFwaGljc0NvbnRleHQzRCBpbnN0YW5jZSwgd2hpY2ggd2FzIGFsc28gcmV2b2tlZCBkdXJpbmcg
dGVhci1kb3duIG9mIHRoZQorICAgICAgICBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmNwcDogVGhlIERyYXdpbmdCdWZmZXIgaXMgbm93IHRoZQorICAgICAgICBjZW50cmFs
IHBvaW50IGJldHdlZW4gdGhlIEdyYXBoaWNzQ29udGV4dDNELCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQsIGFuZAorICAgICAgICBXZWJHTExheWVyQ2hyb21pdW0gY2xhc3Nlcy4gIEdyYXBoaWNzQ29u
dGV4dDNELCBhbmQgV2ViR0xMYXllckNocm9taXVtIG9ubHkKKyAgICAgICAgZGVwZW5kIG9uIHRo
ZSBEcmF3aW5nQnVmZmVyIGludGVyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhckZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpt
dWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpkaXNjYXJkUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6c2V0U2Npc3Nv
ckVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1
ZmZlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSk6CisKIDIwMTEtMTEtMDggIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgog
CiAgICAgICAgIFJlbW92ZSBnZXQoKSBkZWZpbmVkIGluIENyZWRlbnRpYWxTdG9yYWdlU291cC5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUs
NyArMzY1LDEyIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFIKICAg
ICB9CiAKICAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRydWU7CisjaWYgUExBVEZPUk0o
Q0hST01JVU0pCisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IHRydWU7CisjZWxzZQog
ICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBmYWxzZTsKKyNlbmRpZgorCiAKICAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CiAKQEAgLTM4MSw2ICszODYsNyBAQCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRy
aWJ1dGVzKQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCiAgICAg
LCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQogICAgICwgbV9y
ZXN0b3JlQWxsb3dlZChmYWxzZSkKICAgICAsIG1fcmVzdG9yZVRpbWVyKHRoaXMpCiAgICAgLCBt
X3ZpZGVvQ2FjaGUoNCkKQEAgLTM4OCw2ICszOTQsMTUgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiB7CiAg
ICAgQVNTRVJUKG1fY29udGV4dCk7CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBD
cmVhdGUgdGhlIERyYXdpbmdCdWZmZXIgYW5kIGluaXRpYWxpemUgdGhlIHBsYXRmb3JtIGxheWVy
LgorICAgIG1fZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShtX2NvbnRleHQu
Z2V0KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSksICFt
X2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKTsKKyNlbmRpZgorCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisKICAgICBz
ZXR1cEZsYWdzKCk7CiAgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKIH0KQEAgLTQ1Myw2ICs0
NjgsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5lCiAgICAgaWYg
KCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CiAKKyAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KElu
dFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOworCiAgICAgbV9j
b250ZXh0LT5yZXNoYXBlKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwog
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSk7CiAKQEAgLTQ5Myw3ICs1MTEsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6bWFya0NvbnRleHRDCiB7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQogICAg
ICAgICByZXR1cm47CisKICAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOworCiAg
ICAgbV9sYXllckNsZWFyZWQgPSBmYWxzZTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7CkBA
IC01MjMsOCArNTQzLDEyIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcklmQ29t
cG8KICAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVh
ciB0aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIuCiAgICAgYm9vbCBjb21iaW5lZENs
ZWFyID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsKIAotICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsK
KyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgIH0KICAgICBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAg
aWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVG
RkVSX0JJVCkpCiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NvbG9yTWFza1swXSA/
IG1fY2xlYXJDb2xvclswXSA6IDAsCkBAIC01ODAsMjEgKzYwNCw1MCBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpCiAgICAgLy8gaGFwcGVuZWQgYWZ0ZXIgaXQgd2Fz
IGNvbXBvc2l0ZWQgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgaWYg
KG1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkgJiYgIW1fYXR0cmlidXRlcy5wcmVzZXJ2ZURy
YXdpbmdCdWZmZXIpIHsKICAgICAgICAgbV9jb250ZXh0LT5wYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXModGhpcyk7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFBM
QVRGT1JNKENIUk9NSVVNKQorICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5wYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXModGhpcyk7
CisjZW5kaWYKKwogICAgICAgICBjYW52YXMoKS0+bWFrZVByZXNlbnRhdGlvbkNvcHkoKTsKICAg
ICB9IGVsc2UKICAgICAgICAgY2FudmFzKCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOwogICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7CisKICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkgJiYg
IW1fbGF5ZXJDbGVhcmVkKQogICAgICAgICByZXR1cm47CisKICAgICBjYW52YXMoKS0+Y2xlYXJD
b3BpZWRJbWFnZSgpOwogICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKLSAgICBtX2Nv
bnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKHRoaXMpOworCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKyAgICBt
X2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKHRoaXMsIG1fZHJhd2luZ0J1
ZmZlci5nZXQoKSk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVi
dWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci0+YmluZCgpOworICAgIH0KIH0KIAogUGFzc1JlZlB0cjxJbWFnZURhdGE+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQogewog
ICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGlt
YWdlRGF0YSA9IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEobV9k
cmF3aW5nQnVmZmVyLmdldCgpKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAg
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8o
bV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlRGF0YTsK
IH0KIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIo
KSBjb25zdApAQCAtNjI2LDE2ICs2NzksMjUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnJlc2hhcGUoaW50CiAKICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIG1hcmsgdGhlIGNhbnZhcyBh
cyBkaXJ0eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2UgYnVmZmVyIHdpbGwgYWxzbyBz
dGFydCBvZmYKICAgICAvLyBjbGVhciAoYW5kIHRoaXMgbWF0Y2hlcyB3aGF0IHJlc2hhcGUgd2ls
bCBkbykuCi0gICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOworICAgIGlmICht
X2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KSk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lk
dGgsIGhlaWdodCk7CiB9CiAKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZm
ZXJXaWR0aCgpIGNvbnN0CiB7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7CisKICAgICByZXR1cm4gbV9jb250
ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7CiB9CiAKIGludCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdAogeworICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNpemUo
KS5oZWlnaHQoKTsKKwogICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkuaGVpZ2h0KCk7CiB9CiAKQEAgLTc1Nyw3ICs4MTksMTEgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZgogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwotICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOworICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIEluc3RlYWQgb2Yg
YmluZGluZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KKyAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5iaW5kKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwogICAgIGlmIChidWZmZXIpCiAg
ICAgICAgIGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0xMDk2LDkgKzExNjIsMjEgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNs
ZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpCisgICAgaWYgKGlz
UmVzb3VyY2VTYWZlKCkpIHsKKyAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVl
ZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PmNvbW1pdCgpOworCiAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0gICAg
ZWxzZSB7CisKKyAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAg
ICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcp
CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwogICAgICAgICBHQzNEaW50
IGNsaXBwZWRYLCBjbGlwcGVkWTsKICAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0aCwgY2xp
cHBlZEhlaWdodDsKICAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRC
b3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xp
cHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7CkBAIC0x
MTEwLDYgKzExODgsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFn
ZQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fY29udGV4dC0+
Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIGJvcmRlcik7CisKKyAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlm
IG5lZWRlZAorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwogICAgIH0KICAgICAv
LyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUg
YmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgogICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSk7CkBAIC0xMTQxLDcgKzEyMjMsMTUgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNvcHlUZXhTdWJJbQogICAgIH0KICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwog
ICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQorICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZl
ciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICBpZiAoIW1fZnJh
bWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
KworICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgIGlm
ICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEdDM0RpbnQgY2xp
cHBlZFgsIGNsaXBwZWRZOwogICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVk
SGVpZ2h0OwpAQCAtMTE2NSwxMSArMTI1NSwyOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleFN1YkltCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2NvbnRleHQtPnRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKICAgICAgICAgICAgIGlmIChjbGlwcGVkV2lk
dGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAgICAgLy8gQ29tbWl0
IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAg
ICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikK
KyAgICAgICAgICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwogICAgICAg
ICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCArIGNsaXBwZWRYIC0geCwgeW9mZnNldCArIGNsaXBwZWRZIC0geSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xp
cHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKKworICAgICAgICAgICAgICAgLy8gUmVzdG9yZSBE
cmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPmJpbmQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUu
Zy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5jb21taXQoKTsKKwogICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKwor
ICAgICAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgICAgICAg
ICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAg
ICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgICAgIH0KICAgICB9CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTEyODYsNyArMTM5MywxMCBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWViCiAgICAgaWYgKGZyYW1l
YnVmZmVyID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7CiAgICAgICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nID0gMDsKICAgICAgICAgLy8gSGF2ZSB0byBjYWxsIGJpbmRGcmFtZWJ1ZmZlciBoZXJl
IHRvIGJpbmQgYmFjayB0byBpbnRlcm5hbCBmYm8uCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKICAgICB9CiB9CiAKQEAgLTEzNzMsOCAr
MTQ4MywxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZShHQzNECiB7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RF
U1QpCisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CiAg
ICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9z
Y2lzc29yRW5hYmxlZCk7CisgICAgfQogICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXApOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0xNzE1LDggKzE4MjgsMTEg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZShHQzNEZQogewogICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKQorICAg
IGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewogICAgICAgICBt
X3NjaXNzb3JFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5h
YmxlZCk7CisgICAgfQogICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI5MjMsNyArMzAzOSwxNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHCiAgICAgfQogICAgIGNsZWFySWZDb21w
b3NpdGVkKCk7CiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKKworICAg
IC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxp
bmcpCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICBtX2NvbnRleHQtPnJlYWRQ
aXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKworICAgIC8v
IFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJC
aW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5k
KCk7CisKICNpZiBPUyhEQVJXSU4pCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24g
d2hlbiBHTCBkcml2ZXIgYnVnIG9uIE1hYyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyB3aGVuIGFs
cGhhIGlzIG9mZiwgcmVhZFBpeGVscyBzaG91bGQgc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9m
IDAuCkBAIC0zOTc1LDYgKzQxMDEsMTggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZv
cmNlUmVzdG9yZQogICAgIG1heWJlUmVzdG9yZUNvbnRleHQoU3ludGhldGljTG9zdENvbnRleHQp
OwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorUGxhdGZvcm1MYXllciog
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyNpZiBQTEFU
Rk9STShDSFJPTUlVTSkKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICByZXR1cm4g
bV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUxheWVyKCk7CisjZW5kaWYKKworICAgIHJldHVybiBt
X2NvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cmVtb3ZlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgbV9j
YW52YXNPYmplY3RzLnJlbW92ZShvYmplY3QpOwpAQCAtNDE2NiwxNCArNDMwNCwxNCBAQCBpbnQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lCiB7CiAgICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKICAgICAgICAg
cmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgpOwotICAgIHJldHVybiBtX2Nv
bnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsKKyAgICByZXR1cm4g
bV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKSA6IG1fY29u
dGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOwogfQogCiBpbnQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCkKIHsKICAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgp
KQogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEhlaWdodCgpOwotICAg
IHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7
CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhl
aWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgp
OwogfQogCiBXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXh0
dXJlQmluZGluZyhHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQpA
QCAtNDg3OSw2ICs1MDE3LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJl
c3RvcmUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8vIENvbnN0cnVjdCBhIG5ldyBk
cmF3aW5nIGJ1ZmZlciB3aXRoIHRoZSBuZXcgR3JhcGhpY3NDb250ZXh0M0QuCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJj
ZXMoKTsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyID0gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKG1f
Y29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksICFtX2F0dHJpYnV0ZXMucHJl
c2VydmVEcmF3aW5nQnVmZmVyKTsKKyAgICB9CisKICAgICBtX2NvbnRleHQgPSBjb250ZXh0Owog
ICAgIG1fY29udGV4dExvc3QgPSBmYWxzZTsKICAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICNkZWZpbmUgV2ViR0xSZW5kZXJpbmdDb250ZXh0X2gKIAogI2luY2x1ZGUgIkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCkBAIC0yOTIsNyArMjkzLDcgQEAgcHVibGljOgogCiAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0
LmdldCgpOyB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC0+
cGxhdGZvcm1MYXllcigpOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpOwpAQCAtMzU4LDYgKzM1OSwxMCBAQCBwdWJsaWM6CiAKICAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IG1fY29udGV4dDsKIAorICAgIC8vIE9wdGlvbmFsIHN0cnVjdHVyZSBmb3Ig
cmVuZGVyaW5nIHRvIGEgRHJhd2luZ0J1ZmZlciwgaW5zdGVhZCBvZiBkaXJlY3RseQorICAgIC8v
IHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2NvbnRleHQuCisgICAgUmVmUHRyPERyYXdpbmdCdWZm
ZXI+IG1fZHJhd2luZ0J1ZmZlcjsKKwogICAgIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJl
c3RvcmVUaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgewogICAgIHB1YmxpYzoKICAgICAgICAgZXhw
bGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzdG9yZVRpbWVyKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCkgOiBtX2NvbnRleHQoY29udGV4dCkgeyB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3Bw
CShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTIgKzU3LDYgQEAgdWlu
dDhfdCBjb252ZXJ0Q29sb3IxNkJpZ1RvOCh1aW50MTZfdCB2YQogCiB9IC8vIGFub255bW91cyBu
YW1lc3BhY2UKIAotCi1QYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVEcmF3aW5nQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgcmV0dXJu
IERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBzaXplKTsKLX0KLQogYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEdDM0RpbnQgdW5wYWNrQWxpZ25tZW50KQogewogICAgIEFTU0VSVCh1bnBhY2tBbGlnbm1lbnQg
PT0gMSB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gMiB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gNCB8fCB1
bnBhY2tBbGlnbm1lbnQgPT0gOCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDk5NTkzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTAwLDggKzUwMCw2IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZvaWQg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNy
ZWF0ZURyYXdpbmdCdWZmZXIoY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKCkpOwotICAgIAogI2lm
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oUVQpCiAgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9uLCBibGl0IGZyb20gbXVs
dGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwpA
QCAtNzkxLDggKzc4OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQo
KTsKICAgICBib29sIGxheWVyQ29tcG9zaXRlZCgpIGNvbnN0OwogCi0gICAgdm9pZCBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7Ci0gICAgUGFz
c1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7Cisg
ICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250
ZXh0KiwgRHJhd2luZ0J1ZmZlciopOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKik7CiAgICAgYm9vbCBwYWlu
dENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwogCiAj
aWYgUExBVEZPUk0oUVQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5j
cHAJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsMTAgQEAKIAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAorI2luY2x1ZGUgIkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiV2ViR0xMYXllckNo
cm9taXVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDgsNyArNTEsNiBAQCBzdGF0
aWMgdW5zaWduZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUoR3JhCiAgICAgY29udGV4dC0+dGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CiAgICAg
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBf
VE9fRURHRSk7CiAgICAgY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKLSAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1
cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9mZnNjcmVl
bkNvbG9yVGV4dHVyZSwgMCk7CiAKICAgICByZXR1cm4gb2Zmc2NyZWVuQ29sb3JUZXh0dXJlOwog
fQpAQCAtNTYsNDYgKzU4LDc0IEBAIHN0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNvbG9yVGV4dHVy
ZShHcmEKIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25T
dXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhT
dGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9u
U3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlQmFj
a2luZ1RleHR1cmUpCisgICAgOiBtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUoc2VwYXJhdGVCYWNr
aW5nVGV4dHVyZSkKKyAgICAsIG1fc2Npc3NvckVuYWJsZWQoZmFsc2UpCisgICAgLCBtX2NvbnRl
eHQoY29udGV4dCkKICAgICAsIG1fc2l6ZSgtMSwgLTEpCiAgICAgLCBtX211bHRpc2FtcGxlRXh0
ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9w
YWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9mYm8oMCkKICAgICAsIG1fY29sb3JCdWZmZXIoMCkK
KyAgICAsIG1fYmFja2luZ0NvbG9yQnVmZmVyKDApCiAgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cigwKQogICAgICwgbV9kZXB0aEJ1ZmZlcigwKQogICAgICwgbV9zdGVuY2lsQnVmZmVyKDApCiAg
ICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIo
MCkKIHsKLSAgICBtX2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9m
Ym8pOwotICAgIG1fY29sb3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShjb250ZXh0LCBz
aXplKTsKLSAgICBjcmVhdGVTZWNvbmRhcnlCdWZmZXJzKCk7Ci0gICAgaWYgKCFyZXNldChzaXpl
KSkgewotICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpbml0aWFsaXplKHNpemUpOwogfQogCiBEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZl
cigpCiB7CisgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAgICAgICAgbV9wbGF0Zm9ybUxheWVy
LT5zZXREcmF3aW5nQnVmZmVyKDApOworCiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGNsZWFyKCk7CiB9CiAKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6aW5pdGlhbGl6
ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIG1fZmJvID0gbV9jb250ZXh0LT5jcmVhdGVG
cmFtZWJ1ZmZlcigpOworCisgICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICAg
ICAgbV9iYWNraW5nQ29sb3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShtX2NvbnRleHQu
Z2V0KCksIHNpemUpOworCisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgbV9jb2xvckJ1ZmZlciA9IGdlbmVy
YXRlQ29sb3JUZXh0dXJlKG1fY29udGV4dC5nZXQoKSwgc2l6ZSk7CisgICAgbV9jb250ZXh0LT5m
cmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOworICAgIGNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMoKTsK
KyAgICBpZiAoIXJlc2V0KHNpemUpKSB7CisgICAgICAgIG1fY29udGV4dC5jbGVhcigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogdm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCkKIHsKICAgICBp
ZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICBpZiAobXVsdGlzYW1wbGUoKSkKICAgICAgICAgY29tbWl0KCk7
Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3NlcGFy
YXRlQmFja2luZ1RleHR1cmUpIHsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmFja2luZ0Nv
bG9yQnVmZmVyKTsKKyAgICAgICAgdW5zaWduZWQgY29sb3JGb3JtYXQgPSBtX2NvbnRleHQtPmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEgPyBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSA6IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0I7CisgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGNvbG9yRm9ybWF0LCAwLCAwLCBzaXpl
KCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCAwKTsKKyAgICB9CisKKyAgICBpZiAobXVsdGlz
YW1wbGUoKSkKKyAgICAgICAgYmluZCgpOworCiAgICAgbV9jb250ZXh0LT5mbHVzaCgpOwogfQog
I2VuZGlmCkBAIC0xMDMsMTMgKzEzMywzMSBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OnB1Ymxpc2hU
b1BsYXRmb3JtTGF5CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1M
YXllciogRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYXllcigpCiB7Ci0gICAgcmV0dXJuIDA7Cisg
ICAgaWYgKCFtX3BsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgbV9wbGF0Zm9ybUxheWVyID0gV2Vi
R0xMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgICAgIG1fcGxhdGZvcm1MYXllci0+c2V0
RHJhd2luZ0J1ZmZlcih0aGlzKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVy
LmdldCgpOwogfQogI2VuZGlmCiAKIFBsYXRmb3JtM0RPYmplY3QgRHJhd2luZ0J1ZmZlcjo6cGxh
dGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29sb3JCdWZmZXI7Cisg
ICAgcmV0dXJuIG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSA/IG1fYmFja2luZ0NvbG9yQnVmZmVy
IDogbV9jb2xvckJ1ZmZlcjsKIH0KIAorUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVyOjpm
cmFtZWJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmJvOworfQorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBEcmF3aW5nQnVmZmVyOjpwYWludENvbXBvc2l0
ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAg
ICBpZiAobV9wbGF0Zm9ybUxheWVyKQorICAgICAgICBtX3BsYXRmb3JtTGF5ZXItPnBhaW50UmVu
ZGVyZWRSZXN1bHRzVG9DYW52YXMoY29udGV4dC0+Y2FudmFzKCktPmJ1ZmZlcigpKTsKK30KKyNl
bmRpZgorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAj
aW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVy
LmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgpAQCAtNDgs
NyArNDksNiBAQCBQYXNzUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gV2ViR0xMYXllCiAKIFdl
YkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVs
ZWdhdGUpCiAgICAgOiBDYW52YXNMYXllckNocm9taXVtKGRlbGVnYXRlKQotICAgICwgbV9jb250
ZXh0KDApCiAgICAgLCBtX3RleHR1cmVDaGFuZ2VkKHRydWUpCiAgICAgLCBtX3RleHR1cmVVcGRh
dGVkKGZhbHNlKQogewpAQCAtNTYsMTMgKzU2LDEzIEBAIFdlYkdMTGF5ZXJDaHJvbWl1bTo6V2Vi
R0xMYXllckNocm9taXVtKEMKIAogV2ViR0xMYXllckNocm9taXVtOjp+V2ViR0xMYXllckNocm9t
aXVtKCkKIHsKLSAgICBpZiAobV9jb250ZXh0ICYmIGxheWVyVHJlZUhvc3QoKSkKLSAgICAgICAg
bGF5ZXJUcmVlSG9zdCgpLT5zdG9wUmF0ZUxpbWl0ZXIobV9jb250ZXh0KTsKKyAgICBpZiAoY29u
dGV4dCgpICYmIGxheWVyVHJlZUhvc3QoKSkKKyAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdG9w
UmF0ZUxpbWl0ZXIoY29udGV4dCgpKTsKIH0KIAogYm9vbCBXZWJHTExheWVyQ2hyb21pdW06OmRy
YXdzQ29udGVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtX2NvbnRleHQgJiYgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6Tk9fRVJST1IpOworICAgIHJldHVybiAoY29udGV4dCgpICYmIGNvbnRleHQo
KS0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKIH0KIAogdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIHJlbmRlcmVyQ29udGV4
dCwgQ0NUZXh0dXJlVXBkYXRlciYpCkBAIC04NSwxMSArODUsOSBAQCB2b2lkIFdlYkdMTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvCiAgICAgfQogICAgIC8vIFVwZGF0ZSB0aGUgY29udGVu
dHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KICAgICBpZiAoIW1fZGly
dHlSZWN0LmlzRW1wdHkoKSAmJiBtX3RleHR1cmVVcGRhdGVkKSB7Ci0gICAgICAgIC8vIHByZXBh
cmVUZXh0dXJlIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRh
cmdldCBpbnRvIHRoZSB0ZXh0dXJlCi0gICAgICAgIC8vIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3Iu
Ci0gICAgICAgIC8vCi0gICAgICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKLSAgICAg
ICAgbV9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CisgICAgICAgIC8vIHB1Ymxpc2hU
b1BsYXRmb3JtTGF5ZXIgcHJlcGFyZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBvZmYtc2NyZWVuIHJl
bmRlciB0YXJnZXQgZm9yIHVzZSBieSB0aGUgY29tcG9zaXRvci4KKyAgICAgICAgZHJhd2luZ0J1
ZmZlcigpLT5wdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIGNvbnRleHQoKS0+bWFy
a0xheWVyQ29tcG9zaXRlZCgpOwogICAgICAgICBtX3VwZGF0ZVJlY3QgPSBGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBib3VuZHMoKSk7CiAgICAgICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAg
ICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSBmYWxzZTsKQEAgLTEwMSw3ICs5OSw3IEBAIGJvb2wgV2Vi
R0xMYXllckNocm9taXVtOjpwYWludFJlbmRlcmVkUmUKICAgICBpZiAobV90ZXh0dXJlVXBkYXRl
ZCB8fCAhbGF5ZXJSZW5kZXJlckNvbnRleHQoKSB8fCAhZHJhd3NDb250ZW50KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEludFNpemUgZnJhbWVidWZmZXJTaXplID0gbV9jb250ZXh0
LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOworICAgIEludFNpemUgZnJhbWVidWZmZXJT
aXplID0gY29udGV4dCgpLT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOwogICAgIEFTU0VS
VChsYXllclJlbmRlcmVyQ29udGV4dCgpKTsKIAogICAgIC8vIFRoaXMgd291bGQgaWRlYWxseSBi
ZSBkb25lIGluIHRoZSB3ZWJnbCBjb250ZXh0LCBidXQgdGhhdCBpc24ndCBwb3NzaWJsZSB5ZXQu
CkBAIC0xMTAsNyArMTA4LDcgQEAgYm9vbCBXZWJHTExheWVyQ2hyb21pdW06OnBhaW50UmVuZGVy
ZWRSZQogICAgIGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FU
VEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQsIDAp
OwogCiAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxF
eHRlbnNpb25zM0RDaHJvbWl1bSo+KGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmdldEV4dGVuc2lv
bnMoKSk7Ci0gICAgZXh0ZW5zaW9ucy0+cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1lYnVm
ZmVyLCBmcmFtZWJ1ZmZlclNpemUud2lkdGgoKSwgZnJhbWVidWZmZXJTaXplLmhlaWdodCgpLCAh
bV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwgaW1h
Z2VCdWZmZXIpOworICAgIGV4dGVuc2lvbnMtPnBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhmcmFt
ZWJ1ZmZlciwgZnJhbWVidWZmZXJTaXplLndpZHRoKCksIGZyYW1lYnVmZmVyU2l6ZS5oZWlnaHQo
KSwgIWNvbnRleHQoKS0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEs
IGltYWdlQnVmZmVyKTsKICAgICBsYXllclJlbmRlcmVyQ29udGV4dCgpLT5kZWxldGVGcmFtZWJ1
ZmZlcihmcmFtZWJ1ZmZlcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMjEsMzIgKzExOSwz
OSBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y29udGVudENoYW5nZWQoCiAgICAgLy8gSWYg
V2ViR0wgY29tbWFuZHMgYXJlIGlzc3VlZCBvdXRzaWRlIG9mIGEgdGhlIGFuaW1hdGlvbiBjYWxs
YmFja3MsIHRoZW4gdXNlCiAgICAgLy8gY2FsbCByYXRlTGltaXRPZmZzY3JlZW5Db250ZXh0Q0hS
T01JVU0oKSB0byBrZWVwIHRoZSBjb250ZXh0IGZyb20gZ2V0dGluZyB0b28gZmFyIGFoZWFkLgog
ICAgIGlmIChsYXllclRyZWVIb3N0KCkpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RhcnRS
YXRlTGltaXRlcihtX2NvbnRleHQpOworICAgICAgICBsYXllclRyZWVIb3N0KCktPnN0YXJ0UmF0
ZUxpbWl0ZXIoY29udGV4dCgpKTsKIH0KIAotdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnNldENv
bnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit2b2lkIFdlYkdMTGF5ZXJD
aHJvbWl1bTo6c2V0RHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQog
ewotICAgIGJvb2wgY29udGV4dENoYW5nZWQgPSAobV9jb250ZXh0ICE9IGNvbnRleHQpOworICAg
IGJvb2wgZHJhd2luZ0J1ZmZlckNoYW5nZWQgPSAobV9kcmF3aW5nQnVmZmVyICE9IGRyYXdpbmdC
dWZmZXIpOworICAgIG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdpbmdCdWZmZXI7CiAKLSAgICBpZiAo
bGF5ZXJUcmVlSG9zdCgpICYmIGNvbnRleHRDaGFuZ2VkKQotICAgICAgICBsYXllclRyZWVIb3N0
KCktPnN0b3BSYXRlTGltaXRlcihtX2NvbnRleHQpOworICAgIGlmIChsYXllclRyZWVIb3N0KCkg
JiYgZHJhd2luZ0J1ZmZlckNoYW5nZWQpCisgICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RvcFJh
dGVMaW1pdGVyKGNvbnRleHQoKSk7CiAKLSAgICBtX2NvbnRleHQgPSBjb25zdF9jYXN0PEdyYXBo
aWNzQ29udGV4dDNEKj4oY29udGV4dCk7Ci0KLSAgICBpZiAoIW1fY29udGV4dCkKKyAgICBpZiAo
IW1fZHJhd2luZ0J1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgdW5zaWduZWQgaW50IHRl
eHR1cmVJZCA9IG1fY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCk7Ci0gICAgaWYgKHRleHR1cmVJ
ZCAhPSBtX3RleHR1cmVJZCB8fCBjb250ZXh0Q2hhbmdlZCkgeworICAgIHVuc2lnbmVkIGludCB0
ZXh0dXJlSWQgPSBtX2RyYXdpbmdCdWZmZXItPnBsYXRmb3JtQ29sb3JCdWZmZXIoKTsKKyAgICBp
ZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkIHx8IGRyYXdpbmdCdWZmZXJDaGFuZ2VkKSB7CiAg
ICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSB0cnVlOwogICAgICAgICBtX3RleHR1cmVVcGRhdGVk
ID0gdHJ1ZTsKICAgICB9CiAgICAgbV90ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IG1fY29udGV4dC0+Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzID0gY29udGV4dCgpLT5nZXRDb250ZXh0QXR0cmlidXRlcygpOwogICAgIG1faGFzQWxwaGEg
PSBhdHRyaWJ1dGVzLmFscGhhOwogICAgIG1fcHJlbXVsdGlwbGllZEFscGhhID0gYXR0cmlidXRl
cy5wcmVtdWx0aXBsaWVkQWxwaGE7CiB9CiAKK0dyYXBoaWNzQ29udGV4dDNEKiBXZWJHTExheWVy
Q2hyb21pdW06OmNvbnRleHQoKSBjb25zdAoreworICAgIGlmIChkcmF3aW5nQnVmZmVyKCkpCisg
ICAgICAgIHJldHVybiBkcmF3aW5nQnVmZmVyKCktPmdyYXBoaWNzQ29udGV4dDNEKCkuZ2V0KCk7
CisKKyAgICByZXR1cm4gMDsKK30KKwogR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMTGF5ZXJDaHJv
bWl1bTo6bGF5ZXJSZW5kZXJlckNvbnRleHQoKQogewogICAgIC8vIEZJWE1FOiBJbiB0aGUgdGhy
ZWFkZWQgY2FzZSwgcGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyBtdXN0IGJlCkBAIC0xNTcs
NCArMTYyLDUgQEAgR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMTGF5ZXJDaHJvbWl1bTo6bAogfQog
CiB9CisKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9XZWJHTExheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKIAogI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJEcmF3aW5n
QnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTMsMjEgKzU0LDIzIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKTsKICAgICBib29sIHBhaW50
UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKTsKIAotICAgIHZvaWQgc2V0Q29u
dGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCk7Ci0gICAgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCgpIGNvbnN0OwogCisgICAgdm9pZCBzZXREcmF3aW5nQnVmZmVyKERyYXdp
bmdCdWZmZXIqKTsKKyAgICBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9kcmF3aW5nQnVmZmVyOyB9CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdlYkdMTGF5
ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqKTsKICAgICBmcmllbmQgY2xhc3MgV2ViR0xMYXll
ckNocm9taXVtUmF0ZUxpbWl0VGFzazsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBsYXllclJl
bmRlcmVyQ29udGV4dCgpOwogCi0gICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5
ZXIgaGFzIGEgc2lkZS1lZmZlY3Qgb2YgYXNzaWduaW5nIGl0c2VsZgotICAgIC8vIHRvIHRoZSBs
YXllci4gQmVjYXVzZSBvZiB0aGF0IEdyYXBoaWNzQ29udGV4dDNEJ3MgZGVzdHJ1Y3RvciB3aWxs
IHJlc2V0Ci0gICAgLy8gbGF5ZXIncyBjb250ZXh0IHRvIDAuCi0gICAgR3JhcGhpY3NDb250ZXh0
M0QqIG1fY29udGV4dDsKICAgICBib29sIG1fdGV4dHVyZUNoYW5nZWQ7CiAgICAgYm9vbCBtX3Rl
eHR1cmVVcGRhdGVkOworCisgICAgLy8gVGhlIERyYXdpbmdCdWZmZXIgaG9sZGluZyB0aGUgV2Vi
R0wgY29udGVudHMgZm9yIHRoaXMgbGF5ZXIuCisgICAgLy8gQSByZWZlcmVuY2UgaXMgbm90IGhl
bGQgaGVyZSwgYmVjYXVzZSB0aGUgRHJhd2luZ0J1ZmZlciBhbHJlYWR5IGhvbGRzCisgICAgLy8g
YSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMTGF5ZXJDaHJvbWl1bS4KKyAgICBEcmF3aW5nQnVmZmVy
KiBtX2RyYXdpbmdCdWZmZXI7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5j
cHAJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI2LDEzICs3
MjYsMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7Cisg
ICAgLy8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0g
cG9ydHMuCisgICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZl
ciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBp
bXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIp
OwogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRh
ID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZSgxLCAxKSk7CiAgICAgcmV0dXJuIGltYWdlRGF0
YS5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
RHJhd2luZ0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAog
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDgs
NyArNTAsNyBAQCBzdGF0aWMgaW50IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzID0KICNlbmRp
Zgogc3RhdGljIGludCBzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVscyA9IDA7CiAKLVBhc3NSZWZQ
dHI8RHJhd2luZ0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQorUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVy
PiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0
IEludFNpemUmIHNpemUsIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKIHsKICAgICBFeHRl
bnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CiAgICAgYm9v
bCBtdWx0aXNhbXBsZVN1cHBvcnRlZCA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9ibGl0IikgJiYgZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlIikgJiYgZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX09FU19yZ2I4
X3JnYmE4Iik7CkBAIC02MCw3ICs2Miw3IEBAIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJh
d2luZ0J1ZmZlcjoKICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IGV4dGVu
c2lvbnMtPnN1cHBvcnRzKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKICAgICBpZiAo
cGFja2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVkKQogICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVF
bmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICBSZWZQdHI8RHJhd2lu
Z0J1ZmZlcj4gZHJhd2luZ0J1ZmZlciA9IGFkb3B0UmVmKG5ldyBEcmF3aW5nQnVmZmVyKGNvbnRl
eHQsIHNpemUsIG11bHRpc2FtcGxlU3VwcG9ydGVkLCBwYWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0
ZWQpKTsKKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZlciA9IGFkb3B0UmVm
KG5ldyBEcmF3aW5nQnVmZmVyKGNvbnRleHQsIHNpemUsIG11bHRpc2FtcGxlU3VwcG9ydGVkLCBw
YWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0ZWQsIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpKTsKICAg
ICByZXR1cm4gKGRyYXdpbmdCdWZmZXItPm1fY29udGV4dCkgPyBkcmF3aW5nQnVmZmVyLnJlbGVh
c2UoKSA6IDA7CiB9CiAKQEAgLTc4LDYgKzgwLDExIEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xl
YXIoKQogICAgICAgICBtX2NvbG9yQnVmZmVyID0gMDsKICAgICB9CiAKKyAgICBpZiAobV9iYWNr
aW5nQ29sb3JCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fYmFj
a2luZ0NvbG9yQnVmZmVyKTsKKyAgICAgICAgbV9iYWNraW5nQ29sb3JCdWZmZXIgPSAwOworICAg
IH0KKwogICAgIGlmIChtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpIHsKICAgICAgICAgbV9jb250
ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKICAgICAg
ICAgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyID0gMDsKQEAgLTE2Niw3ICsxNzMsNyBAQCB2b2lk
IERyYXdpbmdCdWZmZXI6OmNsZWFyRnJhbWVidWZmZXIoKQogICAgIHVuc2lnbmVkIGNoYXIgZGVw
dGhNYXNrID0gZmFsc2U7CiAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZm
ZjsKICAgICB1bnNpZ25lZCBjaGFyIGlzU2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKLSAgICB1bnNp
Z25lZCBsb25nIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklU
OworICAgIHVuc2lnbmVkIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZG
RVJfQklUOwogICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7CiAgICAgICAgIG1fY29udGV4dC0+
Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVw
dGgpOwogICAgICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoMSk7CkBAIC0xODgsNiArMTk1LDE0
IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXJGcmFtZWJ1ZmZlcigpCiAgICAgbV9jb250ZXh0
LT5nZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNv
bG9yKTsKICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiAgICAgbV9jb250
ZXh0LT5jbGVhcihjbGVhck1hc2spOworCisgICAgLy8gVGhlIG11bHRpc2FtcGxlIGZibyB3YXMg
anVzdCBjbGVhcmVkLCBidXQgd2UgYWxzbyBuZWVkIHRvIGNsZWFyIHRoZSBub24tbXVsdGlzYW1w
bGVkIGJ1ZmZlciB0b28uCisgICAgaWYgKG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBt
X2Zibyk7CisgICAgICAgIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0JVRkZFUl9CSVQpOworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgIH0KKwogICAg
IG1fY29udGV4dC0+Y2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVh
ckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKIAogICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7
CkBAIC0yMzMsNyArMjQ4LDcgQEAgYm9vbCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRT
aXplJgogICAgIGlmIChuZXdTaXplICE9IG1fc2l6ZSkgewogICAgICAgICBtX3NpemUgPSBuZXdT
aXplOwogCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JG
b3JtYXQsIGludGVybmFsUmVuZGVyYnVmZmVyRm9ybWF0OworICAgICAgICB1bnNpZ25lZCBpbnRl
cm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxSZW5kZXJidWZmZXJGb3JtYXQ7
CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmFscGhhKSB7CiAgICAgICAgICAgICBpbnRlcm5hbENv
bG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CiAgICAgICAgICAgICBjb2xvckZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwpAQCAtMjUwLDcgKzI2NSw3IEBAIGJvb2wg
RHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAgICAgIGludCBtYXhT
YW1wbGVDb3VudCA9IDA7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfU0FNUExFUywgJm1heFNhbXBsZUNvdW50KTsKLSAg
ICAgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDgsIG1heFNhbXBsZUNvdW50KTsK
KyAgICAgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNvdW50
KTsKIAogICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKIApAQCAtMjY5LDEwICsyODQs
MTYgQEAgYm9vbCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgICAgICBt
X2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IG1fZmJvKTsKIAogICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyKTsKLSAgICAgICAgCiAgICAgICAgIG1fY29u
dGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJu
YWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JG
b3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKIAogICAgICAgICBt
X2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwgMCk7CisKKyAgICAgICAgLy8gcmVzaXpl
IHRoZSBiYWNraW5nIGNvbG9yIGJ1ZmZlcgorICAgICAgICBpZiAobV9zZXBhcmF0ZUJhY2tpbmdU
ZXh0dXJlKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX2JhY2tpbmdDb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBt
X2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGlu
dGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIGNv
bG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CisgICAgICAg
IH0KKwogICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwKTsKIAogICAgICAgICBpZiAoIW11bHRpc2FtcGxlKCkpCkBAIC0yOTMsMjMg
KzMxNCw1NiBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OmNvbW1pdChsb25nIHgsIGxvbmcKIHsKICAg
ICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIGlmICh3
aWR0aCA8IDApCiAgICAgICAgIHdpZHRoID0gbV9zaXplLndpZHRoKCk7CiAgICAgaWYgKGhlaWdo
dCA8IDApCiAgICAgICAgIGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSAgICAgICAgCisKICAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIAorCiAgICAgaWYgKG1fbXVs
dGlzYW1wbGVGQk8pIHsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5z
aW9uczNEOjpSRUFEX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKICAgICAgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpEUkFXX0ZSQU1FQlVGRkVSLCBt
X2Zibyk7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5ibGl0RnJhbWVidWZm
ZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworCisg
ICAgICAgIGlmIChtX3NjaXNzb3JFbmFibGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5kaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworCisgICAgICAgIC8vIFVzZSBO
RUFSRVNULCBiZWNhdXNlIHRoZXJlIGlzIG5vIHNjYWxlIHBlcmZvcm1lZCBkdXJpbmcgdGhlIGJs
aXQuCisgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5ibGl0RnJhbWVidWZmZXIo
eCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX0JVRkZFUl9CSVQsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsKKworICAg
ICAgICBpZiAobV9zY2lzc29yRW5hYmxlZCkKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZW5hYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIH0KLSAgICAKKwogICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
bV9mYm8pOwogfQogCitib29sIERyYXdpbmdCdWZmZXI6Om11bHRpc2FtcGxlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KS5hbnRpYWxpYXMgJiYgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZDsKK30KKworUGFz
c1JlZlB0cjxJbWFnZURhdGE+IERyYXdpbmdCdWZmZXI6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
SW1hZ2VEYXRhKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0ltYWdlRGF0YSh0aGlzKTsKK30KKwordm9pZCBEcmF3aW5nQnVmZmVyOjpkaXNjYXJkUmVz
b3VyY2VzKCkKK3sKKyAgICBtX2NvbG9yQnVmZmVyID0gMDsKKyAgICBtX2JhY2tpbmdDb2xvckJ1
ZmZlciA9IDA7CisgICAgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyID0gMDsKKworICAgIG1fZGVw
dGhTdGVuY2lsQnVmZmVyID0gMDsKKyAgICBtX2RlcHRoQnVmZmVyID0gMDsKKworICAgIG1fc3Rl
bmNpbEJ1ZmZlciA9IDA7CisKKyAgICBtX211bHRpc2FtcGxlRkJPID0gMDsKKyAgICBtX2ZibyA9
IDA7Cit9CisKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6YmluZCgpCiB7CiAgICAgaWYgKCFtX2NvbnRl
eHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9EcmF3aW5nQnVmZmVyLmgJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJH
cmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAi
SW50U2l6ZS5oIgogCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC00MywxNSArNDQs
MTggQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBQTEFURk9STShDSFJP
TUlVTSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotY2xhc3MgQ2FudmFzMkRMYXll
ckNocm9taXVtOworY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOworY2xhc3MgSW1hZ2VEYXRhOworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorY2xh
c3MgV2ViR0xMYXllckNocm9taXVtOwogI2VuZGlmCiAKIC8vIE1hbmFnZXMgYSByZW5kZXJpbmcg
dGFyZ2V0IChmcmFtZWJ1ZmZlciArIGF0dGFjaG1lbnQpIGZvciBhIGNhbnZhcy4gIENhbiBwdWJs
aXNoIGl0cyByZW5kZXJpbmcKIC8vIHJlc3VsdHMgdG8gYSBQbGF0Zm9ybUxheWVyIGZvciBjb21w
b3NpdGluZy4KIGNsYXNzIERyYXdpbmdCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEcmF3aW5n
QnVmZmVyPiB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4g
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIGJvb2wpOwogICAgIGZy
aWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIAogICAgIH5EcmF3aW5nQnVmZmVyKCk7CkBA
IC03NSwyMiArNzksMzkgQEAgcHVibGljOgogCiAgICAgLy8gQ29waWVzIHRoZSBtdWx0aXNhbXBs
ZSBjb2xvciBidWZmZXIgdG8gdGhlIG5vcm1hbCBjb2xvciBidWZmZXIgYW5kIGxlYXZlcyBtX2Zi
byBib3VuZAogICAgIHZvaWQgY29tbWl0KGxvbmcgeCA9IDAsIGxvbmcgeSA9IDAsIGxvbmcgd2lk
dGggPSAtMSwgbG9uZyBoZWlnaHQgPSAtMSk7Ci0gICAgCi0gICAgYm9vbCBtdWx0aXNhbXBsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1
dGVzKCkuYW50aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQ7IH0KLSAg
ICAKKworICAgIC8vIGNvbW1pdCBzaG91bGQgY29weSB0aGUgZnVsbCBtdWx0aXNhbXBsZSBidWZm
ZXIsIGFuZCBub3QgcmVzcGVjdCB0aGUKKyAgICAvLyBjdXJyZW50IHNjaXNzb3IgYm91bmRzLiBU
cmFjayB0aGUgc3RhdGUgb2YgdGhlIHNjaXNzb3IgdGVzdCBzbyB0aGF0IGl0CisgICAgLy8gY2Fu
IGJlIGRpc2FibGVkIGR1cmluZyBjYWxscyB0byBjb21taXQuCisgICAgdm9pZCBzZXRTY2lzc29y
RW5hYmxlZChib29sIHNjaXNzb3JFbmFibGVkKSB7IG1fc2Npc3NvckVuYWJsZWQgPSBzY2lzc29y
RW5hYmxlZDsgfQorCisgICAgYm9vbCBtdWx0aXNhbXBsZSgpIGNvbnN0OworCiAgICAgUGxhdGZv
cm0zRE9iamVjdCBwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3Q7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBmcmFtZWJ1ZmZlcigpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CiAKLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisgICAgLy8gSW1tZWRpYXRlbHkgcmVsZWFzZXMgb3duZXJzaGlwIG9mIGFs
bCByZXNvdXJjZXMuIENhbGwgdXBvbiBsb3NzIG9mIHRoZQorICAgIC8vIGdyYXBoaWNzIGNvbnRl
eHQgdG8gcHJldmVudCBmcmVlaW5nIGludmFsaWQgcmVzb3VyY2VzLgorICAgIHZvaWQgZGlzY2Fy
ZFJlc291cmNlcygpOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBQTEFU
Rk9STShDSFJPTUlVTSkKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCk7CiAgICAg
dm9pZCBwdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCk7CisgICAgdm9pZCBwYWludENvbXBvc2l0ZWRS
ZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwogI2VuZGlmCiAKICAgICBQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dDsgfQogCiBwcml2YXRlOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERy
YXdpbmdCdWZmZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsK
LSAgICAKLSAgICBEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6
ZSYsIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsIGJvb2wgcGFja2VkRGVwdGhT
dGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKTsKKyAgICBEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQsCisgICAgICAgICAgICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1
cHBvcnRlZCwgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKTsKKworICAgIHZvaWQgaW5pdGlh
bGl6ZShjb25zdCBJbnRTaXplJik7CisKKyAgICBib29sIG1fc2VwYXJhdGVCYWNraW5nVGV4dHVy
ZTsKKyAgICBib29sIG1fc2Npc3NvckVuYWJsZWQ7CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IG1fY29udGV4dDsKICAgICBJbnRTaXplIG1fc2l6ZTsKQEAgLTk4LDYgKzExOSw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRl
ZDsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9j
b2xvckJ1ZmZlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fYmFja2luZ0NvbG9yQnVmZmVyOwog
CiAgICAgLy8gVGhpcyBpcyB1c2VkIHdoZW4gd2UgaGF2ZSBPRVNfcGFja2VkX2RlcHRoX3N0ZW5j
aWwuCiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcjsKQEAgLTExMCw2
ICsxMzIsMTAgQEAgcHJpdmF0ZToKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1wbGVG
Qk87CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CiAKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBtX3Bs
YXRmb3JtTGF5ZXI7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBSZXRhaW5QdHI8
V2ViR0xMYXllcj4gbV9wbGF0Zm9ybUxheWVyOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVm
ZmVyTWFjLm1tCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzks
OCArMzksMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1
ZmZlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCi0gICAg
OiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBw
YWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICA6IG1fc2VwYXJhdGVC
YWNraW5nVGV4dHVyZShzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgICwgbV9zY2lzc29yRW5h
YmxlZChmYWxzZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKC0xLCAt
MSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRl
bnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBv
cnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCkBAIC01Miw2ICs1NSw5
IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAsIG1fbXVs
dGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogeworICAg
IC8vIFN1cHBvcnQgZm9yIGEgc2VwYXJhdGUgYmFja2luZyB0ZXh0dXJlIGhhcyBvbmx5IGJlZW4g
ZW5hYmxlZCBmb3IKKyAgICAvLyB0aGUgY2hyb21pdW0gcG9ydC4KKyAgICBBU1NFUlQoIW1fc2Vw
YXJhdGVCYWNraW5nVGV4dHVyZSk7CiAgICAgQVNTRVJUKG1fZmJvKTsKICAgICBpZiAoIW1fZmJv
KSB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNwcAkocmV2aXNp
b24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvcXQvRHJh
d2luZ0J1ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsMTEgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6
ZSYgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4
dGVuc2lvblN1cHBvcnRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNr
ZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxF
eHRlbnNpb25TdXBwb3J0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2Vw
YXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICA6IG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZShzZXBh
cmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgICwgbV9zY2lzc29yRW5hYmxlZChmYWxzZSkKKyAgICAs
IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlz
YW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAg
ICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0
ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCkBAIC00Nyw2ICs1MCw5IEBAIERyYXdpbmdCdWZmZXI6
OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAg
ICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogeworICAgIC8vIFN1cHBvcnQgZm9yIGEg
c2VwYXJhdGUgYmFja2luZyB0ZXh0dXJlIGhhcyBvbmx5IGJlZW4gZW5hYmxlZCBmb3IKKyAgICAv
LyB0aGUgY2hyb21pdW0gcG9ydC4KKyAgICBBU1NFUlQoIW1fc2VwYXJhdGVCYWNraW5nVGV4dHVy
ZSk7CiAgICAgQVNTRVJUKG1fZmJvKTsKICAgICBpZiAoIW1fZmJvKSB7CiAgICAgICAgIGNsZWFy
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJKHJldmlzaW9u
IDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDggKzEyOCwxMCBA
QCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Jlc291cmNlU2FmZSgpCiB9CiAKICNpZiAhUExB
VEZPUk0oUVQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAvLyBE
cmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4K
KyAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIpOwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52
YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBj
YW52YXMtPmJ1ZmZlcigpOwogCkBAIC0xNjIsOCArMTY0LDEwIEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50Q29tcG9zaXRlZFIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVBhc3NSZWZQ
dHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9J
bWFnZURhdGEoKQorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVy
KQogeworICAgIC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGltcGxlbWVudGVkIGluIENo
cm9taXVtIHBvcnRzLgorICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7CiAgICAgLy8gUmVhZGlu
ZyBwcmVtdWx0aXBsaWVkIGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWluZywgd2hp
Y2ggaXMKICAgICAvLyBsb3NzeQogICAgIGlmIChtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MjAsOCArNDIwLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1h
a2VDb250ZXh0Q3VycmUKICAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogeworICAgIC8vIERyYXdp
bmdCdWZmZXIgc3VwcG9ydCBvbmx5IGltcGxlbWVudGVkIGluIENocm9taXVtIHBvcnRzLgorICAg
IEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7CiAgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52
YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwpA
QCAtNDMwLDggKzQzMiwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1JlCiB9CiAKICNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQotUGFzc1JlZlB0cjxJbWFnZURh
dGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgp
CitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CisgICAg
Ly8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0gcG9y
dHMuCisgICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKICAgICAvLyBGSVhNRTogVGhpcyBuZWVk
cyB0byBiZSBpbXBsZW1lbnRlZCBmb3IgcHJvcGVyIG5vbi1wcmVtdWx0aXBsaWVkLWFscGhhCiAg
ICAgLy8gc3VwcG9ydC4KICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCShyZXZpc2lvbiA5OTU5NykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMTEtMDggIEplZmYgVGltYW51
cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUGF0Y2ggdGhhdCBp
bXBsZW1lbnRpbmcgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAgICAg
dG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRvci4K
KyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRvIEZC
T3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuIEFsbCBQbGF0
Zm9ybUxheWVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMKKyAgICAgICAgcGVyZm9ybWVkIGJ5IHRo
ZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICBDaGFuZ2VzIGFyZSBvbmx5IHJlbGV2YW50IHRvIENo
cm9taXVtIHBvcnRzLiBGdW5jdGlvbmFsaXR5IGlzCisgICAgICAgIHVuY2hhbmdlZCBmb3Igb3Ro
ZXIgcG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MzIwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwOiBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUgbm8gbG9uZ2VyIGNhY2hlcworICAgICAgICB0aGUgV2ViR0xMYXllckNocm9taXVtIGlu
c3RhbmNlLiAgSW5zdGVhZCwgaXQgaXMgYWNjZXNzZWQgdmlhIERyYXdpbmdCdWZmZXIgaW5zdGFu
Y2VzCisgICAgICAgIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gdGhlIG5lY2Vzc2FyeSByb3V0aW5l
cy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0lt
YWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9y
bUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHNyYy9HcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaDoKKwogMjAxMS0xMS0wOCAgWXVyeSBTZW1pa2hhdHNreSAg
PHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBkaXNwbGF5IG5v
dGlmaWNhdGlvbiBpbiB0aGUgZnJvbnQtZW5kIHdoZW4gaW5zcGVjdGVkIHdvcmtlciB0ZXJtaW5h
dGVzCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENo
cm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFw
aGljc0NvbnRleHQzRENocm9taXVtLmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsMTAgKzM1LDEwIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
IAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVt
LmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNocm9t
ZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJEcmF3aW5nQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgpA
QCAtMTYzLDYgKzE2MywyMCBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVH
cmFwCiAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3ND
b250ZXh0RnJvbVdlYkNvbnRleHQod2ViQ29udGV4dC5yZWxlYXNlKCksIGF0dHJzLCBob3N0V2lu
ZG93LCByZW5kZXJTdHlsZSwgdGhyZWFkVXNhZ2UpOwogfQogCit2b2lkIGdldERyYXdpbmdQYXJh
bWV0ZXJzKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNELAorICAgICAgICAgICAgICAgICAgICAgICAgICBQ
bGF0Zm9ybTNET2JqZWN0KiBmcmFtZUJ1ZmZlcklkLCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCkK
K3sKKyAgICBpZiAoZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAqZnJhbWVCdWZmZXJJZCA9IGRy
YXdpbmdCdWZmZXItPmZyYW1lYnVmZmVyKCk7CisgICAgICAgICp3aWR0aCA9IGRyYXdpbmdCdWZm
ZXItPnNpemUoKS53aWR0aCgpOworICAgICAgICAqaGVpZ2h0ID0gZHJhd2luZ0J1ZmZlci0+c2l6
ZSgpLmhlaWdodCgpOworICAgIH0gZWxzZSB7CisgICAgICAgICpmcmFtZUJ1ZmZlcklkID0gMDsK
KyAgICAgICAgKndpZHRoID0gZ3JhcGhpY3NDb250ZXh0M0QtPndpZHRoKCk7CisgICAgICAgICpo
ZWlnaHQgPSBncmFwaGljc0NvbnRleHQzRC0+aGVpZ2h0KCk7CisgICAgfQorfQorCiB9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKIAogUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGb3JBbm90aGVyVGhyZWFk
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2lu
ZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCkBAIC0yMTIs
MTcgKzIyNiw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwcmVwYXJlVGUKICAg
ICBtX2ltcGwtPnByZXBhcmVUZXh0dXJlKCk7CiB9CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCi1XZWJHTExheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
cGxhdGZvcm1MYXllcigpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAg
IGlmICghbV9jb21wb3NpdGluZ0xheWVyKQotICAgICAgICBtX2NvbXBvc2l0aW5nTGF5ZXIgPSBX
ZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKLSNlbmRpZgotICAgIHJldHVybiBtX2NvbXBv
c2l0aW5nTGF5ZXIuZ2V0KCk7Ci19Ci0jZW5kaWYKLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCiB7CiAgICAgbV9sYXllckNvbXBvc2l0ZWQgPSBm
YWxzZTsKQEAgLTMwNSwzMSArMzA4LDM0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpwYWludEZyYW0KICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVy
KiBkcmF3aW5nQnVmZmVyKQogewogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNvbnRl
eHQtPmNhbnZhcygpLT5idWZmZXIoKTsKLSAgICBwYWludEZyYW1lYnVmZmVyVG9DYW52YXMoMCwg
bV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgpLCAhbV9pbXBsLT5nZXRDb250ZXh0QXR0
cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwgaW1hZ2VCdWZmZXIpOworICAgIFBsYXRmb3Jt
M0RPYmplY3QgZnJhbWVidWZmZXJJZDsKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBnZXRE
cmF3aW5nUGFyYW1ldGVycyhkcmF3aW5nQnVmZmVyLCBtX2ltcGwuZ2V0KCksICZmcmFtZWJ1ZmZl
cklkLCAmd2lkdGgsICZoZWlnaHQpOworICAgIHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhmcmFt
ZWJ1ZmZlcklkLCB3aWR0aCwgaGVpZ2h0LCAhbV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygp
LnByZW11bHRpcGxpZWRBbHBoYSwgaW1hZ2VCdWZmZXIpOwogfQogCiBib29sIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIGlmIChwbGF0Zm9ybUxheWVyKCkpCi0gICAgICAgIHJldHVybiBwbGF0Zm9ybUxheWVy
KCktPnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMoY29udGV4dC0+Y2FudmFzKCktPmJ1ZmZl
cigpKTsKLSNlbmRpZgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURh
dGE+IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFn
ZURhdGEoKQorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1
ZmZlcikKIHsKICAgICBpZiAobV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRp
cGxpZWRBbHBoYSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgUmVmUHRyPEltYWdlRGF0
YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZShtX2ltcGwtPndpZHRoKCks
IG1faW1wbC0+aGVpZ2h0KCkpKTsKKworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXJJ
ZDsKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBnZXREcmF3aW5nUGFyYW1ldGVycyhkcmF3
aW5nQnVmZmVyLCBtX2ltcGwuZ2V0KCksICZmcmFtZWJ1ZmZlcklkLCAmd2lkdGgsICZoZWlnaHQp
OworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUo
SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gaW1h
Z2VEYXRhLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOwotICAgIHNpemVfdCBidWZmZXJTaXplID0g
NCAqIG1faW1wbC0+d2lkdGgoKSAqIG1faW1wbC0+aGVpZ2h0KCk7CisgICAgc2l6ZV90IGJ1ZmZl
clNpemUgPSA0ICogd2lkdGggKiBoZWlnaHQ7CiAKLSAgICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVi
dWZmZXIocGl4ZWxzLCBidWZmZXJTaXplLCAwLCBtX2ltcGwtPndpZHRoKCksIG1faW1wbC0+aGVp
Z2h0KCkpOworICAgIG1faW1wbC0+cmVhZEJhY2tGcmFtZWJ1ZmZlcihwaXhlbHMsIGJ1ZmZlclNp
emUsIGZyYW1lYnVmZmVySWQsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBidWZmZXJTaXplOyBpICs9IDQpCiAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0s
IHBpeGVsc1tpICsgMl0pOwpAQCAtMTAwOSw5ICsxMDE1LDYgQEAgR3JhcGhpY3NDb250ZXh0M0Q6
OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogCiBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29u
dGV4dDNEKCkKIHsKLSAgICBXZWJHTExheWVyQ2hyb21pdW0qIGNhbnZhc0xheWVyID0gbV9wcml2
YXRlLT5wbGF0Zm9ybUxheWVyKCk7Ci0gICAgaWYgKGNhbnZhc0xheWVyKQotICAgICAgICBjYW52
YXNMYXllci0+c2V0Q29udGV4dCgwKTsKICAgICBtX3ByaXZhdGUtPnNldENvbnRleHRMb3N0Q2Fs
bGJhY2sobnVsbHB0cik7CiAgICAgbV9wcml2YXRlLT5zZXRTd2FwQnVmZmVyc0NvbXBsZXRlQ2Fs
bGJhY2tDSFJPTUlVTShudWxscHRyKTsKIH0KQEAgLTEwNTYsOSArMTA1OSw3IEBAIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzUmVzb3VyY2VTYWZlKCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiBQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXll
cigpIGNvbnN0CiB7Ci0gICAgV2ViR0xMYXllckNocm9taXVtKiBjYW52YXNMYXllciA9IG1fcHJp
dmF0ZS0+cGxhdGZvcm1MYXllcigpOwotICAgIGNhbnZhc0xheWVyLT5zZXRDb250ZXh0KHRoaXMp
OwotICAgIHJldHVybiBjYW52YXNMYXllcjsKKyAgICByZXR1cm4gMDsKIH0KICNlbmRpZgogCkBA
IC0xMjE0LDggKzEyMTUsMTYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3Np
dGVkKAogICAgIHJldHVybiBtX3ByaXZhdGUtPmxheWVyQ29tcG9zaXRlZCgpOwogfQogCi1ERUxF
R0FURV9UT19JTlRFUk5BTF8xKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzLCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMX1IocGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEsIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoY29udGV4dCwgZHJh
d2luZ0J1ZmZlcik7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciogZHJhd2lu
Z0J1ZmZlcikKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5wYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YShkcmF3aW5nQnVmZmVyKTsKK30KKwogREVMRUdBVEVfVE9fSU5URVJOQUxfMVIo
cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0Kiwg
Ym9vbCkKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDYsMTAgKzQ2LDggQEAgY2xhc3MgV2ViVmlld0ltcGw7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNzIEV4dGVuc2lvbnMzRENocm9taXVtOwot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLWNsYXNzIFdlYkdMTGF5ZXJDaHJvbWl1
bTsKLSNlbmRpZgogY2xhc3MgR3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcjsKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjsK
IApAQCAtOTUsMTcgKzkzLDE0IEBAIHB1YmxpYzoKICAgICBib29sIGxheWVyQ29tcG9zaXRlZCgp
IGNvbnN0OwogICAgIHZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgpOwogCi0gICAgdm9pZCBwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7CisgICAg
dm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
KiwgRHJhd2luZ0J1ZmZlciopOwogICAgIHZvaWQgcGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGlu
dCBmcmFtZWJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHByZW11bHRpcGx5QWxw
aGEsIEltYWdlQnVmZmVyKik7Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKTsKICAgICBib29sIHBh
aW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKICAgICBib29sIHBhaW50Q29tcG9zaXRlZFJl
c3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7CiAKICAgICB2b2lkIHByZXBh
cmVUZXh0dXJlKCk7CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgV2Vi
R0xMYXllckNocm9taXVtKiBwbGF0Zm9ybUxheWVyKCk7Ci0jZW5kaWYKICAgICBib29sIGlzR0xF
UzJDb21wbGlhbnQoKSBjb25zdDsKIAogICAgIHZvaWQgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7
CkBAIC0zMzAsOSArMzI1LDYgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIFJlc291cmNlU2FmZXR5
IG1fcmVzb3VyY2VTYWZldHk7CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0g
ICAgUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gbV9jb21wb3NpdGluZ0xheWVyOwotI2VuZGlm
CiAjaWYgVVNFKFNLSUEpCiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIENh
bnZhcydzIGJhY2tpbmcgc3RvcmUgZG9uJ3QKICAgICAvLyBtYXRjaCB0aG9zZSB0aGF0IHdlIHdl
cmUgZ2l2ZW4gaW4gdGhlIG1vc3QgcmVjZW50IGNhbGwgdG8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114186</attachid>
            <date>2011-11-08 18:01:32 -0800</date>
            <delta_ts>2011-11-08 19:29:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111108205835.patch</filename>
            <type>text/plain</type>
            <size>60770</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NTk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTggQEAKKzIwMTEtMTEtMDggIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUGF0Y2ggdGhh
dCBpbXBsZW1lbnRpbmcgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuIEFsbCBQ
bGF0Zm9ybUxheWVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMKKyAgICAgICAgcGVyZm9ybWVkIGJ5
IHRoZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICBDaGFuZ2VzIGFyZSBvbmx5IHJlbGV2YW50IHRv
IENocm9taXVtIHBvcnRzLiBGdW5jdGlvbmFsaXR5IGlzCisgICAgICAgIHVuY2hhbmdlZCBmb3Ig
b3RoZXIgcG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzIwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDogQ29uc3RydWN0IGEg
RHJhd2luZ0J1ZmZlcgorICAgICAgICBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCBmb3J3YXJk
IGFsbCBmcmFtZWJ1ZmZlciBtYW5hZ2VtZW50IGNhbGxzIHRvCisgICAgICAgIGl0LgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
SWZDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZWJ1ZmZlcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oOiAgV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNlcworICAgICAgICBh
cmUgbm8gbG9uZ2VyIHRyYWNrZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QuIENhbGxlcnMgY2FuIG5v
dyBwYXNzIGEKKyAgICAgICAgRHJhd2luZ0J1ZmZlciBpbnN0YW5jZSB0byBwcm92aWRlIGFjY2Vz
cyB0byB0aGUgV2ViR0xMYXllckNocm9taXVtIGRhdGEuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlQ29sb3JUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpmcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjp+V2ViR0xM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJh
d3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21p
dW06OnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TExheWVyQ2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDogV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNl
cworICAgICAgICBoYXZlIGEgcmF3IHJlZmVyZW5jZSB0byB0aGVpciBvd25pbmcgRHJhd2luZ0J1
ZmZlci4gIFRoaXMgcmVmZXJlbmNlIGlzIHNldCB0byBOVUxMIG9uCisgICAgICAgIGRlc3RydWN0
aW9uIG9mIHRoZSBEcmF3aW5nQnVmZmVyLiAgVGhpcyBmb2xsb3dzIHRoZSBvbGQgY29kZSwgd2hp
Y2ggaGFkIHRoZSBXZWJHTExheWVyQ2hyb21pdW0KKyAgICAgICAgcmVmZXIgcmF3bHkgdG8gYSBH
cmFwaGljc0NvbnRleHQzRCBpbnN0YW5jZSwgd2hpY2ggd2FzIGFsc28gcmV2b2tlZCBkdXJpbmcg
dGVhci1kb3duIG9mIHRoZQorICAgICAgICBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmNwcDogVGhlIERyYXdpbmdCdWZmZXIgaXMgbm93IHRoZQorICAgICAgICBjZW50cmFs
IHBvaW50IGJldHdlZW4gdGhlIEdyYXBoaWNzQ29udGV4dDNELCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQsIGFuZAorICAgICAgICBXZWJHTExheWVyQ2hyb21pdW0gY2xhc3Nlcy4gIEdyYXBoaWNzQ29u
dGV4dDNELCBhbmQgV2ViR0xMYXllckNocm9taXVtIG9ubHkKKyAgICAgICAgZGVwZW5kIG9uIHRo
ZSBEcmF3aW5nQnVmZmVyIGludGVyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhckZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpt
dWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpkaXNjYXJkUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6c2V0U2Npc3Nv
ckVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1
ZmZlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSk6CisKIDIwMTEtMTEtMDggIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgog
CiAgICAgICAgIFJlbW92ZSBnZXQoKSBkZWZpbmVkIGluIENyZWRlbnRpYWxTdG9yYWdlU291cC5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUs
NyArMzY1LDEyIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFIKICAg
ICB9CiAKICAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRydWU7CisjaWYgUExBVEZPUk0o
Q0hST01JVU0pCisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IHRydWU7CisjZWxzZQog
ICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBmYWxzZTsKKyNlbmRpZgorCiAKICAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CiAKQEAgLTM4MSw2ICszODYsNyBAQCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRy
aWJ1dGVzKQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCiAgICAg
LCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQogICAgICwgbV9y
ZXN0b3JlQWxsb3dlZChmYWxzZSkKICAgICAsIG1fcmVzdG9yZVRpbWVyKHRoaXMpCiAgICAgLCBt
X3ZpZGVvQ2FjaGUoNCkKQEAgLTM4OCw2ICszOTQsMTUgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiB7CiAg
ICAgQVNTRVJUKG1fY29udGV4dCk7CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBD
cmVhdGUgdGhlIERyYXdpbmdCdWZmZXIgYW5kIGluaXRpYWxpemUgdGhlIHBsYXRmb3JtIGxheWVy
LgorICAgIG1fZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShtX2NvbnRleHQu
Z2V0KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSksICFt
X2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKTsKKyNlbmRpZgorCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisKICAgICBz
ZXR1cEZsYWdzKCk7CiAgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKIH0KQEAgLTQ1Myw2ICs0
NjgsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5lCiAgICAgaWYg
KCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CiAKKyAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KElu
dFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOworCiAgICAgbV9j
b250ZXh0LT5yZXNoYXBlKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwog
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSk7CiAKQEAgLTQ5Myw3ICs1MTEsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6bWFya0NvbnRleHRDCiB7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQogICAg
ICAgICByZXR1cm47CisKICAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOworCiAg
ICAgbV9sYXllckNsZWFyZWQgPSBmYWxzZTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7CkBA
IC01MjMsOCArNTQzLDEyIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcklmQ29t
cG8KICAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVh
ciB0aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIuCiAgICAgYm9vbCBjb21iaW5lZENs
ZWFyID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsKIAotICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsK
KyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgIH0KICAgICBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAg
aWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVG
RkVSX0JJVCkpCiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NvbG9yTWFza1swXSA/
IG1fY2xlYXJDb2xvclswXSA6IDAsCkBAIC01ODAsMjEgKzYwNCw1MCBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpCiAgICAgLy8gaGFwcGVuZWQgYWZ0ZXIgaXQgd2Fz
IGNvbXBvc2l0ZWQgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgaWYg
KG1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkgJiYgIW1fYXR0cmlidXRlcy5wcmVzZXJ2ZURy
YXdpbmdCdWZmZXIpIHsKICAgICAgICAgbV9jb250ZXh0LT5wYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXModGhpcyk7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFBM
QVRGT1JNKENIUk9NSVVNKQorICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5wYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXModGhpcyk7
CisjZW5kaWYKKwogICAgICAgICBjYW52YXMoKS0+bWFrZVByZXNlbnRhdGlvbkNvcHkoKTsKICAg
ICB9IGVsc2UKICAgICAgICAgY2FudmFzKCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOwogICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7CisKICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkgJiYg
IW1fbGF5ZXJDbGVhcmVkKQogICAgICAgICByZXR1cm47CisKICAgICBjYW52YXMoKS0+Y2xlYXJD
b3BpZWRJbWFnZSgpOwogICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKLSAgICBtX2Nv
bnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKHRoaXMpOworCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKyAgICBt
X2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKHRoaXMsIG1fZHJhd2luZ0J1
ZmZlci5nZXQoKSk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVi
dWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci0+YmluZCgpOworICAgIH0KIH0KIAogUGFzc1JlZlB0cjxJbWFnZURhdGE+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQogewog
ICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGlt
YWdlRGF0YSA9IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEobV9k
cmF3aW5nQnVmZmVyLmdldCgpKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAg
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8o
bV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlRGF0YTsK
IH0KIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIo
KSBjb25zdApAQCAtNjI2LDE2ICs2NzksMjUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnJlc2hhcGUoaW50CiAKICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIG1hcmsgdGhlIGNhbnZhcyBh
cyBkaXJ0eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2UgYnVmZmVyIHdpbGwgYWxzbyBz
dGFydCBvZmYKICAgICAvLyBjbGVhciAoYW5kIHRoaXMgbWF0Y2hlcyB3aGF0IHJlc2hhcGUgd2ls
bCBkbykuCi0gICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOworICAgIGlmICht
X2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KSk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lk
dGgsIGhlaWdodCk7CiB9CiAKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZm
ZXJXaWR0aCgpIGNvbnN0CiB7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7CisKICAgICByZXR1cm4gbV9jb250
ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7CiB9CiAKIGludCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdAogeworICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNpemUo
KS5oZWlnaHQoKTsKKwogICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkuaGVpZ2h0KCk7CiB9CiAKQEAgLTc1Nyw3ICs4MTksMTEgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZgogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwotICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOworICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIEluc3RlYWQgb2Yg
YmluZGluZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KKyAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5iaW5kKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwogICAgIGlmIChidWZmZXIpCiAg
ICAgICAgIGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0xMDk2LDkgKzExNjIsMjEgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNs
ZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpCisgICAgaWYgKGlz
UmVzb3VyY2VTYWZlKCkpIHsKKyAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVl
ZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PmNvbW1pdCgpOworCiAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0gICAg
ZWxzZSB7CisKKyAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAg
ICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcp
CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwogICAgICAgICBHQzNEaW50
IGNsaXBwZWRYLCBjbGlwcGVkWTsKICAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0aCwgY2xp
cHBlZEhlaWdodDsKICAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRC
b3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xp
cHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7CkBAIC0x
MTEwLDYgKzExODgsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFn
ZQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fY29udGV4dC0+
Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIGJvcmRlcik7CisKKyAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlm
IG5lZWRlZAorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwogICAgIH0KICAgICAv
LyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUg
YmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgogICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSk7CkBAIC0xMTQxLDcgKzEyMjMsMTUgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNvcHlUZXhTdWJJbQogICAgIH0KICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwog
ICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQorICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZl
ciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICBpZiAoIW1fZnJh
bWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
KworICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgIGlm
ICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEdDM0RpbnQgY2xp
cHBlZFgsIGNsaXBwZWRZOwogICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVk
SGVpZ2h0OwpAQCAtMTE2NSwxMSArMTI1NSwyOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleFN1YkltCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2NvbnRleHQtPnRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKICAgICAgICAgICAgIGlmIChjbGlwcGVkV2lk
dGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAgICAgLy8gQ29tbWl0
IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAg
ICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikK
KyAgICAgICAgICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwogICAgICAg
ICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCArIGNsaXBwZWRYIC0geCwgeW9mZnNldCArIGNsaXBwZWRZIC0geSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xp
cHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKKworICAgICAgICAgICAgICAgLy8gUmVzdG9yZSBE
cmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPmJpbmQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUu
Zy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5jb21taXQoKTsKKwogICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKwor
ICAgICAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgICAgICAg
ICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAg
ICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgICAgIH0KICAgICB9CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTEyODYsNyArMTM5MywxMCBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWViCiAgICAgaWYgKGZyYW1l
YnVmZmVyID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7CiAgICAgICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nID0gMDsKICAgICAgICAgLy8gSGF2ZSB0byBjYWxsIGJpbmRGcmFtZWJ1ZmZlciBoZXJl
IHRvIGJpbmQgYmFjayB0byBpbnRlcm5hbCBmYm8uCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKICAgICB9CiB9CiAKQEAgLTEzNzMsOCAr
MTQ4MywxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZShHQzNECiB7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RF
U1QpCisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CiAg
ICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9z
Y2lzc29yRW5hYmxlZCk7CisgICAgfQogICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXApOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0xNzE1LDggKzE4MjgsMTEg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZShHQzNEZQogewogICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKQorICAg
IGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewogICAgICAgICBt
X3NjaXNzb3JFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5h
YmxlZCk7CisgICAgfQogICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI5MjMsNyArMzAzOSwxNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHCiAgICAgfQogICAgIGNsZWFySWZDb21w
b3NpdGVkKCk7CiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKKworICAg
IC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxp
bmcpCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICBtX2NvbnRleHQtPnJlYWRQ
aXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKworICAgIC8v
IFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJC
aW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5k
KCk7CisKICNpZiBPUyhEQVJXSU4pCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24g
d2hlbiBHTCBkcml2ZXIgYnVnIG9uIE1hYyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyB3aGVuIGFs
cGhhIGlzIG9mZiwgcmVhZFBpeGVscyBzaG91bGQgc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9m
IDAuCkBAIC0zOTc1LDYgKzQxMDEsMTggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZv
cmNlUmVzdG9yZQogICAgIG1heWJlUmVzdG9yZUNvbnRleHQoU3ludGhldGljTG9zdENvbnRleHQp
OwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorUGxhdGZvcm1MYXllciog
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyNpZiBQTEFU
Rk9STShDSFJPTUlVTSkKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICByZXR1cm4g
bV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUxheWVyKCk7CisjZW5kaWYKKworICAgIHJldHVybiBt
X2NvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cmVtb3ZlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgbV9j
YW52YXNPYmplY3RzLnJlbW92ZShvYmplY3QpOwpAQCAtNDE2NiwxNCArNDMwNCwxNCBAQCBpbnQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lCiB7CiAgICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKICAgICAgICAg
cmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgpOwotICAgIHJldHVybiBtX2Nv
bnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsKKyAgICByZXR1cm4g
bV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKSA6IG1fY29u
dGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOwogfQogCiBpbnQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCkKIHsKICAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgp
KQogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEhlaWdodCgpOwotICAg
IHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7
CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhl
aWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgp
OwogfQogCiBXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXh0
dXJlQmluZGluZyhHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQpA
QCAtNDg3OSw2ICs1MDE3LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJl
c3RvcmUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8vIENvbnN0cnVjdCBhIG5ldyBk
cmF3aW5nIGJ1ZmZlciB3aXRoIHRoZSBuZXcgR3JhcGhpY3NDb250ZXh0M0QuCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJj
ZXMoKTsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyID0gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKG1f
Y29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksICFtX2F0dHJpYnV0ZXMucHJl
c2VydmVEcmF3aW5nQnVmZmVyKTsKKyAgICB9CisKICAgICBtX2NvbnRleHQgPSBjb250ZXh0Owog
ICAgIG1fY29udGV4dExvc3QgPSBmYWxzZTsKICAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICNkZWZpbmUgV2ViR0xSZW5kZXJpbmdDb250ZXh0X2gKIAogI2luY2x1ZGUgIkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCkBAIC0yOTIsNyArMjkzLDcgQEAgcHVibGljOgogCiAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0
LmdldCgpOyB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC0+
cGxhdGZvcm1MYXllcigpOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpOwpAQCAtMzU4LDYgKzM1OSwxMCBAQCBwdWJsaWM6CiAKICAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IG1fY29udGV4dDsKIAorICAgIC8vIE9wdGlvbmFsIHN0cnVjdHVyZSBmb3Ig
cmVuZGVyaW5nIHRvIGEgRHJhd2luZ0J1ZmZlciwgaW5zdGVhZCBvZiBkaXJlY3RseQorICAgIC8v
IHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2NvbnRleHQuCisgICAgUmVmUHRyPERyYXdpbmdCdWZm
ZXI+IG1fZHJhd2luZ0J1ZmZlcjsKKwogICAgIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJl
c3RvcmVUaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgewogICAgIHB1YmxpYzoKICAgICAgICAgZXhw
bGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzdG9yZVRpbWVyKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCkgOiBtX2NvbnRleHQoY29udGV4dCkgeyB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3Bw
CShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTIgKzU3LDYgQEAgdWlu
dDhfdCBjb252ZXJ0Q29sb3IxNkJpZ1RvOCh1aW50MTZfdCB2YQogCiB9IC8vIGFub255bW91cyBu
YW1lc3BhY2UKIAotCi1QYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVEcmF3aW5nQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgcmV0dXJu
IERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBzaXplKTsKLX0KLQogYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEdDM0RpbnQgdW5wYWNrQWxpZ25tZW50KQogewogICAgIEFTU0VSVCh1bnBhY2tBbGlnbm1lbnQg
PT0gMSB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gMiB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gNCB8fCB1
bnBhY2tBbGlnbm1lbnQgPT0gOCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDk5NTkzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTAwLDggKzUwMCw2IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZvaWQg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNy
ZWF0ZURyYXdpbmdCdWZmZXIoY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKCkpOwotICAgIAogI2lm
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oUVQpCiAgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9uLCBibGl0IGZyb20gbXVs
dGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwpA
QCAtNzkxLDggKzc4OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQo
KTsKICAgICBib29sIGxheWVyQ29tcG9zaXRlZCgpIGNvbnN0OwogCi0gICAgdm9pZCBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7Ci0gICAgUGFz
c1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7Cisg
ICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250
ZXh0KiwgRHJhd2luZ0J1ZmZlciopOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKik7CiAgICAgYm9vbCBwYWlu
dENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwogCiAj
aWYgUExBVEZPUk0oUVQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5j
cHAJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsMTAgQEAKIAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAorI2luY2x1ZGUgIkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiV2ViR0xMYXllckNo
cm9taXVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDgsNyArNTEsNiBAQCBzdGF0
aWMgdW5zaWduZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUoR3JhCiAgICAgY29udGV4dC0+dGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CiAgICAg
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBf
VE9fRURHRSk7CiAgICAgY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKLSAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1
cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9mZnNjcmVl
bkNvbG9yVGV4dHVyZSwgMCk7CiAKICAgICByZXR1cm4gb2Zmc2NyZWVuQ29sb3JUZXh0dXJlOwog
fQpAQCAtNTYsNDYgKzU4LDc0IEBAIHN0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNvbG9yVGV4dHVy
ZShHcmEKIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25T
dXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhT
dGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9u
U3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlQmFj
a2luZ1RleHR1cmUpCisgICAgOiBtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUoc2VwYXJhdGVCYWNr
aW5nVGV4dHVyZSkKKyAgICAsIG1fc2Npc3NvckVuYWJsZWQoZmFsc2UpCisgICAgLCBtX2NvbnRl
eHQoY29udGV4dCkKICAgICAsIG1fc2l6ZSgtMSwgLTEpCiAgICAgLCBtX211bHRpc2FtcGxlRXh0
ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9w
YWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9mYm8oMCkKICAgICAsIG1fY29sb3JCdWZmZXIoMCkK
KyAgICAsIG1fYmFja2luZ0NvbG9yQnVmZmVyKDApCiAgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cigwKQogICAgICwgbV9kZXB0aEJ1ZmZlcigwKQogICAgICwgbV9zdGVuY2lsQnVmZmVyKDApCiAg
ICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIo
MCkKIHsKLSAgICBtX2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9m
Ym8pOwotICAgIG1fY29sb3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShjb250ZXh0LCBz
aXplKTsKLSAgICBjcmVhdGVTZWNvbmRhcnlCdWZmZXJzKCk7Ci0gICAgaWYgKCFyZXNldChzaXpl
KSkgewotICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpbml0aWFsaXplKHNpemUpOwogfQogCiBEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZl
cigpCiB7CisgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAgICAgICAgbV9wbGF0Zm9ybUxheWVy
LT5zZXREcmF3aW5nQnVmZmVyKDApOworCiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGNsZWFyKCk7CiB9CiAKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6aW5pdGlhbGl6
ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIG1fZmJvID0gbV9jb250ZXh0LT5jcmVhdGVG
cmFtZWJ1ZmZlcigpOworCisgICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICAg
ICAgbV9iYWNraW5nQ29sb3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9yVGV4dHVyZShtX2NvbnRleHQu
Z2V0KCksIHNpemUpOworCisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgbV9jb2xvckJ1ZmZlciA9IGdlbmVy
YXRlQ29sb3JUZXh0dXJlKG1fY29udGV4dC5nZXQoKSwgc2l6ZSk7CisgICAgbV9jb250ZXh0LT5m
cmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOworICAgIGNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMoKTsK
KyAgICBpZiAoIXJlc2V0KHNpemUpKSB7CisgICAgICAgIG1fY29udGV4dC5jbGVhcigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogdm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCkKIHsKICAgICBp
ZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICBpZiAobXVsdGlzYW1wbGUoKSkKICAgICAgICAgY29tbWl0KCk7
Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3NlcGFy
YXRlQmFja2luZ1RleHR1cmUpIHsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmFja2luZ0Nv
bG9yQnVmZmVyKTsKKyAgICAgICAgdW5zaWduZWQgY29sb3JGb3JtYXQgPSBtX2NvbnRleHQtPmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEgPyBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSA6IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0I7CisgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGNvbG9yRm9ybWF0LCAwLCAwLCBzaXpl
KCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCAwKTsKKyAgICB9CisKKyAgICBpZiAobXVsdGlz
YW1wbGUoKSkKKyAgICAgICAgYmluZCgpOworCiAgICAgbV9jb250ZXh0LT5mbHVzaCgpOwogfQog
I2VuZGlmCkBAIC0xMDMsMTMgKzEzMywzMSBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OnB1Ymxpc2hU
b1BsYXRmb3JtTGF5CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1M
YXllciogRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYXllcigpCiB7Ci0gICAgcmV0dXJuIDA7Cisg
ICAgaWYgKCFtX3BsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgbV9wbGF0Zm9ybUxheWVyID0gV2Vi
R0xMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgICAgIG1fcGxhdGZvcm1MYXllci0+c2V0
RHJhd2luZ0J1ZmZlcih0aGlzKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVy
LmdldCgpOwogfQogI2VuZGlmCiAKIFBsYXRmb3JtM0RPYmplY3QgRHJhd2luZ0J1ZmZlcjo6cGxh
dGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29sb3JCdWZmZXI7Cisg
ICAgcmV0dXJuIG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSA/IG1fYmFja2luZ0NvbG9yQnVmZmVy
IDogbV9jb2xvckJ1ZmZlcjsKIH0KIAorUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVyOjpm
cmFtZWJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmJvOworfQorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBEcmF3aW5nQnVmZmVyOjpwYWludENvbXBvc2l0
ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAg
ICBpZiAobV9wbGF0Zm9ybUxheWVyKQorICAgICAgICBtX3BsYXRmb3JtTGF5ZXItPnBhaW50UmVu
ZGVyZWRSZXN1bHRzVG9DYW52YXMoY29udGV4dC0+Y2FudmFzKCktPmJ1ZmZlcigpKTsKK30KKyNl
bmRpZgorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAj
aW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVy
LmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgpAQCAtNDgs
NyArNDksNiBAQCBQYXNzUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gV2ViR0xMYXllCiAKIFdl
YkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVs
ZWdhdGUpCiAgICAgOiBDYW52YXNMYXllckNocm9taXVtKGRlbGVnYXRlKQotICAgICwgbV9jb250
ZXh0KDApCiAgICAgLCBtX3RleHR1cmVDaGFuZ2VkKHRydWUpCiAgICAgLCBtX3RleHR1cmVVcGRh
dGVkKGZhbHNlKQogewpAQCAtNTYsMTMgKzU2LDEzIEBAIFdlYkdMTGF5ZXJDaHJvbWl1bTo6V2Vi
R0xMYXllckNocm9taXVtKEMKIAogV2ViR0xMYXllckNocm9taXVtOjp+V2ViR0xMYXllckNocm9t
aXVtKCkKIHsKLSAgICBpZiAobV9jb250ZXh0ICYmIGxheWVyVHJlZUhvc3QoKSkKLSAgICAgICAg
bGF5ZXJUcmVlSG9zdCgpLT5zdG9wUmF0ZUxpbWl0ZXIobV9jb250ZXh0KTsKKyAgICBpZiAoY29u
dGV4dCgpICYmIGxheWVyVHJlZUhvc3QoKSkKKyAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdG9w
UmF0ZUxpbWl0ZXIoY29udGV4dCgpKTsKIH0KIAogYm9vbCBXZWJHTExheWVyQ2hyb21pdW06OmRy
YXdzQ29udGVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtX2NvbnRleHQgJiYgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6Tk9fRVJST1IpOworICAgIHJldHVybiAoY29udGV4dCgpICYmIGNvbnRleHQo
KS0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKIH0KIAogdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIHJlbmRlcmVyQ29udGV4
dCwgQ0NUZXh0dXJlVXBkYXRlciYpCkBAIC04NSwxMSArODUsOSBAQCB2b2lkIFdlYkdMTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvCiAgICAgfQogICAgIC8vIFVwZGF0ZSB0aGUgY29udGVu
dHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KICAgICBpZiAoIW1fZGly
dHlSZWN0LmlzRW1wdHkoKSAmJiBtX3RleHR1cmVVcGRhdGVkKSB7Ci0gICAgICAgIC8vIHByZXBh
cmVUZXh0dXJlIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRh
cmdldCBpbnRvIHRoZSB0ZXh0dXJlCi0gICAgICAgIC8vIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3Iu
Ci0gICAgICAgIC8vCi0gICAgICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKLSAgICAg
ICAgbV9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CisgICAgICAgIC8vIHB1Ymxpc2hU
b1BsYXRmb3JtTGF5ZXIgcHJlcGFyZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBvZmYtc2NyZWVuIHJl
bmRlciB0YXJnZXQgZm9yIHVzZSBieSB0aGUgY29tcG9zaXRvci4KKyAgICAgICAgZHJhd2luZ0J1
ZmZlcigpLT5wdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIGNvbnRleHQoKS0+bWFy
a0xheWVyQ29tcG9zaXRlZCgpOwogICAgICAgICBtX3VwZGF0ZVJlY3QgPSBGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBib3VuZHMoKSk7CiAgICAgICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAg
ICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSBmYWxzZTsKQEAgLTEwMSw3ICs5OSw3IEBAIGJvb2wgV2Vi
R0xMYXllckNocm9taXVtOjpwYWludFJlbmRlcmVkUmUKICAgICBpZiAobV90ZXh0dXJlVXBkYXRl
ZCB8fCAhbGF5ZXJSZW5kZXJlckNvbnRleHQoKSB8fCAhZHJhd3NDb250ZW50KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEludFNpemUgZnJhbWVidWZmZXJTaXplID0gbV9jb250ZXh0
LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOworICAgIEludFNpemUgZnJhbWVidWZmZXJT
aXplID0gY29udGV4dCgpLT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOwogICAgIEFTU0VS
VChsYXllclJlbmRlcmVyQ29udGV4dCgpKTsKIAogICAgIC8vIFRoaXMgd291bGQgaWRlYWxseSBi
ZSBkb25lIGluIHRoZSB3ZWJnbCBjb250ZXh0LCBidXQgdGhhdCBpc24ndCBwb3NzaWJsZSB5ZXQu
CkBAIC0xMTAsNyArMTA4LDcgQEAgYm9vbCBXZWJHTExheWVyQ2hyb21pdW06OnBhaW50UmVuZGVy
ZWRSZQogICAgIGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FU
VEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQsIDAp
OwogCiAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxF
eHRlbnNpb25zM0RDaHJvbWl1bSo+KGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmdldEV4dGVuc2lv
bnMoKSk7Ci0gICAgZXh0ZW5zaW9ucy0+cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1lYnVm
ZmVyLCBmcmFtZWJ1ZmZlclNpemUud2lkdGgoKSwgZnJhbWVidWZmZXJTaXplLmhlaWdodCgpLCAh
bV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwgaW1h
Z2VCdWZmZXIpOworICAgIGV4dGVuc2lvbnMtPnBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhmcmFt
ZWJ1ZmZlciwgZnJhbWVidWZmZXJTaXplLndpZHRoKCksIGZyYW1lYnVmZmVyU2l6ZS5oZWlnaHQo
KSwgIWNvbnRleHQoKS0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEs
IGltYWdlQnVmZmVyKTsKICAgICBsYXllclJlbmRlcmVyQ29udGV4dCgpLT5kZWxldGVGcmFtZWJ1
ZmZlcihmcmFtZWJ1ZmZlcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMjEsMzIgKzExOSwz
OSBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y29udGVudENoYW5nZWQoCiAgICAgLy8gSWYg
V2ViR0wgY29tbWFuZHMgYXJlIGlzc3VlZCBvdXRzaWRlIG9mIGEgdGhlIGFuaW1hdGlvbiBjYWxs
YmFja3MsIHRoZW4gdXNlCiAgICAgLy8gY2FsbCByYXRlTGltaXRPZmZzY3JlZW5Db250ZXh0Q0hS
T01JVU0oKSB0byBrZWVwIHRoZSBjb250ZXh0IGZyb20gZ2V0dGluZyB0b28gZmFyIGFoZWFkLgog
ICAgIGlmIChsYXllclRyZWVIb3N0KCkpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RhcnRS
YXRlTGltaXRlcihtX2NvbnRleHQpOworICAgICAgICBsYXllclRyZWVIb3N0KCktPnN0YXJ0UmF0
ZUxpbWl0ZXIoY29udGV4dCgpKTsKIH0KIAotdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnNldENv
bnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit2b2lkIFdlYkdMTGF5ZXJD
aHJvbWl1bTo6c2V0RHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQog
ewotICAgIGJvb2wgY29udGV4dENoYW5nZWQgPSAobV9jb250ZXh0ICE9IGNvbnRleHQpOworICAg
IGJvb2wgZHJhd2luZ0J1ZmZlckNoYW5nZWQgPSAobV9kcmF3aW5nQnVmZmVyICE9IGRyYXdpbmdC
dWZmZXIpOworICAgIG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdpbmdCdWZmZXI7CiAKLSAgICBpZiAo
bGF5ZXJUcmVlSG9zdCgpICYmIGNvbnRleHRDaGFuZ2VkKQotICAgICAgICBsYXllclRyZWVIb3N0
KCktPnN0b3BSYXRlTGltaXRlcihtX2NvbnRleHQpOworICAgIGlmIChsYXllclRyZWVIb3N0KCkg
JiYgZHJhd2luZ0J1ZmZlckNoYW5nZWQpCisgICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RvcFJh
dGVMaW1pdGVyKGNvbnRleHQoKSk7CiAKLSAgICBtX2NvbnRleHQgPSBjb25zdF9jYXN0PEdyYXBo
aWNzQ29udGV4dDNEKj4oY29udGV4dCk7Ci0KLSAgICBpZiAoIW1fY29udGV4dCkKKyAgICBpZiAo
IW1fZHJhd2luZ0J1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgdW5zaWduZWQgaW50IHRl
eHR1cmVJZCA9IG1fY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCk7Ci0gICAgaWYgKHRleHR1cmVJ
ZCAhPSBtX3RleHR1cmVJZCB8fCBjb250ZXh0Q2hhbmdlZCkgeworICAgIHVuc2lnbmVkIGludCB0
ZXh0dXJlSWQgPSBtX2RyYXdpbmdCdWZmZXItPnBsYXRmb3JtQ29sb3JCdWZmZXIoKTsKKyAgICBp
ZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkIHx8IGRyYXdpbmdCdWZmZXJDaGFuZ2VkKSB7CiAg
ICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSB0cnVlOwogICAgICAgICBtX3RleHR1cmVVcGRhdGVk
ID0gdHJ1ZTsKICAgICB9CiAgICAgbV90ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IG1fY29udGV4dC0+Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzID0gY29udGV4dCgpLT5nZXRDb250ZXh0QXR0cmlidXRlcygpOwogICAgIG1faGFzQWxwaGEg
PSBhdHRyaWJ1dGVzLmFscGhhOwogICAgIG1fcHJlbXVsdGlwbGllZEFscGhhID0gYXR0cmlidXRl
cy5wcmVtdWx0aXBsaWVkQWxwaGE7CiB9CiAKK0dyYXBoaWNzQ29udGV4dDNEKiBXZWJHTExheWVy
Q2hyb21pdW06OmNvbnRleHQoKSBjb25zdAoreworICAgIGlmIChkcmF3aW5nQnVmZmVyKCkpCisg
ICAgICAgIHJldHVybiBkcmF3aW5nQnVmZmVyKCktPmdyYXBoaWNzQ29udGV4dDNEKCkuZ2V0KCk7
CisKKyAgICByZXR1cm4gMDsKK30KKwogR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMTGF5ZXJDaHJv
bWl1bTo6bGF5ZXJSZW5kZXJlckNvbnRleHQoKQogewogICAgIC8vIEZJWE1FOiBJbiB0aGUgdGhy
ZWFkZWQgY2FzZSwgcGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyBtdXN0IGJlCkBAIC0xNTcs
NCArMTYyLDUgQEAgR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMTGF5ZXJDaHJvbWl1bTo6bAogfQog
CiB9CisKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9XZWJHTExheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKIAogI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJEcmF3aW5n
QnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTMsMjEgKzU0LDIzIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKTsKICAgICBib29sIHBhaW50
UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKTsKIAotICAgIHZvaWQgc2V0Q29u
dGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCk7Ci0gICAgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCgpIGNvbnN0OwogCisgICAgdm9pZCBzZXREcmF3aW5nQnVmZmVyKERyYXdp
bmdCdWZmZXIqKTsKKyAgICBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9kcmF3aW5nQnVmZmVyOyB9CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdlYkdMTGF5
ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqKTsKICAgICBmcmllbmQgY2xhc3MgV2ViR0xMYXll
ckNocm9taXVtUmF0ZUxpbWl0VGFzazsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBsYXllclJl
bmRlcmVyQ29udGV4dCgpOwogCi0gICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5
ZXIgaGFzIGEgc2lkZS1lZmZlY3Qgb2YgYXNzaWduaW5nIGl0c2VsZgotICAgIC8vIHRvIHRoZSBs
YXllci4gQmVjYXVzZSBvZiB0aGF0IEdyYXBoaWNzQ29udGV4dDNEJ3MgZGVzdHJ1Y3RvciB3aWxs
IHJlc2V0Ci0gICAgLy8gbGF5ZXIncyBjb250ZXh0IHRvIDAuCi0gICAgR3JhcGhpY3NDb250ZXh0
M0QqIG1fY29udGV4dDsKICAgICBib29sIG1fdGV4dHVyZUNoYW5nZWQ7CiAgICAgYm9vbCBtX3Rl
eHR1cmVVcGRhdGVkOworCisgICAgLy8gVGhlIERyYXdpbmdCdWZmZXIgaG9sZGluZyB0aGUgV2Vi
R0wgY29udGVudHMgZm9yIHRoaXMgbGF5ZXIuCisgICAgLy8gQSByZWZlcmVuY2UgaXMgbm90IGhl
bGQgaGVyZSwgYmVjYXVzZSB0aGUgRHJhd2luZ0J1ZmZlciBhbHJlYWR5IGhvbGRzCisgICAgLy8g
YSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMTGF5ZXJDaHJvbWl1bS4KKyAgICBEcmF3aW5nQnVmZmVy
KiBtX2RyYXdpbmdCdWZmZXI7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5j
cHAJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI2LDEzICs3
MjYsMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7Cisg
ICAgLy8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0g
cG9ydHMuCisgICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZl
ciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBp
bXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIp
OwogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRh
ID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZSgxLCAxKSk7CiAgICAgcmV0dXJuIGltYWdlRGF0
YS5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
RHJhd2luZ0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCShyZXZpc2lvbiA5OTU5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAog
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDgs
NyArNTAsNyBAQCBzdGF0aWMgaW50IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzID0KICNlbmRp
Zgogc3RhdGljIGludCBzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVscyA9IDA7CiAKLVBhc3NSZWZQ
dHI8RHJhd2luZ0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQorUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVy
PiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0
IEludFNpemUmIHNpemUsIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKIHsKICAgICBFeHRl
bnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CiAgICAgYm9v
bCBtdWx0aXNhbXBsZVN1cHBvcnRlZCA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9ibGl0IikgJiYgZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlIikgJiYgZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX09FU19yZ2I4
X3JnYmE4Iik7CkBAIC02MCw3ICs2Miw3IEBAIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJh
d2luZ0J1ZmZlcjoKICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IGV4dGVu
c2lvbnMtPnN1cHBvcnRzKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKICAgICBpZiAo
cGFja2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVkKQogICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVF
bmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICBSZWZQdHI8RHJhd2lu
Z0J1ZmZlcj4gZHJhd2luZ0J1ZmZlciA9IGFkb3B0UmVmKG5ldyBEcmF3aW5nQnVmZmVyKGNvbnRl
eHQsIHNpemUsIG11bHRpc2FtcGxlU3VwcG9ydGVkLCBwYWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0
ZWQpKTsKKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZlciA9IGFkb3B0UmVm
KG5ldyBEcmF3aW5nQnVmZmVyKGNvbnRleHQsIHNpemUsIG11bHRpc2FtcGxlU3VwcG9ydGVkLCBw
YWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0ZWQsIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpKTsKICAg
ICByZXR1cm4gKGRyYXdpbmdCdWZmZXItPm1fY29udGV4dCkgPyBkcmF3aW5nQnVmZmVyLnJlbGVh
c2UoKSA6IDA7CiB9CiAKQEAgLTc4LDYgKzgwLDExIEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xl
YXIoKQogICAgICAgICBtX2NvbG9yQnVmZmVyID0gMDsKICAgICB9CiAKKyAgICBpZiAobV9iYWNr
aW5nQ29sb3JCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fYmFj
a2luZ0NvbG9yQnVmZmVyKTsKKyAgICAgICAgbV9iYWNraW5nQ29sb3JCdWZmZXIgPSAwOworICAg
IH0KKwogICAgIGlmIChtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpIHsKICAgICAgICAgbV9jb250
ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKICAgICAg
ICAgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyID0gMDsKQEAgLTE2Niw3ICsxNzMsNyBAQCB2b2lk
IERyYXdpbmdCdWZmZXI6OmNsZWFyRnJhbWVidWZmZXIoKQogICAgIHVuc2lnbmVkIGNoYXIgZGVw
dGhNYXNrID0gZmFsc2U7CiAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZm
ZjsKICAgICB1bnNpZ25lZCBjaGFyIGlzU2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKLSAgICB1bnNp
Z25lZCBsb25nIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklU
OworICAgIHVuc2lnbmVkIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZG
RVJfQklUOwogICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7CiAgICAgICAgIG1fY29udGV4dC0+
Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVw
dGgpOwogICAgICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoMSk7CkBAIC0xODgsNiArMTk1LDE0
IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXJGcmFtZWJ1ZmZlcigpCiAgICAgbV9jb250ZXh0
LT5nZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNv
bG9yKTsKICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiAgICAgbV9jb250
ZXh0LT5jbGVhcihjbGVhck1hc2spOworCisgICAgLy8gVGhlIG11bHRpc2FtcGxlIGZibyB3YXMg
anVzdCBjbGVhcmVkLCBidXQgd2UgYWxzbyBuZWVkIHRvIGNsZWFyIHRoZSBub24tbXVsdGlzYW1w
bGVkIGJ1ZmZlciB0b28uCisgICAgaWYgKG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBt
X2Zibyk7CisgICAgICAgIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0JVRkZFUl9CSVQpOworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgIH0KKwogICAg
IG1fY29udGV4dC0+Y2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVh
ckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKIAogICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7
CkBAIC0yMzMsNyArMjQ4LDcgQEAgYm9vbCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRT
aXplJgogICAgIGlmIChuZXdTaXplICE9IG1fc2l6ZSkgewogICAgICAgICBtX3NpemUgPSBuZXdT
aXplOwogCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JG
b3JtYXQsIGludGVybmFsUmVuZGVyYnVmZmVyRm9ybWF0OworICAgICAgICB1bnNpZ25lZCBpbnRl
cm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxSZW5kZXJidWZmZXJGb3JtYXQ7
CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmFscGhhKSB7CiAgICAgICAgICAgICBpbnRlcm5hbENv
bG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CiAgICAgICAgICAgICBjb2xvckZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwpAQCAtMjUwLDcgKzI2NSw3IEBAIGJvb2wg
RHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAgICAgIGludCBtYXhT
YW1wbGVDb3VudCA9IDA7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfU0FNUExFUywgJm1heFNhbXBsZUNvdW50KTsKLSAg
ICAgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDgsIG1heFNhbXBsZUNvdW50KTsK
KyAgICAgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNvdW50
KTsKIAogICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKIApAQCAtMjY5LDEwICsyODQs
MTYgQEAgYm9vbCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgICAgICBt
X2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IG1fZmJvKTsKIAogICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyKTsKLSAgICAgICAgCiAgICAgICAgIG1fY29u
dGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJu
YWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JG
b3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKIAogICAgICAgICBt
X2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwgMCk7CisKKyAgICAgICAgLy8gcmVzaXpl
IHRoZSBiYWNraW5nIGNvbG9yIGJ1ZmZlcgorICAgICAgICBpZiAobV9zZXBhcmF0ZUJhY2tpbmdU
ZXh0dXJlKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX2JhY2tpbmdDb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBt
X2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGlu
dGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIGNv
bG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CisgICAgICAg
IH0KKwogICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwKTsKIAogICAgICAgICBpZiAoIW11bHRpc2FtcGxlKCkpCkBAIC0yOTMsMjMg
KzMxNCw1NiBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OmNvbW1pdChsb25nIHgsIGxvbmcKIHsKICAg
ICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIGlmICh3
aWR0aCA8IDApCiAgICAgICAgIHdpZHRoID0gbV9zaXplLndpZHRoKCk7CiAgICAgaWYgKGhlaWdo
dCA8IDApCiAgICAgICAgIGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSAgICAgICAgCisKICAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIAorCiAgICAgaWYgKG1fbXVs
dGlzYW1wbGVGQk8pIHsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5z
aW9uczNEOjpSRUFEX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKICAgICAgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpEUkFXX0ZSQU1FQlVGRkVSLCBt
X2Zibyk7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5ibGl0RnJhbWVidWZm
ZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworCisg
ICAgICAgIGlmIChtX3NjaXNzb3JFbmFibGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5kaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworCisgICAgICAgIC8vIFVzZSBO
RUFSRVNULCBiZWNhdXNlIHRoZXJlIGlzIG5vIHNjYWxlIHBlcmZvcm1lZCBkdXJpbmcgdGhlIGJs
aXQuCisgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5ibGl0RnJhbWVidWZmZXIo
eCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX0JVRkZFUl9CSVQsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsKKworICAg
ICAgICBpZiAobV9zY2lzc29yRW5hYmxlZCkKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZW5hYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIH0KLSAgICAKKwogICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
bV9mYm8pOwogfQogCitib29sIERyYXdpbmdCdWZmZXI6Om11bHRpc2FtcGxlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KS5hbnRpYWxpYXMgJiYgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZDsKK30KKworUGFz
c1JlZlB0cjxJbWFnZURhdGE+IERyYXdpbmdCdWZmZXI6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
SW1hZ2VEYXRhKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0ltYWdlRGF0YSh0aGlzKTsKK30KKwordm9pZCBEcmF3aW5nQnVmZmVyOjpkaXNjYXJkUmVz
b3VyY2VzKCkKK3sKKyAgICBtX2NvbG9yQnVmZmVyID0gMDsKKyAgICBtX2JhY2tpbmdDb2xvckJ1
ZmZlciA9IDA7CisgICAgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyID0gMDsKKworICAgIG1fZGVw
dGhTdGVuY2lsQnVmZmVyID0gMDsKKyAgICBtX2RlcHRoQnVmZmVyID0gMDsKKworICAgIG1fc3Rl
bmNpbEJ1ZmZlciA9IDA7CisKKyAgICBtX211bHRpc2FtcGxlRkJPID0gMDsKKyAgICBtX2ZibyA9
IDA7Cit9CisKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6YmluZCgpCiB7CiAgICAgaWYgKCFtX2NvbnRl
eHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9EcmF3aW5nQnVmZmVyLmgJKHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJH
cmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAi
SW50U2l6ZS5oIgogCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC00MywxNSArNDQs
MTggQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBQTEFURk9STShDSFJP
TUlVTSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotY2xhc3MgQ2FudmFzMkRMYXll
ckNocm9taXVtOworY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOworY2xhc3MgSW1hZ2VEYXRhOworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorY2xh
c3MgV2ViR0xMYXllckNocm9taXVtOwogI2VuZGlmCiAKIC8vIE1hbmFnZXMgYSByZW5kZXJpbmcg
dGFyZ2V0IChmcmFtZWJ1ZmZlciArIGF0dGFjaG1lbnQpIGZvciBhIGNhbnZhcy4gIENhbiBwdWJs
aXNoIGl0cyByZW5kZXJpbmcKIC8vIHJlc3VsdHMgdG8gYSBQbGF0Zm9ybUxheWVyIGZvciBjb21w
b3NpdGluZy4KIGNsYXNzIERyYXdpbmdCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEcmF3aW5n
QnVmZmVyPiB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4g
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIGJvb2wpOwogICAgIGZy
aWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIAogICAgIH5EcmF3aW5nQnVmZmVyKCk7CkBA
IC03NSwyMiArNzksMzkgQEAgcHVibGljOgogCiAgICAgLy8gQ29waWVzIHRoZSBtdWx0aXNhbXBs
ZSBjb2xvciBidWZmZXIgdG8gdGhlIG5vcm1hbCBjb2xvciBidWZmZXIgYW5kIGxlYXZlcyBtX2Zi
byBib3VuZAogICAgIHZvaWQgY29tbWl0KGxvbmcgeCA9IDAsIGxvbmcgeSA9IDAsIGxvbmcgd2lk
dGggPSAtMSwgbG9uZyBoZWlnaHQgPSAtMSk7Ci0gICAgCi0gICAgYm9vbCBtdWx0aXNhbXBsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1
dGVzKCkuYW50aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQ7IH0KLSAg
ICAKKworICAgIC8vIGNvbW1pdCBzaG91bGQgY29weSB0aGUgZnVsbCBtdWx0aXNhbXBsZSBidWZm
ZXIsIGFuZCBub3QgcmVzcGVjdCB0aGUKKyAgICAvLyBjdXJyZW50IHNjaXNzb3IgYm91bmRzLiBU
cmFjayB0aGUgc3RhdGUgb2YgdGhlIHNjaXNzb3IgdGVzdCBzbyB0aGF0IGl0CisgICAgLy8gY2Fu
IGJlIGRpc2FibGVkIGR1cmluZyBjYWxscyB0byBjb21taXQuCisgICAgdm9pZCBzZXRTY2lzc29y
RW5hYmxlZChib29sIHNjaXNzb3JFbmFibGVkKSB7IG1fc2Npc3NvckVuYWJsZWQgPSBzY2lzc29y
RW5hYmxlZDsgfQorCisgICAgYm9vbCBtdWx0aXNhbXBsZSgpIGNvbnN0OworCiAgICAgUGxhdGZv
cm0zRE9iamVjdCBwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3Q7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBmcmFtZWJ1ZmZlcigpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisKKyAgICAvLyBJbW1lZGlhdGVseSBy
ZWxlYXNlcyBvd25lcnNoaXAgb2YgYWxsIHJlc291cmNlcy4gQ2FsbCB1cG9uIGxvc3Mgb2YgdGhl
CisgICAgLy8gZ3JhcGhpY3MgY29udGV4dCB0byBwcmV2ZW50IGZyZWVpbmcgaW52YWxpZCByZXNv
dXJjZXMuCisgICAgdm9pZCBkaXNjYXJkUmVzb3VyY2VzKCk7CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpOwogICAg
IHZvaWQgcHVibGlzaFRvUGxhdGZvcm1MYXllcigpOworICAgIHZvaWQgcGFpbnRDb21wb3NpdGVk
UmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKICNlbmRpZgogCiAgICAg
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRleHQ7IH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
cmF3aW5nQnVmZmVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7
Ci0gICAgCi0gICAgRHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNp
emUmLCBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLCBib29sIHBhY2tlZERlcHRo
U3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCk7CisgICAgRHJhd2luZ0J1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9y
dGVkLAorICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25T
dXBwb3J0ZWQsIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSk7CisKKyAgICB2b2lkIGluaXRp
YWxpemUoY29uc3QgSW50U2l6ZSYpOworCisgICAgYm9vbCBtX3NlcGFyYXRlQmFja2luZ1RleHR1
cmU7CisgICAgYm9vbCBtX3NjaXNzb3JFbmFibGVkOwogCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBtX2NvbnRleHQ7CiAgICAgSW50U2l6ZSBtX3NpemU7CkBAIC05OCw2ICsxMTksNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0
ZWQ7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1f
Y29sb3JCdWZmZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2JhY2tpbmdDb2xvckJ1ZmZlcjsK
IAogICAgIC8vIFRoaXMgaXMgdXNlZCB3aGVuIHdlIGhhdmUgT0VTX3BhY2tlZF9kZXB0aF9zdGVu
Y2lsLgogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CkBAIC0xMTAs
NiArMTMyLDEwIEBAIHByaXZhdGU6CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxl
RkJPOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyOwogCisj
aWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gbV9w
bGF0Zm9ybUxheWVyOworI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAgICAgUmV0YWluUHRy
PFdlYkdMTGF5ZXI+IG1fcGxhdGZvcm1MYXllcjsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1
ZmZlck1hYy5tbQkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5
LDggKzM5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEludFNpemUmIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAg
IDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgOiBtX3NlcGFyYXRl
QmFja2luZ1RleHR1cmUoc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICAsIG1fc2Npc3NvckVu
YWJsZWQoZmFsc2UpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2l6ZSgtMSwg
LTEpCiAgICAgLCBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0
ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBw
b3J0ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQpAQCAtNTIsNiArNTUs
OSBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29uCiAgICAgLCBtX211
bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKIHsKKyAg
ICAvLyBTdXBwb3J0IGZvciBhIHNlcGFyYXRlIGJhY2tpbmcgdGV4dHVyZSBoYXMgb25seSBiZWVu
IGVuYWJsZWQgZm9yCisgICAgLy8gdGhlIGNocm9taXVtIHBvcnQuCisgICAgQVNTRVJUKCFtX3Nl
cGFyYXRlQmFja2luZ1RleHR1cmUpOwogICAgIEFTU0VSVChtX2Zibyk7CiAgICAgaWYgKCFtX2Zi
bykgewogICAgICAgICBjbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L3F0L0RyYXdpbmdCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L3F0L0RyYXdpbmdCdWZmZXJRdC5jcHAJKHJldmlz
aW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L3F0L0Ry
YXdpbmdCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDExIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNp
emUmIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGVF
eHRlbnNpb25TdXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFj
a2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2ls
RXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNl
cGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgOiBtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUoc2Vw
YXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICAsIG1fc2Npc3NvckVuYWJsZWQoZmFsc2UpCisgICAg
LCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2l6ZSgtMSwgLTEpCiAgICAgLCBtX211bHRp
c2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQog
ICAgICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVwdGhT
dGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQpAQCAtNDcsNiArNTAsOSBAQCBEcmF3aW5nQnVmZmVy
OjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29uCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAg
ICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKIHsKKyAgICAvLyBTdXBwb3J0IGZvciBh
IHNlcGFyYXRlIGJhY2tpbmcgdGV4dHVyZSBoYXMgb25seSBiZWVuIGVuYWJsZWQgZm9yCisgICAg
Ly8gdGhlIGNocm9taXVtIHBvcnQuCisgICAgQVNTRVJUKCFtX3NlcGFyYXRlQmFja2luZ1RleHR1
cmUpOwogICAgIEFTU0VSVChtX2Zibyk7CiAgICAgaWYgKCFtX2ZibykgewogICAgICAgICBjbGVh
cigpOwpAQCAtODMsNiArODksMTIgQEAgUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVyOjpw
bGF0Zm9ybQogICAgIHJldHVybiBtX2NvbG9yQnVmZmVyOwogfQogCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQordm9pZCBEcmF3aW5nQnVmZmVyOjpwYWludENvbXBvc2l0ZWRSZXN1
bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKK30KKyNlbmRp
ZgorCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0RyYXdpbmdCdWZmZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9EcmF3aW5nQnVmZmVyR3RrLmNwcAkocmV2aXNpb24gOTk1OTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRHJhd2luZ0J1ZmZlckd0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDEyIEBAIFBsYXRmb3JtM0RPYmplY3Qg
RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm0KICAgICByZXR1cm4gbV9jb2xvckJ1ZmZlcjsKIH0KIAor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6cGFp
bnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQpCit7Cit9CisjZW5kaWYKKwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcAkocmV2aXNpb24gOTk1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjgsOCArMTI4LDEwIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omlz
UmVzb3VyY2VTYWZlKCkKIH0KIAogI2lmICFQTEFURk9STShRVCkKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVy
KiBkcmF3aW5nQnVmZmVyKQogeworICAgIC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGlt
cGxlbWVudGVkIGluIENocm9taXVtIHBvcnRzLgorICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7
CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwogICAg
IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CiAKQEAgLTE2Miw4
ICsxNjQsMTAgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRDb21wb3NpdGVkUgogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitQYXNzUmVmUHRyPEltYWdl
RGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CisgICAgLy8gRHJhd2luZ0J1ZmZlciBz
dXBwb3J0IG9ubHkgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0gcG9ydHMuCisgICAgQVNTRVJUKCFk
cmF3aW5nQnVmZmVyKTsKICAgICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQg
aW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGljaCBpcwogICAgIC8vIGxvc3N5CiAgICAgaWYg
KG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJ
KHJldmlzaW9uIDk5NTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMCw4ICs0MjAsMTAg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZQogICAgIG1fcHJpdmF0
ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRy
YXdpbmdCdWZmZXIpCiB7CisgICAgLy8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVt
ZW50ZWQgaW4gQ2hyb21pdW0gcG9ydHMuCisgICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKICAg
ICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgSFRNTENhbnZhc0Vs
ZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwogICAgIEltYWdlQnVmZmVyKiBpbWFn
ZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CkBAIC00MzAsOCArNDMyLDEwIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmUKIH0KIAogI2lmIGRlZmluZWQoUVRfT1BF
TkdMX0VTXzIpCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1
ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25s
eSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdCdWZm
ZXIpOwogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIGltcGxlbWVudGVkIGZvciBwcm9w
ZXIgbm9uLXByZW11bHRpcGxpZWQtYWxwaGEKICAgICAvLyBzdXBwb3J0LgogICAgIHJldHVybiAw
OwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NTk3KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
OCBAQAorMjAxMS0xMS0wOCAgSmVmZiBUaW1hbnVzICA8dHdpekBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW2Nocm9taXVtXSBQYXRjaCB0aGF0IGltcGxlbWVudGluZyB0aGUgY2hhbmdlcyByZXF1
aXJlZCB0byBhbGxvdyBXZWJHTAorICAgICAgICB0byBzaGFyZSBpdHMgYmFja2luZyBzdG9yZSBk
aXJlY3RseSB3aXRoIHRoZSBjb21wb3NpdG9yLgorICAgICAgICBXZWJHTCByZW5kZXJpbmcgY29u
dGV4dHMgY3JlYXRlIGFuZCByZW5kZXIgdG8gRkJPcyBtYW5hZ2VkIGJ5IGEKKyAgICAgICAgRHJh
d2luZ0J1ZmZlciBpbnN0YW5jZS4gQWxsIFBsYXRmb3JtTGF5ZXIgbGlmZXRpbWUgbWFuYWdlbWVu
dCBpcworICAgICAgICBwZXJmb3JtZWQgYnkgdGhlIERyYXdpbmdCdWZmZXIuCisgICAgICAgIENo
YW5nZXMgYXJlIG9ubHkgcmVsZXZhbnQgdG8gQ2hyb21pdW0gcG9ydHMuIEZ1bmN0aW9uYWxpdHkg
aXMKKyAgICAgICAgdW5jaGFuZ2VkIGZvciBvdGhlciBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMjAxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJv
bWl1bS5jcHA6IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSBubyBsb25nZXIgY2FjaGVzCisgICAg
ICAgIHRoZSBXZWJHTExheWVyQ2hyb21pdW0gaW5zdGFuY2UuICBJbnN0ZWFkLCBpdCBpcyBhY2Nl
c3NlZCB2aWEgRHJhd2luZ0J1ZmZlciBpbnN0YW5jZXMKKyAgICAgICAgcGFzc2VkIGFzIGFyZ3Vt
ZW50cyB0byB0aGUgbmVjZXNzYXJ5IHJvdXRpbmVzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50Q29tcG9zaXRlZFJl
c3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0lt
YWdlRGF0YSk6CisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOgorCiAy
MDExLTExLTA4ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IGRpc3BsYXkgbm90aWZpY2F0aW9uIGluIHRoZSBmcm9udC1lbmQg
d2hlbiBpbnNwZWN0ZWQgd29ya2VyIHRlcm1pbmF0ZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCShy
ZXZpc2lvbiA5OTU5MykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29u
dGV4dDNEQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMCArMzUsMTAgQEAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIK
LSNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50
SW1wbC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25z
M0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCkBAIC0xNjMsNiArMTYzLDIwIEBAIFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUdyYXAKICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dCh3ZWJDb250
ZXh0LnJlbGVhc2UoKSwgYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlLCB0aHJlYWRVc2Fn
ZSk7CiB9CiAKK3ZvaWQgZ2V0RHJhd2luZ1BhcmFtZXRlcnMoRHJhd2luZ0J1ZmZlciogZHJhd2lu
Z0J1ZmZlciwgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtM0RPYmplY3QqIGZyYW1lQnVmZmVy
SWQsIGludCogd2lkdGgsIGludCogaGVpZ2h0KQoreworICAgIGlmIChkcmF3aW5nQnVmZmVyKSB7
CisgICAgICAgICpmcmFtZUJ1ZmZlcklkID0gZHJhd2luZ0J1ZmZlci0+ZnJhbWVidWZmZXIoKTsK
KyAgICAgICAgKndpZHRoID0gZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7CisgICAgICAg
ICpoZWlnaHQgPSBkcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgKmZyYW1lQnVmZmVySWQgPSAwOworICAgICAgICAqd2lkdGggPSBncmFwaGljc0Nv
bnRleHQzRC0+d2lkdGgoKTsKKyAgICAgICAgKmhlaWdodCA9IGdyYXBoaWNzQ29udGV4dDNELT5o
ZWlnaHQoKTsKKyAgICB9Cit9CisKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiBQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdy
YXBoaWNzQ29udGV4dEZvckFub3RoZXJUaHJlYWQoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5k
ZXJTdHlsZSByZW5kZXJTdHlsZSkKQEAgLTIxMiwxNyArMjI2LDYgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OnByZXBhcmVUZQogICAgIG1faW1wbC0+cHJlcGFyZVRleHR1cmUoKTsK
IH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLVdlYkdMTGF5ZXJDaHJvbWl1
bSogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9ybUxheWVyKCkKLXsKLSNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKCFtX2NvbXBvc2l0aW5nTGF5ZXIpCi0g
ICAgICAgIG1fY29tcG9zaXRpbmdMYXllciA9IFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDAp
OwotI2VuZGlmCi0gICAgcmV0dXJuIG1fY29tcG9zaXRpbmdMYXllci5nZXQoKTsKLX0KLSNlbmRp
ZgotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFya0NvbnRleHRDaGFuZ2VkKCkK
IHsKICAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOwpAQCAtMzA1LDMxICszMDgsMzQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50RnJhbQogI2VuZGlmCiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7CiAgICAgSW1h
Z2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY29udGV4dC0+Y2FudmFzKCktPmJ1ZmZlcigpOwotICAg
IHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcygwLCBtX2ltcGwtPndpZHRoKCksIG1faW1wbC0+aGVp
Z2h0KCksICFtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhh
LCBpbWFnZUJ1ZmZlcik7CisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOworICAg
IGludCB3aWR0aCwgaGVpZ2h0OworICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZm
ZXIsIG1faW1wbC5nZXQoKSwgJmZyYW1lYnVmZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7CisgICAg
cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1lYnVmZmVySWQsIHdpZHRoLCBoZWlnaHQsICFt
X2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1
ZmZlcik7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludENvbXBvc2l0
ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKIHsKLSNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKHBsYXRmb3JtTGF5ZXIoKSkK
LSAgICAgICAgcmV0dXJuIHBsYXRmb3JtTGF5ZXIoKS0+cGFpbnRSZW5kZXJlZFJlc3VsdHNUb0Nh
bnZhcyhjb250ZXh0LT5jYW52YXMoKS0+YnVmZmVyKCkpOwotI2VuZGlmCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitQYXNzUmVmUHRyPEltYWdlRGF0
YT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogewogICAgIGlmIChtX2ltcGwtPmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhKQogICAgICAgICByZXR1cm4g
MDsKLSAgICAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNy
ZWF0ZShJbnRTaXplKG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSkpOworCisgICAg
UGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOworICAgIGludCB3aWR0aCwgaGVpZ2h0Owor
ICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZmZXIsIG1faW1wbC5nZXQoKSwgJmZy
YW1lYnVmZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBp
bWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKICAg
ICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLT5kYXRh
KCk7Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogbV9pbXBsLT53aWR0aCgpICogbV9pbXBs
LT5oZWlnaHQoKTsKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDQgKiB3aWR0aCAqIGhlaWdodDsK
IAotICAgIG1faW1wbC0+cmVhZEJhY2tGcmFtZWJ1ZmZlcihwaXhlbHMsIGJ1ZmZlclNpemUsIDAs
IG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSk7CisgICAgbV9pbXBsLT5yZWFkQmFj
a0ZyYW1lYnVmZmVyKHBpeGVscywgYnVmZmVyU2l6ZSwgZnJhbWVidWZmZXJJZCwgd2lkdGgsIGhl
aWdodCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ1ZmZlclNpemU7IGkgKz0gNCkK
ICAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7CkBAIC0xMDA5LDkg
KzEwMTUsNiBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAKIEdy
YXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogewotICAgIFdlYkdMTGF5ZXJD
aHJvbWl1bSogY2FudmFzTGF5ZXIgPSBtX3ByaXZhdGUtPnBsYXRmb3JtTGF5ZXIoKTsKLSAgICBp
ZiAoY2FudmFzTGF5ZXIpCi0gICAgICAgIGNhbnZhc0xheWVyLT5zZXRDb250ZXh0KDApOwogICAg
IG1fcHJpdmF0ZS0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhudWxscHRyKTsKICAgICBtX3ByaXZh
dGUtPnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKG51bGxwdHIpOwogfQpA
QCAtMTA1Niw5ICsxMDU5LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNSZXNvdXJjZVNh
ZmUoKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIFBsYXRmb3JtTGF5ZXIqIEdy
YXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICBXZWJHTExheWVy
Q2hyb21pdW0qIGNhbnZhc0xheWVyID0gbV9wcml2YXRlLT5wbGF0Zm9ybUxheWVyKCk7Ci0gICAg
Y2FudmFzTGF5ZXItPnNldENvbnRleHQodGhpcyk7Ci0gICAgcmV0dXJuIGNhbnZhc0xheWVyOwor
ICAgIHJldHVybiAwOwogfQogI2VuZGlmCiAKQEAgLTEyMTQsOCArMTIxNSwxNiBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoCiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bGF5ZXJDb21wb3NpdGVkKCk7CiB9CiAKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEocGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKQotREVMRUdBVEVf
VE9fSU5URVJOQUxfUihwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSwgUGFzc1JlZlB0
cjxJbWFnZURhdGE+KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZl
ciogZHJhd2luZ0J1ZmZlcikKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5wYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyhjb250ZXh0LCBkcmF3aW5nQnVmZmVyKTsKK30KKworUGFzc1JlZlB0
cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0lt
YWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQoreworICAgIHJldHVybiBtX3By
aXZhdGUtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKGRyYXdpbmdCdWZmZXIpOwor
fQorCiBERUxFR0FURV9UT19JTlRFUk5BTF8xUihwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52
YXMsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqLCBib29sKQogCiBib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCShyZXZp
c2lvbiA5OTU5MykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMCArNDYsOCBAQCBjbGFzcyBXZWJW
aWV3SW1wbDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBEcmF3aW5nQnVmZmVyOwog
Y2xhc3MgRXh0ZW5zaW9uczNEQ2hyb21pdW07Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotY2xhc3MgV2ViR0xMYXllckNocm9taXVtOwotI2VuZGlmCiBjbGFzcyBHcmFwaGljc0Nv
bnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RTd2FwQnVm
ZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyOwogCkBAIC05NSwxNyArOTMsMTQgQEAgcHVibGlj
OgogICAgIGJvb2wgbGF5ZXJDb21wb3NpdGVkKCkgY29uc3Q7CiAgICAgdm9pZCBtYXJrTGF5ZXJD
b21wb3NpdGVkKCk7CiAKLSAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKKyAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqLCBEcmF3aW5nQnVmZmVyKik7CiAgICAgdm9p
ZCBwYWludEZyYW1lYnVmZmVyVG9DYW52YXMoaW50IGZyYW1lYnVmZmVyLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgSW1hZ2VCdWZmZXIqKTsKLSAgICBQYXNz
UmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAg
ICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEo
RHJhd2luZ0J1ZmZlciopOwogICAgIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0
OwogICAgIGJvb2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQqKTsKIAogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKIAotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBXZWJHTExheWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5
ZXIoKTsKLSNlbmRpZgogICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0OwogCiAgICAg
dm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKQEAgLTMzMCw5ICszMjUsNiBAQCBwcml2YXRl
OgogICAgIH07CiAgICAgUmVzb3VyY2VTYWZldHkgbV9yZXNvdXJjZVNhZmV0eTsKIAotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBSZWZQdHI8V2ViR0xMYXllckNocm9taXVt
PiBtX2NvbXBvc2l0aW5nTGF5ZXI7Ci0jZW5kaWYKICNpZiBVU0UoU0tJQSkKICAgICAvLyBJZiB0
aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgQ2FudmFzJ3MgYmFja2luZyBzdG9yZSBkb24ndAog
ICAgIC8vIG1hdGNoIHRob3NlIHRoYXQgd2Ugd2VyZSBnaXZlbiBpbiB0aGUgbW9zdCByZWNlbnQg
Y2FsbCB0bwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114198</attachid>
            <date>2011-11-08 19:29:19 -0800</date>
            <delta_ts>2011-11-09 10:48:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111108222621.patch</filename>
            <type>text/plain</type>
            <size>60802</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NjQ1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTggQEAKKzIwMTEtMTEtMDggIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUGF0Y2ggdGhh
dCBpbXBsZW1lbnRpbmcgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuIEFsbCBQ
bGF0Zm9ybUxheWVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMKKyAgICAgICAgcGVyZm9ybWVkIGJ5
IHRoZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICBDaGFuZ2VzIGFyZSBvbmx5IHJlbGV2YW50IHRv
IENocm9taXVtIHBvcnRzLiBGdW5jdGlvbmFsaXR5IGlzCisgICAgICAgIHVuY2hhbmdlZCBmb3Ig
b3RoZXIgcG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzIwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDogQ29uc3RydWN0IGEg
RHJhd2luZ0J1ZmZlcgorICAgICAgICBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCBmb3J3YXJk
IGFsbCBmcmFtZWJ1ZmZlciBtYW5hZ2VtZW50IGNhbGxzIHRvCisgICAgICAgIGl0LgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
SWZDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZWJ1ZmZlcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oOiAgV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNlcworICAgICAgICBh
cmUgbm8gbG9uZ2VyIHRyYWNrZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QuIENhbGxlcnMgY2FuIG5v
dyBwYXNzIGEKKyAgICAgICAgRHJhd2luZ0J1ZmZlciBpbnN0YW5jZSB0byBwcm92aWRlIGFjY2Vz
cyB0byB0aGUgV2ViR0xMYXllckNocm9taXVtIGRhdGEuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlQ29sb3JUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpmcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjp+V2ViR0xM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJh
d3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21p
dW06OnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TExheWVyQ2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDogV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNl
cworICAgICAgICBoYXZlIGEgcmF3IHJlZmVyZW5jZSB0byB0aGVpciBvd25pbmcgRHJhd2luZ0J1
ZmZlci4gIFRoaXMgcmVmZXJlbmNlIGlzIHNldCB0byBOVUxMIG9uCisgICAgICAgIGRlc3RydWN0
aW9uIG9mIHRoZSBEcmF3aW5nQnVmZmVyLiAgVGhpcyBmb2xsb3dzIHRoZSBvbGQgY29kZSwgd2hp
Y2ggaGFkIHRoZSBXZWJHTExheWVyQ2hyb21pdW0KKyAgICAgICAgcmVmZXIgcmF3bHkgdG8gYSBH
cmFwaGljc0NvbnRleHQzRCBpbnN0YW5jZSwgd2hpY2ggd2FzIGFsc28gcmV2b2tlZCBkdXJpbmcg
dGVhci1kb3duIG9mIHRoZQorICAgICAgICBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmNwcDogVGhlIERyYXdpbmdCdWZmZXIgaXMgbm93IHRoZQorICAgICAgICBjZW50cmFs
IHBvaW50IGJldHdlZW4gdGhlIEdyYXBoaWNzQ29udGV4dDNELCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQsIGFuZAorICAgICAgICBXZWJHTExheWVyQ2hyb21pdW0gY2xhc3Nlcy4gIEdyYXBoaWNzQ29u
dGV4dDNELCBhbmQgV2ViR0xMYXllckNocm9taXVtIG9ubHkKKyAgICAgICAgZGVwZW5kIG9uIHRo
ZSBEcmF3aW5nQnVmZmVyIGludGVyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhckZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpt
dWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpkaXNjYXJkUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6c2V0U2Npc3Nv
ckVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1
ZmZlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSk6CisKIDIwMTEtMTEtMDggIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgVXNlIGEgdHlwZWRlZiBmb3IgRXhjZXB0aW9uQ29kZSBpbiBhbGwgaGVhZGVyIGZp
bGVzIGluc3RlYWQgb2YgaW5jbHVkaW5nIEV4Y2VwdGlvbkNvZGUuaApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShy
ZXZpc2lvbiA5OTY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw3ICszNjYsMTIgQEAgUGFzc093
blB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMUgogICAgIH0KIAogICAgIGF0dHJpYnV0
ZXMubm9FeHRlbnNpb25zID0gdHJ1ZTsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBhdHRy
aWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gdHJ1ZTsKKyNlbHNlCiAgICAgYXR0cmlidXRlcy5zaGFy
ZVJlc291cmNlcyA9IGZhbHNlOworI2VuZGlmCisKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhvc3RX
aW5kb3cpKTsKIApAQCAtMzgyLDYgKzM4Nyw3IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2Vi
R0xSZW5kZXJpbmdDb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKICAgICAsIG1fY29udGV4dChjb250ZXh0
KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCiAgICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNl
KQogICAgICwgbV9yZXN0b3JlVGltZXIodGhpcykKICAgICAsIG1fdmlkZW9DYWNoZSg0KQpAQCAt
Mzg5LDYgKzM5NSwxNSBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29u
CiAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQobV9jb250ZXh0
KTsKKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIC8vIENyZWF0ZSB0aGUgRHJhd2luZ0J1
ZmZlciBhbmQgaW5pdGlhbGl6ZSB0aGUgcGxhdGZvcm0gbGF5ZXIuCisgICAgbV9kcmF3aW5nQnVm
ZmVyID0gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgSW50U2l6ZShjYW52
YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSwgIW1fYXR0cmlidXRlcy5wcmVzZXJ2
ZURyYXdpbmdCdWZmZXIpOworI2VuZGlmCisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKwogICAgIHNldHVwRmxhZ3MoKTsKICAgICBp
bml0aWFsaXplTmV3Q29udGV4dCgpOwogfQpAQCAtNDU0LDYgKzQ2OSw5IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmUKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSkKICAgICAgICAgaW5pdFZlcnRleEF0dHJpYjAoKTsKIAorICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6ZShjYW52YXMoKS0+d2lk
dGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisKICAgICBtX2NvbnRleHQtPnJlc2hhcGUoY2Fu
dmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7CiAgICAgbV9jb250ZXh0LT52aWV3
cG9ydCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKIApAQCAt
NDk0LDcgKzUxMiw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dEMK
IHsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCiAgICAgICAgIHJldHVybjsKKwogICAg
IG1fY29udGV4dC0+bWFya0NvbnRleHRDaGFuZ2VkKCk7CisKICAgICBtX2xheWVyQ2xlYXJlZCA9
IGZhbHNlOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBSZW5kZXJCb3gq
IHJlbmRlckJveCA9IGNhbnZhcygpLT5yZW5kZXJCb3goKTsKQEAgLTUyNCw4ICs1NDQsMTIgQEAg
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZDb21wbwogICAgIC8vIERldGVybWlu
ZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1c2VyIGFza2VkIGZv
ciBhbmQgdGhpcyBjbGVhci4KICAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBtYXNrICYmICFtX3Nj
aXNzb3JFbmFibGVkOwogCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBt
X2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IDApOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykgeworICAgICAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgfQogICAgIG1fY29udGV4dC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAgICBpZiAoY29tYmluZWRDbGVhciAm
JiAobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkKICAgICAgICAg
bV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY29sb3JNYXNrWzBdID8gbV9jbGVhckNvbG9yWzBdIDog
MCwKQEAgLTU4MSwyMSArNjA1LDUwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWlu
dFJlbmRlcmkKICAgICAvLyBoYXBwZW5lZCBhZnRlciBpdCB3YXMgY29tcG9zaXRlZCBzaG91bGQg
YmUgaWdub3JlZCBieSB0aGUgY29tcG9zaXRvci4KICAgICBpZiAobV9jb250ZXh0LT5sYXllckNv
bXBvc2l0ZWQoKSAmJiAhbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcikgewogICAg
ICAgICBtX2NvbnRleHQtPnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyh0aGlzKTsKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgUExBVEZPUk0oQ0hST01JVU0pCisg
ICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyh0aGlzKTsKKyNlbmRpZgorCiAgICAgICAg
IGNhbnZhcygpLT5tYWtlUHJlc2VudGF0aW9uQ29weSgpOwogICAgIH0gZWxzZQogICAgICAgICBj
YW52YXMoKS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQo
KTsKKwogICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNsZWFyZWQpCiAg
ICAgICAgIHJldHVybjsKKwogICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdlKCk7CiAgICAg
bV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXModGhpcyk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXModGhpcywgbV9kcmF3aW5nQnVmZmVyLmdldCgpKTsKKworICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5n
KQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Cisg
ICAgfQogfQogCiBQYXNzUmVmUHRyPEltYWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCiB7CiAgICAgY2xlYXJJZkNvbXBvc2l0
ZWQoKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+Y29tbWl0KCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gbV9jb250ZXh0
LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShtX2RyYXdpbmdCdWZmZXIuZ2V0KCkp
OworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGlu
Zy5nZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJp
bmQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCiBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0CkBAIC02MjcsMTYg
KzY4MCwyNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZShpbnQKIAogICAg
IC8vIFdlIGRvbid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUg
bmV3bHkgY3JlYXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgogICAgIC8vIGNs
ZWFyIChhbmQgdGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4KLSAgICBtX2NvbnRl
eHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAg
ICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKIH0KIAog
aW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKIHsK
KyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVy
LT5zaXplKCkud2lkdGgoKTsKKwogICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJh
bWVidWZmZXJTaXplKCkud2lkdGgoKTsKIH0KIAogaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNvbnN0CiB7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikK
KyAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOworCiAgICAg
cmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsK
IH0KIApAQCAtNzU4LDcgKzgyMCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymlu
ZEZyYW1lYnVmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgPSBidWZmZXI7Ci0gICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBvYmpl
Y3RPclplcm8oYnVmZmVyKSk7CisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2Ry
YXdpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8gSW5zdGVhZCBvZiBiaW5kaW5nIGZiIDAsIGJpbmQg
dGhlIGRyYXdpbmcgYnVmZmVyLgorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBvYmpl
Y3RPclplcm8oYnVmZmVyKSk7CiAgICAgaWYgKGJ1ZmZlcikKICAgICAgICAgYnVmZmVyLT5zZXRI
YXNFdmVyQmVlbkJvdW5kKCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
QEAgLTEwOTcsOSArMTE2MywyMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRl
eEltYWdlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsK
LSAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkKKyAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkgewor
ICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0
aXNhbXBsaW5nKQorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2lu
Z0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAg
ICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSAgICBlbHNlIHsKKworICAgICAgICAv
LyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5iaW5kKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZm
ZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAgaWYgKCFtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdp
bmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZ
OwogICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwogICAgICAg
ICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0
aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAm
Y2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKQEAgLTExMTEsNiArMTE4OSwxMCBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsK
KworICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgIGlm
ICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CiAgICAgfQogICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJh
bWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBiZWxvdyBzaG91bGQgYmUgZXhl
Y3V0ZWQuCiAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKQEAg
LTExNDIsNyArMTIyNCwxNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1
YkltCiAgICAgfQogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CiAgICAgaWYgKGlzUmVzb3VyY2VT
YWZlKCkpCisgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwg
Zm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsK
KwogICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgICAgIC8vIFJlc3Rv
cmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJp
bmQoKTsKICAgICBlbHNlIHsKICAgICAgICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7CiAg
ICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CkBAIC0xMTY2LDEx
ICsxMjU2LDI4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW0KICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHpl
cm8uZ2V0KCkpOwogICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhl
aWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBu
ZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICAgICAgICAgIGlmICghbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAgICAgICAgICAgICAgbV9jb250ZXh0
LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0ICsgY2xpcHBlZFggLSB4
LCB5b2Zmc2V0ICsgY2xpcHBlZFkgLSB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRI
ZWlnaHQpOworCisgICAgICAgICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVl
ZGVkCisgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2lu
Z0J1ZmZlcikKKyAgICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwogICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxp
bmcpCisgICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAg
ICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgICAgICAgICAvLyBSZXN0
b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPmJpbmQoKTsKKyAgICAgICAgfQogICAgIH0KICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQpAQCAtMTI4Nyw3ICsxMzk0LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkZWxldGVGcmFtZWIKICAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1
ZmZlckJpbmRpbmcpIHsKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwogICAgICAg
ICAvLyBIYXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGlu
dGVybmFsIGZiby4KLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikK
KyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIDApOwogICAgIH0KIH0KIApAQCAtMTM3NCw4ICsxNDg0LDExIEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdDM0QKIHsKICAgICBpZiAoaXNDb250ZXh0TG9z
dCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlm
IChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkKKyAgICBpZiAoY2FwID09
IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKICAgICAgICAgbV9zY2lzc29yRW5h
YmxlZCA9IGZhbHNlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKKyAg
ICB9CiAgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE3MTYsOCArMTgyOSwxMSBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZW5hYmxlKEdDM0RlCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
dmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09
IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisgICAgaWYgKGNhcCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CiAgICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0
cnVlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CiAgICAg
bV9jb250ZXh0LT5lbmFibGUoY2FwKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQpAQCAtMjkyNCw3ICszMDQwLDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpyZWFkUGl4ZWxzKEcKICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKICAgICB2b2lk
KiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOworCisgICAgLy8gQ29tbWl0IERyYXdpbmdC
dWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICBpZiAoIW1fZnJh
bWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5jb21taXQoKTsKKwogICAgIG1fY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCisgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVm
ZmVyIGlmIG5lZWRlZAorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5n
QnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKwogI2lmIE9TKERBUldJ
TikKICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVuIEdMIGRyaXZlciBidWcg
b24gTWFjIGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4
ZWxzIHNob3VsZCBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KQEAgLTM5NzYsNiArNDEw
MiwxOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VSZXN0b3JlCiAgICAgbWF5
YmVSZXN0b3JlQ29udGV4dChTeW50aGV0aWNMb3N0Q29udGV4dCk7CiB9CiAKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCitQbGF0Zm9ybUxheWVyKiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnBs
YXRmb3JtTGF5ZXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG1fY29udGV4dC0+cGxhdGZvcm1M
YXllcigpOworfQorI2VuZGlmCisKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVP
YmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkKIHsKICAgICBtX2NhbnZhc09iamVjdHMucmVtb3Zl
KG9iamVjdCk7CkBAIC00MTY3LDE0ICs0MzA1LDE0IEBAIGludCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEJvdW5kRnJhbWUKIHsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPmdldFdpZHRoKCk7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOworICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBt
X2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZy
YW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7CiB9CiAKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKQogewogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBt
X2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0SGVpZ2h0KCk7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+
Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKKyAgICByZXR1cm4gbV9kcmF3
aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCkgOiBtX2NvbnRleHQt
PmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7CiB9CiAKIFdlYkdMVGV4dHVy
ZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKEdDM0RlbnVt
IHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApCkBAIC00ODgwLDYgKzUwMTgsMTIg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZQogICAgICAgICByZXR1
cm47CiAgICAgfQogCisgICAgLy8gQ29uc3RydWN0IGEgbmV3IGRyYXdpbmcgYnVmZmVyIHdpdGgg
dGhlIG5ldyBHcmFwaGljc0NvbnRleHQzRC4KKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Cisg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+ZGlzY2FyZFJlc291cmNlcygpOworICAgICAgICBtX2Ry
YXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVmZmVyOjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBtX2Ry
YXdpbmdCdWZmZXItPnNpemUoKSwgIW1fYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIp
OworICAgIH0KKwogICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CiAgICAgbV9jb250ZXh0TG9zdCA9
IGZhbHNlOwogICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24g
OTk2NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBXZWJHTFJlbmRl
cmluZ0NvbnRleHRfaAogCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJGbG9hdDMyQXJyYXkuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludDMyQXJyYXkuaCIKQEAgLTI5
Myw3ICsyOTQsNyBAQCBwdWJsaWM6CiAKICAgICBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3ND
b250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCk7IH0KKyAg
ICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKICNlbmRpZgog
CiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CkBAIC0zNTksNiArMzYw
LDEwIEBAIHB1YmxpYzoKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0
OwogCisgICAgLy8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciByZW5kZXJpbmcgdG8gYSBEcmF3aW5n
QnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVjdGx5CisgICAgLy8gdG8gdGhlIGJhY2stYnVmZmVyIG9m
IG1fY29udGV4dC4KKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVmZmVyOwor
CiAgICAgY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzdG9yZVRpbWVyIDogcHVibGljIFRp
bWVyQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRSZXN0b3JlVGltZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KSA6IG1fY29u
dGV4dChjb250ZXh0KSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDk5NjQ1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcsNiBAQCB1aW50OF90IGNvbnZlcnRDb2xvcjE2Qmln
VG84KHVpbnQxNl90IHZhCiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi0KLVBhc3NSZWZQ
dHI8RHJhd2luZ0J1ZmZlcj4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURyYXdpbmdCdWZmZXIo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRl
KHRoaXMsIHNpemUpOwotfQotCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEUmVz
b3VyY2VTYWZlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3Jk
ZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCB1bnBhY2tBbGlnbm1l
bnQpCiB7CiAgICAgQVNTRVJUKHVucGFja0FsaWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVu
dCA9PSAyIHx8IHVucGFja0FsaWdubWVudCA9PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaAkocmV2aXNpb24gOTk2NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsOCAr
NTAwLDYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9pZCBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
IAotICAgIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gY3JlYXRlRHJhd2luZ0J1ZmZlcihjb25z
dCBJbnRTaXplJiA9IEludFNpemUoKSk7Ci0gICAgCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFU
Rk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkKICAgICAvLyBX
aXRoIG11bHRpc2FtcGxpbmcgb24sIGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZCTyB0byByZWd1bGFy
IEZCTy4KICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CkBAIC03OTEsOCArNzg5LDggQEAgcHVi
bGljOgogICAgIHZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgpOwogICAgIGJvb2wgbGF5ZXJDb21w
b3NpdGVkKCkgY29uc3Q7CiAKLSAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICB2b2lkIHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqLCBEcmF3aW5nQnVmZmVyKik7
CisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhKERyYXdpbmdCdWZmZXIqKTsKICAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0Nh
bnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7CiAKICNpZiBQTEFURk9STShRVCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJD
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gOTk2NDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVy
Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiwxMCBAQAogCiAjaW5jbHVk
ZSAiRHJhd2luZ0J1ZmZlci5oIgogCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
IgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00OCw3ICs1MSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNv
bG9yVGV4dHVyZShHcmEKICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKICAgICBjb250ZXh0
LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpOwotICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlLCAwKTsKIAog
ICAgIHJldHVybiBvZmZzY3JlZW5Db2xvclRleHR1cmU7CiB9CkBAIC01Niw0NiArNTgsNzQgQEAg
c3RhdGljIHVuc2lnbmVkIGdlbmVyYXRlQ29sb3JUZXh0dXJlKEdyYQogRHJhd2luZ0J1ZmZlcjo6
RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0
ZWQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICA6IG1f
c2VwYXJhdGVCYWNraW5nVGV4dHVyZShzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgICwgbV9z
Y2lzc29yRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9z
aXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlz
YW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVu
c2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAg
LCBtX2ZibygwKQogICAgICwgbV9jb2xvckJ1ZmZlcigwKQorICAgICwgbV9iYWNraW5nQ29sb3JC
dWZmZXIoMCkKICAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX2RlcHRoQnVm
ZmVyKDApCiAgICAgLCBtX3N0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVGQk8o
MCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogewotICAgIG1fZmJvID0gY29u
dGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgbV9jb2xvckJ1ZmZl
ciA9IGdlbmVyYXRlQ29sb3JUZXh0dXJlKGNvbnRleHQsIHNpemUpOwotICAgIGNyZWF0ZVNlY29u
ZGFyeUJ1ZmZlcnMoKTsKLSAgICBpZiAoIXJlc2V0KHNpemUpKSB7Ci0gICAgICAgIG1fY29udGV4
dC5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGluaXRpYWxpemUoc2l6ZSk7
CiB9CiAKIERyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKIHsKKyAgICBpZiAobV9wbGF0
Zm9ybUxheWVyKQorICAgICAgICBtX3BsYXRmb3JtTGF5ZXItPnNldERyYXdpbmdCdWZmZXIoMCk7
CisKICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2xlYXIoKTsK
IH0KIAordm9pZCBEcmF3aW5nQnVmZmVyOjppbml0aWFsaXplKGNvbnN0IEludFNpemUmIHNpemUp
Cit7CisgICAgbV9mYm8gPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisKKyAgICBp
ZiAobV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgICAgICBtX2JhY2tpbmdDb2xvckJ1ZmZl
ciA9IGdlbmVyYXRlQ29sb3JUZXh0dXJlKG1fY29udGV4dC5nZXQoKSwgc2l6ZSk7CisKKyAgICBt
X2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IG1fZmJvKTsKKyAgICBtX2NvbG9yQnVmZmVyID0gZ2VuZXJhdGVDb2xvclRleHR1cmUobV9jb250
ZXh0LmdldCgpLCBzaXplKTsKKyAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FU
VEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwg
MCk7CisgICAgY3JlYXRlU2Vjb25kYXJ5QnVmZmVycygpOworICAgIGlmICghcmVzZXQoc2l6ZSkp
IHsKKyAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIERyYXdpbmdCdWZmZXI6
OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKQogewogICAgIGlmICghbV9jb250ZXh0KQogICAgICAg
ICByZXR1cm47CiAKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGlm
IChtdWx0aXNhbXBsZSgpKQogICAgICAgICBjb21taXQoKTsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworCisgICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkgewor
ICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9iYWNraW5nQ29sb3JCdWZmZXIpOworICAgICAgICB1
bnNpZ25lZCBjb2xvckZvcm1hdCA9IG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5h
bHBoYSA/IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIDogR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsK
KyAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgY29sb3JGb3JtYXQsIDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVp
Z2h0KCksIDApOworICAgIH0KKworICAgIGlmIChtdWx0aXNhbXBsZSgpKQorICAgICAgICBiaW5k
KCk7CisKICAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiB9CiAjZW5kaWYKQEAgLTEwMywxMyArMTMz
LDMxIEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1MYXkKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9ybUxheWVyKiBEcmF3aW5nQnVmZmVyOjpw
bGF0Zm9ybUxheWVyKCkKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fcGxhdGZvcm1MYXll
cikgeworICAgICAgICBtX3BsYXRmb3JtTGF5ZXIgPSBXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0
ZSgwKTsKKyAgICAgICAgbV9wbGF0Zm9ybUxheWVyLT5zZXREcmF3aW5nQnVmZmVyKHRoaXMpOwor
ICAgIH0KKworICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXIuZ2V0KCk7CiB9CiAjZW5kaWYKIAog
UGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9jb2xvckJ1ZmZlcjsKKyAgICByZXR1cm4gbV9zZXBhcmF0ZUJh
Y2tpbmdUZXh0dXJlID8gbV9iYWNraW5nQ29sb3JCdWZmZXIgOiBtX2NvbG9yQnVmZmVyOwogfQog
CitQbGF0Zm9ybTNET2JqZWN0IERyYXdpbmdCdWZmZXI6OmZyYW1lYnVmZmVyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9mYm87Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Cit2b2lkIERyYXdpbmdCdWZmZXI6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIp
CisgICAgICAgIG1fcGxhdGZvcm1MYXllci0+cGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyhj
b250ZXh0LT5jYW52YXMoKS0+YnVmZmVyKCkpOworfQorI2VuZGlmCisKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vV2ViR0xMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gOTk2NDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJXZWJHTExheWVyQ2hy
b21pdW0uaCIKIAorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJFeHRlbnNp
b25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCkBAIC00OCw3ICs0OSw2IEBAIFBhc3NSZWZQdHI8
V2ViR0xMYXllckNocm9taXVtPiBXZWJHTExheWUKIAogV2ViR0xMYXllckNocm9taXVtOjpXZWJH
TExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKICAgICA6IENhbnZhc0xh
eWVyQ2hyb21pdW0oZGVsZWdhdGUpCi0gICAgLCBtX2NvbnRleHQoMCkKICAgICAsIG1fdGV4dHVy
ZUNoYW5nZWQodHJ1ZSkKICAgICAsIG1fdGV4dHVyZVVwZGF0ZWQoZmFsc2UpCiB7CkBAIC01Niwx
MyArNTYsMTMgQEAgV2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0oQwogCiBX
ZWJHTExheWVyQ2hyb21pdW06On5XZWJHTExheWVyQ2hyb21pdW0oKQogewotICAgIGlmIChtX2Nv
bnRleHQgJiYgbGF5ZXJUcmVlSG9zdCgpKQotICAgICAgICBsYXllclRyZWVIb3N0KCktPnN0b3BS
YXRlTGltaXRlcihtX2NvbnRleHQpOworICAgIGlmIChjb250ZXh0KCkgJiYgbGF5ZXJUcmVlSG9z
dCgpKQorICAgICAgICBsYXllclRyZWVIb3N0KCktPnN0b3BSYXRlTGltaXRlcihjb250ZXh0KCkp
OwogfQogCiBib29sIFdlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0
R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUik7
CisgICAgcmV0dXJuIChjb250ZXh0KCkgJiYgY29udGV4dCgpLT5nZXRFeHRlbnNpb25zKCktPmdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1Ip
OwogfQogCiB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNl
cyhHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDb250ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJikK
QEAgLTg1LDExICs4NSw5IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3Np
dG8KICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVyZSB1c2Vk
IGJ5IHRoZSBjb21wb3NpdG9yLgogICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpICYmIG1f
dGV4dHVyZVVwZGF0ZWQpIHsKLSAgICAgICAgLy8gcHJlcGFyZVRleHR1cmUgY29waWVzIHRoZSBj
b250ZW50cyBvZiB0aGUgb2ZmLXNjcmVlbiByZW5kZXIgdGFyZ2V0IGludG8gdGhlIHRleHR1cmUK
LSAgICAgICAgLy8gdXNlZCBieSB0aGUgY29tcG9zaXRvci4KLSAgICAgICAgLy8KLSAgICAgICAg
bV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOwotICAgICAgICBtX2NvbnRleHQtPm1hcmtMYXll
ckNvbXBvc2l0ZWQoKTsKKyAgICAgICAgLy8gcHVibGlzaFRvUGxhdGZvcm1MYXllciBwcmVwYXJl
cyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBmb3IgdXNlIGJ5
IHRoZSBjb21wb3NpdG9yLgorICAgICAgICBkcmF3aW5nQnVmZmVyKCktPnB1Ymxpc2hUb1BsYXRm
b3JtTGF5ZXIoKTsKKyAgICAgICAgY29udGV4dCgpLT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAg
ICAgICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJvdW5kcygpKTsK
ICAgICAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlZCA9
IGZhbHNlOwpAQCAtMTAxLDcgKzk5LDcgQEAgYm9vbCBXZWJHTExheWVyQ2hyb21pdW06OnBhaW50
UmVuZGVyZWRSZQogICAgIGlmIChtX3RleHR1cmVVcGRhdGVkIHx8ICFsYXllclJlbmRlcmVyQ29u
dGV4dCgpIHx8ICFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
SW50U2l6ZSBmcmFtZWJ1ZmZlclNpemUgPSBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCk7CisgICAgSW50U2l6ZSBmcmFtZWJ1ZmZlclNpemUgPSBjb250ZXh0KCktPmdldElu
dGVybmFsRnJhbWVidWZmZXJTaXplKCk7CiAgICAgQVNTRVJUKGxheWVyUmVuZGVyZXJDb250ZXh0
KCkpOwogCiAgICAgLy8gVGhpcyB3b3VsZCBpZGVhbGx5IGJlIGRvbmUgaW4gdGhlIHdlYmdsIGNv
bnRleHQsIGJ1dCB0aGF0IGlzbid0IHBvc3NpYmxlIHlldC4KQEAgLTExMCw3ICsxMDgsNyBAQCBi
b29sIFdlYkdMTGF5ZXJDaHJvbWl1bTo6cGFpbnRSZW5kZXJlZFJlCiAgICAgbGF5ZXJSZW5kZXJl
ckNvbnRleHQoKS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCwgMCk7CiAKICAgICBFeHRlbnNpb25zM0RD
aHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4o
bGF5ZXJSZW5kZXJlckNvbnRleHQoKS0+Z2V0RXh0ZW5zaW9ucygpKTsKLSAgICBleHRlbnNpb25z
LT5wYWludEZyYW1lYnVmZmVyVG9DYW52YXMoZnJhbWVidWZmZXIsIGZyYW1lYnVmZmVyU2l6ZS53
aWR0aCgpLCBmcmFtZWJ1ZmZlclNpemUuaGVpZ2h0KCksICFtX2NvbnRleHQtPmdldENvbnRleHRB
dHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CisgICAgZXh0ZW5z
aW9ucy0+cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1lYnVmZmVyLCBmcmFtZWJ1ZmZlclNp
emUud2lkdGgoKSwgZnJhbWVidWZmZXJTaXplLmhlaWdodCgpLCAhY29udGV4dCgpLT5nZXRDb250
ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwgaW1hZ2VCdWZmZXIpOwogICAgIGxh
eWVyUmVuZGVyZXJDb250ZXh0KCktPmRlbGV0ZUZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyMSwzMiArMTE5LDM5IEBAIHZvaWQgV2ViR0xMYXllckNo
cm9taXVtOjpjb250ZW50Q2hhbmdlZCgKICAgICAvLyBJZiBXZWJHTCBjb21tYW5kcyBhcmUgaXNz
dWVkIG91dHNpZGUgb2YgYSB0aGUgYW5pbWF0aW9uIGNhbGxiYWNrcywgdGhlbiB1c2UKICAgICAv
LyBjYWxsIHJhdGVMaW1pdE9mZnNjcmVlbkNvbnRleHRDSFJPTUlVTSgpIHRvIGtlZXAgdGhlIGNv
bnRleHQgZnJvbSBnZXR0aW5nIHRvbyBmYXIgYWhlYWQuCiAgICAgaWYgKGxheWVyVHJlZUhvc3Qo
KSkKLSAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdGFydFJhdGVMaW1pdGVyKG1fY29udGV4dCk7
CisgICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RhcnRSYXRlTGltaXRlcihjb250ZXh0KCkpOwog
fQogCi12b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zdCBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKK3ZvaWQgV2ViR0xMYXllckNocm9taXVtOjpzZXREcmF3aW5nQnVm
ZmVyKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7Ci0gICAgYm9vbCBjb250ZXh0Q2hh
bmdlZCA9IChtX2NvbnRleHQgIT0gY29udGV4dCk7CisgICAgYm9vbCBkcmF3aW5nQnVmZmVyQ2hh
bmdlZCA9IChtX2RyYXdpbmdCdWZmZXIgIT0gZHJhd2luZ0J1ZmZlcik7CisgICAgbV9kcmF3aW5n
QnVmZmVyID0gZHJhd2luZ0J1ZmZlcjsKIAotICAgIGlmIChsYXllclRyZWVIb3N0KCkgJiYgY29u
dGV4dENoYW5nZWQpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RvcFJhdGVMaW1pdGVyKG1f
Y29udGV4dCk7CisgICAgaWYgKGxheWVyVHJlZUhvc3QoKSAmJiBkcmF3aW5nQnVmZmVyQ2hhbmdl
ZCkKKyAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdG9wUmF0ZUxpbWl0ZXIoY29udGV4dCgpKTsK
IAotICAgIG1fY29udGV4dCA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0M0QqPihjb250ZXh0
KTsKLQotICAgIGlmICghbV9jb250ZXh0KQorICAgIGlmICghbV9kcmF3aW5nQnVmZmVyKQogICAg
ICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25lZCBpbnQgdGV4dHVyZUlkID0gbV9jb250ZXh0LT5w
bGF0Zm9ybVRleHR1cmUoKTsKLSAgICBpZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkIHx8IGNv
bnRleHRDaGFuZ2VkKSB7CisgICAgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9IG1fZHJhd2luZ0J1
ZmZlci0+cGxhdGZvcm1Db2xvckJ1ZmZlcigpOworICAgIGlmICh0ZXh0dXJlSWQgIT0gbV90ZXh0
dXJlSWQgfHwgZHJhd2luZ0J1ZmZlckNoYW5nZWQpIHsKICAgICAgICAgbV90ZXh0dXJlQ2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSB0cnVlOwogICAgIH0KICAgICBt
X3RleHR1cmVJZCA9IHRleHR1cmVJZDsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRyaWJ1dGVzID0gbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBjb250ZXh0KCktPmdldENv
bnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgbV9oYXNBbHBoYSA9IGF0dHJpYnV0ZXMuYWxwaGE7CiAg
ICAgbV9wcmVtdWx0aXBsaWVkQWxwaGEgPSBhdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYTsK
IH0KIAorR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y29udGV4dCgpIGNv
bnN0Cit7CisgICAgaWYgKGRyYXdpbmdCdWZmZXIoKSkKKyAgICAgICAgcmV0dXJuIGRyYXdpbmdC
dWZmZXIoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS5nZXQoKTsKKworICAgIHJldHVybiAwOworfQor
CiBHcmFwaGljc0NvbnRleHQzRCogV2ViR0xMYXllckNocm9taXVtOjpsYXllclJlbmRlcmVyQ29u
dGV4dCgpCiB7CiAgICAgLy8gRklYTUU6IEluIHRoZSB0aHJlYWRlZCBjYXNlLCBwYWludFJlbmRl
cmVkUmVzdWx0c1RvQ2FudmFzIG11c3QgYmUKQEAgLTE1Nyw0ICsxNjIsNSBAQCBHcmFwaGljc0Nv
bnRleHQzRCogV2ViR0xMYXllckNocm9taXVtOjpsCiB9CiAKIH0KKwogI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5o
CShyZXZpc2lvbiA5OTY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiQ2FudmFz
TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC01MywyMSArNTQsMjMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBjb250ZW50Q2hhbmdlZCgpOwogICAgIGJvb2wgcGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZh
cyhJbWFnZUJ1ZmZlciopOwogCi0gICAgdm9pZCBzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIHsgcmV0
dXJuIG1fY29udGV4dDsgfQorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgY29uc3Q7
CiAKKyAgICB2b2lkIHNldERyYXdpbmdCdWZmZXIoRHJhd2luZ0J1ZmZlciopOworICAgIERyYXdp
bmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdCdWZmZXI7
IH0KIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViR0xMYXllckNocm9taXVtKENDTGF5ZXJEZWxl
Z2F0ZSopOwogICAgIGZyaWVuZCBjbGFzcyBXZWJHTExheWVyQ2hyb21pdW1SYXRlTGltaXRUYXNr
OwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CiAKLSAg
ICAvLyBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllciBoYXMgYSBzaWRlLWVmZmVjdCBv
ZiBhc3NpZ25pbmcgaXRzZWxmCi0gICAgLy8gdG8gdGhlIGxheWVyLiBCZWNhdXNlIG9mIHRoYXQg
R3JhcGhpY3NDb250ZXh0M0QncyBkZXN0cnVjdG9yIHdpbGwgcmVzZXQKLSAgICAvLyBsYXllcidz
IGNvbnRleHQgdG8gMC4KLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogICAgIGJv
b2wgbV90ZXh0dXJlQ2hhbmdlZDsKICAgICBib29sIG1fdGV4dHVyZVVwZGF0ZWQ7CisKKyAgICAv
LyBUaGUgRHJhd2luZ0J1ZmZlciBob2xkaW5nIHRoZSBXZWJHTCBjb250ZW50cyBmb3IgdGhpcyBs
YXllci4KKyAgICAvLyBBIHJlZmVyZW5jZSBpcyBub3QgaGVsZCBoZXJlLCBiZWNhdXNlIHRoZSBE
cmF3aW5nQnVmZmVyIGFscmVhZHkgaG9sZHMKKyAgICAvLyBhIHJlZmVyZW5jZSB0byB0aGUgV2Vi
R0xMYXllckNocm9taXVtLgorICAgIERyYXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKIH07
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGlj
c0NvbnRleHQzREVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAkocmV2aXNpb24gOTk2NDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RF
ZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjYsMTMgKzcyNiwxNyBAQCBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwg
RHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAvLyBEcmF3aW5nQnVmZmVyIHN1
cHBvcnQgb25seSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4KKyAgICBBU1NFUlQoIWRy
YXdpbmdCdWZmZXIpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURh
dGEoKQorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogewor
ICAgIC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGltcGxlbWVudGVkIGluIENocm9taXVt
IHBvcnRzLgorICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJ
bnRTaXplKDEsIDEpKTsKICAgICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1
ZmZlci5jcHAJKHJldmlzaW9uIDk5NjQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4
IEBACiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNE
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OCw3ICs1MCw3IEBAIHN0YXRpYyBpbnQg
c19tYXhpbXVtUmVzb3VyY2VVc2VQaXhlbHMgPQogI2VuZGlmCiBzdGF0aWMgaW50IHNfY3VycmVu
dFJlc291cmNlVXNlUGl4ZWxzID0gMDsKIAotUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3
aW5nQnVmZmVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNp
emUmIHNpemUpCitQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IERyYXdpbmdCdWZmZXI6OmNyZWF0
ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBz
ZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQogewogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9
IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKICAgICBib29sIG11bHRpc2FtcGxlU3VwcG9ydGVk
ID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKSAmJiBl
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSAm
JiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfT0VTX3JnYjhfcmdiYTgiKTsKQEAgLTYwLDcgKzYy
LDcgQEAgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOgogICAgIGJvb2wg
cGFja2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX09F
U19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwogICAgIGlmIChwYWNrZWREZXB0aFN0ZW5jaWxTdXBw
b3J0ZWQpCiAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX09FU19wYWNrZWRf
ZGVwdGhfc3RlbmNpbCIpOwotICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVy
ID0gYWRvcHRSZWYobmV3IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSwgbXVsdGlzYW1wbGVT
dXBwb3J0ZWQsIHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCkpOworICAgIFJlZlB0cjxEcmF3
aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyID0gYWRvcHRSZWYobmV3IERyYXdpbmdCdWZmZXIoY29u
dGV4dCwgc2l6ZSwgbXVsdGlzYW1wbGVTdXBwb3J0ZWQsIHBhY2tlZERlcHRoU3RlbmNpbFN1cHBv
cnRlZCwgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkpOwogICAgIHJldHVybiAoZHJhd2luZ0J1ZmZl
ci0+bV9jb250ZXh0KSA/IGRyYXdpbmdCdWZmZXIucmVsZWFzZSgpIDogMDsKIH0KIApAQCAtNzgs
NiArODAsMTEgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpjbGVhcigpCiAgICAgICAgIG1fY29sb3JC
dWZmZXIgPSAwOwogICAgIH0KIAorICAgIGlmIChtX2JhY2tpbmdDb2xvckJ1ZmZlcikgeworICAg
ICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9iYWNraW5nQ29sb3JCdWZmZXIpOworICAg
ICAgICBtX2JhY2tpbmdDb2xvckJ1ZmZlciA9IDA7CisgICAgfQorCiAgICAgaWYgKG1fbXVsdGlz
YW1wbGVDb2xvckJ1ZmZlcikgewogICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZl
cihtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogICAgICAgICBtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIgPSAwOwpAQCAtMTY2LDcgKzE3Myw3IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXJG
cmFtZWJ1ZmZlcigpCiAgICAgdW5zaWduZWQgY2hhciBkZXB0aE1hc2sgPSBmYWxzZTsKICAgICB1
bnNpZ25lZCBpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmOwogICAgIHVuc2lnbmVkIGNoYXIg
aXNTY2lzc29yRW5hYmxlZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxvbmcgY2xlYXJNYXNrID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7CisgICAgdW5zaWduZWQgY2xlYXJN
YXNrID0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7CiAgICAgaWYgKGF0dHJp
YnV0ZXMuZGVwdGgpIHsKICAgICAgICAgbV9jb250ZXh0LT5nZXRGbG9hdHYoR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7CiAgICAgICAgIG1fY29udGV4
dC0+Y2xlYXJEZXB0aCgxKTsKQEAgLTE4OCw2ICsxOTUsMTQgQEAgdm9pZCBEcmF3aW5nQnVmZmVy
OjpjbGVhckZyYW1lYnVmZmVyKCkKICAgICBtX2NvbnRleHQtPmdldEZsb2F0dihHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUUsIGNsZWFyQ29sb3IpOwogICAgIG1fY29udGV4dC0+
Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7
CisKKyAgICAvLyBUaGUgbXVsdGlzYW1wbGUgZmJvIHdhcyBqdXN0IGNsZWFyZWQsIGJ1dCB3ZSBh
bHNvIG5lZWQgdG8gY2xlYXIgdGhlIG5vbi1tdWx0aXNhbXBsZWQgYnVmZmVyIHRvby4KKyAgICBp
ZiAobV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgbV9jb250
ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7CisgICAgICAg
IG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgfQorCiAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9y
KGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3Jb
M10pOwogCiAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKQEAgLTIzMyw3ICsyNDgsNyBAQCBi
b29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAgaWYgKG5ld1NpemUg
IT0gbV9zaXplKSB7CiAgICAgICAgIG1fc2l6ZSA9IG5ld1NpemU7CiAKLSAgICAgICAgdW5zaWdu
ZWQgbG9uZyBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxSZW5kZXJi
dWZmZXJGb3JtYXQ7CisgICAgICAgIHVuc2lnbmVkIGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9y
Rm9ybWF0LCBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZvcm1hdDsKICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMuYWxwaGEpIHsKICAgICAgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQTsKICAgICAgICAgICAgIGNvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkE7CkBAIC0yNTAsNyArMjY1LDcgQEAgYm9vbCBEcmF3aW5nQnVmZmVyOjpyZXNldChj
b25zdCBJbnRTaXplJgogICAgICAgICAgICAgaW50IG1heFNhbXBsZUNvdW50ID0gMDsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6
Ok1BWF9TQU1QTEVTLCAmbWF4U2FtcGxlQ291bnQpOwotICAgICAgICAgICAgaW50IHNhbXBsZUNv
dW50ID0gc3RkOjptaW4oOCwgbWF4U2FtcGxlQ291bnQpOworICAgICAgICAgICAgaW50IHNhbXBs
ZUNvdW50ID0gc3RkOjptaW4oNCwgbWF4U2FtcGxlQ291bnQpOwogCiAgICAgICAgICAgICBtX2Nv
bnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
bXVsdGlzYW1wbGVGQk8pOwogCkBAIC0yNjksMTAgKzI4NCwxNiBAQCBib29sIERyYXdpbmdCdWZm
ZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogCiAgICAgICAgIG1f
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29s
b3JCdWZmZXIpOwotICAgICAgICAKICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwogCiAgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJU
ZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2Nv
bG9yQnVmZmVyLCAwKTsKKworICAgICAgICAvLyByZXNpemUgdGhlIGJhY2tpbmcgY29sb3IgYnVm
ZmVyCisgICAgICAgIGlmIChtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUpIHsKKyAgICAgICAgICAg
IG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1f
YmFja2luZ0NvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgfQorCiAgICAgICAgIG1fY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwogCiAgICAg
ICAgIGlmICghbXVsdGlzYW1wbGUoKSkKQEAgLTI5MywyMyArMzE0LDU2IEBAIHZvaWQgRHJhd2lu
Z0J1ZmZlcjo6Y29tbWl0KGxvbmcgeCwgbG9uZwogewogICAgIGlmICghbV9jb250ZXh0KQogICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgaWYgKHdpZHRoIDwgMCkKICAgICAgICAgd2lk
dGggPSBtX3NpemUud2lkdGgoKTsKICAgICBpZiAoaGVpZ2h0IDwgMCkKICAgICAgICAgaGVpZ2h0
ID0gbV9zaXplLmhlaWdodCgpOwotICAgICAgICAKKwogICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgCisKICAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykgewogICAgICAg
ICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OlJFQURfRlJBTUVCVUZG
RVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihFeHRlbnNpb25zM0Q6OkRSQVdfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAgbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPmJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJ
VCwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisKKyAgICAgICAgaWYgKG1fc2Npc3NvckVu
YWJsZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlNDSVNTT1JfVEVTVCk7CisKKyAgICAgICAgLy8gVXNlIE5FQVJFU1QsIGJlY2F1c2UgdGhlcmUg
aXMgbm8gc2NhbGUgcGVyZm9ybWVkIGR1cmluZyB0aGUgYmxpdC4KKyAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCwg
R3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOworCisgICAgICAgIGlmIChtX3NjaXNzb3JFbmFi
bGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlND
SVNTT1JfVEVTVCk7CiAgICAgfQotICAgIAorCiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiB9CiAKK2Jvb2wgRHJh
d2luZ0J1ZmZlcjo6bXVsdGlzYW1wbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHQg
JiYgbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyAmJiBtX211bHRp
c2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkOworfQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gRHJh
d2luZ0J1ZmZlcjo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQoreworICAgIHJl
dHVybiBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKHRoaXMpOwor
fQorCit2b2lkIERyYXdpbmdCdWZmZXI6OmRpc2NhcmRSZXNvdXJjZXMoKQoreworICAgIG1fY29s
b3JCdWZmZXIgPSAwOworICAgIG1fYmFja2luZ0NvbG9yQnVmZmVyID0gMDsKKyAgICBtX211bHRp
c2FtcGxlQ29sb3JCdWZmZXIgPSAwOworCisgICAgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgPSAwOwor
ICAgIG1fZGVwdGhCdWZmZXIgPSAwOworCisgICAgbV9zdGVuY2lsQnVmZmVyID0gMDsKKworICAg
IG1fbXVsdGlzYW1wbGVGQk8gPSAwOworICAgIG1fZmJvID0gMDsKK30KKwogdm9pZCBEcmF3aW5n
QnVmZmVyOjpiaW5kKCkKIHsKICAgICBpZiAoIW1fY29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAkocmV2
aXNpb24gOTk2NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1R5cGVzM0QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAKICNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTQzLDE1ICs0NCwxOCBAQAogI2VuZGlmCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi1jbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW07CitjbGFzcyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBJbWFn
ZURhdGE7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCitjbGFzcyBXZWJHTExheWVyQ2hyb21pdW07
CiAjZW5kaWYKIAogLy8gTWFuYWdlcyBhIHJlbmRlcmluZyB0YXJnZXQgKGZyYW1lYnVmZmVyICsg
YXR0YWNobWVudCkgZm9yIGEgY2FudmFzLiAgQ2FuIHB1Ymxpc2ggaXRzIHJlbmRlcmluZwogLy8g
cmVzdWx0cyB0byBhIFBsYXRmb3JtTGF5ZXIgZm9yIGNvbXBvc2l0aW5nLgogY2xhc3MgRHJhd2lu
Z0J1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPERyYXdpbmdCdWZmZXI+IHsKIHB1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0
M0QqLCBjb25zdCBJbnRTaXplJiwgYm9vbCk7CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOwogCiAgICAgfkRyYXdpbmdCdWZmZXIoKTsKQEAgLTc1LDIyICs3OSwzOSBAQCBwdWJs
aWM6CiAKICAgICAvLyBDb3BpZXMgdGhlIG11bHRpc2FtcGxlIGNvbG9yIGJ1ZmZlciB0byB0aGUg
bm9ybWFsIGNvbG9yIGJ1ZmZlciBhbmQgbGVhdmVzIG1fZmJvIGJvdW5kCiAgICAgdm9pZCBjb21t
aXQobG9uZyB4ID0gMCwgbG9uZyB5ID0gMCwgbG9uZyB3aWR0aCA9IC0xLCBsb25nIGhlaWdodCA9
IC0xKTsKLSAgICAKLSAgICBib29sIG11bHRpc2FtcGxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0ICYmIG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgJiYgbV9t
dWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZDsgfQotICAgIAorCisgICAgLy8gY29tbWl0IHNo
b3VsZCBjb3B5IHRoZSBmdWxsIG11bHRpc2FtcGxlIGJ1ZmZlciwgYW5kIG5vdCByZXNwZWN0IHRo
ZQorICAgIC8vIGN1cnJlbnQgc2Npc3NvciBib3VuZHMuIFRyYWNrIHRoZSBzdGF0ZSBvZiB0aGUg
c2Npc3NvciB0ZXN0IHNvIHRoYXQgaXQKKyAgICAvLyBjYW4gYmUgZGlzYWJsZWQgZHVyaW5nIGNh
bGxzIHRvIGNvbW1pdC4KKyAgICB2b2lkIHNldFNjaXNzb3JFbmFibGVkKGJvb2wgc2Npc3NvckVu
YWJsZWQpIHsgbV9zY2lzc29yRW5hYmxlZCA9IHNjaXNzb3JFbmFibGVkOyB9CisKKyAgICBib29s
IG11bHRpc2FtcGxlKCkgY29uc3Q7CisKICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtQ29s
b3JCdWZmZXIoKSBjb25zdDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKCkgY29u
c3Q7CisKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9J
bWFnZURhdGEoKTsKKworICAgIC8vIEltbWVkaWF0ZWx5IHJlbGVhc2VzIG93bmVyc2hpcCBvZiBh
bGwgcmVzb3VyY2VzLiBDYWxsIHVwb24gbG9zcyBvZiB0aGUKKyAgICAvLyBncmFwaGljcyBjb250
ZXh0IHRvIHByZXZlbnQgZnJlZWluZyBpbnZhbGlkIHJlc291cmNlcy4KKyAgICB2b2lkIGRpc2Nh
cmRSZXNvdXJjZXMoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCk7CiAgICAgdm9pZCBwdWJsaXNoVG9QbGF0Zm9y
bUxheWVyKCk7CisgICAgdm9pZCBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCopOwogI2VuZGlmCiAKICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQog
CiBwcml2YXRlOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZShH
cmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsKLSAgICAKLSAgICBEcmF3aW5nQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgbXVsdGlzYW1wbGVF
eHRlbnNpb25TdXBwb3J0ZWQsIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9y
dGVkKTsKKyAgICBEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6
ZSYsIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCisgICAgICAgICAgICAgICAg
ICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCwgYm9vbCBzZXBhcmF0
ZUJhY2tpbmdUZXh0dXJlKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBJbnRTaXplJik7
CisKKyAgICBib29sIG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZTsKKyAgICBib29sIG1fc2Npc3Nv
ckVuYWJsZWQ7CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKICAg
ICBJbnRTaXplIG1fc2l6ZTsKQEAgLTk4LDYgKzExOSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZDsKICAgICBQbGF0Zm9ybTNET2Jq
ZWN0IG1fZmJvOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9jb2xvckJ1ZmZlcjsKKyAgICBQbGF0
Zm9ybTNET2JqZWN0IG1fYmFja2luZ0NvbG9yQnVmZmVyOwogCiAgICAgLy8gVGhpcyBpcyB1c2Vk
IHdoZW4gd2UgaGF2ZSBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwuCiAgICAgUGxhdGZvcm0zRE9i
amVjdCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcjsKQEAgLTExMCw2ICsxMzIsMTAgQEAgcHJpdmF0ZToK
ICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1wbGVGQk87CiAgICAgUGxhdGZvcm0zRE9i
amVjdCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkK
KyAgICBSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBtX3BsYXRmb3JtTGF5ZXI7CisjZW5kaWYK
KwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbV9wbGF0Zm9y
bUxheWVyOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFjLm1tCShyZXZpc2lvbiA5
OTY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2lu
Z0J1ZmZlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYg
c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4dGVu
c2lvblN1cHBvcnRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWRE
ZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb25TdXBwb3J0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJh
dGVCYWNraW5nVGV4dHVyZSkKKyAgICA6IG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZShzZXBhcmF0
ZUJhY2tpbmdUZXh0dXJlKQorICAgICwgbV9zY2lzc29yRW5hYmxlZChmYWxzZSkKKyAgICAsIG1f
Y29udGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlzYW1w
bGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAg
LCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb25TdXBwb3J0ZWQpCkBAIC01Miw2ICs1NSw5IEBAIERyYXdpbmdCdWZmZXI6OkRy
YXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAs
IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogeworICAgIC8vIFN1cHBvcnQgZm9yIGEgc2Vw
YXJhdGUgYmFja2luZyB0ZXh0dXJlIGhhcyBvbmx5IGJlZW4gZW5hYmxlZCBmb3IKKyAgICAvLyB0
aGUgY2hyb21pdW0gcG9ydC4KKyAgICBBU1NFUlQoIW1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSk7
CiAgICAgQVNTRVJUKG1fZmJvKTsKICAgICBpZiAoIW1fZmJvKSB7CiAgICAgICAgIGNsZWFyKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1
ZmZlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNwcAkocmV2aXNpb24gOTk2NDUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsOCArMzQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRHJhd2lu
Z0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNp
b25TdXBwb3J0ZWQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkK
KyAgICA6IG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZShzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQor
ICAgICwgbV9zY2lzc29yRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQog
ICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3Rl
bmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0
ZWQpCkBAIC00Nyw2ICs1MCw5IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhp
Y3NDb24KICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcigwKQogeworICAgIC8vIFN1cHBvcnQgZm9yIGEgc2VwYXJhdGUgYmFja2luZyB0ZXh0
dXJlIGhhcyBvbmx5IGJlZW4gZW5hYmxlZCBmb3IKKyAgICAvLyB0aGUgY2hyb21pdW0gcG9ydC4K
KyAgICBBU1NFUlQoIW1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSk7CiAgICAgQVNTRVJUKG1fZmJv
KTsKICAgICBpZiAoIW1fZmJvKSB7CiAgICAgICAgIGNsZWFyKCk7CkBAIC04Myw2ICs4OSwxMiBA
QCBQbGF0Zm9ybTNET2JqZWN0IERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtCiAgICAgcmV0dXJuIG1f
Y29sb3JCdWZmZXI7CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCit2b2lk
IERyYXdpbmdCdWZmZXI6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworfQorI2VuZGlmCisKIH0KIAogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRHJhd2luZ0J1ZmZlckd0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Ry
YXdpbmdCdWZmZXJHdGsuY3BwCShyZXZpc2lvbiA5OTY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9EcmF3aW5nQnVmZmVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzYsNiArNzYsMTIgQEAgUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9y
bQogICAgIHJldHVybiBtX2NvbG9yQnVmZmVyOwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQordm9pZCBEcmF3aW5nQnVmZmVyOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9D
YW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKK30KKyNlbmRpZgorCiB9
CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCShy
ZXZpc2lvbiA5OTY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw4ICsx
MjgsMTAgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNSZXNvdXJjZVNhZmUoKQogfQogCiAj
aWYgIVBMQVRGT1JNKFFUKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7Cisg
ICAgLy8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0g
cG9ydHMuCisgICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKICAgICBIVE1MQ2FudmFzRWxlbWVu
dCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVm
ZmVyID0gY2FudmFzLT5idWZmZXIoKTsKIApAQCAtMTYyLDggKzE2NCwxMCBAQCBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpwYWludENvbXBvc2l0ZWRSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Q
YXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciogZHJhd2lu
Z0J1ZmZlcikKIHsKKyAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRl
ZCBpbiBDaHJvbWl1bSBwb3J0cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIpOwogICAgIC8v
IFJlYWRpbmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3b3VsZCBpbnZvbHZlIHVucHJlbXVsdGlwbHlp
bmcsIHdoaWNoIGlzCiAgICAgLy8gbG9zc3kKICAgICBpZiAobV9hdHRycy5wcmVtdWx0aXBsaWVk
QWxwaGEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHQzRFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkocmV2aXNpb24gOTk2NDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDggKzQyMCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjptYWtlQ29udGV4dEN1cnJlCiAgICAgbV9wcml2YXRlLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAv
LyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0
cy4KKyAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIpOwogICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4
dC0+Y2FudmFzKCk7CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZm
ZXIoKTsKQEAgLTQzMCw4ICs0MzIsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRS
ZW5kZXJpbmdSZQogfQogCiAjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKLVBhc3NSZWZQdHI8
SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFn
ZURhdGEoKQorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQog
eworICAgIC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGltcGxlbWVudGVkIGluIENocm9t
aXVtIHBvcnRzLgorICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7CiAgICAgLy8gRklYTUU6IFRo
aXMgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgZm9yIHByb3BlciBub24tcHJlbXVsdGlwbGllZC1h
bHBoYQogICAgIC8vIHN1cHBvcnQuCiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkocmV2aXNpb24gOTk2NDUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDExLTExLTA4ICBKZWZm
IFRpbWFudXMgIDx0d2l6QGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBhdGNo
IHRoYXQgaW1wbGVtZW50aW5nIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRvIGFsbG93IFdlYkdMCisg
ICAgICAgIHRvIHNoYXJlIGl0cyBiYWNraW5nIHN0b3JlIGRpcmVjdGx5IHdpdGggdGhlIGNvbXBv
c2l0b3IuCisgICAgICAgIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0cyBjcmVhdGUgYW5kIHJlbmRl
ciB0byBGQk9zIG1hbmFnZWQgYnkgYQorICAgICAgICBEcmF3aW5nQnVmZmVyIGluc3RhbmNlLiBB
bGwgUGxhdGZvcm1MYXllciBsaWZldGltZSBtYW5hZ2VtZW50IGlzCisgICAgICAgIHBlcmZvcm1l
ZCBieSB0aGUgRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgQ2hhbmdlcyBhcmUgb25seSByZWxldmFu
dCB0byBDaHJvbWl1bSBwb3J0cy4gRnVuY3Rpb25hbGl0eSBpcworICAgICAgICB1bmNoYW5nZWQg
Zm9yIG90aGVyIHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTMyMDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcDogR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlIG5vIGxvbmdlciBjYWNoZXMKKyAgICAgICAgdGhlIFdlYkdMTGF5ZXJDaHJv
bWl1bSBpbnN0YW5jZS4gIEluc3RlYWQsIGl0IGlzIGFjY2Vzc2VkIHZpYSBEcmF3aW5nQnVmZmVy
IGluc3RhbmNlcworICAgICAgICBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIHRoZSBuZWNlc3Nhcnkg
cm91dGluZXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5H
cmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgKiBz
cmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmg6CisKIDIwMTEtMTEtMDggIEFkYW0gS2xlaW4g
IDxhZGFta0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVXNlIGEgdHlwZWRlZiBmb3IgRXhjZXB0
aW9uQ29kZSBpbiBhbGwgaGVhZGVyIGZpbGVzIGluc3RlYWQgb2YgaW5jbHVkaW5nIEV4Y2VwdGlv
bkNvZGUuaApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0
M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk5NjQ1KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDEwICszNSwxMCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJD
aHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiRHJhd2lu
Z0J1ZmZlci5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQu
aCIKQEAgLTE2Myw2ICsxNjMsMjAgQEAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3Jl
YXRlR3JhcAogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBo
aWNzQ29udGV4dEZyb21XZWJDb250ZXh0KHdlYkNvbnRleHQucmVsZWFzZSgpLCBhdHRycywgaG9z
dFdpbmRvdywgcmVuZGVyU3R5bGUsIHRocmVhZFVzYWdlKTsKIH0KIAordm9pZCBnZXREcmF3aW5n
UGFyYW1ldGVycyhEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBXZWJLaXQ6OldlYkdyYXBo
aWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGxhdGZvcm0zRE9iamVjdCogZnJhbWVCdWZmZXJJZCwgaW50KiB3aWR0aCwgaW50KiBoZWln
aHQpCit7CisgICAgaWYgKGRyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgKmZyYW1lQnVmZmVySWQg
PSBkcmF3aW5nQnVmZmVyLT5mcmFtZWJ1ZmZlcigpOworICAgICAgICAqd2lkdGggPSBkcmF3aW5n
QnVmZmVyLT5zaXplKCkud2lkdGgoKTsKKyAgICAgICAgKmhlaWdodCA9IGRyYXdpbmdCdWZmZXIt
PnNpemUoKS5oZWlnaHQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAqZnJhbWVCdWZmZXJJZCA9
IDA7CisgICAgICAgICp3aWR0aCA9IGdyYXBoaWNzQ29udGV4dDNELT53aWR0aCgpOworICAgICAg
ICAqaGVpZ2h0ID0gZ3JhcGhpY3NDb250ZXh0M0QtPmhlaWdodCgpOworICAgIH0KK30KKwogfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0Rm9yQW5vdGhlclRo
cmVhZChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQpAQCAt
MjEyLDE3ICsyMjYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cHJlcGFyZVRl
CiAgICAgbV9pbXBsLT5wcmVwYXJlVGV4dHVyZSgpOwogfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotV2ViR0xMYXllckNocm9taXVtKiBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnBsYXRmb3JtTGF5ZXIoKQotewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBpZiAoIW1fY29tcG9zaXRpbmdMYXllcikKLSAgICAgICAgbV9jb21wb3NpdGluZ0xheWVy
ID0gV2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUoMCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbV9j
b21wb3NpdGluZ0xheWVyLmdldCgpOwotfQotI2VuZGlmCi0KIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjptYXJrQ29udGV4dENoYW5nZWQoKQogewogICAgIG1fbGF5ZXJDb21wb3NpdGVk
ID0gZmFsc2U7CkBAIC0zMDUsMzEgKzMwOCwzNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6cGFpbnRGcmFtCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQq
IGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1
ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBj
b250ZXh0LT5jYW52YXMoKS0+YnVmZmVyKCk7Ci0gICAgcGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFz
KDAsIG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSwgIW1faW1wbC0+Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEsIGltYWdlQnVmZmVyKTsKKyAgICBQbGF0
Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVySWQ7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAg
Z2V0RHJhd2luZ1BhcmFtZXRlcnMoZHJhd2luZ0J1ZmZlciwgbV9pbXBsLmdldCgpLCAmZnJhbWVi
dWZmZXJJZCwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBwYWludEZyYW1lYnVmZmVyVG9DYW52YXMo
ZnJhbWVidWZmZXJJZCwgd2lkdGgsIGhlaWdodCwgIW1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0
ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEsIGltYWdlQnVmZmVyKTsKIH0KIAogYm9vbCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLSAgICBpZiAocGxhdGZvcm1MYXllcigpKQotICAgICAgICByZXR1cm4gcGxhdGZvcm1M
YXllcigpLT5wYWludFJlbmRlcmVkUmVzdWx0c1RvQ2FudmFzKGNvbnRleHQtPmNhbnZhcygpLT5i
dWZmZXIoKSk7Ci0jZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
SW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqIGRyYXdp
bmdCdWZmZXIpCiB7CiAgICAgaWYgKG1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVt
dWx0aXBsaWVkQWxwaGEpCiAgICAgICAgIHJldHVybiAwOwotICAgIAotICAgIFJlZlB0cjxJbWFn
ZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobV9pbXBsLT53aWR0
aCgpLCBtX2ltcGwtPmhlaWdodCgpKSk7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVm
ZmVySWQ7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgZ2V0RHJhd2luZ1BhcmFtZXRlcnMo
ZHJhd2luZ0J1ZmZlciwgbV9pbXBsLmdldCgpLCAmZnJhbWVidWZmZXJJZCwgJndpZHRoLCAmaGVp
Z2h0KTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3Jl
YXRlKEludFNpemUod2lkdGgsIGhlaWdodCkpOwogICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9
IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKLSAgICBzaXplX3QgYnVmZmVyU2l6
ZSA9IDQgKiBtX2ltcGwtPndpZHRoKCkgKiBtX2ltcGwtPmhlaWdodCgpOworICAgIHNpemVfdCBi
dWZmZXJTaXplID0gNCAqIHdpZHRoICogaGVpZ2h0OwogCi0gICAgbV9pbXBsLT5yZWFkQmFja0Zy
YW1lYnVmZmVyKHBpeGVscywgYnVmZmVyU2l6ZSwgMCwgbV9pbXBsLT53aWR0aCgpLCBtX2ltcGwt
PmhlaWdodCgpKTsKKyAgICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCBidWZm
ZXJTaXplLCBmcmFtZWJ1ZmZlcklkLCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYnVmZmVyU2l6ZTsgaSArPSA0KQogICAgICAgICBzdGQ6OnN3YXAocGl4ZWxz
W2ldLCBwaXhlbHNbaSArIDJdKTsKQEAgLTEwMDksOSArMTAxNSw2IEBAIEdyYXBoaWNzQ29udGV4
dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKIAogR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGlj
c0NvbnRleHQzRCgpCiB7Ci0gICAgV2ViR0xMYXllckNocm9taXVtKiBjYW52YXNMYXllciA9IG1f
cHJpdmF0ZS0+cGxhdGZvcm1MYXllcigpOwotICAgIGlmIChjYW52YXNMYXllcikKLSAgICAgICAg
Y2FudmFzTGF5ZXItPnNldENvbnRleHQoMCk7CiAgICAgbV9wcml2YXRlLT5zZXRDb250ZXh0TG9z
dENhbGxiYWNrKG51bGxwdHIpOwogICAgIG1fcHJpdmF0ZS0+c2V0U3dhcEJ1ZmZlcnNDb21wbGV0
ZUNhbGxiYWNrQ0hST01JVU0obnVsbHB0cik7CiB9CkBAIC0xMDU2LDkgKzEwNTksNyBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjppc1Jlc291cmNlU2FmZSgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3Jt
TGF5ZXIoKSBjb25zdAogewotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogY2FudmFzTGF5ZXIgPSBt
X3ByaXZhdGUtPnBsYXRmb3JtTGF5ZXIoKTsKLSAgICBjYW52YXNMYXllci0+c2V0Q29udGV4dCh0
aGlzKTsKLSAgICByZXR1cm4gY2FudmFzTGF5ZXI7CisgICAgcmV0dXJuIDA7CiB9CiAjZW5kaWYK
IApAQCAtMTIxNCw4ICsxMjE1LDE2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29t
cG9zaXRlZCgKICAgICByZXR1cm4gbV9wcml2YXRlLT5sYXllckNvbXBvc2l0ZWQoKTsKIH0KIAot
REVMRUdBVEVfVE9fSU5URVJOQUxfMShwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcywgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF9SKHBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvSW1hZ2VEYXRhLCBQYXNzUmVmUHRyPEltYWdlRGF0YT4pCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQoreworICAg
IHJldHVybiBtX3ByaXZhdGUtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKGNvbnRleHQs
IGRyYXdpbmdCdWZmZXIpOworfQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqIGRy
YXdpbmdCdWZmZXIpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoZHJhd2luZ0J1ZmZlcik7Cit9CisKIERFTEVHQVRFX1RPX0lOVEVSTkFM
XzFSKHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcywgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCosIGJvb2wpCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZm
ZXIoKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHJldmlzaW9uIDk5NjQ1KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDEwICs0Niw4IEBAIGNsYXNzIFdlYlZpZXdJbXBsOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBFeHRlbnNpb25zM0RDaHJvbWl1
bTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1jbGFzcyBXZWJHTExheWVyQ2hy
b21pdW07Ci0jZW5kaWYKIGNsYXNzIEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXI7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0
ZXI7CiAKQEAgLTk1LDE3ICs5MywxNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBsYXllckNvbXBvc2l0
ZWQoKSBjb25zdDsKICAgICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKIAotICAgIHZvaWQg
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwor
ICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCosIERyYXdpbmdCdWZmZXIqKTsKICAgICB2b2lkIHBhaW50RnJhbWVidWZmZXJUb0NhbnZh
cyhpbnQgZnJhbWVidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBJbWFnZUJ1ZmZlciopOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKik7CiAgICAgYm9v
bCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CiAgICAgYm9vbCBwYWludENvbXBvc2l0
ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwogCiAgICAgdm9pZCBw
cmVwYXJlVGV4dHVyZSgpOwogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAg
IFdlYkdMTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllcigpOwotI2VuZGlmCiAgICAgYm9vbCBp
c0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7CiAKICAgICB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxl
cigpOwpAQCAtMzMwLDkgKzMyNSw2IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBSZXNvdXJjZVNh
ZmV0eSBtX3Jlc291cmNlU2FmZXR5OwogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIFJlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IG1fY29tcG9zaXRpbmdMYXllcjsKLSNl
bmRpZgogI2lmIFVTRShTS0lBKQogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRo
ZSBDYW52YXMncyBiYWNraW5nIHN0b3JlIGRvbid0CiAgICAgLy8gbWF0Y2ggdGhvc2UgdGhhdCB3
ZSB3ZXJlIGdpdmVuIGluIHRoZSBtb3N0IHJlY2VudCBjYWxsIHRvCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114312</attachid>
            <date>2011-11-09 10:48:39 -0800</date>
            <delta_ts>2011-11-10 08:54:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111109134540.patch</filename>
            <type>text/plain</type>
            <size>60224</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NzI4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTggQEAKKzIwMTEtMTEtMDggIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUGF0Y2ggdGhh
dCBpbXBsZW1lbnRpbmcgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuIEFsbCBQ
bGF0Zm9ybUxheWVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMKKyAgICAgICAgcGVyZm9ybWVkIGJ5
IHRoZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICBDaGFuZ2VzIGFyZSBvbmx5IHJlbGV2YW50IHRv
IENocm9taXVtIHBvcnRzLiBGdW5jdGlvbmFsaXR5IGlzCisgICAgICAgIHVuY2hhbmdlZCBmb3Ig
b3RoZXIgcG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzIwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDogQ29uc3RydWN0IGEg
RHJhd2luZ0J1ZmZlcgorICAgICAgICBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCBmb3J3YXJk
IGFsbCBmcmFtZWJ1ZmZlciBtYW5hZ2VtZW50IGNhbGxzIHRvCisgICAgICAgIGl0LgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
SWZDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZWJ1ZmZlcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oOiAgV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNlcworICAgICAgICBh
cmUgbm8gbG9uZ2VyIHRyYWNrZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QuIENhbGxlcnMgY2FuIG5v
dyBwYXNzIGEKKyAgICAgICAgRHJhd2luZ0J1ZmZlciBpbnN0YW5jZSB0byBwcm92aWRlIGFjY2Vz
cyB0byB0aGUgV2ViR0xMYXllckNocm9taXVtIGRhdGEuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlQ29sb3JUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpmcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjp+V2ViR0xM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJh
d3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21p
dW06OnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TExheWVyQ2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDogV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNl
cworICAgICAgICBoYXZlIGEgcmF3IHJlZmVyZW5jZSB0byB0aGVpciBvd25pbmcgRHJhd2luZ0J1
ZmZlci4gIFRoaXMgcmVmZXJlbmNlIGlzIHNldCB0byBOVUxMIG9uCisgICAgICAgIGRlc3RydWN0
aW9uIG9mIHRoZSBEcmF3aW5nQnVmZmVyLiAgVGhpcyBmb2xsb3dzIHRoZSBvbGQgY29kZSwgd2hp
Y2ggaGFkIHRoZSBXZWJHTExheWVyQ2hyb21pdW0KKyAgICAgICAgcmVmZXIgcmF3bHkgdG8gYSBH
cmFwaGljc0NvbnRleHQzRCBpbnN0YW5jZSwgd2hpY2ggd2FzIGFsc28gcmV2b2tlZCBkdXJpbmcg
dGVhci1kb3duIG9mIHRoZQorICAgICAgICBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmNwcDogVGhlIERyYXdpbmdCdWZmZXIgaXMgbm93IHRoZQorICAgICAgICBjZW50cmFs
IHBvaW50IGJldHdlZW4gdGhlIEdyYXBoaWNzQ29udGV4dDNELCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQsIGFuZAorICAgICAgICBXZWJHTExheWVyQ2hyb21pdW0gY2xhc3Nlcy4gIEdyYXBoaWNzQ29u
dGV4dDNELCBhbmQgV2ViR0xMYXllckNocm9taXVtIG9ubHkKKyAgICAgICAgZGVwZW5kIG9uIHRo
ZSBEcmF3aW5nQnVmZmVyIGludGVyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhckZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpt
dWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpkaXNjYXJkUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6c2V0U2Npc3Nv
ckVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1
ZmZlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSk6CisKIDIwMTEtMTEtMDkgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgog
CiAgICAgICAgIFN0eWxlU2hlZXQ6IERldmlydHVhbGl6ZSBzdHlsZVNoZWV0Q2hhbmdlZCgpLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwCShyZXZpc2lvbiA5OTcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw3ICsz
NjYsMTIgQEAgUGFzc093blB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMUgogICAgIH0K
IAogICAgIGF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gdHJ1ZTsKKyNpZiBQTEFURk9STShDSFJP
TUlVTSkKKyAgICBhdHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gdHJ1ZTsKKyNlbHNlCiAgICAg
YXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNlOworI2VuZGlmCisKIAogICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0
dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKIApAQCAtMzgyLDYgKzM4Nyw3IEBAIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb24KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMpCiAgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKICAgICAsIG1f
Y29udGV4dChjb250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCiAgICAgLCBtX3Jlc3Rv
cmVBbGxvd2VkKGZhbHNlKQogICAgICwgbV9yZXN0b3JlVGltZXIodGhpcykKICAgICAsIG1fdmlk
ZW9DYWNoZSg0KQpAQCAtMzg5LDYgKzM5NSwxNSBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Oldl
YkdMUmVuZGVyaW5nQ29uCiAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKIHsKICAgICBB
U1NFUlQobV9jb250ZXh0KTsKKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIC8vIENyZWF0
ZSB0aGUgRHJhd2luZ0J1ZmZlciBhbmQgaW5pdGlhbGl6ZSB0aGUgcGxhdGZvcm0gbGF5ZXIuCisg
ICAgbV9kcmF3aW5nQnVmZmVyID0gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQo
KSwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSwgIW1fYXR0
cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpOworI2VuZGlmCisKKyAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKwogICAgIHNldHVw
RmxhZ3MoKTsKICAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwogfQpAQCAtNDU0LDYgKzQ2OSw5
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmUKICAgICBpZiAoIWlz
R0xFUzJDb21wbGlhbnQoKSkKICAgICAgICAgaW5pdFZlcnRleEF0dHJpYjAoKTsKIAorICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6
ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisKICAgICBtX2NvbnRl
eHQtPnJlc2hhcGUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7CiAgICAg
bV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhl
aWdodCgpKTsKIApAQCAtNDk0LDcgKzUxMiw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjptYXJrQ29udGV4dEMKIHsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCiAgICAgICAg
IHJldHVybjsKKwogICAgIG1fY29udGV4dC0+bWFya0NvbnRleHRDaGFuZ2VkKCk7CisKICAgICBt
X2xheWVyQ2xlYXJlZCA9IGZhbHNlOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5yZW5kZXJCb3goKTsKQEAgLTUy
NCw4ICs1NDQsMTIgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZDb21wbwog
ICAgIC8vIERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRo
ZSB1c2VyIGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4KICAgICBib29sIGNvbWJpbmVkQ2xlYXIg
PSBtYXNrICYmICFtX3NjaXNzb3JFbmFibGVkOwogCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nKQotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIDApOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykgeworICAg
ICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5i
aW5kKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgfQogICAgIG1fY29u
dGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAgICBpZiAo
Y29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJf
QklUKSkKICAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY29sb3JNYXNrWzBdID8gbV9j
bGVhckNvbG9yWzBdIDogMCwKQEAgLTU4MSwyMSArNjA1LDUwIEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpwYWludFJlbmRlcmkKICAgICAvLyBoYXBwZW5lZCBhZnRlciBpdCB3YXMgY29t
cG9zaXRlZCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgY29tcG9zaXRvci4KICAgICBpZiAobV9j
b250ZXh0LT5sYXllckNvbXBvc2l0ZWQoKSAmJiAhbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2lu
Z0J1ZmZlcikgewogICAgICAgICBtX2NvbnRleHQtPnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0Nh
bnZhcyh0aGlzKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgUExBVEZP
Uk0oQ0hST01JVU0pCisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyh0aGlzKTsKKyNl
bmRpZgorCiAgICAgICAgIGNhbnZhcygpLT5tYWtlUHJlc2VudGF0aW9uQ29weSgpOwogICAgIH0g
ZWxzZQogICAgICAgICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CiAgICAgY2xl
YXJJZkNvbXBvc2l0ZWQoKTsKKwogICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9s
YXllckNsZWFyZWQpCiAgICAgICAgIHJldHVybjsKKwogICAgIGNhbnZhcygpLT5jbGVhckNvcGll
ZEltYWdlKCk7CiAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotICAgIG1fY29udGV4
dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhpcyk7CisKKyAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIG1fY29u
dGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhpcywgbV9kcmF3aW5nQnVmZmVy
LmdldCgpKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgaWYgKG1fZnJh
bWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZl
ckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5iaW5kKCk7CisgICAgfQogfQogCiBQYXNzUmVmUHRyPEltYWdlRGF0YT4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCiB7CiAgICAg
Y2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShtX2RyYXdp
bmdCdWZmZXIuZ2V0KCkpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2Zy
YW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQog
CiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNv
bnN0CkBAIC02MjcsMTYgKzY4MCwyNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVz
aGFwZShpbnQKIAogICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRp
cnR5LCBzaW5jZSB0aGUgbmV3bHkgY3JlYXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0
IG9mZgogICAgIC8vIGNsZWFyIChhbmQgdGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRv
KS4KLSAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CisgICAgaWYgKG1fZHJh
d2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdpZHRo
LCBoZWlnaHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwg
aGVpZ2h0KTsKIH0KIAogaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlcldp
ZHRoKCkgY29uc3QKIHsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICByZXR1cm4g
bV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKKwogICAgIHJldHVybiBtX2NvbnRleHQt
PmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsKIH0KIAogaW50IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNvbnN0CiB7CisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhl
aWdodCgpOworCiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS5oZWlnaHQoKTsKIH0KIApAQCAtNzU4LDcgKzgyMCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6YmluZEZyYW1lYnVmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgPSBidWZmZXI7Ci0gICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVyKSk7CisgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8gSW5zdGVhZCBvZiBiaW5k
aW5nIGZiIDAsIGJpbmQgdGhlIGRyYXdpbmcgYnVmZmVyLgorICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmJpbmQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVyKSk7CiAgICAgaWYgKGJ1ZmZlcikKICAgICAg
ICAgYnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKQEAgLTEwOTcsOSArMTE2MywyMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y29weVRleEltYWdlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2xlYXJJ
ZkNvbXBvc2l0ZWQoKTsKLSAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkKKyAgICBpZiAoaXNSZXNv
dXJjZVNhZmUoKSkgeworICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQg
KGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5k
aW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29t
bWl0KCk7CisKICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSAgICBlbHNl
IHsKKworICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAg
IGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ29t
bWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAg
ICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAgICAgIEdDM0RpbnQgY2xp
cHBlZFgsIGNsaXBwZWRZOwogICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVk
SGVpZ2h0OwogICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5k
RnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVk
WCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKQEAgLTExMTEs
NiArMTE4OSwxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5
VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgYm9yZGVyKTsKKworICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVl
ZGVkCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVy
KQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CiAgICAgfQogICAgIC8vIEZJ
WE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBiZWxv
dyBzaG91bGQgYmUgZXhlY3V0ZWQuCiAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFKTsKQEAgLTExNDIsNyArMTIyNCwxNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29weVRleFN1YkltCiAgICAgfQogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CiAgICAg
aWYgKGlzUmVzb3VyY2VTYWZlKCkpCisgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlm
IG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5jb21taXQoKTsKKwogICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisg
ICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAgaWYgKCFt
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmJpbmQoKTsKICAgICBlbHNlIHsKICAgICAgICAgR0MzRGludCBjbGlwcGVk
WCwgY2xpcHBlZFk7CiAgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWln
aHQ7CkBAIC0xMTY2LDExICsxMjU2LDI4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
b3B5VGV4U3ViSW0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIHplcm8uZ2V0KCkpOwogICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+
IDAgJiYgY2xpcHBlZEhlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICAvLyBDb21taXQgRHJh
d2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICAg
ICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAg
ICAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAgICAgICAg
ICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
ICsgY2xpcHBlZFggLSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkgLSB5LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVk
V2lkdGgsIGNsaXBwZWRIZWlnaHQpOworCisgICAgICAgICAgICAgICAvLyBSZXN0b3JlIERyYXdp
bmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5k
aW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwg
Zm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNv
bW1pdCgpOworCiAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAg
ICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgICAgICBp
ZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAgICAgfQogICAgIH0KICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMTI4Nyw3ICsxMzk0LDEwIEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVGcmFtZWIKICAgICBpZiAoZnJhbWVidWZm
ZXIgPT0gbV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgPSAwOwogICAgICAgICAvLyBIYXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8g
YmluZCBiYWNrIHRvIGludGVybmFsIGZiby4KLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwogICAgIH0KIH0KIApAQCAtMTM3NCw4ICsxNDg0
LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdDM0QKIHsKICAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkK
KyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKICAgICAg
ICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVy
KQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNz
b3JFbmFibGVkKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE3MTYsOCArMTgyOSwxMSBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlKEdDM0RlCiB7CiAgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisgICAgaWYg
KGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CiAgICAgICAgIG1fc2Np
c3NvckVuYWJsZWQgPSB0cnVlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAg
ICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVk
KTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjkyNCw3ICszMDQwLDE3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEcKICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0
ZWQoKTsKICAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOworCisgICAgLy8g
Q29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykK
KyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwogICAgIG1fY29udGV4dC0+cmVhZFBpeGVs
cyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCisgICAgLy8gUmVz
dG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsK
KwogI2lmIE9TKERBUldJTikKICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVu
IEdMIGRyaXZlciBidWcgb24gTWFjIGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIHdoZW4gYWxwaGEg
aXMgb2ZmLCByZWFkUGl4ZWxzIHNob3VsZCBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4K
QEAgLTM5NzYsNiArNDEwMiwxOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VS
ZXN0b3JlCiAgICAgbWF5YmVSZXN0b3JlQ29udGV4dChTeW50aGV0aWNMb3N0Q29udGV4dCk7CiB9
CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitQbGF0Zm9ybUxheWVyKiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2Ry
YXdpbmdCdWZmZXItPnBsYXRmb3JtTGF5ZXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG1fY29u
dGV4dC0+cGxhdGZvcm1MYXllcigpOworfQorI2VuZGlmCisKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZW1vdmVPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkKIHsKICAgICBtX2NhbnZh
c09iamVjdHMucmVtb3ZlKG9iamVjdCk7CkBAIC00MTY3LDE0ICs0MzA1LDE0IEBAIGludCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWUKIHsKICAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQogICAgICAgICByZXR1
cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldFdpZHRoKCk7Ci0gICAgcmV0dXJuIG1fY29udGV4
dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOworICAgIHJldHVybiBtX2Ry
YXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpIDogbV9jb250ZXh0
LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7CiB9CiAKIGludCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKQogewogICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0SGVpZ2h0KCk7Ci0gICAgcmV0
dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKKyAg
ICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0
KCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7CiB9
CiAKIFdlYkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleHR1cmVC
aW5kaW5nKEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApCkBAIC00
ODgwLDYgKzUwMTgsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9y
ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgLy8gQ29uc3RydWN0IGEgbmV3IGRyYXdp
bmcgYnVmZmVyIHdpdGggdGhlIG5ldyBHcmFwaGljc0NvbnRleHQzRC4KKyAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+ZGlzY2FyZFJlc291cmNlcygp
OworICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVmZmVyOjpjcmVhdGUobV9jb250
ZXh0LmdldCgpLCBtX2RyYXdpbmdCdWZmZXItPnNpemUoKSwgIW1fYXR0cmlidXRlcy5wcmVzZXJ2
ZURyYXdpbmdCdWZmZXIpOworICAgIH0KKwogICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CiAgICAg
bV9jb250ZXh0TG9zdCA9IGZhbHNlOwogICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaAkocmV2aXNpb24gOTk3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2Rl
ZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAogCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJGbG9hdDMy
QXJyYXkuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludDMy
QXJyYXkuaCIKQEAgLTI5Myw3ICsyOTQsNyBAQCBwdWJsaWM6CiAKICAgICBHcmFwaGljc0NvbnRl
eHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7
IH0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LT5wbGF0Zm9y
bUxheWVyKCk7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdDsKICNlbmRpZgogCiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7
CkBAIC0zNTksNiArMzYwLDEwIEBAIHB1YmxpYzoKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gbV9jb250ZXh0OwogCisgICAgLy8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciByZW5kZXJp
bmcgdG8gYSBEcmF3aW5nQnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVjdGx5CisgICAgLy8gdG8gdGhl
IGJhY2stYnVmZmVyIG9mIG1fY29udGV4dC4KKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9k
cmF3aW5nQnVmZmVyOworCiAgICAgY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzdG9yZVRp
bWVyIDogcHVibGljIFRpbWVyQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICBleHBsaWNpdCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRSZXN0b3JlVGltZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KSA6IG1fY29udGV4dChjb250ZXh0KSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlz
aW9uIDk5NzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcsNiBAQCB1aW50OF90IGNv
bnZlcnRDb2xvcjE2QmlnVG84KHVpbnQxNl90IHZhCiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQogCi0KLVBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZURyYXdpbmdCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gRHJhd2lu
Z0J1ZmZlcjo6Y3JlYXRlKHRoaXMsIHNpemUpOwotfQotCiBib29sIEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGlu
dCB1bnBhY2tBbGlnbm1lbnQpCiB7CiAgICAgQVNTRVJUKHVucGFja0FsaWdubWVudCA9PSAxIHx8
IHVucGFja0FsaWdubWVudCA9PSAyIHx8IHVucGFja0FsaWdubWVudCA9PSA0IHx8IHVucGFja0Fs
aWdubWVudCA9PSA4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gOTk3MjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MDAsOCArNTAwLDYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9pZCBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKIAotICAgIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gY3JlYXRlRHJh
d2luZ0J1ZmZlcihjb25zdCBJbnRTaXplJiA9IEludFNpemUoKSk7Ci0gICAgCiAjaWYgUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShRVCkKICAgICAvLyBXaXRoIG11bHRpc2FtcGxpbmcgb24sIGJsaXQgZnJvbSBtdWx0aXNhbXBs
ZUZCTyB0byByZWd1bGFyIEZCTy4KICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CkBAIC03OTEs
OCArNzg5LDggQEAgcHVibGljOgogICAgIHZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgpOwogICAg
IGJvb2wgbGF5ZXJDb21wb3NpdGVkKCkgY29uc3Q7CiAKLSAgICB2b2lkIHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKLSAgICBQYXNzUmVmUHRy
PEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICB2b2lk
IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqLCBE
cmF3aW5nQnVmZmVyKik7CisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKTsKICAgICBib29sIHBhaW50Q29tcG9z
aXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7CiAKICNpZiBQTEFU
Rk9STShRVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkocmV2
aXNpb24gOTk3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiwx
MCBAQAogCiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogCisjaW5jbHVkZSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0u
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OCw3ICs1MSw2IEBAIHN0YXRpYyB1bnNp
Z25lZCBnZW5lcmF0ZUNvbG9yVGV4dHVyZShHcmEKICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKICAgICBjb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdF
KTsKICAgICBjb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FU
VEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2Zmc2NyZWVuQ29sb3JU
ZXh0dXJlLCAwKTsKIAogICAgIHJldHVybiBvZmZzY3JlZW5Db2xvclRleHR1cmU7CiB9CkBAIC01
Niw0NiArNTgsNzQgQEAgc3RhdGljIHVuc2lnbmVkIGdlbmVyYXRlQ29sb3JUZXh0dXJlKEdyYQog
RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRl
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxF
eHRlbnNpb25TdXBwb3J0ZWQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4
dHVyZSkKKyAgICA6IG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZShzZXBhcmF0ZUJhY2tpbmdUZXh0
dXJlKQorICAgICwgbV9zY2lzc29yRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fY29udGV4dChjb250
ZXh0KQogICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25T
dXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERl
cHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25T
dXBwb3J0ZWQpCiAgICAgLCBtX2ZibygwKQogICAgICwgbV9jb2xvckJ1ZmZlcigwKQorICAgICwg
bV9iYWNraW5nQ29sb3JCdWZmZXIoMCkKICAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCiAg
ICAgLCBtX2RlcHRoQnVmZmVyKDApCiAgICAgLCBtX3N0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1f
bXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogewot
ICAgIG1fZmJvID0gY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBjb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0g
ICAgbV9jb2xvckJ1ZmZlciA9IGdlbmVyYXRlQ29sb3JUZXh0dXJlKGNvbnRleHQsIHNpemUpOwot
ICAgIGNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMoKTsKLSAgICBpZiAoIXJlc2V0KHNpemUpKSB7Ci0g
ICAgICAgIG1fY29udGV4dC5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlu
aXRpYWxpemUoc2l6ZSk7CiB9CiAKIERyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKIHsK
KyAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQorICAgICAgICBtX3BsYXRmb3JtTGF5ZXItPnNldERy
YXdpbmdCdWZmZXIoMCk7CisKICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgY2xlYXIoKTsKIH0KIAordm9pZCBEcmF3aW5nQnVmZmVyOjppbml0aWFsaXplKGNvbnN0
IEludFNpemUmIHNpemUpCit7CisgICAgbV9mYm8gPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVm
ZmVyKCk7CisKKyAgICBpZiAobV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgICAgICBtX2Jh
Y2tpbmdDb2xvckJ1ZmZlciA9IGdlbmVyYXRlQ29sb3JUZXh0dXJlKG1fY29udGV4dC5nZXQoKSwg
c2l6ZSk7CisKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICBtX2NvbG9yQnVmZmVyID0gZ2VuZXJhdGVDb2xv
clRleHR1cmUobV9jb250ZXh0LmdldCgpLCBzaXplKTsKKyAgICBtX2NvbnRleHQtPmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
bV9jb2xvckJ1ZmZlciwgMCk7CisgICAgY3JlYXRlU2Vjb25kYXJ5QnVmZmVycygpOworICAgIGlm
ICghcmVzZXQoc2l6ZSkpIHsKKyAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9Cit9CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lk
IERyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKQogewogICAgIGlmICghbV9j
b250ZXh0KQogICAgICAgICByZXR1cm47CiAKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIGlmIChtdWx0aXNhbXBsZSgpKQogICAgICAgICBjb21taXQoKTsKLSAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaWYgKG1fc2VwYXJhdGVCYWNr
aW5nVGV4dHVyZSkgeworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9iYWNraW5nQ29sb3JCdWZm
ZXIpOworICAgICAgICB1bnNpZ25lZCBjb2xvckZvcm1hdCA9IG1fY29udGV4dC0+Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKS5hbHBoYSA/IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIDogR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjsKKyAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgY29sb3JGb3JtYXQsIDAsIDAsIHNpemUoKS53aWR0
aCgpLCBzaXplKCkuaGVpZ2h0KCksIDApOworICAgIH0KKworICAgIGlmIChtdWx0aXNhbXBsZSgp
KQorICAgICAgICBiaW5kKCk7CisKICAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiB9CiAjZW5kaWYK
QEAgLTEwMywxMyArMTMzLDMxIEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZv
cm1MYXkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9ybUxheWVyKiBE
cmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAo
IW1fcGxhdGZvcm1MYXllcikgeworICAgICAgICBtX3BsYXRmb3JtTGF5ZXIgPSBXZWJHTExheWVy
Q2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9wbGF0Zm9ybUxheWVyLT5zZXREcmF3aW5n
QnVmZmVyKHRoaXMpOworICAgIH0KKworICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXIuZ2V0KCk7
CiB9CiAjZW5kaWYKIAogUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUNv
bG9yQnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb2xvckJ1ZmZlcjsKKyAgICByZXR1
cm4gbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlID8gbV9iYWNraW5nQ29sb3JCdWZmZXIgOiBtX2Nv
bG9yQnVmZmVyOwogfQogCitQbGF0Zm9ybTNET2JqZWN0IERyYXdpbmdCdWZmZXI6OmZyYW1lYnVm
ZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mYm87Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCit2b2lkIERyYXdpbmdCdWZmZXI6OnBhaW50Q29tcG9zaXRlZFJlc3Vs
dHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIGlmICht
X3BsYXRmb3JtTGF5ZXIpCisgICAgICAgIG1fcGxhdGZvcm1MYXllci0+cGFpbnRSZW5kZXJlZFJl
c3VsdHNUb0NhbnZhcyhjb250ZXh0LT5jYW52YXMoKS0+YnVmZmVyKCkpOworfQorI2VuZGlmCisK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gOTk3Mjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVy
Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRl
ICJXZWJHTExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNp
bmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCkBAIC00OCw3ICs0OSw2
IEBAIFBhc3NSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBXZWJHTExheWUKIAogV2ViR0xMYXll
ckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkK
ICAgICA6IENhbnZhc0xheWVyQ2hyb21pdW0oZGVsZWdhdGUpCi0gICAgLCBtX2NvbnRleHQoMCkK
ICAgICAsIG1fdGV4dHVyZUNoYW5nZWQodHJ1ZSkKICAgICAsIG1fdGV4dHVyZVVwZGF0ZWQoZmFs
c2UpCiB7CkBAIC01NiwxMyArNTYsMTMgQEAgV2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVy
Q2hyb21pdW0oQwogCiBXZWJHTExheWVyQ2hyb21pdW06On5XZWJHTExheWVyQ2hyb21pdW0oKQog
ewotICAgIGlmIChtX2NvbnRleHQgJiYgbGF5ZXJUcmVlSG9zdCgpKQotICAgICAgICBsYXllclRy
ZWVIb3N0KCktPnN0b3BSYXRlTGltaXRlcihtX2NvbnRleHQpOworICAgIGlmIChjb250ZXh0KCkg
JiYgbGF5ZXJUcmVlSG9zdCgpKQorICAgICAgICBsYXllclRyZWVIb3N0KCktPnN0b3BSYXRlTGlt
aXRlcihjb250ZXh0KCkpOwogfQogCiBib29sIFdlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250
ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpOT19FUlJPUik7CisgICAgcmV0dXJuIChjb250ZXh0KCkgJiYgY29udGV4dCgpLT5nZXRF
eHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9fRVJST1IpOwogfQogCiB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDb250ZXh0LCBDQ1Rl
eHR1cmVVcGRhdGVyJikKQEAgLTg1LDExICs4NSw5IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVt
Ojp1cGRhdGVDb21wb3NpdG8KICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0
aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgogICAgIGlmICghbV9kaXJ0eVJlY3Qu
aXNFbXB0eSgpICYmIG1fdGV4dHVyZVVwZGF0ZWQpIHsKLSAgICAgICAgLy8gcHJlcGFyZVRleHR1
cmUgY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgb2ZmLXNjcmVlbiByZW5kZXIgdGFyZ2V0IGlu
dG8gdGhlIHRleHR1cmUKLSAgICAgICAgLy8gdXNlZCBieSB0aGUgY29tcG9zaXRvci4KLSAgICAg
ICAgLy8KLSAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOwotICAgICAgICBtX2Nv
bnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKyAgICAgICAgLy8gcHVibGlzaFRvUGxhdGZv
cm1MYXllciBwcmVwYXJlcyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRh
cmdldCBmb3IgdXNlIGJ5IHRoZSBjb21wb3NpdG9yLgorICAgICAgICBkcmF3aW5nQnVmZmVyKCkt
PnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKTsKKyAgICAgICAgY29udGV4dCgpLT5tYXJrTGF5ZXJD
b21wb3NpdGVkKCk7CiAgICAgICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIGJvdW5kcygpKTsKICAgICAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgbV90
ZXh0dXJlVXBkYXRlZCA9IGZhbHNlOwpAQCAtMTAxLDcgKzk5LDcgQEAgYm9vbCBXZWJHTExheWVy
Q2hyb21pdW06OnBhaW50UmVuZGVyZWRSZQogICAgIGlmIChtX3RleHR1cmVVcGRhdGVkIHx8ICFs
YXllclJlbmRlcmVyQ29udGV4dCgpIHx8ICFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgSW50U2l6ZSBmcmFtZWJ1ZmZlclNpemUgPSBtX2NvbnRleHQtPmdldElu
dGVybmFsRnJhbWVidWZmZXJTaXplKCk7CisgICAgSW50U2l6ZSBmcmFtZWJ1ZmZlclNpemUgPSBj
b250ZXh0KCktPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7CiAgICAgQVNTRVJUKGxheWVy
UmVuZGVyZXJDb250ZXh0KCkpOwogCiAgICAgLy8gVGhpcyB3b3VsZCBpZGVhbGx5IGJlIGRvbmUg
aW4gdGhlIHdlYmdsIGNvbnRleHQsIGJ1dCB0aGF0IGlzbid0IHBvc3NpYmxlIHlldC4KQEAgLTEx
MCw3ICsxMDgsNyBAQCBib29sIFdlYkdMTGF5ZXJDaHJvbWl1bTo6cGFpbnRSZW5kZXJlZFJlCiAg
ICAgbGF5ZXJSZW5kZXJlckNvbnRleHQoKS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVO
VDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCwgMCk7CiAKICAg
ICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lv
bnMzRENocm9taXVtKj4obGF5ZXJSZW5kZXJlckNvbnRleHQoKS0+Z2V0RXh0ZW5zaW9ucygpKTsK
LSAgICBleHRlbnNpb25zLT5wYWludEZyYW1lYnVmZmVyVG9DYW52YXMoZnJhbWVidWZmZXIsIGZy
YW1lYnVmZmVyU2l6ZS53aWR0aCgpLCBmcmFtZWJ1ZmZlclNpemUuaGVpZ2h0KCksICFtX2NvbnRl
eHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZl
cik7CisgICAgZXh0ZW5zaW9ucy0+cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1lYnVmZmVy
LCBmcmFtZWJ1ZmZlclNpemUud2lkdGgoKSwgZnJhbWVidWZmZXJTaXplLmhlaWdodCgpLCAhY29u
dGV4dCgpLT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwgaW1hZ2VC
dWZmZXIpOwogICAgIGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmRlbGV0ZUZyYW1lYnVmZmVyKGZy
YW1lYnVmZmVyKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyMSwzMiArMTE5LDM5IEBAIHZv
aWQgV2ViR0xMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCgKICAgICAvLyBJZiBXZWJHTCBj
b21tYW5kcyBhcmUgaXNzdWVkIG91dHNpZGUgb2YgYSB0aGUgYW5pbWF0aW9uIGNhbGxiYWNrcywg
dGhlbiB1c2UKICAgICAvLyBjYWxsIHJhdGVMaW1pdE9mZnNjcmVlbkNvbnRleHRDSFJPTUlVTSgp
IHRvIGtlZXAgdGhlIGNvbnRleHQgZnJvbSBnZXR0aW5nIHRvbyBmYXIgYWhlYWQuCiAgICAgaWYg
KGxheWVyVHJlZUhvc3QoKSkKLSAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdGFydFJhdGVMaW1p
dGVyKG1fY29udGV4dCk7CisgICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RhcnRSYXRlTGltaXRl
cihjb250ZXh0KCkpOwogfQogCi12b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChj
b25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK3ZvaWQgV2ViR0xMYXllckNocm9taXVt
OjpzZXREcmF3aW5nQnVmZmVyKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCiB7Ci0gICAg
Ym9vbCBjb250ZXh0Q2hhbmdlZCA9IChtX2NvbnRleHQgIT0gY29udGV4dCk7CisgICAgYm9vbCBk
cmF3aW5nQnVmZmVyQ2hhbmdlZCA9IChtX2RyYXdpbmdCdWZmZXIgIT0gZHJhd2luZ0J1ZmZlcik7
CisgICAgbV9kcmF3aW5nQnVmZmVyID0gZHJhd2luZ0J1ZmZlcjsKIAotICAgIGlmIChsYXllclRy
ZWVIb3N0KCkgJiYgY29udGV4dENoYW5nZWQpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3Rv
cFJhdGVMaW1pdGVyKG1fY29udGV4dCk7CisgICAgaWYgKGxheWVyVHJlZUhvc3QoKSAmJiBkcmF3
aW5nQnVmZmVyQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdG9wUmF0ZUxpbWl0
ZXIoY29udGV4dCgpKTsKIAotICAgIG1fY29udGV4dCA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250
ZXh0M0QqPihjb250ZXh0KTsKLQotICAgIGlmICghbV9jb250ZXh0KQorICAgIGlmICghbV9kcmF3
aW5nQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25lZCBpbnQgdGV4dHVyZUlk
ID0gbV9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsKLSAgICBpZiAodGV4dHVyZUlkICE9IG1f
dGV4dHVyZUlkIHx8IGNvbnRleHRDaGFuZ2VkKSB7CisgICAgdW5zaWduZWQgaW50IHRleHR1cmVJ
ZCA9IG1fZHJhd2luZ0J1ZmZlci0+cGxhdGZvcm1Db2xvckJ1ZmZlcigpOworICAgIGlmICh0ZXh0
dXJlSWQgIT0gbV90ZXh0dXJlSWQgfHwgZHJhd2luZ0J1ZmZlckNoYW5nZWQpIHsKICAgICAgICAg
bV90ZXh0dXJlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSB0cnVl
OwogICAgIH0KICAgICBtX3RleHR1cmVJZCA9IHRleHR1cmVJZDsKLSAgICBHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmli
dXRlcygpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBj
b250ZXh0KCktPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgbV9oYXNBbHBoYSA9IGF0dHJp
YnV0ZXMuYWxwaGE7CiAgICAgbV9wcmVtdWx0aXBsaWVkQWxwaGEgPSBhdHRyaWJ1dGVzLnByZW11
bHRpcGxpZWRBbHBoYTsKIH0KIAorR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMTGF5ZXJDaHJvbWl1
bTo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgaWYgKGRyYXdpbmdCdWZmZXIoKSkKKyAgICAgICAg
cmV0dXJuIGRyYXdpbmdCdWZmZXIoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS5nZXQoKTsKKworICAg
IHJldHVybiAwOworfQorCiBHcmFwaGljc0NvbnRleHQzRCogV2ViR0xMYXllckNocm9taXVtOjps
YXllclJlbmRlcmVyQ29udGV4dCgpCiB7CiAgICAgLy8gRklYTUU6IEluIHRoZSB0aHJlYWRlZCBj
YXNlLCBwYWludFJlbmRlcmVkUmVzdWx0c1RvQ2FudmFzIG11c3QgYmUKQEAgLTE1Nyw0ICsxNjIs
NSBAQCBHcmFwaGljc0NvbnRleHQzRCogV2ViR0xMYXllckNocm9taXVtOjpsCiB9CiAKIH0KKwog
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA5OTcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAj
aW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MywyMSArNTQsMjMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBjb250ZW50Q2hhbmdlZCgpOwogICAgIGJvb2wgcGFpbnRSZW5kZXJl
ZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopOwogCi0gICAgdm9pZCBzZXRDb250ZXh0KGNv
bnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KCkgY29uc3Q7CiAKKyAgICB2b2lkIHNldERyYXdpbmdCdWZmZXIoRHJhd2luZ0J1ZmZl
ciopOworICAgIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIoKSBjb25zdCB7IHJldHVybiBt
X2RyYXdpbmdCdWZmZXI7IH0KIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViR0xMYXllckNocm9t
aXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwogICAgIGZyaWVuZCBjbGFzcyBXZWJHTExheWVyQ2hyb21p
dW1SYXRlTGltaXRUYXNrOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGxheWVyUmVuZGVyZXJD
b250ZXh0KCk7CiAKLSAgICAvLyBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllciBoYXMg
YSBzaWRlLWVmZmVjdCBvZiBhc3NpZ25pbmcgaXRzZWxmCi0gICAgLy8gdG8gdGhlIGxheWVyLiBC
ZWNhdXNlIG9mIHRoYXQgR3JhcGhpY3NDb250ZXh0M0QncyBkZXN0cnVjdG9yIHdpbGwgcmVzZXQK
LSAgICAvLyBsYXllcidzIGNvbnRleHQgdG8gMC4KLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9j
b250ZXh0OwogICAgIGJvb2wgbV90ZXh0dXJlQ2hhbmdlZDsKICAgICBib29sIG1fdGV4dHVyZVVw
ZGF0ZWQ7CisKKyAgICAvLyBUaGUgRHJhd2luZ0J1ZmZlciBob2xkaW5nIHRoZSBXZWJHTCBjb250
ZW50cyBmb3IgdGhpcyBsYXllci4KKyAgICAvLyBBIHJlZmVyZW5jZSBpcyBub3QgaGVsZCBoZXJl
LCBiZWNhdXNlIHRoZSBEcmF3aW5nQnVmZmVyIGFscmVhZHkgaG9sZHMKKyAgICAvLyBhIHJlZmVy
ZW5jZSB0byB0aGUgV2ViR0xMYXllckNocm9taXVtLgorICAgIERyYXdpbmdCdWZmZXIqIG1fZHJh
d2luZ0J1ZmZlcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAkocmV2
aXNpb24gOTk3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3Jh
cGhpY3NDb250ZXh0M0RFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjYsMTMgKzcyNiwxNyBA
QCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAvLyBE
cmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4K
KyAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
LVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEoKQorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3
aW5nQnVmZmVyKQogeworICAgIC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGltcGxlbWVu
dGVkIGluIENocm9taXVtIHBvcnRzLgorICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFn
ZURhdGE6OmNyZWF0ZShJbnRTaXplKDEsIDEpKTsKICAgICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVh
c2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHJldmlzaW9uIDk5NzI4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogCiAjaW5jbHVk
ZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OCw3ICs1MCw3
IEBAIHN0YXRpYyBpbnQgc19tYXhpbXVtUmVzb3VyY2VVc2VQaXhlbHMgPQogI2VuZGlmCiBzdGF0
aWMgaW50IHNfY3VycmVudFJlc291cmNlVXNlUGl4ZWxzID0gMDsKIAotUGFzc1JlZlB0cjxEcmF3
aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIGNvbnN0IEludFNpemUmIHNpemUpCitQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IERyYXdp
bmdCdWZmZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQogewogICAgIEV4dGVuc2lvbnMz
RCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKICAgICBib29sIG11bHRp
c2FtcGxlU3VwcG9ydGVkID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVm
ZmVyX2JsaXQiKSAmJiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJf
bXVsdGlzYW1wbGUiKSAmJiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfT0VTX3JnYjhfcmdiYTgi
KTsKQEAgLTYwLDcgKzYyLDcgQEAgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVm
ZmVyOgogICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0gZXh0ZW5zaW9ucy0+
c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwogICAgIGlmIChwYWNrZWRE
ZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpCiAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQo
IkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVy
PiBkcmF3aW5nQnVmZmVyID0gYWRvcHRSZWYobmV3IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6
ZSwgbXVsdGlzYW1wbGVTdXBwb3J0ZWQsIHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCkpOwor
ICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyID0gYWRvcHRSZWYobmV3IERy
YXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSwgbXVsdGlzYW1wbGVTdXBwb3J0ZWQsIHBhY2tlZERl
cHRoU3RlbmNpbFN1cHBvcnRlZCwgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkpOwogICAgIHJldHVy
biAoZHJhd2luZ0J1ZmZlci0+bV9jb250ZXh0KSA/IGRyYXdpbmdCdWZmZXIucmVsZWFzZSgpIDog
MDsKIH0KIApAQCAtNzgsNiArODAsMTEgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpjbGVhcigpCiAg
ICAgICAgIG1fY29sb3JCdWZmZXIgPSAwOwogICAgIH0KIAorICAgIGlmIChtX2JhY2tpbmdDb2xv
ckJ1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9iYWNraW5nQ29s
b3JCdWZmZXIpOworICAgICAgICBtX2JhY2tpbmdDb2xvckJ1ZmZlciA9IDA7CisgICAgfQorCiAg
ICAgaWYgKG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcikgewogICAgICAgICBtX2NvbnRleHQtPmRl
bGV0ZVJlbmRlcmJ1ZmZlcihtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogICAgICAgICBtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSAwOwpAQCAtMTY2LDcgKzE3Myw3IEBAIHZvaWQgRHJhd2lu
Z0J1ZmZlcjo6Y2xlYXJGcmFtZWJ1ZmZlcigpCiAgICAgdW5zaWduZWQgY2hhciBkZXB0aE1hc2sg
PSBmYWxzZTsKICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmOwogICAg
IHVuc2lnbmVkIGNoYXIgaXNTY2lzc29yRW5hYmxlZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxv
bmcgY2xlYXJNYXNrID0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7CisgICAg
dW5zaWduZWQgY2xlYXJNYXNrID0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7
CiAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKICAgICAgICAgbV9jb250ZXh0LT5nZXRGbG9h
dHYoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7CiAg
ICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxKTsKQEAgLTE4OCw2ICsxOTUsMTQgQEAgdm9p
ZCBEcmF3aW5nQnVmZmVyOjpjbGVhckZyYW1lYnVmZmVyKCkKICAgICBtX2NvbnRleHQtPmdldEZs
b2F0dihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUUsIGNsZWFyQ29sb3IpOwog
ICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKICAgICBtX2NvbnRleHQtPmNs
ZWFyKGNsZWFyTWFzayk7CisKKyAgICAvLyBUaGUgbXVsdGlzYW1wbGUgZmJvIHdhcyBqdXN0IGNs
ZWFyZWQsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gY2xlYXIgdGhlIG5vbi1tdWx0aXNhbXBsZWQgYnVm
ZmVyIHRvby4KKyAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICBtX2NvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsK
KyAgICAgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVS
X0JJVCk7CisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgfQorCiAgICAgbV9jb250
ZXh0LT5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3Jb
Ml0sIGNsZWFyQ29sb3JbM10pOwogCiAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKQEAgLTIz
Myw3ICsyNDgsNyBAQCBib29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAg
ICAgaWYgKG5ld1NpemUgIT0gbV9zaXplKSB7CiAgICAgICAgIG1fc2l6ZSA9IG5ld1NpemU7CiAK
LSAgICAgICAgdW5zaWduZWQgbG9uZyBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwg
aW50ZXJuYWxSZW5kZXJidWZmZXJGb3JtYXQ7CisgICAgICAgIHVuc2lnbmVkIGludGVybmFsQ29s
b3JGb3JtYXQsIGNvbG9yRm9ybWF0LCBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZvcm1hdDsKICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMuYWxwaGEpIHsKICAgICAgICAgICAgIGludGVybmFsQ29sb3JGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKICAgICAgICAgICAgIGNvbG9yRm9ybWF0ID0g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CkBAIC0yNTAsNyArMjY1LDcgQEAgYm9vbCBEcmF3aW5n
QnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgICAgICAgICAgaW50IG1heFNhbXBsZUNv
dW50ID0gMDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2Vy
dihFeHRlbnNpb25zM0Q6Ok1BWF9TQU1QTEVTLCAmbWF4U2FtcGxlQ291bnQpOwotICAgICAgICAg
ICAgaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oOCwgbWF4U2FtcGxlQ291bnQpOworICAgICAg
ICAgICAgaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oNCwgbWF4U2FtcGxlQ291bnQpOwogCiAg
ICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogCkBAIC0yNjksMTAgKzI4NCwxNiBAQCBi
b29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAgICAgIG1fY29udGV4
dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8p
OwogCiAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1fY29sb3JCdWZmZXIpOwotICAgICAgICAKICAgICAgICAgbV9jb250ZXh0LT50
ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9y
Rm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwogCiAgICAgICAgIG1fY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyLCAwKTsKKworICAgICAgICAvLyByZXNpemUgdGhlIGJh
Y2tpbmcgY29sb3IgYnVmZmVyCisgICAgICAgIGlmIChtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUp
IHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIG1fYmFja2luZ0NvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxD
b2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3Jt
YXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgfQorCiAg
ICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDApOwogCiAgICAgICAgIGlmICghbXVsdGlzYW1wbGUoKSkKQEAgLTI5MywyMyArMzE0LDU2
IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y29tbWl0KGxvbmcgeCwgbG9uZwogewogICAgIGlmICgh
bV9jb250ZXh0KQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgaWYgKHdpZHRoIDwg
MCkKICAgICAgICAgd2lkdGggPSBtX3NpemUud2lkdGgoKTsKICAgICBpZiAoaGVpZ2h0IDwgMCkK
ICAgICAgICAgaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOwotICAgICAgICAKKwogICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgCisKICAgICBpZiAobV9tdWx0aXNhbXBs
ZUZCTykgewogICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6
OlJFQURfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogICAgICAgICBtX2NvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OkRSQVdfRlJBTUVCVUZGRVIsIG1fZmJvKTsK
LSAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmJsaXRGcmFtZWJ1ZmZlcih4LCB5
LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisKKyAgICAgICAg
aWYgKG1fc2Npc3NvckVuYWJsZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisKKyAgICAgICAgLy8gVXNlIE5FQVJFU1Qs
IGJlY2F1c2UgdGhlcmUgaXMgbm8gc2NhbGUgcGVyZm9ybWVkIGR1cmluZyB0aGUgYmxpdC4KKyAg
ICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3
aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOworCisgICAgICAgIGlm
IChtX3NjaXNzb3JFbmFibGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgfQotICAgIAorCiAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
CiB9CiAKK2Jvb2wgRHJhd2luZ0J1ZmZlcjo6bXVsdGlzYW1wbGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFudGlh
bGlhcyAmJiBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkOworfQorCitQYXNzUmVmUHRy
PEltYWdlRGF0YT4gRHJhd2luZ0J1ZmZlcjo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURh
dGEoKQoreworICAgIHJldHVybiBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1h
Z2VEYXRhKHRoaXMpOworfQorCit2b2lkIERyYXdpbmdCdWZmZXI6OmRpc2NhcmRSZXNvdXJjZXMo
KQoreworICAgIG1fY29sb3JCdWZmZXIgPSAwOworICAgIG1fYmFja2luZ0NvbG9yQnVmZmVyID0g
MDsKKyAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSAwOworCisgICAgbV9kZXB0aFN0ZW5j
aWxCdWZmZXIgPSAwOworICAgIG1fZGVwdGhCdWZmZXIgPSAwOworCisgICAgbV9zdGVuY2lsQnVm
ZmVyID0gMDsKKworICAgIG1fbXVsdGlzYW1wbGVGQk8gPSAwOworICAgIG1fZmJvID0gMDsKK30K
Kwogdm9pZCBEcmF3aW5nQnVmZmVyOjpiaW5kKCkKIHsKICAgICBpZiAoIW1fY29udGV4dCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdp
bmdCdWZmZXIuaAkocmV2aXNpb24gOTk3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKICNpbmNsdWRlICJJbnRTaXpl
LmgiCiAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTQzLDE1ICs0NCwxOCBAQAog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAm
JiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1jbGFzcyBDYW52YXMyRExheWVyQ2hyb21p
dW07CitjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0Q7CitjbGFzcyBJbWFnZURhdGE7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCitjbGFzcyBXZWJH
TExheWVyQ2hyb21pdW07CiAjZW5kaWYKIAogLy8gTWFuYWdlcyBhIHJlbmRlcmluZyB0YXJnZXQg
KGZyYW1lYnVmZmVyICsgYXR0YWNobWVudCkgZm9yIGEgY2FudmFzLiAgQ2FuIHB1Ymxpc2ggaXRz
IHJlbmRlcmluZwogLy8gcmVzdWx0cyB0byBhIFBsYXRmb3JtTGF5ZXIgZm9yIGNvbXBvc2l0aW5n
LgogY2xhc3MgRHJhd2luZ0J1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPERyYXdpbmdCdWZmZXI+
IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGUo
R3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJiwgYm9vbCk7CiAgICAgZnJpZW5kIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCiAgICAgfkRyYXdpbmdCdWZmZXIoKTsKQEAgLTc1LDIy
ICs3OSwzOSBAQCBwdWJsaWM6CiAKICAgICAvLyBDb3BpZXMgdGhlIG11bHRpc2FtcGxlIGNvbG9y
IGJ1ZmZlciB0byB0aGUgbm9ybWFsIGNvbG9yIGJ1ZmZlciBhbmQgbGVhdmVzIG1fZmJvIGJvdW5k
CiAgICAgdm9pZCBjb21taXQobG9uZyB4ID0gMCwgbG9uZyB5ID0gMCwgbG9uZyB3aWR0aCA9IC0x
LCBsb25nIGhlaWdodCA9IC0xKTsKLSAgICAKLSAgICBib29sIG11bHRpc2FtcGxlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5h
bnRpYWxpYXMgJiYgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZDsgfQotICAgIAorCisg
ICAgLy8gY29tbWl0IHNob3VsZCBjb3B5IHRoZSBmdWxsIG11bHRpc2FtcGxlIGJ1ZmZlciwgYW5k
IG5vdCByZXNwZWN0IHRoZQorICAgIC8vIGN1cnJlbnQgc2Npc3NvciBib3VuZHMuIFRyYWNrIHRo
ZSBzdGF0ZSBvZiB0aGUgc2Npc3NvciB0ZXN0IHNvIHRoYXQgaXQKKyAgICAvLyBjYW4gYmUgZGlz
YWJsZWQgZHVyaW5nIGNhbGxzIHRvIGNvbW1pdC4KKyAgICB2b2lkIHNldFNjaXNzb3JFbmFibGVk
KGJvb2wgc2Npc3NvckVuYWJsZWQpIHsgbV9zY2lzc29yRW5hYmxlZCA9IHNjaXNzb3JFbmFibGVk
OyB9CisKKyAgICBib29sIG11bHRpc2FtcGxlKCkgY29uc3Q7CisKICAgICBQbGF0Zm9ybTNET2Jq
ZWN0IHBsYXRmb3JtQ29sb3JCdWZmZXIoKSBjb25zdDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZy
YW1lYnVmZmVyKCkgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKworICAgIC8vIEltbWVkaWF0ZWx5IHJlbGVhc2Vz
IG93bmVyc2hpcCBvZiBhbGwgcmVzb3VyY2VzLiBDYWxsIHVwb24gbG9zcyBvZiB0aGUKKyAgICAv
LyBncmFwaGljcyBjb250ZXh0IHRvIHByZXZlbnQgZnJlZWluZyBpbnZhbGlkIHJlc291cmNlcy4K
KyAgICB2b2lkIGRpc2NhcmRSZXNvdXJjZXMoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCk7CiAgICAgdm9pZCBw
dWJsaXNoVG9QbGF0Zm9ybUxheWVyKCk7CisgICAgdm9pZCBwYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwogI2VuZGlmCiAKICAgICBQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGV4dDsgfQogCiBwcml2YXRlOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERyYXdpbmdC
dWZmZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsKLSAgICAK
LSAgICBEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIGJv
b2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsIGJvb2wgcGFja2VkRGVwdGhTdGVuY2ls
RXh0ZW5zaW9uU3VwcG9ydGVkKTsKKyAgICBEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
KiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCisg
ICAgICAgICAgICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRl
ZCwgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZShj
b25zdCBJbnRTaXplJik7CisKKyAgICBib29sIG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZTsKKyAg
ICBib29sIG1fc2Npc3NvckVuYWJsZWQ7CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IG1fY29udGV4dDsKICAgICBJbnRTaXplIG1fc2l6ZTsKQEAgLTk4LDYgKzExOSw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZDsKICAg
ICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9jb2xvckJ1
ZmZlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fYmFja2luZ0NvbG9yQnVmZmVyOwogCiAgICAg
Ly8gVGhpcyBpcyB1c2VkIHdoZW4gd2UgaGF2ZSBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwuCiAg
ICAgUGxhdGZvcm0zRE9iamVjdCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcjsKQEAgLTExMCw2ICsxMzIs
MTAgQEAgcHJpdmF0ZToKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1wbGVGQk87CiAg
ICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CiAKKyNpZiBQTEFU
Rk9STShDSFJPTUlVTSkKKyAgICBSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBtX3BsYXRmb3Jt
TGF5ZXI7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBSZXRhaW5QdHI8V2ViR0xM
YXllcj4gbV9wbGF0Zm9ybUxheWVyOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFj
Lm1tCShyZXZpc2lvbiA5OTcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzks
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBt
dWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCi0gICAgOiBtX2Nv
bnRleHQoY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWRE
ZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICA6IG1fc2VwYXJhdGVCYWNraW5n
VGV4dHVyZShzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgICwgbV9zY2lzc29yRW5hYmxlZChm
YWxzZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKC0xLCAtMSkKICAg
ICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25T
dXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZChw
YWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCkBAIC01Miw2ICs1NSw5IEBAIERy
YXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAsIG1fbXVsdGlzYW1w
bGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogeworICAgIC8vIFN1
cHBvcnQgZm9yIGEgc2VwYXJhdGUgYmFja2luZyB0ZXh0dXJlIGhhcyBvbmx5IGJlZW4gZW5hYmxl
ZCBmb3IKKyAgICAvLyB0aGUgY2hyb21pdW0gcG9ydC4KKyAgICBBU1NFUlQoIW1fc2VwYXJhdGVC
YWNraW5nVGV4dHVyZSk7CiAgICAgQVNTRVJUKG1fZmJvKTsKICAgICBpZiAoIW1fZmJvKSB7CiAg
ICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNwcAkocmV2aXNpb24gOTk3
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1
ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lv
blN1cHBvcnRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNp
b25TdXBwb3J0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVC
YWNraW5nVGV4dHVyZSkKKyAgICA6IG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZShzZXBhcmF0ZUJh
Y2tpbmdUZXh0dXJlKQorICAgICwgbV9zY2lzc29yRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fY29u
dGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlzYW1wbGVF
eHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBt
X3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxF
eHRlbnNpb25TdXBwb3J0ZWQpCkBAIC00Nyw2ICs1MCw5IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdp
bmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogeworICAgIC8vIFN1cHBvcnQgZm9yIGEgc2VwYXJh
dGUgYmFja2luZyB0ZXh0dXJlIGhhcyBvbmx5IGJlZW4gZW5hYmxlZCBmb3IKKyAgICAvLyB0aGUg
Y2hyb21pdW0gcG9ydC4KKyAgICBBU1NFUlQoIW1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSk7CiAg
ICAgQVNTRVJUKG1fZmJvKTsKICAgICBpZiAoIW1fZmJvKSB7CiAgICAgICAgIGNsZWFyKCk7CkBA
IC04Myw2ICs4OSwxMiBAQCBQbGF0Zm9ybTNET2JqZWN0IERyYXdpbmdCdWZmZXI6OnBsYXRmb3Jt
CiAgICAgcmV0dXJuIG1fY29sb3JCdWZmZXI7CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCit2b2lkIERyYXdpbmdCdWZmZXI6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0Nh
bnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworfQorI2VuZGlmCisKIH0K
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRHJh
d2luZ0J1ZmZlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0RyYXdpbmdCdWZmZXJHdGsuY3BwCShyZXZpc2lvbiA5OTcyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9EcmF3aW5nQnVmZmVyR3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsMTIgQEAgUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5n
QnVmZmVyOjpwbGF0Zm9ybQogICAgIHJldHVybiBtX2NvbG9yQnVmZmVyOwogfQogCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBEcmF3aW5nQnVmZmVyOjpwYWludENvbXBv
c2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sK
K30KKyNlbmRpZgorCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwCShyZXZpc2lvbiA5OTcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Jlc291cmNl
U2FmZSgpCiB9CiAKICNpZiAhUExBVEZPUk0oUVQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciopCiB7CiAg
ICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwogICAgIElt
YWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CkBAIC0xNjIsNyArMTYy
LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRDb21wb3NpdGVkUgogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitQYXNzUmVmUHRyPEltYWdlRGF0YT4g
R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdp
bmdCdWZmZXIqKQogewogICAgIC8vIFJlYWRpbmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3b3VsZCBp
bnZvbHZlIHVucHJlbXVsdGlwbHlpbmcsIHdoaWNoIGlzCiAgICAgLy8gbG9zc3kKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dDNEUXQuY3BwCShyZXZpc2lvbiA5OTcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MjAsNyArNDIwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRD
dXJyZQogICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQs
IERyYXdpbmdCdWZmZXIqKQogewogICAgIG1fcHJpdmF0ZS0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7
CkBAIC00MzAsNyArNDMwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJp
bmdSZQogfQogCiAjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKLVBhc3NSZWZQdHI8SW1hZ2VE
YXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEo
KQorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKikKIHsKICAgICAvLyBGSVhNRTogVGhp
cyBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBmb3IgcHJvcGVyIG5vbi1wcmVtdWx0aXBsaWVkLWFs
cGhhCiAgICAgLy8gc3VwcG9ydC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZp
c2lvbiA5OTcyNCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMTEtMDggIEplZmYgVGltYW51cyAgPHR3aXpA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUGF0Y2ggdGhhdCBpbXBsZW1lbnRp
bmcgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAgICAgdG8gc2hhcmUg
aXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRvci4KKyAgICAgICAg
V2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRvIEZCT3MgbWFuYWdl
ZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuIEFsbCBQbGF0Zm9ybUxheWVy
IGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMKKyAgICAgICAgcGVyZm9ybWVkIGJ5IHRoZSBEcmF3aW5n
QnVmZmVyLgorICAgICAgICBDaGFuZ2VzIGFyZSBvbmx5IHJlbGV2YW50IHRvIENocm9taXVtIHBv
cnRzLiBGdW5jdGlvbmFsaXR5IGlzCisgICAgICAgIHVuY2hhbmdlZCBmb3Igb3RoZXIgcG9ydHMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzIwMQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL0dy
YXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwOiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgbm8g
bG9uZ2VyIGNhY2hlcworICAgICAgICB0aGUgV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNlLiAg
SW5zdGVhZCwgaXQgaXMgYWNjZXNzZWQgdmlhIERyYXdpbmdCdWZmZXIgaW5zdGFuY2VzCisgICAg
ICAgIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gdGhlIG5lY2Vzc2FyeSByb3V0aW5lcy4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNE
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuaDoKKwogMjAxMS0xMS0wOSAgQWxleGVpIFN2aXRraW5lICA8YXN2aXRraW5l
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBDaHJvbWl1bTogQWRkIHBsdW1iaW5nIHRvIGVuYWJs
ZSBkcmFnZ2luZyBkZXYgdG9vbHMgdmlhIHRoZSBlbXB0eSBzcGFjZSBvbiB0aGUgdG9vbGJhci4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21p
dW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNz
Q29udGV4dDNEQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5OTcyOCkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSwxMCArMzUsMTAgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAj
aW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgi
CiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIu
aCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCkBAIC0x
NjMsNiArMTYzLDIwIEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUdyYXAK
ICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRl
eHRGcm9tV2ViQ29udGV4dCh3ZWJDb250ZXh0LnJlbGVhc2UoKSwgYXR0cnMsIGhvc3RXaW5kb3cs
IHJlbmRlclN0eWxlLCB0aHJlYWRVc2FnZSk7CiB9CiAKK3ZvaWQgZ2V0RHJhd2luZ1BhcmFtZXRl
cnMoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRCogZ3JhcGhpY3NDb250ZXh0M0QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRm
b3JtM0RPYmplY3QqIGZyYW1lQnVmZmVySWQsIGludCogd2lkdGgsIGludCogaGVpZ2h0KQorewor
ICAgIGlmIChkcmF3aW5nQnVmZmVyKSB7CisgICAgICAgICpmcmFtZUJ1ZmZlcklkID0gZHJhd2lu
Z0J1ZmZlci0+ZnJhbWVidWZmZXIoKTsKKyAgICAgICAgKndpZHRoID0gZHJhd2luZ0J1ZmZlci0+
c2l6ZSgpLndpZHRoKCk7CisgICAgICAgICpoZWlnaHQgPSBkcmF3aW5nQnVmZmVyLT5zaXplKCku
aGVpZ2h0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKmZyYW1lQnVmZmVySWQgPSAwOworICAg
ICAgICAqd2lkdGggPSBncmFwaGljc0NvbnRleHQzRC0+d2lkdGgoKTsKKyAgICAgICAgKmhlaWdo
dCA9IGdyYXBoaWNzQ29udGV4dDNELT5oZWlnaHQoKTsKKyAgICB9Cit9CisKIH0gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZvckFub3RoZXJUaHJlYWQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cs
IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKQEAgLTIxMiwxNyAr
MjI2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnByZXBhcmVUZQogICAgIG1f
aW1wbC0+cHJlcGFyZVRleHR1cmUoKTsKIH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLVdlYkdMTGF5ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0
Zm9ybUxheWVyKCkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYg
KCFtX2NvbXBvc2l0aW5nTGF5ZXIpCi0gICAgICAgIG1fY29tcG9zaXRpbmdMYXllciA9IFdlYkdM
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwotI2VuZGlmCi0gICAgcmV0dXJuIG1fY29tcG9zaXRp
bmdMYXllci5nZXQoKTsKLX0KLSNlbmRpZgotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6bWFya0NvbnRleHRDaGFuZ2VkKCkKIHsKICAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNl
OwpAQCAtMzA1LDMxICszMDgsMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBh
aW50RnJhbQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRy
YXdpbmdCdWZmZXIpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY29udGV4dC0+
Y2FudmFzKCktPmJ1ZmZlcigpOwotICAgIHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcygwLCBtX2lt
cGwtPndpZHRoKCksIG1faW1wbC0+aGVpZ2h0KCksICFtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1
dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBmcmFtZWJ1ZmZlcklkOworICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIGdldERyYXdp
bmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZmZXIsIG1faW1wbC5nZXQoKSwgJmZyYW1lYnVmZmVySWQs
ICZ3aWR0aCwgJmhlaWdodCk7CisgICAgcGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1lYnVm
ZmVySWQsIHdpZHRoLCBoZWlnaHQsICFtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJl
bXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkKIHsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0g
ICAgaWYgKHBsYXRmb3JtTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtTGF5ZXIoKS0+
cGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyhjb250ZXh0LT5jYW52YXMoKS0+YnVmZmVyKCkp
OwotI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4g
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0
YSgpCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVy
KQogewogICAgIGlmIChtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGll
ZEFscGhhKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBp
bWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKG1faW1wbC0+d2lkdGgoKSwgbV9p
bXBsLT5oZWlnaHQoKSkpOworCisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOwor
ICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdC
dWZmZXIsIG1faW1wbC5nZXQoKSwgJmZyYW1lYnVmZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7CisK
KyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRT
aXplKHdpZHRoLCBoZWlnaHQpKTsKICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURh
dGEtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICog
bV9pbXBsLT53aWR0aCgpICogbV9pbXBsLT5oZWlnaHQoKTsKKyAgICBzaXplX3QgYnVmZmVyU2l6
ZSA9IDQgKiB3aWR0aCAqIGhlaWdodDsKIAotICAgIG1faW1wbC0+cmVhZEJhY2tGcmFtZWJ1ZmZl
cihwaXhlbHMsIGJ1ZmZlclNpemUsIDAsIG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQo
KSk7CisgICAgbV9pbXBsLT5yZWFkQmFja0ZyYW1lYnVmZmVyKHBpeGVscywgYnVmZmVyU2l6ZSwg
ZnJhbWVidWZmZXJJZCwgd2lkdGgsIGhlaWdodCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJ1ZmZlclNpemU7IGkgKz0gNCkKICAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4
ZWxzW2kgKyAyXSk7CkBAIC0xMDEyLDkgKzEwMTgsNiBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoR3JhCiAKIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0
M0QoKQogewotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogY2FudmFzTGF5ZXIgPSBtX3ByaXZhdGUt
PnBsYXRmb3JtTGF5ZXIoKTsKLSAgICBpZiAoY2FudmFzTGF5ZXIpCi0gICAgICAgIGNhbnZhc0xh
eWVyLT5zZXRDb250ZXh0KDApOwogICAgIG1fcHJpdmF0ZS0+c2V0Q29udGV4dExvc3RDYWxsYmFj
ayhudWxscHRyKTsKICAgICBtX3ByaXZhdGUtPnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFj
a0NIUk9NSVVNKG51bGxwdHIpOwogfQpAQCAtMTA1OSw5ICsxMDYyLDcgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6aXNSZXNvdXJjZVNhZmUoKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkg
Y29uc3QKIHsKLSAgICBXZWJHTExheWVyQ2hyb21pdW0qIGNhbnZhc0xheWVyID0gbV9wcml2YXRl
LT5wbGF0Zm9ybUxheWVyKCk7Ci0gICAgY2FudmFzTGF5ZXItPnNldENvbnRleHQodGhpcyk7Ci0g
ICAgcmV0dXJuIGNhbnZhc0xheWVyOworICAgIHJldHVybiAwOwogfQogI2VuZGlmCiAKQEAgLTEy
MTcsOCArMTIxOCwxNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQo
CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bGF5ZXJDb21wb3NpdGVkKCk7CiB9CiAKLURFTEVHQVRF
X1RPX0lOVEVSTkFMXzEocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMsIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfUihwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0ltYWdlRGF0YSwgUGFzc1JlZlB0cjxJbWFnZURhdGE+KQordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhjb250ZXh0LCBkcmF3aW5n
QnVmZmVyKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVm
ZmVyKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1h
Z2VEYXRhKGRyYXdpbmdCdWZmZXIpOworfQorCiBERUxFR0FURV9UT19JTlRFUk5BTF8xUihwYWlu
dENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqLCBib29s
KQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5oCShyZXZpc2lvbiA5OTcyOCkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwxMCArNDYsOCBAQCBjbGFzcyBXZWJWaWV3SW1wbDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgRXh0ZW5zaW9uczNEQ2hyb21pdW07Ci0jaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotY2xhc3MgV2ViR0xMYXllckNocm9taXVtOwot
I2VuZGlmCiBjbGFzcyBHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyOwogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyOwogCkBA
IC05NSwxNyArOTMsMTQgQEAgcHVibGljOgogICAgIGJvb2wgbGF5ZXJDb21wb3NpdGVkKCkgY29u
c3Q7CiAgICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAKLSAgICB2b2lkIHBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKKyAgICB2b2lk
IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqLCBE
cmF3aW5nQnVmZmVyKik7CiAgICAgdm9pZCBwYWludEZyYW1lYnVmZmVyVG9DYW52YXMoaW50IGZy
YW1lYnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
SW1hZ2VCdWZmZXIqKTsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciopOwogICAgIGJvb2wgcGFpbnRz
SW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogICAgIGJvb2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKIAogICAgIHZvaWQgcHJlcGFyZVRl
eHR1cmUoKTsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBXZWJHTExh
eWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5ZXIoKTsKLSNlbmRpZgogICAgIGJvb2wgaXNHTEVTMkNv
bXBsaWFudCgpIGNvbnN0OwogCiAgICAgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKQEAg
LTMzMCw5ICszMjUsNiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgUmVzb3VyY2VTYWZldHkgbV9y
ZXNvdXJjZVNhZmV0eTsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBS
ZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBtX2NvbXBvc2l0aW5nTGF5ZXI7Ci0jZW5kaWYKICNp
ZiBVU0UoU0tJQSkKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgQ2FudmFz
J3MgYmFja2luZyBzdG9yZSBkb24ndAogICAgIC8vIG1hdGNoIHRob3NlIHRoYXQgd2Ugd2VyZSBn
aXZlbiBpbiB0aGUgbW9zdCByZWNlbnQgY2FsbCB0bwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114511</attachid>
            <date>2011-11-10 08:54:58 -0800</date>
            <delta_ts>2011-11-11 14:55:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53201-20111110115158.patch</filename>
            <type>text/plain</type>
            <size>60221</size>
            <attacher name="Jeff Timanus">twiz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5ODU3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTggQEAKKzIwMTEtMTEtMDggIEplZmYgVGlt
YW51cyAgPHR3aXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUGF0Y2ggdGhh
dCBpbXBsZW1lbnRpbmcgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gYWxsb3cgV2ViR0wKKyAgICAg
ICAgdG8gc2hhcmUgaXRzIGJhY2tpbmcgc3RvcmUgZGlyZWN0bHkgd2l0aCB0aGUgY29tcG9zaXRv
ci4KKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHRzIGNyZWF0ZSBhbmQgcmVuZGVyIHRv
IEZCT3MgbWFuYWdlZCBieSBhCisgICAgICAgIERyYXdpbmdCdWZmZXIgaW5zdGFuY2UuIEFsbCBQ
bGF0Zm9ybUxheWVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMKKyAgICAgICAgcGVyZm9ybWVkIGJ5
IHRoZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICBDaGFuZ2VzIGFyZSBvbmx5IHJlbGV2YW50IHRv
IENocm9taXVtIHBvcnRzLiBGdW5jdGlvbmFsaXR5IGlzCisgICAgICAgIHVuY2hhbmdlZCBmb3Ig
b3RoZXIgcG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzIwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDogQ29uc3RydWN0IGEg
RHJhd2luZ0J1ZmZlcgorICAgICAgICBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCBmb3J3YXJk
IGFsbCBmcmFtZWJ1ZmZlciBtYW5hZ2VtZW50IGNhbGxzIHRvCisgICAgICAgIGl0LgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
SWZDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZWJ1ZmZlcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oOiAgV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNlcworICAgICAgICBh
cmUgbm8gbG9uZ2VyIHRyYWNrZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QuIENhbGxlcnMgY2FuIG5v
dyBwYXNzIGEKKyAgICAgICAgRHJhd2luZ0J1ZmZlciBpbnN0YW5jZSB0byBwcm92aWRlIGFjY2Vz
cyB0byB0aGUgV2ViR0xMYXllckNocm9taXVtIGRhdGEuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlQ29sb3JUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpmcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjp+V2ViR0xM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJh
d3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21p
dW06OnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TExheWVyQ2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMYXllckNocm9taXVtOjpjb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDogV2ViR0xMYXllckNocm9taXVtIGluc3RhbmNl
cworICAgICAgICBoYXZlIGEgcmF3IHJlZmVyZW5jZSB0byB0aGVpciBvd25pbmcgRHJhd2luZ0J1
ZmZlci4gIFRoaXMgcmVmZXJlbmNlIGlzIHNldCB0byBOVUxMIG9uCisgICAgICAgIGRlc3RydWN0
aW9uIG9mIHRoZSBEcmF3aW5nQnVmZmVyLiAgVGhpcyBmb2xsb3dzIHRoZSBvbGQgY29kZSwgd2hp
Y2ggaGFkIHRoZSBXZWJHTExheWVyQ2hyb21pdW0KKyAgICAgICAgcmVmZXIgcmF3bHkgdG8gYSBH
cmFwaGljc0NvbnRleHQzRCBpbnN0YW5jZSwgd2hpY2ggd2FzIGFsc28gcmV2b2tlZCBkdXJpbmcg
dGVhci1kb3duIG9mIHRoZQorICAgICAgICBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmNwcDogVGhlIERyYXdpbmdCdWZmZXIgaXMgbm93IHRoZQorICAgICAgICBjZW50cmFs
IHBvaW50IGJldHdlZW4gdGhlIEdyYXBoaWNzQ29udGV4dDNELCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQsIGFuZAorICAgICAgICBXZWJHTExheWVyQ2hyb21pdW0gY2xhc3Nlcy4gIEdyYXBoaWNzQ29u
dGV4dDNELCBhbmQgV2ViR0xMYXllckNocm9taXVtIG9ubHkKKyAgICAgICAgZGVwZW5kIG9uIHRo
ZSBEcmF3aW5nQnVmZmVyIGludGVyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjbGVhckZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpt
dWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpkaXNjYXJkUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6c2V0U2Npc3Nv
ckVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1
ZmZlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVmZmVyUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSk6CisKIDIwMTEtMTEtMTAgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJp
bS5jb20+CiAKICAgICAgICAgW0dUS10gc3ZnL2FzLWltYWdlL3N2Zy1pbWFnZS1jaGFuZ2UtY29u
dGVudC1zaXplLnhodG1sIGNyYXNoZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTk4NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjYsNyArMzY2LDEyIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJp
bmdDb250ZXh0PiBXZWJHTFIKICAgICB9CiAKICAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9
IHRydWU7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291
cmNlcyA9IHRydWU7CisjZWxzZQogICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBmYWxz
ZTsKKyNlbmRpZgorCiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CiAKQEAgLTM4
Miw2ICszODcsNyBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4
dChwYXNzZWRDYW52YXMpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fZHJhd2lu
Z0J1ZmZlcigwKQogICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKICAgICAsIG1fcmVzdG9y
ZVRpbWVyKHRoaXMpCiAgICAgLCBtX3ZpZGVvQ2FjaGUoNCkKQEAgLTM4OSw2ICszOTUsMTUgQEAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgICwgbV9hdHRyaWJ1
dGVzKGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CisKKyNpZiBQTEFURk9S
TShDSFJPTUlVTSkKKyAgICAvLyBDcmVhdGUgdGhlIERyYXdpbmdCdWZmZXIgYW5kIGluaXRpYWxp
emUgdGhlIHBsYXRmb3JtIGxheWVyLgorICAgIG1fZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZm
ZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNh
bnZhcygpLT5oZWlnaHQoKSksICFtX2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKTsK
KyNlbmRpZgorCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5iaW5kKCk7CisKICAgICBzZXR1cEZsYWdzKCk7CiAgICAgaW5pdGlhbGl6ZU5ld0NvbnRl
eHQoKTsKIH0KQEAgLTQ1NCw2ICs0NjksOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
aW5pdGlhbGl6ZU5lCiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAgICAgIGluaXRW
ZXJ0ZXhBdHRyaWIwKCk7CiAKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPnJlc2V0KEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5o
ZWlnaHQoKSkpOworCiAgICAgbV9jb250ZXh0LT5yZXNoYXBlKGNhbnZhcygpLT53aWR0aCgpLCBj
YW52YXMoKS0+aGVpZ2h0KCkpOwogICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFz
KCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7CiAKQEAgLTQ5NCw3ICs1MTIsOSBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDCiB7CiAgICAgaWYgKG1fZnJh
bWVidWZmZXJCaW5kaW5nKQogICAgICAgICByZXR1cm47CisKICAgICBtX2NvbnRleHQtPm1hcmtD
b250ZXh0Q2hhbmdlZCgpOworCiAgICAgbV9sYXllckNsZWFyZWQgPSBmYWxzZTsKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52
YXMoKS0+cmVuZGVyQm94KCk7CkBAIC01MjQsOCArNTQ0LDEyIEBAIGJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpjbGVhcklmQ29tcG8KICAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJs
ZSB0byBjb21iaW5lIHRoZSBjbGVhciB0aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIu
CiAgICAgYm9vbCBjb21iaW5lZENsZWFyID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsKIAot
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcpIHsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIDApOworICAgIH0KICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlNDSVNTT1JfVEVTVCk7CiAgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpCiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJD
b2xvcihtX2NvbG9yTWFza1swXSA/IG1fY2xlYXJDb2xvclswXSA6IDAsCkBAIC01ODEsMjEgKzYw
NSw1MCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpCiAgICAgLy8g
aGFwcGVuZWQgYWZ0ZXIgaXQgd2FzIGNvbXBvc2l0ZWQgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhl
IGNvbXBvc2l0b3IuCiAgICAgaWYgKG1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkgJiYgIW1f
YXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpIHsKICAgICAgICAgbV9jb250ZXh0LT5w
YWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXModGhpcyk7CisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5wYWludENvbXBvc2l0ZWRS
ZXN1bHRzVG9DYW52YXModGhpcyk7CisjZW5kaWYKKwogICAgICAgICBjYW52YXMoKS0+bWFrZVBy
ZXNlbnRhdGlvbkNvcHkoKTsKICAgICB9IGVsc2UKICAgICAgICAgY2FudmFzKCktPmNsZWFyUHJl
c2VudGF0aW9uQ29weSgpOwogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisKICAgICBpZiAoIW1f
bWFya2VkQ2FudmFzRGlydHkgJiYgIW1fbGF5ZXJDbGVhcmVkKQogICAgICAgICByZXR1cm47CisK
ICAgICBjYW52YXMoKS0+Y2xlYXJDb3BpZWRJbWFnZSgpOwogICAgIG1fbWFya2VkQ2FudmFzRGly
dHkgPSBmYWxzZTsKLSAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KHRoaXMpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5jb21taXQoKTsKKyAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKHRoaXMsIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKSB7CisgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
b2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0KIH0KIAogUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoKQogewogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgcmV0dXJu
IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAg
IFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEobV9kcmF3aW5nQnVmZmVyLmdldCgpKTsKKworICAgIGlmIChtX2Ry
YXdpbmdCdWZmZXIpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAg
ICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIGltYWdlRGF0YTsKIH0KIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBh
aW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdApAQCAtNjI3LDE2ICs2ODAsMjUgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50CiAKICAgICAvLyBXZSBkb24ndCBoYXZl
IHRvIG1hcmsgdGhlIGNhbnZhcyBhcyBkaXJ0eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgaW1h
Z2UgYnVmZmVyIHdpbGwgYWxzbyBzdGFydCBvZmYKICAgICAvLyBjbGVhciAoYW5kIHRoaXMgbWF0
Y2hlcyB3aGF0IHJlc2hhcGUgd2lsbCBkbykuCi0gICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRo
LCBoZWlnaHQpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1
ZmZlci0+cmVzZXQoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgZWxzZQorICAgICAgICBt
X2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CiB9CiAKIGludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0CiB7CisgICAgaWYgKG1fZHJhd2lu
Z0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7
CisKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndp
ZHRoKCk7CiB9CiAKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWln
aHQoKSBjb25zdAogeworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBt
X2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKKwogICAgIHJldHVybiBtX2NvbnRleHQt
PmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7CiB9CiAKQEAgLTc1OCw3ICs4
MjAsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZgogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwotICAg
IG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikp
OworICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7Cisg
ICAgICAgIC8vIEluc3RlYWQgb2YgYmluZGluZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZl
ci4KKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfSBlbHNlCisgICAgICAg
IG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikp
OwogICAgIGlmIChidWZmZXIpCiAgICAgICAgIGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0xMDk3LDkgKzExNjMs
MjEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVzb3Vy
Y2VTYWZlKCkpCisgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKKyAgICAgICAgLy8gQ29tbWl0
IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKKyAgICAg
ICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworCiAgICAgICAgIG1fY29udGV4dC0+Y29w
eVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlcik7Ci0gICAgZWxzZSB7CisKKyAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5n
QnVmZmVyIGlmIG5lZWRlZAorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5n
LiwgZm9yIG11bHRpc2FtcGxpbmcpCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQo
KTsKKwogICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKICAgICAgICAgR0MzRHNp
emVpIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKICAgICAgICAgaWYgKGNsaXAyRCh4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFt
ZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNs
aXBwZWRIZWlnaHQpKSB7CkBAIC0xMTExLDYgKzExODksMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNvcHlUZXhJbWFnZQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisKKyAgICAgICAgLy8gUmVz
dG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJC
aW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
YmluZCgpOwogICAgIH0KICAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBj
b21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgogICAgIHRleC0+
c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CkBAIC0xMTQyLDcgKzEyMjQsMTUg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbQogICAgIH0KICAgICBj
bGVhcklmQ29tcG9zaXRlZCgpOwogICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQorICAgICAgICAv
LyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5n
KQorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikK
KyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisKICAgICAgICAgbV9jb250
ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIg
aWYgbmVlZGVkCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5n
QnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CiAgICAgZWxzZSB7
CiAgICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOwogICAgICAgICBHQzNEc2l6ZWkg
Y2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwpAQCAtMTE2NiwxMSArMTI1NiwyOCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1YkltCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKICAgICAg
ICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CisgICAg
ICAgICAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3Ig
bXVsdGlzYW1wbGluZykKKyAgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5jb21taXQoKTsKKwogICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCArIGNsaXBwZWRYIC0geCwgeW9mZnNldCArIGNsaXBw
ZWRZIC0geSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
aXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKKworICAgICAg
ICAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgICAgICAgICAg
ICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAg
ICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBDb21taXQgRHJhd2lu
Z0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICAgICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAg
ICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKwogICAgICAgICAgICAgbV9jb250ZXh0
LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgICAgICAgICAgLy8gUmVzdG9yZSBEcmF3aW5nQnVmZmVy
IGlmIG5lZWRlZAorICAgICAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2Ry
YXdpbmdCdWZmZXIpCisgICAgICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
QEAgLTEyODcsNyArMTM5NCwxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRl
RnJhbWViCiAgICAgaWYgKGZyYW1lYnVmZmVyID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7CiAg
ICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gMDsKICAgICAgICAgLy8gSGF2ZSB0byBjYWxs
IGJpbmRGcmFtZWJ1ZmZlciBoZXJlIHRvIGJpbmQgYmFjayB0byBpbnRlcm5hbCBmYm8uCi0gICAg
ICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgMCk7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKICAg
ICB9CiB9CiAKQEAgLTEzNzQsOCArMTQ4NCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGlzYWJsZShHQzNECiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVD
YXBhYmlsaXR5KGNhcCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09IEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUKSB7CiAgICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7CisgICAgfQogICAgIG1fY29udGV4
dC0+ZGlzYWJsZShjYXApOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CkBAIC0xNzE2LDggKzE4MjksMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJs
ZShHQzNEZQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0
eShjYXApKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUKQorICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkgewogICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgaWYg
KG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3Nv
ckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7CisgICAgfQogICAgIG1fY29udGV4dC0+ZW5hYmxl
KGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI5MjQs
NyArMzA0MCwxNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHCiAg
ICAgfQogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy0+
YmFzZUFkZHJlc3MoKTsKKworICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAo
ZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAm
JiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisK
ICAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBkYXRhKTsKKworICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAg
ICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisKICNpZiBPUyhEQVJXSU4pCiAgICAgLy8gRklYTUU6
IHJlbW92ZSB0aGlzIHNlY3Rpb24gd2hlbiBHTCBkcml2ZXIgYnVnIG9uIE1hYyBpcyBmaXhlZCwg
aS5lLiwKICAgICAvLyB3aGVuIGFscGhhIGlzIG9mZiwgcmVhZFBpeGVscyBzaG91bGQgc2V0IGFs
cGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAuCkBAIC0zOTc2LDYgKzQxMDIsMTggQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlUmVzdG9yZQogICAgIG1heWJlUmVzdG9yZUNvbnRleHQo
U3ludGhldGljTG9zdENvbnRleHQpOwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorUGxhdGZvcm1MYXllciogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVy
KCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUxheWVyKCk7Cisj
ZW5kaWYKKworICAgIHJldHVybiBtX2NvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKTsKK30KKyNlbmRp
ZgorCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVtb3ZlT2JqZWN0KFdlYkdMT2JqZWN0
KiBvYmplY3QpCiB7CiAgICAgbV9jYW52YXNPYmplY3RzLnJlbW92ZShvYmplY3QpOwpAQCAtNDE2
NywxNCArNDMwNSwxNCBAQCBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1l
CiB7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRXaWR0
aCgpOwotICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCku
d2lkdGgoKTsKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5z
aXplKCkud2lkdGgoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53
aWR0aCgpOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVm
ZmVySGVpZ2h0KCkKIHsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1
ZmZlckJpbmRpbmctPm9iamVjdCgpKQogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPmdldEhlaWdodCgpOwotICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVi
dWZmZXJTaXplKCkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJh
d2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1l
YnVmZmVyU2l6ZSgpLmhlaWdodCgpOwogfQogCiBXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVUZXh0dXJlQmluZGluZyhHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNl
U2l4RW51bXNGb3JDdWJlTWFwKQpAQCAtNDg4MCw2ICs1MDE4LDEyIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjptYXliZVJlc3RvcmUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAg
IC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRoZSBuZXcgR3JhcGhpY3ND
b250ZXh0M0QuCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyID0gRHJh
d2luZ0J1ZmZlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXpl
KCksICFtX2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKTsKKyAgICB9CisKICAgICBt
X2NvbnRleHQgPSBjb250ZXh0OwogICAgIG1fY29udGV4dExvc3QgPSBmYWxzZTsKICAgICBpbml0
aWFsaXplTmV3Q29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDk5ODU3KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgV2ViR0xSZW5kZXJpbmdDb250ZXh0X2gKIAog
I2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJEcmF3aW5nQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKICNpbmNsdWRlICJJbnQzMkFycmF5LmgiCkBAIC0yOTMsNyArMjk0LDcgQEAgcHVi
bGljOgogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpOyB9CisgICAgdmlydHVhbCBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHZvaWQgcmVzaGFw
ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwpAQCAtMzU5LDYgKzM2MCwxMCBAQCBwdWJsaWM6CiAK
ICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKIAorICAgIC8vIE9wdGlv
bmFsIHN0cnVjdHVyZSBmb3IgcmVuZGVyaW5nIHRvIGEgRHJhd2luZ0J1ZmZlciwgaW5zdGVhZCBv
ZiBkaXJlY3RseQorICAgIC8vIHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2NvbnRleHQuCisgICAg
UmVmUHRyPERyYXdpbmdCdWZmZXI+IG1fZHJhd2luZ0J1ZmZlcjsKKwogICAgIGNsYXNzIFdlYkdM
UmVuZGVyaW5nQ29udGV4dFJlc3RvcmVUaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgewogICAgIHB1
YmxpYzoKICAgICAgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzdG9yZVRpbWVy
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkgOiBtX2NvbnRleHQoY29udGV4dCkgeyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA5OTg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsMTIgKzU3LDYgQEAgdWludDhfdCBjb252ZXJ0Q29sb3IxNkJpZ1RvOCh1aW50MTZfdCB2YQog
CiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotCi1QYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+
IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVEcmF3aW5nQnVmZmVyKGNvbnN0IEludFNpemUmIHNp
emUpCi17Ci0gICAgcmV0dXJuIERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBzaXplKTsKLX0K
LQogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgdW5wYWNrQWxpZ25tZW50KQogewogICAgIEFTU0VS
VCh1bnBhY2tBbGlnbm1lbnQgPT0gMSB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gMiB8fCB1bnBhY2tB
bGlnbm1lbnQgPT0gNCB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gOCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJl
dmlzaW9uIDk5ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAwLDggKzUwMCw2IEBAIHB1YmxpYzoK
ICNlbmRpZgogICAgIHZvaWQgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICBQYXNzUmVmUHRy
PERyYXdpbmdCdWZmZXI+IGNyZWF0ZURyYXdpbmdCdWZmZXIoY29uc3QgSW50U2l6ZSYgPSBJbnRT
aXplKCkpOwotICAgIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pIHx8
IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCiAgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5n
IG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCiAgICAgdm9pZCBw
cmVwYXJlVGV4dHVyZSgpOwpAQCAtNzkxLDggKzc4OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG1h
cmtMYXllckNvbXBvc2l0ZWQoKTsKICAgICBib29sIGxheWVyQ29tcG9zaXRlZCgpIGNvbnN0Owog
Ci0gICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0Kik7Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhKCk7CisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhD
YW52YXNSZW5kZXJpbmdDb250ZXh0KiwgRHJhd2luZ0J1ZmZlciopOworICAgIFBhc3NSZWZQdHI8
SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVy
Kik7CiAgICAgYm9vbCBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCopOwogCiAjaWYgUExBVEZPUk0oUVQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdp
bmdCdWZmZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk5ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNyArMzIsMTAgQEAKIAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIu
aCIKIAorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJFeHRl
bnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDgsNyArNTEsNiBAQCBzdGF0aWMgdW5zaWduZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUoR3JhCiAg
ICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xB
TVBfVE9fRURHRSk7CiAgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGlj
c0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CiAgICAgY29udGV4dC0+dGV4SW1hZ2UyRFJlc291
cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKLSAgICBjb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG9mZnNjcmVlbkNvbG9yVGV4dHVyZSwgMCk7CiAKICAgICByZXR1cm4gb2Zmc2Ny
ZWVuQ29sb3JUZXh0dXJlOwogfQpAQCAtNTYsNDYgKzU4LDc0IEBAIHN0YXRpYyB1bnNpZ25lZCBn
ZW5lcmF0ZUNvbG9yVGV4dHVyZShHcmEKIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEludFNpemUmIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVs
dGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgIDogbV9jb250
ZXh0KGNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVw
dGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgOiBtX3NlcGFyYXRlQmFja2luZ1Rl
eHR1cmUoc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICAsIG1fc2Npc3NvckVuYWJsZWQoZmFs
c2UpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2l6ZSgtMSwgLTEpCiAgICAg
LCBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3Vw
cG9ydGVkKQogICAgICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFj
a2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9mYm8oMCkKICAgICAs
IG1fY29sb3JCdWZmZXIoMCkKKyAgICAsIG1fYmFja2luZ0NvbG9yQnVmZmVyKDApCiAgICAgLCBt
X2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9kZXB0aEJ1ZmZlcigwKQogICAgICwgbV9z
dGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRp
c2FtcGxlQ29sb3JCdWZmZXIoMCkKIHsKLSAgICBtX2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1l
YnVmZmVyKCk7Ci0gICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIG1fY29sb3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9y
VGV4dHVyZShjb250ZXh0LCBzaXplKTsKLSAgICBjcmVhdGVTZWNvbmRhcnlCdWZmZXJzKCk7Ci0g
ICAgaWYgKCFyZXNldChzaXplKSkgewotICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpbml0aWFsaXplKHNpemUpOwogfQogCiBEcmF3aW5nQnVm
ZmVyOjp+RHJhd2luZ0J1ZmZlcigpCiB7CisgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAgICAg
ICAgbV9wbGF0Zm9ybUxheWVyLT5zZXREcmF3aW5nQnVmZmVyKDApOworCiAgICAgaWYgKCFtX2Nv
bnRleHQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsZWFyKCk7CiB9CiAKK3ZvaWQgRHJhd2lu
Z0J1ZmZlcjo6aW5pdGlhbGl6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIG1fZmJvID0g
bV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworCisgICAgaWYgKG1fc2VwYXJhdGVCYWNr
aW5nVGV4dHVyZSkKKyAgICAgICAgbV9iYWNraW5nQ29sb3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9y
VGV4dHVyZShtX2NvbnRleHQuZ2V0KCksIHNpemUpOworCisgICAgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgbV9j
b2xvckJ1ZmZlciA9IGdlbmVyYXRlQ29sb3JUZXh0dXJlKG1fY29udGV4dC5nZXQoKSwgc2l6ZSk7
CisgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOworICAgIGNyZWF0ZVNl
Y29uZGFyeUJ1ZmZlcnMoKTsKKyAgICBpZiAoIXJlc2V0KHNpemUpKSB7CisgICAgICAgIG1fY29u
dGV4dC5jbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9y
bUxheWVyKCkKIHsKICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCisgICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBpZiAobXVsdGlzYW1wbGUoKSkK
ICAgICAgICAgY29tbWl0KCk7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KworICAgIGlmIChtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUpIHsKKyAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
CisgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG1fYmFja2luZ0NvbG9yQnVmZmVyKTsKKyAgICAgICAgdW5zaWduZWQgY29sb3JGb3Jt
YXQgPSBtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEgPyBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSA6IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7CisgICAgICAgIG1fY29udGV4
dC0+Y29weVRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGNvbG9y
Rm9ybWF0LCAwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCAwKTsKKyAgICB9
CisKKyAgICBpZiAobXVsdGlzYW1wbGUoKSkKKyAgICAgICAgYmluZCgpOworCiAgICAgbV9jb250
ZXh0LT5mbHVzaCgpOwogfQogI2VuZGlmCkBAIC0xMDMsMTMgKzEzMywzMSBAQCB2b2lkIERyYXdp
bmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogUGxhdGZvcm1MYXllciogRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYXllcigpCiB7
Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX3BsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgbV9w
bGF0Zm9ybUxheWVyID0gV2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgICAgIG1f
cGxhdGZvcm1MYXllci0+c2V0RHJhd2luZ0J1ZmZlcih0aGlzKTsKKyAgICB9CisKKyAgICByZXR1
cm4gbV9wbGF0Zm9ybUxheWVyLmdldCgpOwogfQogI2VuZGlmCiAKIFBsYXRmb3JtM0RPYmplY3Qg
RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fY29sb3JCdWZmZXI7CisgICAgcmV0dXJuIG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSA/IG1f
YmFja2luZ0NvbG9yQnVmZmVyIDogbV9jb2xvckJ1ZmZlcjsKIH0KIAorUGxhdGZvcm0zRE9iamVj
dCBEcmF3aW5nQnVmZmVyOjpmcmFtZWJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmJv
OworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBEcmF3aW5nQnVm
ZmVyOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQorICAgICAgICBtX3BsYXRm
b3JtTGF5ZXItPnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMoY29udGV4dC0+Y2FudmFzKCkt
PmJ1ZmZlcigpKTsKK30KKyNlbmRpZgorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJv
bWl1bS5jcHAJKHJldmlzaW9uIDk5ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAKKyNpbmNs
dWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgpAQCAtNDgsNyArNDksNiBAQCBQYXNzUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1
bT4gV2ViR0xMYXllCiAKIFdlYkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9taXVtKEND
TGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCiAgICAgOiBDYW52YXNMYXllckNocm9taXVtKGRlbGVn
YXRlKQotICAgICwgbV9jb250ZXh0KDApCiAgICAgLCBtX3RleHR1cmVDaGFuZ2VkKHRydWUpCiAg
ICAgLCBtX3RleHR1cmVVcGRhdGVkKGZhbHNlKQogewpAQCAtNTYsMTMgKzU2LDEzIEBAIFdlYkdM
TGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9taXVtKEMKIAogV2ViR0xMYXllckNocm9taXVt
Ojp+V2ViR0xMYXllckNocm9taXVtKCkKIHsKLSAgICBpZiAobV9jb250ZXh0ICYmIGxheWVyVHJl
ZUhvc3QoKSkKLSAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdG9wUmF0ZUxpbWl0ZXIobV9jb250
ZXh0KTsKKyAgICBpZiAoY29udGV4dCgpICYmIGxheWVyVHJlZUhvc3QoKSkKKyAgICAgICAgbGF5
ZXJUcmVlSG9zdCgpLT5zdG9wUmF0ZUxpbWl0ZXIoY29udGV4dCgpKTsKIH0KIAogYm9vbCBXZWJH
TExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtX2Nv
bnRleHQgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0
dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpOworICAgIHJldHVybiAoY29u
dGV4dCgpICYmIGNvbnRleHQoKS0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3Rh
dHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKIH0KIAogdm9pZCBXZWJH
TExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0
M0QqIHJlbmRlcmVyQ29udGV4dCwgQ0NUZXh0dXJlVXBkYXRlciYpCkBAIC04NSwxMSArODUsOSBA
QCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvCiAgICAgfQogICAgIC8v
IFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRv
ci4KICAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSAmJiBtX3RleHR1cmVVcGRhdGVkKSB7
Ci0gICAgICAgIC8vIHByZXBhcmVUZXh0dXJlIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIG9m
Zi1zY3JlZW4gcmVuZGVyIHRhcmdldCBpbnRvIHRoZSB0ZXh0dXJlCi0gICAgICAgIC8vIHVzZWQg
YnkgdGhlIGNvbXBvc2l0b3IuCi0gICAgICAgIC8vCi0gICAgICAgIG1fY29udGV4dC0+cHJlcGFy
ZVRleHR1cmUoKTsKLSAgICAgICAgbV9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7Cisg
ICAgICAgIC8vIHB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIgcHJlcGFyZXMgdGhlIGNvbnRlbnRzIG9m
IHRoZSBvZmYtc2NyZWVuIHJlbmRlciB0YXJnZXQgZm9yIHVzZSBieSB0aGUgY29tcG9zaXRvci4K
KyAgICAgICAgZHJhd2luZ0J1ZmZlcigpLT5wdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCk7CisgICAg
ICAgIGNvbnRleHQoKS0+bWFya0xheWVyQ29tcG9zaXRlZCgpOwogICAgICAgICBtX3VwZGF0ZVJl
Y3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBib3VuZHMoKSk7CiAgICAgICAgIHJlc2V0TmVl
ZHNEaXNwbGF5KCk7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSBmYWxzZTsKQEAgLTEwMSw3
ICs5OSw3IEBAIGJvb2wgV2ViR0xMYXllckNocm9taXVtOjpwYWludFJlbmRlcmVkUmUKICAgICBp
ZiAobV90ZXh0dXJlVXBkYXRlZCB8fCAhbGF5ZXJSZW5kZXJlckNvbnRleHQoKSB8fCAhZHJhd3ND
b250ZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEludFNpemUgZnJhbWVidWZm
ZXJTaXplID0gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOworICAgIElu
dFNpemUgZnJhbWVidWZmZXJTaXplID0gY29udGV4dCgpLT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVy
U2l6ZSgpOwogICAgIEFTU0VSVChsYXllclJlbmRlcmVyQ29udGV4dCgpKTsKIAogICAgIC8vIFRo
aXMgd291bGQgaWRlYWxseSBiZSBkb25lIGluIHRoZSB3ZWJnbCBjb250ZXh0LCBidXQgdGhhdCBp
c24ndCBwb3NzaWJsZSB5ZXQuCkBAIC0xMTAsNyArMTA4LDcgQEAgYm9vbCBXZWJHTExheWVyQ2hy
b21pdW06OnBhaW50UmVuZGVyZWRSZQogICAgIGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbV90ZXh0dXJlSWQsIDApOwogCiAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lv
bnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGxheWVyUmVuZGVyZXJDb250
ZXh0KCktPmdldEV4dGVuc2lvbnMoKSk7Ci0gICAgZXh0ZW5zaW9ucy0+cGFpbnRGcmFtZWJ1ZmZl
clRvQ2FudmFzKGZyYW1lYnVmZmVyLCBmcmFtZWJ1ZmZlclNpemUud2lkdGgoKSwgZnJhbWVidWZm
ZXJTaXplLmhlaWdodCgpLCAhbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11
bHRpcGxpZWRBbHBoYSwgaW1hZ2VCdWZmZXIpOworICAgIGV4dGVuc2lvbnMtPnBhaW50RnJhbWVi
dWZmZXJUb0NhbnZhcyhmcmFtZWJ1ZmZlciwgZnJhbWVidWZmZXJTaXplLndpZHRoKCksIGZyYW1l
YnVmZmVyU2l6ZS5oZWlnaHQoKSwgIWNvbnRleHQoKS0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5w
cmVtdWx0aXBsaWVkQWxwaGEsIGltYWdlQnVmZmVyKTsKICAgICBsYXllclJlbmRlcmVyQ29udGV4
dCgpLT5kZWxldGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC0xMjEsMzIgKzExOSwzOSBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y29udGVudENo
YW5nZWQoCiAgICAgLy8gSWYgV2ViR0wgY29tbWFuZHMgYXJlIGlzc3VlZCBvdXRzaWRlIG9mIGEg
dGhlIGFuaW1hdGlvbiBjYWxsYmFja3MsIHRoZW4gdXNlCiAgICAgLy8gY2FsbCByYXRlTGltaXRP
ZmZzY3JlZW5Db250ZXh0Q0hST01JVU0oKSB0byBrZWVwIHRoZSBjb250ZXh0IGZyb20gZ2V0dGlu
ZyB0b28gZmFyIGFoZWFkLgogICAgIGlmIChsYXllclRyZWVIb3N0KCkpCi0gICAgICAgIGxheWVy
VHJlZUhvc3QoKS0+c3RhcnRSYXRlTGltaXRlcihtX2NvbnRleHQpOworICAgICAgICBsYXllclRy
ZWVIb3N0KCktPnN0YXJ0UmF0ZUxpbWl0ZXIoY29udGV4dCgpKTsKIH0KIAotdm9pZCBXZWJHTExh
eWVyQ2hyb21pdW06OnNldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
Cit2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0RHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVy
KiBkcmF3aW5nQnVmZmVyKQogewotICAgIGJvb2wgY29udGV4dENoYW5nZWQgPSAobV9jb250ZXh0
ICE9IGNvbnRleHQpOworICAgIGJvb2wgZHJhd2luZ0J1ZmZlckNoYW5nZWQgPSAobV9kcmF3aW5n
QnVmZmVyICE9IGRyYXdpbmdCdWZmZXIpOworICAgIG1fZHJhd2luZ0J1ZmZlciA9IGRyYXdpbmdC
dWZmZXI7CiAKLSAgICBpZiAobGF5ZXJUcmVlSG9zdCgpICYmIGNvbnRleHRDaGFuZ2VkKQotICAg
ICAgICBsYXllclRyZWVIb3N0KCktPnN0b3BSYXRlTGltaXRlcihtX2NvbnRleHQpOworICAgIGlm
IChsYXllclRyZWVIb3N0KCkgJiYgZHJhd2luZ0J1ZmZlckNoYW5nZWQpCisgICAgICAgIGxheWVy
VHJlZUhvc3QoKS0+c3RvcFJhdGVMaW1pdGVyKGNvbnRleHQoKSk7CiAKLSAgICBtX2NvbnRleHQg
PSBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dDNEKj4oY29udGV4dCk7Ci0KLSAgICBpZiAoIW1f
Y29udGV4dCkKKyAgICBpZiAoIW1fZHJhd2luZ0J1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9IG1fY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCk7
Ci0gICAgaWYgKHRleHR1cmVJZCAhPSBtX3RleHR1cmVJZCB8fCBjb250ZXh0Q2hhbmdlZCkgewor
ICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlSWQgPSBtX2RyYXdpbmdCdWZmZXItPnBsYXRmb3JtQ29s
b3JCdWZmZXIoKTsKKyAgICBpZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkIHx8IGRyYXdpbmdC
dWZmZXJDaGFuZ2VkKSB7CiAgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSB0cnVlOwogICAgICAg
ICBtX3RleHR1cmVVcGRhdGVkID0gdHJ1ZTsKICAgICB9CiAgICAgbV90ZXh0dXJlSWQgPSB0ZXh0
dXJlSWQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IG1f
Y29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gY29udGV4dCgpLT5nZXRDb250ZXh0QXR0cmlidXRlcygp
OwogICAgIG1faGFzQWxwaGEgPSBhdHRyaWJ1dGVzLmFscGhhOwogICAgIG1fcHJlbXVsdGlwbGll
ZEFscGhhID0gYXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGE7CiB9CiAKK0dyYXBoaWNzQ29u
dGV4dDNEKiBXZWJHTExheWVyQ2hyb21pdW06OmNvbnRleHQoKSBjb25zdAoreworICAgIGlmIChk
cmF3aW5nQnVmZmVyKCkpCisgICAgICAgIHJldHVybiBkcmF3aW5nQnVmZmVyKCktPmdyYXBoaWNz
Q29udGV4dDNEKCkuZ2V0KCk7CisKKyAgICByZXR1cm4gMDsKK30KKwogR3JhcGhpY3NDb250ZXh0
M0QqIFdlYkdMTGF5ZXJDaHJvbWl1bTo6bGF5ZXJSZW5kZXJlckNvbnRleHQoKQogewogICAgIC8v
IEZJWE1FOiBJbiB0aGUgdGhyZWFkZWQgY2FzZSwgcGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZh
cyBtdXN0IGJlCkBAIC0xNTcsNCArMTYyLDUgQEAgR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMTGF5
ZXJDaHJvbWl1bTo6bAogfQogCiB9CisKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gOTk4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVy
Q2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIK
KyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NTMsMjEgKzU0LDIzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQo
KTsKICAgICBib29sIHBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKTsK
IAotICAgIHZvaWQgc2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCk7
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0K
KyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIGNvbnN0OwogCisgICAgdm9pZCBzZXRE
cmF3aW5nQnVmZmVyKERyYXdpbmdCdWZmZXIqKTsKKyAgICBEcmF3aW5nQnVmZmVyKiBkcmF3aW5n
QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nQnVmZmVyOyB9CiBwcml2YXRlOgogICAg
IGV4cGxpY2l0IFdlYkdMTGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqKTsKICAgICBmcmll
bmQgY2xhc3MgV2ViR0xMYXllckNocm9taXVtUmF0ZUxpbWl0VGFzazsKIAogICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBsYXllclJlbmRlcmVyQ29udGV4dCgpOwogCi0gICAgLy8gR3JhcGhpY3NDb250
ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIgaGFzIGEgc2lkZS1lZmZlY3Qgb2YgYXNzaWduaW5nIGl0c2Vs
ZgotICAgIC8vIHRvIHRoZSBsYXllci4gQmVjYXVzZSBvZiB0aGF0IEdyYXBoaWNzQ29udGV4dDNE
J3MgZGVzdHJ1Y3RvciB3aWxsIHJlc2V0Ci0gICAgLy8gbGF5ZXIncyBjb250ZXh0IHRvIDAuCi0g
ICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKICAgICBib29sIG1fdGV4dHVyZUNoYW5n
ZWQ7CiAgICAgYm9vbCBtX3RleHR1cmVVcGRhdGVkOworCisgICAgLy8gVGhlIERyYXdpbmdCdWZm
ZXIgaG9sZGluZyB0aGUgV2ViR0wgY29udGVudHMgZm9yIHRoaXMgbGF5ZXIuCisgICAgLy8gQSBy
ZWZlcmVuY2UgaXMgbm90IGhlbGQgaGVyZSwgYmVjYXVzZSB0aGUgRHJhd2luZ0J1ZmZlciBhbHJl
YWR5IGhvbGRzCisgICAgLy8gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMTGF5ZXJDaHJvbWl1bS4K
KyAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7CiB9OwogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFw
aGljc0NvbnRleHQzREVmbC5jcHAJKHJldmlzaW9uIDk5ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzI2LDEzICs3MjYsMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJD
b21wb3NpdGVkKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRy
YXdpbmdCdWZmZXIpCiB7CisgICAgLy8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVt
ZW50ZWQgaW4gQ2hyb21pdW0gcG9ydHMuCisgICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8
SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFn
ZURhdGEoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKKyAgICAvLyBEcmF3aW5nQnVm
ZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4KKyAgICBBU1NF
UlQoIWRyYXdpbmdCdWZmZXIpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgUmVmUHRyPElt
YWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZSgxLCAxKSk7CiAg
ICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCShyZXZpc2lv
biA5OTg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgIkRy
YXdpbmdCdWZmZXIuaCIKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDgsNyArNTAsNyBAQCBzdGF0aWMgaW50IHNfbWF4aW11bVJlc291cmNl
VXNlUGl4ZWxzID0KICNlbmRpZgogc3RhdGljIGludCBzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVs
cyA9IDA7CiAKLVBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQorUGFzc1Jl
ZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4
dHVyZSkKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0LT5nZXRFeHRl
bnNpb25zKCk7CiAgICAgYm9vbCBtdWx0aXNhbXBsZVN1cHBvcnRlZCA9IGV4dGVuc2lvbnMtPnN1
cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikgJiYgZXh0ZW5zaW9ucy0+c3VwcG9y
dHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikgJiYgZXh0ZW5zaW9ucy0+c3Vw
cG9ydHMoIkdMX09FU19yZ2I4X3JnYmE4Iik7CkBAIC02MCw3ICs2Miw3IEBAIFBhc3NSZWZQdHI8
RHJhd2luZ0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjoKICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNp
bFN1cHBvcnRlZCA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0
ZW5jaWwiKTsKICAgICBpZiAocGFja2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVkKQogICAgICAgICBl
eHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsK
LSAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZlciA9IGFkb3B0UmVmKG5ldyBE
cmF3aW5nQnVmZmVyKGNvbnRleHQsIHNpemUsIG11bHRpc2FtcGxlU3VwcG9ydGVkLCBwYWNrZWRE
ZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpKTsKKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gZHJhd2lu
Z0J1ZmZlciA9IGFkb3B0UmVmKG5ldyBEcmF3aW5nQnVmZmVyKGNvbnRleHQsIHNpemUsIG11bHRp
c2FtcGxlU3VwcG9ydGVkLCBwYWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0ZWQsIHNlcGFyYXRlQmFj
a2luZ1RleHR1cmUpKTsKICAgICByZXR1cm4gKGRyYXdpbmdCdWZmZXItPm1fY29udGV4dCkgPyBk
cmF3aW5nQnVmZmVyLnJlbGVhc2UoKSA6IDA7CiB9CiAKQEAgLTc4LDYgKzgwLDExIEBAIHZvaWQg
RHJhd2luZ0J1ZmZlcjo6Y2xlYXIoKQogICAgICAgICBtX2NvbG9yQnVmZmVyID0gMDsKICAgICB9
CiAKKyAgICBpZiAobV9iYWNraW5nQ29sb3JCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5k
ZWxldGVUZXh0dXJlKG1fYmFja2luZ0NvbG9yQnVmZmVyKTsKKyAgICAgICAgbV9iYWNraW5nQ29s
b3JCdWZmZXIgPSAwOworICAgIH0KKwogICAgIGlmIChtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIp
IHsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIobV9tdWx0aXNhbXBsZUNv
bG9yQnVmZmVyKTsKICAgICAgICAgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyID0gMDsKQEAgLTE2
Niw3ICsxNzMsNyBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OmNsZWFyRnJhbWVidWZmZXIoKQogICAg
IHVuc2lnbmVkIGNoYXIgZGVwdGhNYXNrID0gZmFsc2U7CiAgICAgdW5zaWduZWQgaW50IHN0ZW5j
aWxNYXNrID0gMHhmZmZmZmZmZjsKICAgICB1bnNpZ25lZCBjaGFyIGlzU2Npc3NvckVuYWJsZWQg
PSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsb25nIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9CVUZGRVJfQklUOworICAgIHVuc2lnbmVkIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOwogICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7CiAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVB
Ul9WQUxVRSwgJmNsZWFyRGVwdGgpOwogICAgICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoMSk7
CkBAIC0xODgsNiArMTk1LDE0IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXJGcmFtZWJ1ZmZl
cigpCiAgICAgbV9jb250ZXh0LT5nZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0NM
RUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwg
MCwgMCk7CiAgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1hc2spOworCisgICAgLy8gVGhlIG11
bHRpc2FtcGxlIGZibyB3YXMganVzdCBjbGVhcmVkLCBidXQgd2UgYWxzbyBuZWVkIHRvIGNsZWFy
IHRoZSBub24tbXVsdGlzYW1wbGVkIGJ1ZmZlciB0b28uCisgICAgaWYgKG1fbXVsdGlzYW1wbGVG
Qk8pIHsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOworICAgICAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVG
Qk8pOworICAgIH0KKwogICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBj
bGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKIAogICAgIGlmIChh
dHRyaWJ1dGVzLmRlcHRoKSB7CkBAIC0yMzMsNyArMjQ4LDcgQEAgYm9vbCBEcmF3aW5nQnVmZmVy
OjpyZXNldChjb25zdCBJbnRTaXplJgogICAgIGlmIChuZXdTaXplICE9IG1fc2l6ZSkgewogICAg
ICAgICBtX3NpemUgPSBuZXdTaXplOwogCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxD
b2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsUmVuZGVyYnVmZmVyRm9ybWF0OworICAg
ICAgICB1bnNpZ25lZCBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxS
ZW5kZXJidWZmZXJGb3JtYXQ7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmFscGhhKSB7CiAgICAg
ICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CiAg
ICAgICAgICAgICBjb2xvckZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwpAQCAtMjUw
LDcgKzI2NSw3IEBAIGJvb2wgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAg
ICAgICAgICAgIGludCBtYXhTYW1wbGVDb3VudCA9IDA7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfU0FNUExFUywgJm1h
eFNhbXBsZUNvdW50KTsKLSAgICAgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDgs
IG1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWlu
KDQsIG1heFNhbXBsZUNvdW50KTsKIAogICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsK
IApAQCAtMjY5LDEwICsyODQsMTYgQEAgYm9vbCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJ
bnRTaXplJgogICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKIAogICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyKTsKLSAgICAg
ICAgCiAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5o
ZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCAwKTsKIAogICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1F
TlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwgMCk7CisK
KyAgICAgICAgLy8gcmVzaXplIHRoZSBiYWNraW5nIGNvbG9yIGJ1ZmZlcgorICAgICAgICBpZiAo
bV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2JhY2tpbmdDb2xvckJ1ZmZl
cik7CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgMCk7CisgICAgICAgIH0KKwogICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKIAogICAgICAgICBpZiAoIW11bHRpc2Ft
cGxlKCkpCkBAIC0yOTMsMjMgKzMxNCw1NiBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OmNvbW1pdChs
b25nIHgsIGxvbmcKIHsKICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAKKwogICAgIGlmICh3aWR0aCA8IDApCiAgICAgICAgIHdpZHRoID0gbV9zaXplLndpZHRo
KCk7CiAgICAgaWYgKGhlaWdodCA8IDApCiAgICAgICAgIGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQo
KTsKLSAgICAgICAgCisKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IAorCiAgICAgaWYgKG1fbXVsdGlzYW1wbGVGQk8pIHsKICAgICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpSRUFEX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxl
RkJPKTsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpE
UkFXX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5ibGl0RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQsIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVIpOworCisgICAgICAgIGlmIChtX3NjaXNzb3JFbmFibGVkKQorICAgICAgICAg
ICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwor
CisgICAgICAgIC8vIFVzZSBORUFSRVNULCBiZWNhdXNlIHRoZXJlIGlzIG5vIHNjYWxlIHBlcmZv
cm1lZCBkdXJpbmcgdGhlIGJsaXQuCisgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5ibGl0RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQsIEdyYXBoaWNzQ29udGV4dDNE
OjpORUFSRVNUKTsKKworICAgICAgICBpZiAobV9zY2lzc29yRW5hYmxlZCkKKyAgICAgICAgICAg
IG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAg
IH0KLSAgICAKKwogICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogfQogCitib29sIERyYXdpbmdCdWZmZXI6Om11bHRp
c2FtcGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+Z2V0
Q29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgJiYgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1
cHBvcnRlZDsKK30KKworUGFzc1JlZlB0cjxJbWFnZURhdGE+IERyYXdpbmdCdWZmZXI6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5w
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSh0aGlzKTsKK30KKwordm9pZCBEcmF3aW5n
QnVmZmVyOjpkaXNjYXJkUmVzb3VyY2VzKCkKK3sKKyAgICBtX2NvbG9yQnVmZmVyID0gMDsKKyAg
ICBtX2JhY2tpbmdDb2xvckJ1ZmZlciA9IDA7CisgICAgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
ID0gMDsKKworICAgIG1fZGVwdGhTdGVuY2lsQnVmZmVyID0gMDsKKyAgICBtX2RlcHRoQnVmZmVy
ID0gMDsKKworICAgIG1fc3RlbmNpbEJ1ZmZlciA9IDA7CisKKyAgICBtX211bHRpc2FtcGxlRkJP
ID0gMDsKKyAgICBtX2ZibyA9IDA7Cit9CisKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6YmluZCgpCiB7
CiAgICAgaWYgKCFtX2NvbnRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJldmlzaW9uIDk5ODU3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBl
czNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CkBAIC00MywxNSArNDQsMTggQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
Y2xhc3MgQ2FudmFzMkRMYXllckNocm9taXVtOworY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgSW1hZ2VEYXRhOworI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQorY2xhc3MgV2ViR0xMYXllckNocm9taXVtOwogI2VuZGlmCiAKIC8vIE1h
bmFnZXMgYSByZW5kZXJpbmcgdGFyZ2V0IChmcmFtZWJ1ZmZlciArIGF0dGFjaG1lbnQpIGZvciBh
IGNhbnZhcy4gIENhbiBwdWJsaXNoIGl0cyByZW5kZXJpbmcKIC8vIHJlc3VsdHMgdG8gYSBQbGF0
Zm9ybUxheWVyIGZvciBjb21wb3NpdGluZy4KIGNsYXNzIERyYXdpbmdCdWZmZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxEcmF3aW5nQnVmZmVyPiB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RHJhd2luZ0J1ZmZlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6
ZSYsIGJvb2wpOwogICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIAogICAgIH5E
cmF3aW5nQnVmZmVyKCk7CkBAIC03NSwyMiArNzksMzkgQEAgcHVibGljOgogCiAgICAgLy8gQ29w
aWVzIHRoZSBtdWx0aXNhbXBsZSBjb2xvciBidWZmZXIgdG8gdGhlIG5vcm1hbCBjb2xvciBidWZm
ZXIgYW5kIGxlYXZlcyBtX2ZibyBib3VuZAogICAgIHZvaWQgY29tbWl0KGxvbmcgeCA9IDAsIGxv
bmcgeSA9IDAsIGxvbmcgd2lkdGggPSAtMSwgbG9uZyBoZWlnaHQgPSAtMSk7Ci0gICAgCi0gICAg
Ym9vbCBtdWx0aXNhbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQt
PmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVFeHRlbnNp
b25TdXBwb3J0ZWQ7IH0KLSAgICAKKworICAgIC8vIGNvbW1pdCBzaG91bGQgY29weSB0aGUgZnVs
bCBtdWx0aXNhbXBsZSBidWZmZXIsIGFuZCBub3QgcmVzcGVjdCB0aGUKKyAgICAvLyBjdXJyZW50
IHNjaXNzb3IgYm91bmRzLiBUcmFjayB0aGUgc3RhdGUgb2YgdGhlIHNjaXNzb3IgdGVzdCBzbyB0
aGF0IGl0CisgICAgLy8gY2FuIGJlIGRpc2FibGVkIGR1cmluZyBjYWxscyB0byBjb21taXQuCisg
ICAgdm9pZCBzZXRTY2lzc29yRW5hYmxlZChib29sIHNjaXNzb3JFbmFibGVkKSB7IG1fc2Npc3Nv
ckVuYWJsZWQgPSBzY2lzc29yRW5hYmxlZDsgfQorCisgICAgYm9vbCBtdWx0aXNhbXBsZSgpIGNv
bnN0OworCiAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3Q7
CisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcigpIGNvbnN0OworCisgICAgUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisKKyAg
ICAvLyBJbW1lZGlhdGVseSByZWxlYXNlcyBvd25lcnNoaXAgb2YgYWxsIHJlc291cmNlcy4gQ2Fs
bCB1cG9uIGxvc3Mgb2YgdGhlCisgICAgLy8gZ3JhcGhpY3MgY29udGV4dCB0byBwcmV2ZW50IGZy
ZWVpbmcgaW52YWxpZCByZXNvdXJjZXMuCisgICAgdm9pZCBkaXNjYXJkUmVzb3VyY2VzKCk7CiAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpOwogICAgIHZvaWQgcHVibGlzaFRvUGxhdGZvcm1MYXllcigpOworICAgIHZv
aWQgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQq
KTsKICNlbmRpZgogCiAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gZ3JhcGhpY3ND
b250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAogcHJpdmF0ZToKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Qq
LCBjb25zdCBJbnRTaXplJik7Ci0gICAgCi0gICAgRHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRCosIGNvbnN0IEludFNpemUmLCBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVk
LCBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCk7CisgICAgRHJhd2lu
Z0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29sIG11bHRpc2Ft
cGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSk7
CisKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYpOworCisgICAgYm9vbCBtX3Nl
cGFyYXRlQmFja2luZ1RleHR1cmU7CisgICAgYm9vbCBtX3NjaXNzb3JFbmFibGVkOwogCiAgICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiAgICAgSW50U2l6ZSBtX3NpemU7
CkBAIC05OCw2ICsxMTksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb25TdXBwb3J0ZWQ7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsKICAgICBQ
bGF0Zm9ybTNET2JqZWN0IG1fY29sb3JCdWZmZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2Jh
Y2tpbmdDb2xvckJ1ZmZlcjsKIAogICAgIC8vIFRoaXMgaXMgdXNlZCB3aGVuIHdlIGhhdmUgT0VT
X3BhY2tlZF9kZXB0aF9zdGVuY2lsLgogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9kZXB0aFN0ZW5j
aWxCdWZmZXI7CkBAIC0xMTAsNiArMTMyLDEwIEBAIHByaXZhdGU6CiAgICAgUGxhdGZvcm0zRE9i
amVjdCBtX211bHRpc2FtcGxlRkJPOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyOwogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgUmVmUHRyPFdlYkdM
TGF5ZXJDaHJvbWl1bT4gbV9wbGF0Zm9ybUxheWVyOworI2VuZGlmCisKICNpZiBQTEFURk9STShN
QUMpCiAgICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fcGxhdGZvcm1MYXllcjsKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVm
ZmVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQkocmV2aXNpb24gOTk4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIERyYXdp
bmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uU3VwcG9ydGVkKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUp
CisgICAgOiBtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUoc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkK
KyAgICAsIG1fc2Npc3NvckVuYWJsZWQoZmFsc2UpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkK
ICAgICAsIG1fc2l6ZSgtMSwgLTEpCiAgICAgLCBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9y
dGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9wYWNrZWREZXB0aFN0
ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9y
dGVkKQpAQCAtNTIsNiArNTUsOSBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBo
aWNzQ29uCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29s
b3JCdWZmZXIoMCkKIHsKKyAgICAvLyBTdXBwb3J0IGZvciBhIHNlcGFyYXRlIGJhY2tpbmcgdGV4
dHVyZSBoYXMgb25seSBiZWVuIGVuYWJsZWQgZm9yCisgICAgLy8gdGhlIGNocm9taXVtIHBvcnQu
CisgICAgQVNTRVJUKCFtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUpOwogICAgIEFTU0VSVChtX2Zi
byk7CiAgICAgaWYgKCFtX2ZibykgewogICAgICAgICBjbGVhcigpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L3F0L0RyYXdpbmdCdWZmZXJRdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L3F0L0RyYXdpbmdC
dWZmZXJRdC5jcHAJKHJldmlzaW9uIDk5ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L3F0L0RyYXdpbmdCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDggKzM0LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEludFNpemUmIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAg
IDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgOiBtX3NlcGFyYXRl
QmFja2luZ1RleHR1cmUoc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICAsIG1fc2Npc3NvckVu
YWJsZWQoZmFsc2UpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2l6ZSgtMSwg
LTEpCiAgICAgLCBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0
ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBw
b3J0ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQpAQCAtNDcsNiArNTAs
OSBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29uCiAgICAgLCBtX211
bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKIHsKKyAg
ICAvLyBTdXBwb3J0IGZvciBhIHNlcGFyYXRlIGJhY2tpbmcgdGV4dHVyZSBoYXMgb25seSBiZWVu
IGVuYWJsZWQgZm9yCisgICAgLy8gdGhlIGNocm9taXVtIHBvcnQuCisgICAgQVNTRVJUKCFtX3Nl
cGFyYXRlQmFja2luZ1RleHR1cmUpOwogICAgIEFTU0VSVChtX2Zibyk7CiAgICAgaWYgKCFtX2Zi
bykgewogICAgICAgICBjbGVhcigpOwpAQCAtODMsNiArODksMTIgQEAgUGxhdGZvcm0zRE9iamVj
dCBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybQogICAgIHJldHVybiBtX2NvbG9yQnVmZmVyOwogfQog
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBEcmF3aW5nQnVmZmVyOjpw
YWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKK3sKK30KKyNlbmRpZgorCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0RyYXdpbmdCdWZmZXJHdGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9EcmF3aW5nQnVmZmVyR3RrLmNw
cAkocmV2aXNpb24gOTk4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvRHJhd2luZ0J1ZmZlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDEyIEBA
IFBsYXRmb3JtM0RPYmplY3QgRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm0KICAgICByZXR1cm4gbV9j
b2xvckJ1ZmZlcjsKIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQg
RHJhd2luZ0J1ZmZlcjo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQpCit7Cit9CisjZW5kaWYKKwogfQogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAkocmV2aXNpb24gOTk4NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6aXNSZXNvdXJjZVNhZmUoKQogfQogCiAjaWYgIVBMQVRGT1JNKFFUKQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQsIERyYXdpbmdCdWZmZXIqKQogewogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBj
b250ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMt
PmJ1ZmZlcigpOwpAQCAtMTYyLDcgKzE2Miw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50Q29tcG9zaXRlZFIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VE
YXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEo
KQorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKikKIHsKICAgICAvLyBSZWFkaW5nIHBy
ZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGljaCBp
cwogICAgIC8vIGxvc3N5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkocmV2aXNpb24gOTk4
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDcgKzQyMCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmUKICAgICBtX3ByaXZhdGUtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKikKIHsKICAgICBtX3ByaXZh
dGUtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwpAQCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmUKIH0KIAogI2lmIGRlZmluZWQoUVRfT1BFTkdM
X0VTXzIpCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZl
ciopCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgZm9yIHBy
b3BlciBub24tcHJlbXVsdGlwbGllZC1hbHBoYQogICAgIC8vIHN1cHBvcnQuCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTk4NTcpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDExLTEx
LTA4ICBKZWZmIFRpbWFudXMgIDx0d2l6QGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFBhdGNoIHRoYXQgaW1wbGVtZW50aW5nIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRvIGFsbG93
IFdlYkdMCisgICAgICAgIHRvIHNoYXJlIGl0cyBiYWNraW5nIHN0b3JlIGRpcmVjdGx5IHdpdGgg
dGhlIGNvbXBvc2l0b3IuCisgICAgICAgIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0cyBjcmVhdGUg
YW5kIHJlbmRlciB0byBGQk9zIG1hbmFnZWQgYnkgYQorICAgICAgICBEcmF3aW5nQnVmZmVyIGlu
c3RhbmNlLiBBbGwgUGxhdGZvcm1MYXllciBsaWZldGltZSBtYW5hZ2VtZW50IGlzCisgICAgICAg
IHBlcmZvcm1lZCBieSB0aGUgRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgQ2hhbmdlcyBhcmUgb25s
eSByZWxldmFudCB0byBDaHJvbWl1bSBwb3J0cy4gRnVuY3Rpb25hbGl0eSBpcworICAgICAgICB1
bmNoYW5nZWQgZm9yIG90aGVyIHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTMyMDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcDogR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlIG5vIGxvbmdlciBjYWNoZXMKKyAgICAgICAgdGhlIFdlYkdM
TGF5ZXJDaHJvbWl1bSBpbnN0YW5jZS4gIEluc3RlYWQsIGl0IGlzIGFjY2Vzc2VkIHZpYSBEcmF3
aW5nQnVmZmVyIGluc3RhbmNlcworICAgICAgICBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIHRoZSBu
ZWNlc3Nhcnkgcm91dGluZXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAg
ICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmg6CisKIDIwMTEtMTEtMTAgIEFs
cGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFNjcm9s
bCBkZWx0YXMgYXJlIGNsZWFyZWQgZHVyaW5nIGNvbW1pdCB0byB0aGUgbWFpbiB0aHJlYWQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29u
dGV4dDNEQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5OTg1NykKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSwxMCArMzUsMTAgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaW5j
bHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIK
ICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCkBAIC0xNjMs
NiArMTYzLDIwIEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUdyYXAKICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRG
cm9tV2ViQ29udGV4dCh3ZWJDb250ZXh0LnJlbGVhc2UoKSwgYXR0cnMsIGhvc3RXaW5kb3csIHJl
bmRlclN0eWxlLCB0aHJlYWRVc2FnZSk7CiB9CiAKK3ZvaWQgZ2V0RHJhd2luZ1BhcmFtZXRlcnMo
RHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQz
RCogZ3JhcGhpY3NDb250ZXh0M0QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3Jt
M0RPYmplY3QqIGZyYW1lQnVmZmVySWQsIGludCogd2lkdGgsIGludCogaGVpZ2h0KQoreworICAg
IGlmIChkcmF3aW5nQnVmZmVyKSB7CisgICAgICAgICpmcmFtZUJ1ZmZlcklkID0gZHJhd2luZ0J1
ZmZlci0+ZnJhbWVidWZmZXIoKTsKKyAgICAgICAgKndpZHRoID0gZHJhd2luZ0J1ZmZlci0+c2l6
ZSgpLndpZHRoKCk7CisgICAgICAgICpoZWlnaHQgPSBkcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVp
Z2h0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKmZyYW1lQnVmZmVySWQgPSAwOworICAgICAg
ICAqd2lkdGggPSBncmFwaGljc0NvbnRleHQzRC0+d2lkdGgoKTsKKyAgICAgICAgKmhlaWdodCA9
IGdyYXBoaWNzQ29udGV4dDNELT5oZWlnaHQoKTsKKyAgICB9Cit9CisKIH0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZvckFub3RoZXJUaHJlYWQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdy
YXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKQEAgLTIxMiwxNyArMjI2
LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnByZXBhcmVUZQogICAgIG1faW1w
bC0+cHJlcGFyZVRleHR1cmUoKTsKIH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLVdlYkdMTGF5ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9y
bUxheWVyKCkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKCFt
X2NvbXBvc2l0aW5nTGF5ZXIpCi0gICAgICAgIG1fY29tcG9zaXRpbmdMYXllciA9IFdlYkdMTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwotI2VuZGlmCi0gICAgcmV0dXJuIG1fY29tcG9zaXRpbmdM
YXllci5nZXQoKTsKLX0KLSNlbmRpZgotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
bWFya0NvbnRleHRDaGFuZ2VkKCkKIHsKICAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOwpA
QCAtMzA1LDMxICszMDgsMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50
RnJhbQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQor
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdp
bmdCdWZmZXIpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY29udGV4dC0+Y2Fu
dmFzKCktPmJ1ZmZlcigpOwotICAgIHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcygwLCBtX2ltcGwt
PndpZHRoKCksIG1faW1wbC0+aGVpZ2h0KCksICFtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVz
KCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CisgICAgUGxhdGZvcm0zRE9iamVj
dCBmcmFtZWJ1ZmZlcklkOworICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIGdldERyYXdpbmdQ
YXJhbWV0ZXJzKGRyYXdpbmdCdWZmZXIsIG1faW1wbC5nZXQoKSwgJmZyYW1lYnVmZmVySWQsICZ3
aWR0aCwgJmhlaWdodCk7CisgICAgcGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1lYnVmZmVy
SWQsIHdpZHRoLCBoZWlnaHQsICFtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVs
dGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCkKIHsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAg
aWYgKHBsYXRmb3JtTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtTGF5ZXIoKS0+cGFp
bnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyhjb250ZXh0LT5jYW52YXMoKS0+YnVmZmVyKCkpOwot
I2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgp
CitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQog
ewogICAgIGlmIChtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFs
cGhhKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFn
ZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKG1faW1wbC0+d2lkdGgoKSwgbV9pbXBs
LT5oZWlnaHQoKSkpOworCisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOworICAg
IGludCB3aWR0aCwgaGVpZ2h0OworICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZm
ZXIsIG1faW1wbC5nZXQoKSwgJmZyYW1lYnVmZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7CisKKyAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXpl
KHdpZHRoLCBoZWlnaHQpKTsKICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEt
PmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogbV9p
bXBsLT53aWR0aCgpICogbV9pbXBsLT5oZWlnaHQoKTsKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9
IDQgKiB3aWR0aCAqIGhlaWdodDsKIAotICAgIG1faW1wbC0+cmVhZEJhY2tGcmFtZWJ1ZmZlcihw
aXhlbHMsIGJ1ZmZlclNpemUsIDAsIG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSk7
CisgICAgbV9pbXBsLT5yZWFkQmFja0ZyYW1lYnVmZmVyKHBpeGVscywgYnVmZmVyU2l6ZSwgZnJh
bWVidWZmZXJJZCwgd2lkdGgsIGhlaWdodCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJ1ZmZlclNpemU7IGkgKz0gNCkKICAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxz
W2kgKyAyXSk7CkBAIC0xMDEyLDkgKzEwMTgsNiBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhp
Y3NDb250ZXh0M0QoR3JhCiAKIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0Qo
KQogewotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogY2FudmFzTGF5ZXIgPSBtX3ByaXZhdGUtPnBs
YXRmb3JtTGF5ZXIoKTsKLSAgICBpZiAoY2FudmFzTGF5ZXIpCi0gICAgICAgIGNhbnZhc0xheWVy
LT5zZXRDb250ZXh0KDApOwogICAgIG1fcHJpdmF0ZS0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhu
dWxscHRyKTsKICAgICBtX3ByaXZhdGUtPnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NI
Uk9NSVVNKG51bGxwdHIpOwogfQpAQCAtMTA1OSw5ICsxMDYyLDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6aXNSZXNvdXJjZVNhZmUoKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29u
c3QKIHsKLSAgICBXZWJHTExheWVyQ2hyb21pdW0qIGNhbnZhc0xheWVyID0gbV9wcml2YXRlLT5w
bGF0Zm9ybUxheWVyKCk7Ci0gICAgY2FudmFzTGF5ZXItPnNldENvbnRleHQodGhpcyk7Ci0gICAg
cmV0dXJuIGNhbnZhc0xheWVyOworICAgIHJldHVybiAwOwogfQogI2VuZGlmCiAKQEAgLTEyMTcs
OCArMTIxOCwxNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoCiAg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+bGF5ZXJDb21wb3NpdGVkKCk7CiB9CiAKLURFTEVHQVRFX1RP
X0lOVEVSTkFMXzEocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMsIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfUihwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YSwgUGFzc1JlZlB0cjxJbWFnZURhdGE+KQordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhjb250ZXh0LCBkcmF3aW5nQnVm
ZmVyKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVy
KQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhKGRyYXdpbmdCdWZmZXIpOworfQorCiBERUxFR0FURV9UT19JTlRFUk5BTF8xUihwYWludENv
bXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqLCBib29sKQog
CiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5oCShyZXZpc2lvbiA5OTg1NykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niwx
MCArNDYsOCBAQCBjbGFzcyBXZWJWaWV3SW1wbDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgRXh0ZW5zaW9uczNEQ2hyb21pdW07Ci0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotY2xhc3MgV2ViR0xMYXllckNocm9taXVtOwotI2Vu
ZGlmCiBjbGFzcyBHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyOwogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyOwogCkBAIC05
NSwxNyArOTMsMTQgQEAgcHVibGljOgogICAgIGJvb2wgbGF5ZXJDb21wb3NpdGVkKCkgY29uc3Q7
CiAgICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAKLSAgICB2b2lkIHBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKKyAgICB2b2lkIHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqLCBEcmF3
aW5nQnVmZmVyKik7CiAgICAgdm9pZCBwYWludEZyYW1lYnVmZmVyVG9DYW52YXMoaW50IGZyYW1l
YnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgSW1h
Z2VCdWZmZXIqKTsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoKTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciopOwogICAgIGJvb2wgcGFpbnRzSW50
b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogICAgIGJvb2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1Rv
Q2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKIAogICAgIHZvaWQgcHJlcGFyZVRleHR1
cmUoKTsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBXZWJHTExheWVy
Q2hyb21pdW0qIHBsYXRmb3JtTGF5ZXIoKTsKLSNlbmRpZgogICAgIGJvb2wgaXNHTEVTMkNvbXBs
aWFudCgpIGNvbnN0OwogCiAgICAgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKQEAgLTMz
MCw5ICszMjUsNiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgUmVzb3VyY2VTYWZldHkgbV9yZXNv
dXJjZVNhZmV0eTsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBSZWZQ
dHI8V2ViR0xMYXllckNocm9taXVtPiBtX2NvbXBvc2l0aW5nTGF5ZXI7Ci0jZW5kaWYKICNpZiBV
U0UoU0tJQSkKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgQ2FudmFzJ3Mg
YmFja2luZyBzdG9yZSBkb24ndAogICAgIC8vIG1hdGNoIHRob3NlIHRoYXQgd2Ugd2VyZSBnaXZl
biBpbiB0aGUgbW9zdCByZWNlbnQgY2FsbCB0bwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>