<?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>202798</bug_id>
          
          <creation_ts>2019-10-10 07:19:52 -0700</creation_ts>
          <short_desc>Implement asynchronous OffscreenCanvas placeholder updates for TextureMapperGL-based compositor</short_desc>
          <delta_ts>2020-10-21 03:30:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>202797</dependson>
    
    <dependson>216205</dependson>
    
    <dependson>217986</dependson>
          <blocked>183720</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Lord">clord</reporter>
          <assigned_to name="Chris Lord">clord</assigned_to>
          <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kbr</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1578634</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-10-10 07:19:52 -0700</bug_when>
    <thetext>This bug tracks implementing the &apos;short-circuit&apos; path for OffscreenCanvas rendering, as mentioned in the spec: https://html.spec.whatwg.org/multipage/canvas.html#offscreencontext2d-commit on platforms that use the GL texture-mapper backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578666</commentid>
    <comment_count>1</comment_count>
      <attachid>380646</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-10-10 08:37:15 -0700</bug_when>
    <thetext>Created attachment 380646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679721</commentid>
    <comment_count>2</comment_count>
      <attachid>406454</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-08-12 03:49:31 -0700</bug_when>
    <thetext>Created attachment 406454
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679819</commentid>
    <comment_count>3</comment_count>
      <attachid>406454</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-12 14:17:34 -0700</bug_when>
    <thetext>Comment on attachment 406454
Patch

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

The reason I haven’t reviewed this myself yet is that I want a reviewer who is confident about the threading aspects of this: Which objects have and need thread-safe reference counts, how we move things between threads, etc.

&gt; Source/WebCore/html/OffscreenCanvas.cpp:50
&gt; +#endif // USE(TEXTURE_MAPPER_GL)

Seems short enough that we don’t need the #endif comment.

&gt; Source/WebCore/html/OffscreenCanvas.cpp:112
&gt; +#if USE(TEXTURE_MAPPER_GL)
&gt; +#if USE(NICOSIA)

See comment below about nested if statements.

&gt; Source/WebCore/html/OffscreenCanvas.cpp:115
&gt; +    , m_platformLayerProxy(adoptRef(new TextureMapperPlatformLayerProxy()))

I suggest a * before the &quot;new&quot;.

&gt; Source/WebCore/html/OffscreenCanvas.cpp:539
&gt; +    return m_platformLayerProxy.copyRef();

I suggest writing .ptr() instead of .copyRef() here. We are going to get rid of copyRef.

&gt; Source/WebCore/html/OffscreenCanvas.h:190
&gt; +#if USE(TEXTURE_MAPPER_GL)
&gt; +    void pushPendingCommitDataToCompositor() const;
&gt; +    void swapBuffersIfNeeded() override;
&gt; +#if !USE(NICOSIA)
&gt; +    RefPtr&lt;TextureMapperPlatformLayerProxy&gt; proxy() const override;
&gt; +#endif
&gt; +#endif

Since #if doesn’t nest all that well, I’ve been pushing people towards boolean expressions and separate paragraphs.

#If USE(TEXTURE_MAPPER_GL)
...
#endif

#If USE(TEXTURE_MAPPER_GL) &amp;&amp; !USE(NICOSIA)
...
#endif

Why does the proxy function return a RefPtr? Can it return null?

&gt; Source/WebCore/html/OffscreenCanvas.h:210
&gt; +#if USE(TEXTURE_MAPPER_GL)
&gt; +#if USE(NICOSIA)
&gt; +    Ref&lt;Nicosia::ContentLayer&gt; m_nicosiaLayer;
&gt; +#else
&gt; +    RefPtr&lt;TextureMapperPlatformLayerProxy&gt; m_platformLayerProxy;
&gt; +#endif
&gt; +#endif

#If USE(TEXTURE_MAPPER_GL) &amp;&amp; USE(NICOSIA)
...
#endif

#If USE(TEXTURE_MAPPER_GL) &amp;&amp; !USE(NICOSIA)
...
#endif

Seems that m_platformLayerProxy should be Ref, not RefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680744</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-08-17 01:36:31 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Comment on attachment 406454 [details]
&gt; Patch
&gt; 
&gt; &gt; Source/WebCore/html/OffscreenCanvas.cpp:115
&gt; &gt; +    , m_platformLayerProxy(adoptRef(new TextureMapperPlatformLayerProxy()))
&gt; 
&gt; I suggest a * before the &quot;new&quot;.
&gt; 
&gt; &gt; Source/WebCore/html/OffscreenCanvas.cpp:539
&gt; &gt; +    return m_platformLayerProxy.copyRef();
&gt; 
&gt; I suggest writing .ptr() instead of .copyRef() here. We are going to get rid
&gt; of copyRef.

I&apos;m loathe to change this as every other user of this in this way has this exact pattern (see platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp, platform/graphics/holepunch/MediaPlayerPrivateHolePunch.cpp and platform/graphics/texmap/TextureMapperGCGLPlatformLayer.cpp). I assume eventually the non-nicosia path will disappear anyway?

&gt; Why does the proxy function return a RefPtr? Can it return null?
&gt; 
&gt; &gt; Source/WebCore/html/OffscreenCanvas.h:210
&gt; &gt; +#if USE(TEXTURE_MAPPER_GL)
&gt; &gt; +#if USE(NICOSIA)
&gt; &gt; +    Ref&lt;Nicosia::ContentLayer&gt; m_nicosiaLayer;
&gt; &gt; +#else
&gt; &gt; +    RefPtr&lt;TextureMapperPlatformLayerProxy&gt; m_platformLayerProxy;
&gt; &gt; +#endif
&gt; &gt; +#endif
&gt; 
&gt; #If USE(TEXTURE_MAPPER_GL) &amp;&amp; USE(NICOSIA)
&gt; ...
&gt; #endif
&gt; 
&gt; #If USE(TEXTURE_MAPPER_GL) &amp;&amp; !USE(NICOSIA)
&gt; ...
&gt; #endif
&gt; 
&gt; Seems that m_platformLayerProxy should be Ref, not RefPtr.

Same comment for this, with the same example. I&apos;d rather not change it unless someone with better knowledge of why it is how it is in these other files can confirm that&apos;s an ok change to make.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680747</commentid>
    <comment_count>5</comment_count>
      <attachid>406704</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-08-17 02:08:28 -0700</bug_when>
    <thetext>Created attachment 406704
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681200</commentid>
    <comment_count>6</comment_count>
      <attachid>406704</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-08-18 14:48:01 -0700</bug_when>
    <thetext>Comment on attachment 406704
Patch

Have you found any other domain experts to review this? If not, I can try to. A quick scan looks okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681300</commentid>
    <comment_count>7</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-08-18 22:46:07 -0700</bug_when>
    <thetext>I have to say I wish this use of #ifdefs was done differently, like with something like abstract functions in TextureMapperPlatformLayer. The situation where the different implementations details of TextureMapper are scattered along common WebCore files is not ideal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681304</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-08-19 01:25:48 -0700</bug_when>
    <thetext>(In reply to Kenneth Russell from comment #6)
&gt; Comment on attachment 406704 [details]
&gt; Patch
&gt; 
&gt; Have you found any other domain experts to review this? If not, I can try
&gt; to. A quick scan looks okay.

I haven&apos;t, a review would be much appreciated!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681305</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-08-19 01:26:33 -0700</bug_when>
    <thetext>(In reply to Noam Rosenthal from comment #7)
&gt; I have to say I wish this use of #ifdefs was done differently, like with
&gt; something like abstract functions in TextureMapperPlatformLayer. The
&gt; situation where the different implementations details of TextureMapper are
&gt; scattered along common WebCore files is not ideal.

I&apos;m also not a fan... I guess the non-nicosia path will eventually be deprecated(?), but I don&apos;t know what the plans are.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681306</commentid>
    <comment_count>10</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-08-19 01:45:55 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #9)
&gt; (In reply to Noam Rosenthal from comment #7)
&gt; &gt; I have to say I wish this use of #ifdefs was done differently, like with
&gt; &gt; something like abstract functions in TextureMapperPlatformLayer. The
&gt; &gt; situation where the different implementations details of TextureMapper are
&gt; &gt; scattered along common WebCore files is not ideal.
&gt; 
&gt; I&apos;m also not a fan... I guess the non-nicosia path will eventually be
&gt; deprecated(?), but I don&apos;t know what the plans are.

Isn’t Igalia currently maintaining TextureMapper? 
As the original contributor I would be happy to help review/rethink the design and code structure, trying to encapsulate better.

but I feel that until then the details of this patch should be reviewed  by current TextureMapper maintainers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683316</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-08-27 02:04:53 -0700</bug_when>
    <thetext>(In reply to Noam Rosenthal from comment #10)
&gt; (In reply to Chris Lord from comment #9)
&gt; &gt; (In reply to Noam Rosenthal from comment #7)
&gt; &gt; &gt; I have to say I wish this use of #ifdefs was done differently, like with
&gt; &gt; &gt; something like abstract functions in TextureMapperPlatformLayer. The
&gt; &gt; &gt; situation where the different implementations details of TextureMapper are
&gt; &gt; &gt; scattered along common WebCore files is not ideal.
&gt; &gt; 
&gt; &gt; I&apos;m also not a fan... I guess the non-nicosia path will eventually be
&gt; &gt; deprecated(?), but I don&apos;t know what the plans are.
&gt; 
&gt; Isn’t Igalia currently maintaining TextureMapper? 
&gt; As the original contributor I would be happy to help review/rethink the
&gt; design and code structure, trying to encapsulate better.
&gt; 
&gt; but I feel that until then the details of this patch should be reviewed  by
&gt; current TextureMapper maintainers.

I spoke with Zan and his feedback was that this platform-specific behaviour needs to be abstracted in a separate class.

My current thoughts are that there would be an OffscreenCanvasBase, which would be instantiable and provide the behaviour that we currently have, and that there would be an OffscreenCanvasTextureMapperGL.

I would still appreciate any comment (either on the current patch, or on this plan), just to make sure we&apos;re all on the same page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683327</commentid>
    <comment_count>12</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-08-27 03:16:45 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #11)
&gt; (In reply to Noam Rosenthal from comment #10)
&gt; &gt; (In reply to Chris Lord from comment #9)
&gt; &gt; &gt; (In reply to Noam Rosenthal from comment #7)
&gt; &gt; &gt; &gt; I have to say I wish this use of #ifdefs was done differently, like with
&gt; &gt; &gt; &gt; something like abstract functions in TextureMapperPlatformLayer. The
&gt; &gt; &gt; &gt; situation where the different implementations details of TextureMapper are
&gt; &gt; &gt; &gt; scattered along common WebCore files is not ideal.
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m also not a fan... I guess the non-nicosia path will eventually be
&gt; &gt; &gt; deprecated(?), but I don&apos;t know what the plans are.
&gt; &gt; 
&gt; &gt; Isn’t Igalia currently maintaining TextureMapper? 
&gt; &gt; As the original contributor I would be happy to help review/rethink the
&gt; &gt; design and code structure, trying to encapsulate better.
&gt; &gt; 
&gt; &gt; but I feel that until then the details of this patch should be reviewed  by
&gt; &gt; current TextureMapper maintainers.
&gt; 
&gt; I spoke with Zan and his feedback was that this platform-specific behaviour
&gt; needs to be abstracted in a separate class.
&gt; 
&gt; My current thoughts are that there would be an OffscreenCanvasBase, which
&gt; would be instantiable and provide the behaviour that we currently have, and
&gt; that there would be an OffscreenCanvasTextureMapperGL.
I wouldn&apos;t abstract OffscreenCanvas. I would suggest to add more abstract stuff to TextureMapperPlatformLayer which is already abstract, and implement things differently for nicosia/non-nicosia. Once that&apos;s done, it would be easier to read what the patch actually does in terms of canvas rather than in terms of texmap internals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683329</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-08-27 03:21:06 -0700</bug_when>
    <thetext>(In reply to Noam Rosenthal from comment #12)
&gt; (In reply to Chris Lord from comment #11)
&gt; &gt; (In reply to Noam Rosenthal from comment #10)
&gt; &gt; &gt; (In reply to Chris Lord from comment #9)
&gt; &gt; &gt; &gt; (In reply to Noam Rosenthal from comment #7)
&gt; &gt; &gt; &gt; &gt; I have to say I wish this use of #ifdefs was done differently, like with
&gt; &gt; &gt; &gt; &gt; something like abstract functions in TextureMapperPlatformLayer. The
&gt; &gt; &gt; &gt; &gt; situation where the different implementations details of TextureMapper are
&gt; &gt; &gt; &gt; &gt; scattered along common WebCore files is not ideal.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I&apos;m also not a fan... I guess the non-nicosia path will eventually be
&gt; &gt; &gt; &gt; deprecated(?), but I don&apos;t know what the plans are.
&gt; &gt; &gt; 
&gt; &gt; &gt; Isn’t Igalia currently maintaining TextureMapper? 
&gt; &gt; &gt; As the original contributor I would be happy to help review/rethink the
&gt; &gt; &gt; design and code structure, trying to encapsulate better.
&gt; &gt; &gt; 
&gt; &gt; &gt; but I feel that until then the details of this patch should be reviewed  by
&gt; &gt; &gt; current TextureMapper maintainers.
&gt; &gt; 
&gt; &gt; I spoke with Zan and his feedback was that this platform-specific behaviour
&gt; &gt; needs to be abstracted in a separate class.
&gt; &gt; 
&gt; &gt; My current thoughts are that there would be an OffscreenCanvasBase, which
&gt; &gt; would be instantiable and provide the behaviour that we currently have, and
&gt; &gt; that there would be an OffscreenCanvasTextureMapperGL.
&gt; I wouldn&apos;t abstract OffscreenCanvas. I would suggest to add more abstract
&gt; stuff to TextureMapperPlatformLayer which is already abstract, and implement
&gt; things differently for nicosia/non-nicosia. Once that&apos;s done, it would be
&gt; easier to read what the patch actually does in terms of canvas rather than
&gt; in terms of texmap internals.

So I was actually just going to remove the non-Nicosia path, I do believe it&apos;ll eventually be deprecated anyway. What further abstraction do you imagine being on TextureMapperPlatformLayer beyond what&apos;s already there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683331</commentid>
    <comment_count>14</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-08-27 03:25:16 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #13)
&gt; (In reply to Noam Rosenthal from comment #12)
&gt; &gt; (In reply to Chris Lord from comment #11)
&gt; &gt; &gt; (In reply to Noam Rosenthal from comment #10)
&gt; &gt; &gt; &gt; (In reply to Chris Lord from comment #9)
&gt; &gt; &gt; &gt; &gt; (In reply to Noam Rosenthal from comment #7)
&gt; &gt; &gt; &gt; &gt; &gt; I have to say I wish this use of #ifdefs was done differently, like with
&gt; &gt; &gt; &gt; &gt; &gt; something like abstract functions in TextureMapperPlatformLayer. The
&gt; &gt; &gt; &gt; &gt; &gt; situation where the different implementations details of TextureMapper are
&gt; &gt; &gt; &gt; &gt; &gt; scattered along common WebCore files is not ideal.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; I&apos;m also not a fan... I guess the non-nicosia path will eventually be
&gt; &gt; &gt; &gt; &gt; deprecated(?), but I don&apos;t know what the plans are.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Isn’t Igalia currently maintaining TextureMapper? 
&gt; &gt; &gt; &gt; As the original contributor I would be happy to help review/rethink the
&gt; &gt; &gt; &gt; design and code structure, trying to encapsulate better.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; but I feel that until then the details of this patch should be reviewed  by
&gt; &gt; &gt; &gt; current TextureMapper maintainers.
&gt; &gt; &gt; 
&gt; &gt; &gt; I spoke with Zan and his feedback was that this platform-specific behaviour
&gt; &gt; &gt; needs to be abstracted in a separate class.
&gt; &gt; &gt; 
&gt; &gt; &gt; My current thoughts are that there would be an OffscreenCanvasBase, which
&gt; &gt; &gt; would be instantiable and provide the behaviour that we currently have, and
&gt; &gt; &gt; that there would be an OffscreenCanvasTextureMapperGL.
&gt; &gt; I wouldn&apos;t abstract OffscreenCanvas. I would suggest to add more abstract
&gt; &gt; stuff to TextureMapperPlatformLayer which is already abstract, and implement
&gt; &gt; things differently for nicosia/non-nicosia. Once that&apos;s done, it would be
&gt; &gt; easier to read what the patch actually does in terms of canvas rather than
&gt; &gt; in terms of texmap internals.
&gt; 
&gt; So I was actually just going to remove the non-Nicosia path, I do believe
&gt; it&apos;ll eventually be deprecated anyway. What further abstraction do you
&gt; imagine being on TextureMapperPlatformLayer beyond what&apos;s already there?

I think that once that&apos;s gone I&apos;d be able to help figure that out... right now the #ifdef inflation is making it hard to read</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683334</commentid>
    <comment_count>15</comment_count>
      <attachid>406704</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-08-27 03:41:47 -0700</bug_when>
    <thetext>Comment on attachment 406704
Patch

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

&gt; Source/WebCore/html/OffscreenCanvas.cpp:115
&gt; +#if USE(TEXTURE_MAPPER_GL) &amp;&amp; USE(NICOSIA)
&gt; +    , m_nicosiaLayer(Nicosia::ContentLayer::create(Nicosia::ContentLayerTextureMapperImpl::createFactory(*this)))
&gt; +#elif USE(TEXTURE_MAPPER_GL)
&gt; +    , m_platformLayerProxy(adoptRef(new TextureMapperPlatformLayerProxy()))
&gt; +#endif

I think the issue starts here. If you had one m_textureMapperPlatformLayer that abstracted away nicosia/non-nicosia it would be much more readable.

&gt; Source/WebCore/html/OffscreenCanvas.cpp:389
&gt; +void OffscreenCanvas::pushPendingCommitDataToCompositor() const

I think most of this belongs in platform/*** code

&gt; Source/WebCore/html/canvas/PlaceholderRenderingContext.cpp:65
&gt; +                canvasRenderer.contentChanged(CanvasChanged);

This doesn&apos;t seem right as a platform specific thing... How is this done in OSX/IOS?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683340</commentid>
    <comment_count>16</comment_count>
      <attachid>407389</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-08-27 04:06:33 -0700</bug_when>
    <thetext>Created attachment 407389
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683341</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-08-27 04:17:11 -0700</bug_when>
    <thetext>I&apos;ve just updated the patch and it ought to be more readable at least.

(In reply to Noam Rosenthal from comment #15)
&gt; Comment on attachment 406704 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=406704&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/OffscreenCanvas.cpp:115
&gt; &gt; +#if USE(TEXTURE_MAPPER_GL) &amp;&amp; USE(NICOSIA)
&gt; &gt; +    , m_nicosiaLayer(Nicosia::ContentLayer::create(Nicosia::ContentLayerTextureMapperImpl::createFactory(*this)))
&gt; &gt; +#elif USE(TEXTURE_MAPPER_GL)
&gt; &gt; +    , m_platformLayerProxy(adoptRef(new TextureMapperPlatformLayerProxy()))
&gt; &gt; +#endif
&gt; 
&gt; I think the issue starts here. If you had one m_textureMapperPlatformLayer
&gt; that abstracted away nicosia/non-nicosia it would be much more readable.

I&apos;ve removed the non-nicosia path so there&apos;s just one set of #ifdefs now.

&gt; &gt; Source/WebCore/html/OffscreenCanvas.cpp:389
&gt; &gt; +void OffscreenCanvas::pushPendingCommitDataToCompositor() const
&gt; 
&gt; I think most of this belongs in platform/*** code

Sounds reasonable to me, how do you envisage this working in that case? I suppose TextureMapperPlatformLayer should have some utility functions to push a bitmap like this? Note that this patch doesn&apos;t implement a possible fast-path of just pushing a texture handle, I wonder how that would work too?

&gt; &gt; Source/WebCore/html/canvas/PlaceholderRenderingContext.cpp:65
&gt; &gt; +                canvasRenderer.contentChanged(CanvasChanged);
&gt; 
&gt; This doesn&apos;t seem right as a platform specific thing... How is this done in
&gt; OSX/IOS?

This part isn&apos;t platform specific, but I don&apos;t know if it&apos;s the correct way to go about it or not. The platform layer is the OffscreenCanvas, which is created asynchronously to the Placeholder context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683346</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-08-27 05:39:34 -0700</bug_when>
    <thetext>Noam and I have discussed this, and I&apos;m going to take some time to more fully understand layer composition here. There&apos;s a possibility that a faster, simpler path exists, rather than creating a new platform layer and copying the data like this patch does (certainly a faster path exists, but I expected it to involve more work, rather than less, thus this initial patch).

An initial aim is that the context will own the platform layer (WebGL and accelerated 2d canvases already have a platform layer) and we can use that as the platform layer rather than the OffscreenCanvas sub-classing the nicosia layer.

Once I have a better picture of how it could/will work, I&apos;ll update this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684444</commentid>
    <comment_count>19</comment_count>
      <attachid>407389</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-09-01 06:12:41 -0700</bug_when>
    <thetext>Comment on attachment 407389
Patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +

Is it really covered by existing tests? If it is, I would expect this patch to unskip them for WPE/GTK platforms.

&gt; Source/WebCore/html/OffscreenCanvas.cpp:374
&gt; +                m_placeholderCanvas-&gt;setImageBufferAndMarkDirty(WTFMove(buffer));

Doesn&apos;t this become a redundant operation when you have a platform layer?
Seems like in this case you would be copying this data twice

&gt; Source/WebCore/html/OffscreenCanvas.cpp:385
&gt; +void OffscreenCanvas::pushPendingCommitDataToCompositor() const

Isn&apos;t this actually the proxy implementation of pushBufferToPlaceholder()? Seems like all of this stuff should be in there instead of this new function

&gt; Source/WebCore/html/OffscreenCanvas.cpp:387
&gt; +    auto proxyOperation =

You have a proxyOperation inside a proxyOperation here. Is this how it&apos;s supposed to work? Seems complex

&gt; Source/WebCore/html/canvas/PlaceholderRenderingContext.cpp:57
&gt; +void PlaceholderRenderingContext::setPlatformLayer(PlatformLayer* platformLayer)
&gt; +{
&gt; +    if (m_platformLayer == platformLayer)
&gt; +        return;
&gt; +

Since this is only called twice (once with a platform layer, one with null), I would do it differently:

- PlaceholderRenderingContext::attachOffscreenPlatformLayer(PlatformLayer*) with proper asserts that it happens once
- PlaceholderRenderingContext::releaseOffscreenPlatformLayer()

&gt; Source/WebCore/html/canvas/PlaceholderRenderingContext.cpp:65
&gt; +                canvasRenderer.contentChanged(CanvasChanged);

Something about this doesn&apos;t seem correct... I would expect the compositor to understand this using something like setPlatformLayerNeedsDisplay,
 RenderHTMLCanvas shouldn&apos;t play a part in this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684445</commentid>
    <comment_count>20</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-09-01 06:16:38 -0700</bug_when>
    <thetext>(In reply to Noam Rosenthal from comment #19)
&gt; Comment on attachment 407389 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407389&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:13
&gt; &gt; +
&gt; 
&gt; Is it really covered by existing tests? If it is, I would expect this patch
&gt; to unskip them for WPE/GTK platforms.

Oops, I&apos;ve already posted this comment before :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684454</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-01 06:58:26 -0700</bug_when>
    <thetext>(In reply to Noam Rosenthal from comment #19)
&gt; Comment on attachment 407389 [details]
&gt; &gt; Source/WebCore/html/OffscreenCanvas.cpp:374
&gt; &gt; +                m_placeholderCanvas-&gt;setImageBufferAndMarkDirty(WTFMove(buffer));
&gt; 
&gt; Doesn&apos;t this become a redundant operation when you have a platform layer?
&gt; Seems like in this case you would be copying this data twice
&gt; 
&gt; &gt; Source/WebCore/html/OffscreenCanvas.cpp:385
&gt; &gt; +void OffscreenCanvas::pushPendingCommitDataToCompositor() const
&gt; 
&gt; Isn&apos;t this actually the proxy implementation of pushBufferToPlaceholder()?
&gt; Seems like all of this stuff should be in there instead of this new function
&gt; 
&gt; &gt; Source/WebCore/html/OffscreenCanvas.cpp:387
&gt; &gt; +    auto proxyOperation =
&gt; 
&gt; You have a proxyOperation inside a proxyOperation here. Is this how it&apos;s
&gt; supposed to work? Seems complex

Yes, I think there&apos;s redundancy here and I don&apos;t think this needs to be a separate function - quite possibly this is a hangover from an earlier iteration of the patch...

&gt; &gt; Source/WebCore/html/canvas/PlaceholderRenderingContext.cpp:57
&gt; &gt; +void PlaceholderRenderingContext::setPlatformLayer(PlatformLayer* platformLayer)
&gt; &gt; +{
&gt; &gt; +    if (m_platformLayer == platformLayer)
&gt; &gt; +        return;
&gt; &gt; +
&gt; 
&gt; Since this is only called twice (once with a platform layer, one with null),
&gt; I would do it differently:
&gt; 
&gt; - PlaceholderRenderingContext::attachOffscreenPlatformLayer(PlatformLayer*)
&gt; with proper asserts that it happens once
&gt; - PlaceholderRenderingContext::releaseOffscreenPlatformLayer()

I like this suggestion, especially with the asserts - really, attach should happen on context creation, not on OffscreenCanvas transfer. If it happened then, these asserts would never be hit (I still think they should be there to reinforce that, of course).

&gt; &gt; Source/WebCore/html/canvas/PlaceholderRenderingContext.cpp:65
&gt; &gt; +                canvasRenderer.contentChanged(CanvasChanged);
&gt; 
&gt; Something about this doesn&apos;t seem correct... I would expect the compositor
&gt; to understand this using something like setPlatformLayerNeedsDisplay,
&gt;  RenderHTMLCanvas shouldn&apos;t play a part in this.

I think this is ok, at least there&apos;s a similar pattern in HTMLCanvasElement::reset, for similar reasons (and the offscreen-controlled path is in HTMLCanvasElement::setImageBufferAndMarkDirty) - I expect this could be relocated to HTMLCanvasElement without much effort, but this seems a reasonable place to have it to me(?)


Zan has suggested an abstraction where we introduce a new interface, ImageBufferPipeline. It would have methods to retrieve a PlatformLayer and to create a &apos;Source&apos; object (as well as a method to determine if it&apos;s supported). A PlaceholderRenderingContext would own one of these and the OffscreenCanvas, instead of setting the platform layer would ask it to create a source and adopt the reference. The source would include the method to take an ImageBuffer and do the necessary copying that this patch is currently doing in OffscreenCanvas.

It&apos;s a nice abstraction that simplifies some of the ownership issues this patch and also moves platform-specific code out of OffscreenCanvas (and into a platform-specific implementation of ImageBufferPipeline).

What this doesn&apos;t tackle, however, is the accelerated canvas/WebGL case, where we already have a platform layer that we could use. In this situation, the previous solution of attach/detach platformLayer makes more sense (and when there is a platform layer like that, we don&apos;t need to involve the copying code at all). I&apos;m trying to reconcile these two approaches, the simplest is to do as Zan has sketched out, but also add an alternate path in PlaceholderRenderingContext that allows for bypassing with an existing platform layer... But that feels pretty inelegant.

An alternative is to still introduce this class, but not have it be created by the placeholder context, and have it used as a fallback when there&apos;s no platform layer on the rendering context. This would place its ownership in OffscreenCanvas, but allow us not to complicate PlaceholderRenderingContext and have a single creation/destruction path, which I like the idea of. I think this is the route I&apos;m going to pursue, but if that sounds wrong, please do say!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684753</commentid>
    <comment_count>22</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-09-02 02:08:36 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #21)
&gt; An alternative is to still introduce this class, but not have it be created
&gt; by the placeholder context, and have it used as a fallback when there&apos;s no
&gt; platform layer on the rendering context. This would place its ownership in
&gt; OffscreenCanvas, but allow us not to complicate PlaceholderRenderingContext
&gt; and have a single creation/destruction path, which I like the idea of. I
&gt; think this is the route I&apos;m going to pursue, but if that sounds wrong,
&gt; please do say!

PlaceholderRenderingContext was used for that because it enables the simplest possible way of feeding the platform layer object into the RenderLayerBacking for the purposes of including that platform layer in the GraphicsLayer tree. 

The platform abstraction I provided works best in the case of a self-contained ImageBuffer object, i.e. a non-accelerated ImageBuffer whose contents can be plastered into the texture and composited. Bypass itself would work ideally in that case.

Accelerated ImageBuffer (at least in the case of Cairo-based implementation) and WebGL content handling is more complicated here because in both cases the existing implementation is tied to the (very main-thread-bound) layer flush process calling their `swapBuffersIfNeeded()` implementations to actually flush the rendered content into a GL texture that&apos;s then rendered. In both cases a thread-local GL context is required for that (and for other usual operations) -- WebGL uses its own context, but ImageBuffer uses the global sharing context.

Tangential to all this, Cairo-based accelerated ImageBuffer implementation (i.e. ENABLE(ACCELERATED_2D_CANVAS)-guarded code, mostly) is probably ripe for nixing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684779</commentid>
    <comment_count>23</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-02 06:28:28 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #22)
&gt; (In reply to Chris Lord from comment #21)
&gt; &gt; An alternative is to still introduce this class, but not have it be created
&gt; &gt; by the placeholder context, and have it used as a fallback when there&apos;s no
&gt; &gt; platform layer on the rendering context. This would place its ownership in
&gt; &gt; OffscreenCanvas, but allow us not to complicate PlaceholderRenderingContext
&gt; &gt; and have a single creation/destruction path, which I like the idea of. I
&gt; &gt; think this is the route I&apos;m going to pursue, but if that sounds wrong,
&gt; &gt; please do say!
&gt; 
&gt; PlaceholderRenderingContext was used for that because it enables the
&gt; simplest possible way of feeding the platform layer object into the
&gt; RenderLayerBacking for the purposes of including that platform layer in the
&gt; GraphicsLayer tree. 
&gt; 
&gt; The platform abstraction I provided works best in the case of a
&gt; self-contained ImageBuffer object, i.e. a non-accelerated ImageBuffer whose
&gt; contents can be plastered into the texture and composited. Bypass itself
&gt; would work ideally in that case.
&gt; 
&gt; Accelerated ImageBuffer (at least in the case of Cairo-based implementation)
&gt; and WebGL content handling is more complicated here because in both cases
&gt; the existing implementation is tied to the (very main-thread-bound) layer
&gt; flush process calling their `swapBuffersIfNeeded()` implementations to
&gt; actually flush the rendered content into a GL texture that&apos;s then rendered.
&gt; In both cases a thread-local GL context is required for that (and for other
&gt; usual operations) -- WebGL uses its own context, but ImageBuffer uses the
&gt; global sharing context.

I&apos;m trying to understand this and have been reading through the code, but I&apos;m still slightly confused here... Every PlatformLayer is different, and there are no particular restrictions that they&apos;re expected to abide by it seems, so using one directly is out of the question I suppose?

In this case, the solution you offer is really the only thing we can do - and we would have to either implement again for each type of platform layer we would want to provide, or offer an abstraction that makes it easier to adapt it to multiple different types of data?

I&apos;m wondering if there&apos;s the possibility of an abstraction that would work for both WebGL and image buffers, or whether we really just need to handle each case separately - I&apos;d certainly prefer the former...

Perhaps rather than calling it ImageBufferPipeline, we could call it something like ExternalPlatformLayer, and don&apos;t specify the &apos;handle&apos; function, except for in its various sub-classes, where it could have multiple handle functions that marshal different types of data? (so textures, as well as image buffers, for example) Does that sound like something that would work?

&gt; Tangential to all this, Cairo-based accelerated ImageBuffer implementation
&gt; (i.e. ENABLE(ACCELERATED_2D_CANVAS)-guarded code, mostly) is probably ripe
&gt; for nixing.

That&apos;d be great - last time I tried this, it really didn&apos;t seem to work... (but it could well be my expectations were wrong or I&apos;d misconfigured something)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685225</commentid>
    <comment_count>24</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-03 03:30:41 -0700</bug_when>
    <thetext>So I think I misunderstood ImageBuffer previously and didn&apos;t realise it can be hardware-backed - so Zan&apos;s suggested idea and interface makes perfect sense with no modifications. I&apos;m implementing it at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685597</commentid>
    <comment_count>25</comment_count>
      <attachid>407955</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-04 04:01:35 -0700</bug_when>
    <thetext>Created attachment 407955
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685599</commentid>
    <comment_count>26</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-04 04:16:26 -0700</bug_when>
    <thetext>I&apos;ve updated the patch following Zan&apos;s advice and it&apos;s a lot cleaner like this (and I think less error-prone). Areas of possible improvement for this patch:

- There&apos;s still no fast-path for WebGL. This would rely on ImageBuffer::copyToPlatformTexture, I think, which is currently unimplemented.

- There&apos;s more copying than I&apos;d like. Currently, separate copies of the image buffer are sent to the placeholder and the compositor. If we could share this buffer, we could reduce the number of copies by one. After this patch, there&apos;s an extra surface copy in the case of async drawing being supported, and it&apos;d be great to remove that, but lifecycle management in that case isn&apos;t simple/obvious.

Otherwise, I think this is good to go. It removes all platform-specific code, except in platform/graphics/nicosia and at least to my eyes, doesn&apos;t have any particularly questionable changes anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685600</commentid>
    <comment_count>27</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-04 04:23:31 -0700</bug_when>
    <thetext>Looks like I got the XCode project file edits wrong, will fix and re-upload...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685605</commentid>
    <comment_count>28</comment_count>
      <attachid>407960</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-04 04:54:25 -0700</bug_when>
    <thetext>Created attachment 407960
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685625</commentid>
    <comment_count>29</comment_count>
      <attachid>407966</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-04 07:18:37 -0700</bug_when>
    <thetext>Created attachment 407966
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685635</commentid>
    <comment_count>30</comment_count>
      <attachid>407969</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-04 07:49:41 -0700</bug_when>
    <thetext>Created attachment 407969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686327</commentid>
    <comment_count>31</comment_count>
      <attachid>407969</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-09-07 03:02:35 -0700</bug_when>
    <thetext>Comment on attachment 407969
Patch

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

&gt; Source/WebCore/platform/graphics/nicosia/NicosiaImageBufferPipe.h:62
&gt; +class NicosiaImageBufferPipeSource final : public WebCore::ImageBufferPipe::Source, public ContentLayerTextureMapperImpl::Client {
&gt; +public:
&gt; +    NicosiaImageBufferPipeSource();
&gt; +    virtual ~NicosiaImageBufferPipeSource();
&gt; +
&gt; +    void handle(std::unique_ptr&lt;WebCore::ImageBuffer&gt;&amp;&amp;) final;
&gt; +
&gt; +    PlatformLayer* platformLayer() const;
&gt; +
&gt; +private:
&gt; +    void swapBuffersIfNeeded() override;
&gt; +
&gt; +    RefPtr&lt;ContentLayer&gt; m_nicosiaLayer;
&gt; +
&gt; +    mutable Lock m_imageBufferLock;
&gt; +    std::unique_ptr&lt;WebCore::ImageBuffer&gt; m_imageBuffer;
&gt; +};
&gt; +
&gt; +class NicosiaImageBufferPipe final : public WebCore::ImageBufferPipe {
&gt; +public:
&gt; +    NicosiaImageBufferPipe();
&gt; +    virtual ~NicosiaImageBufferPipe() = default;
&gt; +
&gt; +private:
&gt; +    RefPtr&lt;WebCore::ImageBufferPipe::Source&gt; source() const final;
&gt; +    PlatformLayer* platformLayer() const final;
&gt; +
&gt; +    RefPtr&lt;NicosiaImageBufferPipeSource&gt; m_source;
&gt; +};

These could all be local in the implementation file, which would make this header unnecessary.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:-68
&gt; -    LockHolder locker(m_lock);

Why is any of changes in TextureMapperPlatformLayer needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686328</commentid>
    <comment_count>32</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-07 03:08:43 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #31)
&gt; Comment on attachment 407969 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407969&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/nicosia/NicosiaImageBufferPipe.h:62
&gt; &gt; +class NicosiaImageBufferPipeSource final : public WebCore::ImageBufferPipe::Source, public ContentLayerTextureMapperImpl::Client {
&gt; &gt; +public:
&gt; &gt; +    NicosiaImageBufferPipeSource();
&gt; &gt; +    virtual ~NicosiaImageBufferPipeSource();
&gt; &gt; +
&gt; &gt; +    void handle(std::unique_ptr&lt;WebCore::ImageBuffer&gt;&amp;&amp;) final;
&gt; &gt; +
&gt; &gt; +    PlatformLayer* platformLayer() const;
&gt; &gt; +
&gt; &gt; +private:
&gt; &gt; +    void swapBuffersIfNeeded() override;
&gt; &gt; +
&gt; &gt; +    RefPtr&lt;ContentLayer&gt; m_nicosiaLayer;
&gt; &gt; +
&gt; &gt; +    mutable Lock m_imageBufferLock;
&gt; &gt; +    std::unique_ptr&lt;WebCore::ImageBuffer&gt; m_imageBuffer;
&gt; &gt; +};
&gt; &gt; +
&gt; &gt; +class NicosiaImageBufferPipe final : public WebCore::ImageBufferPipe {
&gt; &gt; +public:
&gt; &gt; +    NicosiaImageBufferPipe();
&gt; &gt; +    virtual ~NicosiaImageBufferPipe() = default;
&gt; &gt; +
&gt; &gt; +private:
&gt; &gt; +    RefPtr&lt;WebCore::ImageBufferPipe::Source&gt; source() const final;
&gt; &gt; +    PlatformLayer* platformLayer() const final;
&gt; &gt; +
&gt; &gt; +    RefPtr&lt;NicosiaImageBufferPipeSource&gt; m_source;
&gt; &gt; +};
&gt; 
&gt; These could all be local in the implementation file, which would make this
&gt; header unnecessary.

Sure

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:-68
&gt; &gt; -    LockHolder locker(m_lock);
&gt; 
&gt; Why is any of changes in TextureMapperPlatformLayer needed?

There&apos;s a bug there currently that can cause the first frame not to show, and if drawing isn&apos;t updated past that point, it never shows (an update can be scheduled before activation happens - at least, I was seeing this during testing earlier patches, I presume given the fix is fairly mundane that it&apos;s still a possibility).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689407</commentid>
    <comment_count>33</comment_count>
      <attachid>409017</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-17 03:30:07 -0700</bug_when>
    <thetext>Created attachment 409017
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689413</commentid>
    <comment_count>34</comment_count>
      <attachid>409017</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-09-17 04:07:04 -0700</bug_when>
    <thetext>Comment on attachment 409017
Patch

LGTM.

Additional review from someone more familiar with how CoreGraphics/CoreAnimations stack could be integrated with the proposed structure would be most appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689802</commentid>
    <comment_count>35</comment_count>
      <attachid>409017</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-09-18 08:57:52 -0700</bug_when>
    <thetext>Comment on attachment 409017
Patch

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

&gt; Source/WebCore/platform/graphics/ImageBufferPipe.h:38
&gt; +class ImageBufferPipe : public RefCounted&lt;ImageBufferPipe&gt; {

This needs a comment saying what it does.

&gt; Source/WebCore/platform/graphics/ImageBufferPipe.h:47
&gt; +    static bool isSupported();

What is it that is supported?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689824</commentid>
    <comment_count>36</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-18 09:53:17 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #35)
&gt; Comment on attachment 409017 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=409017&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ImageBufferPipe.h:38
&gt; &gt; +class ImageBufferPipe : public RefCounted&lt;ImageBufferPipe&gt; {
&gt; 
&gt; This needs a comment saying what it does.

Sure (quick summary: An interface for marshalling ImageBuffer data from one thread to another).

&gt; &gt; Source/WebCore/platform/graphics/ImageBufferPipe.h:47
&gt; &gt; +    static bool isSupported();
&gt; 
&gt; What is it that is supported?

The use of ImageBufferPipe - I guess we could just rely on ::create returning nullptr though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692882</commentid>
    <comment_count>37</comment_count>
      <attachid>409984</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-29 04:59:22 -0700</bug_when>
    <thetext>Created attachment 409984
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692916</commentid>
    <comment_count>38</comment_count>
      <attachid>410002</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-29 08:26:11 -0700</bug_when>
    <thetext>Created attachment 410002
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692922</commentid>
    <comment_count>39</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-29 08:53:02 -0700</bug_when>
    <thetext>Committed r267735: &lt;https://trac.webkit.org/changeset/267735&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 410002.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692924</commentid>
    <comment_count>40</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-29 08:54:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/69749155&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380646</attachid>
            <date>2019-10-10 08:37:15 -0700</date>
            <delta_ts>2020-08-12 03:47:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202798-20191010163714.patch</filename>
            <type>text/plain</type>
            <size>12671</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwOTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNh
bnZhcy5jcHAKaW5kZXggNTBiOGViZjJkMGFlZGYyMGM2MjQ1ZDk3ZjQwYWQ2ZWJjNWMwNDE4MS4u
OWI5YmNlODI1Y2FhMmU1OWU4ZDA1MTcyZGEwODlkOWJjMzBhOWUxOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtNDcsNiArNDcsMTIgQEAKICNlbmRpZgogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkKIAorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyNpbmNs
dWRlICJCaXRtYXBUZXh0dXJlR0wuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHku
aCIKKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE9mZnNjcmVlbkNhbnZhcyk7CkBAIC02
Nyw2ICs3MywxMyBAQCBSZWY8T2Zmc2NyZWVuQ2FudmFzPiBPZmZzY3JlZW5DYW52YXM6OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBSZQogT2Zmc2NyZWVuQ2FudmFzOjpP
ZmZzY3JlZW5DYW52YXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQg
d2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKICAgICA6IENhbnZhc0Jhc2UoSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSkKICAgICAsIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKCZjb250ZXh0KQorI2lm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyNpZiBVU0UoTklDT1NJQSkKKyAgICAsIG1fbmljb3Np
YUxheWVyKE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXll
clRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSkpCisjZWxzZQorICAgICwg
bV9wbGF0Zm9ybUxheWVyUHJveHkoYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHkoKSkpCisjZW5kaWYKKyNlbmRpZgogewogfQogCkBAIC03NCw2ICs4NywxMCBAQCBP
ZmZzY3JlZW5DYW52YXM6On5PZmZzY3JlZW5DYW52YXMoKQogewogICAgIG5vdGlmeU9ic2VydmVy
c0NhbnZhc0Rlc3Ryb3llZCgpOwogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBVU0Uo
TklDT1NJQSkKKyAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlm
CisKICAgICBtX2NvbnRleHQgPSBudWxscHRyOwogfQogCkBAIC0zODEsNiArMzk4LDQwIEBAIHZv
aWQgT2Zmc2NyZWVuQ2FudmFzOjpwdXNoQnVmZmVyVG9QbGFjZWhvbGRlcigpCiAgICAgfSk7CiB9
CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCit2b2lkIE9mZnNjcmVlbkNhbnZhczo6cHVz
aFRleHR1cmVUb0NvbXBvc2l0b3IoKSBjb25zdAoreworICAgIGF1dG8gcHJveHlPcGVyYXRpb24g
PQorICAgICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJveHkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7
CisKKyAgICAgICAgICAgIGlmIChwcm94eS5pc0FjdGl2ZSgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2NvbW1pdExvY2spOworICAgICAgICAgICAgICAgIGlm
ICghbV9wZW5kaW5nQ29tbWl0RGF0YSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICAgICAgQVNTRVJUKG1fcGVuZGluZ0NvbW1pdFNpemUuYXJlYSgpLnVuc2FmZUdl
dCgpICogNCA9PSBtX3BlbmRpbmdDb21taXREYXRhLT5sZW5ndGgoKSk7CisKKyAgICAgICAgICAg
ICAgICAvLyBUT0RPOiBVc2UgQml0bWFwVGV4dHVyZVBvb2wKKyAgICAgICAgICAgICAgICBhdXRv
IHRleHR1cmUgPSBCaXRtYXBUZXh0dXJlR0w6OmNyZWF0ZShUZXh0dXJlTWFwcGVyQ29udGV4dEF0
dHJpYnV0ZXM6OmdldCgpKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChtX3BlbmRp
bmdDb21taXRTaXplLCBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhKTsKKyAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cygodm9pZCopbV9wZW5kaW5nQ29tbWl0RGF0YS0+
ZGF0YSgpLCBJbnRSZWN0KEludFBvaW50KCksIG1fcGVuZGluZ0NvbW1pdFNpemUpLCBJbnRQb2lu
dCgpLCBtX3BlbmRpbmdDb21taXRTaXplLndpZHRoKCkgKiA0KTsKKworICAgICAgICAgICAgICAg
IGF1dG8gbGF5ZXJCdWZmZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
QnVmZmVyPihXVEZNb3ZlKHRleHR1cmUpKTsKKyAgICAgICAgICAgICAgICBsYXllckJ1ZmZlci0+
c2V0RXh0cmFGbGFncyhUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kKTsKKyAgICAgICAgICAg
ICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGxheWVyQnVmZmVyKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBwcm94eU9wZXJhdGlv
bihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNv
c2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7CisjZWxzZQorICAgIHByb3h5T3BlcmF0aW9uKCpt
X3BsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKK30KKyNlbmRpZgorCiB2b2lkIE9mZnNjcmVl
bkNhbnZhczo6Y29tbWl0VG9QbGFjZWhvbGRlckNhbnZhcygpCiB7CiAgICAgaWYgKCFidWZmZXIo
KSkKQEAgLTQxMCw2ICs0NjEsMjAgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNvbW1pdFRvUGxh
Y2Vob2xkZXJDYW52YXMoKQogICAgICAgICBtX3BlbmRpbmdDb21taXQgPSB0cnVlOwogICAgICAg
ICBwdXNoQnVmZmVyVG9QbGFjZWhvbGRlcigpOwogICAgIH0KKworI2lmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKKyAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAgW3RoaXNdIChUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkgbXV0YWJsZSB7CisgICAgICAgICAg
ICByZXR1cm4gcHJveHkuc2NoZWR1bGVVcGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQoW3RoaXNdICgp
IG11dGFibGUgeworICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hUZXh0dXJlVG9Db21wb3NpdG9y
KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBw
cm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7CisjZWxzZQorICAgIHByb3h5
T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyNlbmRpZgogfQogCiB2
b2lkIE9mZnNjcmVlbkNhbnZhczo6c2NoZWR1bGVDb21taXRUb1BsYWNlaG9sZGVyQ2FudmFzKCkK
QEAgLTQ2Niw0ICs1MzEsMjYgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OnJlc2V0KCkKICAgICBz
Y2hlZHVsZUNvbW1pdFRvUGxhY2Vob2xkZXJDYW52YXMoKTsKIH0KIAorI2lmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKK1BsYXRmb3JtTGF5ZXIqIE9mZnNjcmVlbkNhbnZhczo6cGxhdGZvcm1MYXll
cigpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVy
LnB0cigpOworI2Vsc2UKKyAgICByZXR1cm4gY29uc3RfY2FzdDxPZmZzY3JlZW5DYW52YXMqPih0
aGlzKTsKKyNlbmRpZgorfQorCisjaWYgIVVTRShOSUNPU0lBKQorUmVmUHRyPFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHk+IE9mZnNjcmVlbkNhbnZhczo6cHJveHkoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7Cit9CisjZW5kaWYgLy8g
IVVTRShOSUNPU0lBKQorCit2b2lkIE9mZnNjcmVlbkNhbnZhczo6c3dhcEJ1ZmZlcnNJZk5lZWRl
ZCgpCit7Cit9CisjZW5kaWYgLy8gVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAppbmRleCA3YzJjMzRjYWQxYTE2Y2VlMzM5NjIxNDk5
ZmIwNzE5NWNhYTM0OGYzLi4xYTI2ODhkOWY3ZjdjMjA5N2FiZDBmYTJkODNiMTgzMWMwZDhjMTJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgKQEAgLTQyLDYgKzQyLDE0IEBA
CiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgogI2VuZGlmCiAKKyNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfR0wpCisjaWYgVVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNv
bnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgorI2VuZGlmCisjZW5kaWYKKwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ5LDYgKzU3LDkgQEAgY2xhc3MgRGVmZXJyZWRQcm9t
aXNlOwogY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CiBjbGFzcyBJbWFnZUJpdG1hcDsKIGNsYXNz
IE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVJfR0wpCitjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OworI2VuZGlmCiBj
bGFzcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OwogY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OwogY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTsKQEAgLTYzLDcgKzc0LDE1IEBAIHVz
aW5nIE9mZnNjcmVlblJlbmRlcmluZ0NvbnRleHQgPSBWYXJpYW50PAogICAgIFJlZlB0cjxPZmZz
Y3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+CiA+OwogCi1jbGFzcyBPZmZzY3JlZW5DYW52
YXMgZmluYWwgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8T2Zmc2NyZWVuQ2FudmFzPiwg
cHVibGljIENhbnZhc0Jhc2UsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwcml2
YXRlIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyIHsKK2NsYXNzIE9mZnNjcmVlbkNhbnZhcyBm
aW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxPZmZzY3JlZW5DYW52YXM+LCBwdWJs
aWMgQ2FudmFzQmFzZSwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHByaXZhdGUg
Q29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisj
aWYgVVNFKE5JQ09TSUEpCisgICAgLCBwdWJsaWMgTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICAsIHB1YmxpYyBQbGF0Zm9ybUxheWVyCisj
ZW5kaWYKKyNlbmRpZgorewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoT2Zmc2NyZWVuQ2Fu
dmFzKTsKIHB1YmxpYzoKIApAQCAtMTAwLDYgKzExOSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGNvbW1pdFRvUGxhY2Vob2xkZXJDYW52YXMoKTsKIAorI2lmIFVTRShURVhUVVJFX01BUFBFUl9H
TCkKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisjZW5kaWYKKwog
ICAgIHVzaW5nIFRocmVhZFNhZmVSZWZDb3VudGVkOjpyZWY7CiAgICAgdXNpbmcgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ6OmRlcmVmOwogCkBAIC0xMzAsNiArMTUzLDEzIEBAIHByaXZhdGU6CiAgICAg
dm9pZCByZXNldCgpOwogCiAgICAgdm9pZCBwdXNoQnVmZmVyVG9QbGFjZWhvbGRlcigpOworI2lm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICB2b2lkIHB1c2hUZXh0dXJlVG9Db21wb3NpdG9y
KCkgY29uc3Q7CisgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CisjaWYg
IVVTRShOSUNPU0lBKQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCisjZW5kaWYKIAogICAgIHZvaWQgc2No
ZWR1bGVDb21taXRUb1BsYWNlaG9sZGVyQ2FudmFzKCk7CiAKQEAgLTEzNyw2ICsxNjcsMTQgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fcGVuZGluZ0NvbW1pdFRhc2sgeyBmYWxzZSB9OwogICAgIFdl
YWtQdHI8SFRNTENhbnZhc0VsZW1lbnQ+IG1fcGxhY2Vob2xkZXJDYW52YXM7CiAKKyNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfR0wpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgUmVmPE5pY29zaWE6OkNv
bnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisjZWxzZQorICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgorI2Vu
ZGlmCisKICAgICBtdXRhYmxlIExvY2sgbV9jb21taXRMb2NrOwogICAgIGJvb2wgbV9wZW5kaW5n
Q29tbWl0IHsgZmFsc2UgfTsKICAgICBJbnRTaXplIG1fcGVuZGluZ0NvbW1pdFNpemU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0Nv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJp
bmdDb250ZXh0LmNwcAppbmRleCAxMWJhNTAyNjdjNWMwZGI0OTdkYmJhNTQyYjgzZDQ5ODhkOTc3
ZjhkLi5kNWZkNWQzYjFkYjY3ODcyZGJkNTViYzhiZTI0ODk4NjI1NDEyOGI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5n
Q29udGV4dC5jcHAKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaCIKIAorI2luY2x1ZGUgIkhUTUxDYW52
YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiT2Zmc2NyZWVuQ2FudmFzLmgiCisjaW5jbHVkZSAiUmVu
ZGVySFRNTENhbnZhcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQzLDYgKzQ1LDI5IEBAIHZvaWQgUGxhY2Vob2xkZXJSZW5k
ZXJpbmdDb250ZXh0OjpzZXRPZmZzY3JlZW5DYW52YXMoT2Zmc2NyZWVuQ2FudmFzKiBvZmZzY3Jl
ZW5DCiB7CiAgICAgQVNTRVJUKG9mZnNjcmVlbkNhbnZhcyk7CiAgICAgbV9vZmZzY3JlZW5DYW52
YXMgPSBvZmZzY3JlZW5DYW52YXM7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAg
YXV0byByZW5kZXJlciA9IGNhbnZhcygpLnJlbmRlcmVyKCk7CisgICAgaWYgKGlzPFJlbmRlckhU
TUxDYW52YXM+KHJlbmRlcmVyKSkgeworICAgICAgICBhdXRvJiBjYW52YXNSZW5kZXJlciA9IGRv
d25jYXN0PFJlbmRlckhUTUxDYW52YXM+KCpyZW5kZXJlcik7CisgICAgICAgIGlmIChjYW52YXNS
ZW5kZXJlci5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKKyAgICAgICAgICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBjYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgICAgICAgICAgY29udGV4dC0+cG9zdFRhc2tUbyhjb250ZXh0LT5jb250
ZXh0SWRlbnRpZmllcigpLCBbY2FudmFzID0gbWFrZVJlZihjYW52YXMoKSldIChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JikgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVy
SFRNTENhbnZhcz4oKmNhbnZhcy0+cmVuZGVyZXIoKSkuY29udGVudENoYW5nZWQoQ2FudmFzQ2hh
bmdlZCk7CisgICAgICAgICAgICAgICAgY2FudmFzLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNv
bXBvc2l0aW9uKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgor
fQorCitQbGF0Zm9ybUxheWVyKiBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3Jt
TGF5ZXIoKSBjb25zdAoreworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICByZXR1cm4g
bV9vZmZzY3JlZW5DYW52YXMtPnBsYXRmb3JtTGF5ZXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggYzhmY2JhM2Q1OTcyYzUwMjE4
ZjRlOGU0NGRlZTQ3MzJlYmJhODg4Yi4uZDVmYWU3MzJhOTUyZDQ4YjFhYTgwYTM5MzM1ODgxNjY3
NTI1ZmRkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xk
ZXJSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxh
Y2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBib29sIGlzUGxhY2Vob2xkZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVl
OyB9CiAKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7
CisKICAgICBPZmZzY3JlZW5DYW52YXMqIG1fb2Zmc2NyZWVuQ2FudmFzOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCmluZGV4IDVhMzA4NmVh
NWQ0NzY5YTVhMzQyZGE1MGIxNzNiMzQzNzIyNDQ5ZjkuLjM0ZWQ3MTZjZjBkMjEwYzUyNGY4MzM1
MjcwMDkzMzY0Zjc1MTJmYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJIVE1MQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SFRNTENhbnZhcy5jcHAKQEAgLTYyLDggKzYyLDEzIEBAIGJvb2wgUmVuZGVySFRNTENhbnZhczo6
cmVxdWlyZXNMYXllcigpIGNvbnN0CiAgICAgaWYgKFJlbmRlclJlcGxhY2VkOjpyZXF1aXJlc0xh
eWVyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQgPSBjYW52YXNFbGVtZW50KCkucmVuZGVyaW5nQ29udGV4dCgpKQorICAg
IGlmIChDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzRWxlbWVudCgpLnJl
bmRlcmluZ0NvbnRleHQoKSkgeworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICAgICAg
cmV0dXJuIGNvbnRleHQtPmlzQWNjZWxlcmF0ZWQoKSB8fCBjb250ZXh0LT5pc1BsYWNlaG9sZGVy
KCk7CisjZWxzZQogICAgICAgICByZXR1cm4gY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpOworI2Vu
ZGlmCisgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBlMDc4NWVjNDMzNzg0MWRiODU4
MzBmMTgxZmIwODlmNzU3N2Y1NmM1Li40ZjY0ZGVhZjc3NDQzYmY2OTNlZjE1Zjc1MTU1YmIwNTFi
N2ViZGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcApAQCAtODcsNiArODcsMTEgQEAgQ2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneSBjYW52
YXNDb21wb3NpdGluZ1N0cmF0ZWd5KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIKICAgICBB
U1NFUlQocmVuZGVyZXIuaXNDYW52YXMoKSk7CiAgICAgCiAgICAgY29uc3QgSFRNTENhbnZhc0Vs
ZW1lbnQqIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlci5ub2Rl
KCkpOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBpZiAoY2FudmFzLT5pc0NvbnRy
b2xsZWRCeU9mZnNjcmVlbigpKQorICAgICAgICByZXR1cm4gQ2FudmFzQXNMYXllckNvbnRlbnRz
OworI2VuZGlmCisKICAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0
KCk7CiAgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5pc0FjY2VsZXJhdGVkKCkpCiAgICAg
ICAgIHJldHVybiBVbmFjY2VsZXJhdGVkQ2FudmFzOwpAQCAtOTI2LDcgKzkzMSw2IEBAIGJvb2wg
UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKGNvbnN0IFJlbmRlckxheWVy
KiBjb21wb3NpdGluZ0FuY2VzCiAgICAgICAgIHJlc2V0Q29udGVudHNSZWN0KCk7CiAgICAgfQog
I2VuZGlmCi0jaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkuaXNDYW52YXMoKSAm
JiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJD
b250ZW50cykgewogICAgICAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gZG93
bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKICAgICAgICAg
aWYgKGF1dG8qIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSkKQEAgLTkzNCw3
ICs5MzgsNiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmlndXJhdGlvbihj
b25zdCBSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlcwogCiAgICAgICAgIGxheWVyQ29uZmln
Q2hhbmdlZCA9IHRydWU7CiAgICAgfQotI2VuZGlmCiAgICAgaWYgKGlzPFJlbmRlcldpZGdldD4o
cmVuZGVyZXIoKSkgJiYgY29tcG9zaXRvci5wYXJlbnRGcmFtZUNvbnRlbnRMYXllcnMoZG93bmNh
c3Q8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcigpKSkpIHsKICAgICAgICAgbV9vd25pbmdMYXllci5z
ZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKICAgICAgICAgbGF5ZXJDb25maWdD
aGFuZ2VkID0gdHJ1ZTsKQEAgLTI0NDcsMTAgKzI0NTAsOCBAQCBib29sIFJlbmRlckxheWVyQmFj
a2luZzo6Y29udGFpbnNQYWludGVkQ29udGVudChQYWludGVkQ29udGVudHNJbmZvJiBjb250ZW50
c0luZgogICAgICAgICByZXR1cm4gbV9vd25pbmdMYXllci5oYXNWaXNpYmxlQm94RGVjb3JhdGlv
bnNPckJhY2tncm91bmQoKSB8fCAoIShkb3duY2FzdDxSZW5kZXJWaWRlbz4ocmVuZGVyZXIoKSku
c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpKSAmJiBtX3JlcXVpcmVzT3duQmFja2luZ1N0
b3JlKTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQogICAgIGlmIChpczxSZW5kZXJIVE1MQ2FudmFzPihyZW5kZXJlcigpKSAmJiBj
YW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJDb250
ZW50cykKICAgICAgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXIuaGFzVmlzaWJsZUJveERlY29yYXRp
b25zT3JCYWNrZ3JvdW5kKCk7Ci0jZW5kaWYKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjUx
Miw3ICsyNTEzLDYgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRlbnRDaGFuZ2VkKENv
bnRlbnRDaGFuZ2VUeXBlIGNoYW5nZVR5cGUpCiAgICAgaWYgKChjaGFuZ2VUeXBlID09IE1hc2tJ
bWFnZUNoYW5nZWQpICYmIG1fbWFza0xheWVyKQogICAgICAgICBtX293bmluZ0xheWVyLnNldE5l
ZWRzQ29tcG9zaXRpbmdDb25maWd1cmF0aW9uVXBkYXRlKCk7CiAKLSNpZiBFTkFCTEUoV0VCR0wp
IHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAg
aWYgKChjaGFuZ2VUeXBlID09IENhbnZhc0NoYW5nZWQgfHwgY2hhbmdlVHlwZSA9PSBDYW52YXNQ
aXhlbHNDaGFuZ2VkKSAmJiByZW5kZXJlcigpLmlzQ2FudmFzKCkgJiYgY2FudmFzQ29tcG9zaXRp
bmdTdHJhdGVneShyZW5kZXJlcigpKSA9PSBDYW52YXNBc0xheWVyQ29udGVudHMpIHsKICAgICAg
ICAgaWYgKGNoYW5nZVR5cGUgPT0gQ2FudmFzQ2hhbmdlZCkKICAgICAgICAgICAgIGNvbXBvc2l0
b3IoKS5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJVcGRhdGUoKTsKQEAgLTI1MjAsNyArMjUyMCw2
IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250ZW50Q2hhbmdlZChDb250ZW50Q2hhbmdl
VHlwZSBjaGFuZ2VUeXBlKQogICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBS
ZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUltYWdlQ29udGVudHMoUGFpbnRlZENvbnRlbnRzSW5m
byYgY29udGVudHNJbmZvKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406454</attachid>
            <date>2020-08-12 03:49:31 -0700</date>
            <delta_ts>2020-08-17 02:08:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202798-20200812114930.patch</filename>
            <type>text/plain</type>
            <size>20690</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWU0MGU4YTJhODgxNDAw
NjE3M2IxMDIyNDUzMGUwMjVmNDc5OWVlZi4uNzM2MmIzMWM5MDJmODRhMWI4OWUxYWYyY2JkNjI4
ZTg1NjlhYWJiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIwLTA4LTEyICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYXN5bmNocm9u
b3VzIE9mZnNjcmVlbkNhbnZhcyBwbGFjZWhvbGRlciB1cGRhdGVzIGZvciBUZXh0dXJlTWFwcGVy
R0wtYmFzZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAyNzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IGFzeW5jaHJvbm91cyB1cGRhdGVzIGZvciB1c2VycyBvZiB0
aGUgVGV4dHVyZU1hcHBlckdMCisgICAgICAgIGNvbXBvc2l0b3IgKGUuZy4gR1RLLCBXUEUpLiBU
aGlzIGFsbG93cyBPZmZzY3JlZW5DYW52YXMtY29udHJvbGxlZAorICAgICAgICBjYW52YXNlcyB0
byB1cGRhdGUgdmlzdWFsbHkgd2hpbGUgdGhlIG1haW4gdGhyZWFkIGlzIGJsb2NrZWQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVu
Q2FudmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpPZmZz
Y3JlZW5DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp+T2Zmc2Ny
ZWVuQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6cHVzaEJ1ZmZl
clRvUGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpwdXNo
UGVuZGluZ0NvbW1pdERhdGFUb0NvbXBvc2l0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
T2Zmc2NyZWVuQ2FudmFzOjpjb21taXRUb1BsYWNlaG9sZGVyQ2FudmFzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnByb3h5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok9mZnNjcmVlbkNhbnZhczo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgICogaHRtbC9P
ZmZzY3JlZW5DYW52YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRl
cmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0OjpzZXRQbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QbGFjZWhv
bGRlclJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjphY3RpdmF0ZU9uQ29tcG9zaXRpbmdU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eTo6c2NoZWR1bGVVcGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJIVE1MQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxDYW52
YXM6OnJlcXVpcmVzTGF5ZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FudmFzQ29tcG9zaXRpbmdTdHJhdGVn
eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3Vy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb250YWluc1Bh
aW50ZWRDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2lu
Zzo6Y29udGVudENoYW5nZWQpOgorCiAyMDIwLTAyLTEzICBDaHJpcyBMb3JkICA8Y2xvcmRAaWdh
bGlhLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgQ2FudmFzLnRyYW5zZmVyQ29udHJvbFRvT2Zm
c2NyZWVuIGFuZCBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY29tbWl0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggNzM0Yjc5ZDVmYWEwMmM1YmEy
YjNjZTA3ZjEzOTU0OTc0NDdjOTcwYS4uM2I5MDhlODY2ZDkwZmY5N2Y2MDAzZjNiY2JiOTQ2NmIx
NmEzNGI2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtNDMs
NiArNDMsMTIgQEAKICNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgogI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisjaW5j
bHVkZSAiQml0bWFwVGV4dHVyZUdMLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
LmgiCisjZW5kaWYgLy8gVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChPZmZzY3JlZW5DYW52YXMpOwpAQCAt
NzksNiArODUsMTIgQEAgUmVmPE9mZnNjcmVlbkNhbnZhcz4gT2Zmc2NyZWVuQ2FudmFzOjpjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgc3QKIAogICAgIGNhbGxPbk1haW5U
aHJlYWQoW2RldGFjaGVkQ2FudmFzID0gV1RGTW92ZShkZXRhY2hlZENhbnZhcyksIG9mZnNjcmVl
bkNhbnZhcyA9IG1ha2VSZWYoY2xvbmUuZ2V0KCkpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgb2Zm
c2NyZWVuQ2FudmFzLT5tX3BsYWNlaG9sZGVyQ2FudmFzID0gZGV0YWNoZWRDYW52YXMtPnRha2VQ
bGFjZWhvbGRlckNhbnZhcygpOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICAgICAg
aWYgKG9mZnNjcmVlbkNhbnZhcy0+bV9wbGFjZWhvbGRlckNhbnZhcykgeworICAgICAgICAgICAg
YXV0byYgcGxhY2Vob2xkZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0Pigqb2Zmc2NyZWVuQ2FudmFzLT5tX3BsYWNlaG9sZGVyQ2FudmFzLT5yZW5kZXJpbmdD
b250ZXh0KCkpOworICAgICAgICAgICAgcGxhY2Vob2xkZXJDb250ZXh0LnNldFBsYXRmb3JtTGF5
ZXIob2Zmc2NyZWVuQ2FudmFzLT5wbGF0Zm9ybUxheWVyKCkpOworICAgICAgICB9CisjZW5kaWYK
ICAgICAgICAgb2Zmc2NyZWVuQ2FudmFzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RU
YXNrKHsgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzazo6Q2xlYW51cFRhc2ssCiAgICAgICAg
ICAgICBbcmVsZWFzZU9mZnNjcmVlbkNhbnZhcyA9IFdURk1vdmUob2Zmc2NyZWVuQ2FudmFzKV0g
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7IH0gfSk7CiAgICAgfSk7CkBAIC05Niw2ICsxMDgs
MTMgQEAgUmVmPE9mZnNjcmVlbkNhbnZhcz4gT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSFQKIE9mZnNjcmVlbkNhbnZhczo6T2Zmc2NyZWVu
Q2FudmFzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQpCiAgICAgOiBDYW52YXNCYXNlKEludFNpemUod2lkdGgsIGhlaWdodCkp
CiAgICAgLCBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcigmY29udGV4dCkKKyNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgLCBtX25pY29zaWFMYXllcihO
aWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJl
TWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpKQorI2Vsc2UKKyAgICAsIG1fcGxhdGZv
cm1MYXllclByb3h5KGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
KCkpKQorI2VuZGlmCisjZW5kaWYKIHsKIH0KIApAQCAtMTAzLDYgKzEyMiwxOCBAQCBPZmZzY3Jl
ZW5DYW52YXM6On5PZmZzY3JlZW5DYW52YXMoKQogewogICAgIG5vdGlmeU9ic2VydmVyc0NhbnZh
c0Rlc3Ryb3llZCgpOwogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3BsYWNlaG9sZGVyID0gV1RGTW92ZShtX3BsYWNlaG9sZGVyQ2FudmFzKV0gKCkg
eworICAgICAgICBpZiAocGxhY2Vob2xkZXIpIHsKKyAgICAgICAgICAgIGF1dG8mIHBsYWNlaG9s
ZGVyQ29udGV4dCA9IGRvd25jYXN0PFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dD4oKnBsYWNl
aG9sZGVyLT5yZW5kZXJpbmdDb250ZXh0KCkpOworICAgICAgICAgICAgcGxhY2Vob2xkZXJDb250
ZXh0LnNldFBsYXRmb3JtTGF5ZXIobnVsbHB0cik7CisgICAgICAgIH0KKyAgICB9KTsKKyNpZiBV
U0UoTklDT1NJQSkKKyAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFw
cGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworI2Vu
ZGlmCisjZW5kaWYKKwogICAgIG1fY29udGV4dCA9IG51bGxwdHI7IC8vIEVuc3VyZSB0aGlzIGdv
ZXMgYXdheSBiZWZvcmUgdGhlIEltYWdlQnVmZmVyLgogICAgIHNldEltYWdlQnVmZmVyKG51bGxw
dHIpOwogfQpAQCAtMzQwLDE5ICszNzEsNTUgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OnNldFBs
YWNlaG9sZGVyQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMpCiB2b2lkIE9mZnNjcmVl
bkNhbnZhczo6cHVzaEJ1ZmZlclRvUGxhY2Vob2xkZXIoKQogewogICAgIGNhbGxPbk1haW5UaHJl
YWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGhpc10gKCkgbXV0YWJsZSB7Ci0g
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb21taXRMb2NrKTsKLQotICAgICAgICBp
ZiAobV9wbGFjZWhvbGRlckNhbnZhcyAmJiBtX2hhc1BlbmRpbmdDb21taXREYXRhKSB7Ci0gICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoRmxvYXRTaXplKG1fcGVuZGluZ0NvbW1pdERhdGEtPnNpemUoKSksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpOwotICAgICAgICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcGVuZGluZ0NvbW1pdERh
dGEsIEludFJlY3QoSW50UG9pbnQoKSwgbV9wZW5kaW5nQ29tbWl0RGF0YS0+c2l6ZSgpKSk7Ci0g
ICAgICAgICAgICBtX3BsYWNlaG9sZGVyQ2FudmFzLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0
eShXVEZNb3ZlKGJ1ZmZlcikpOwotICAgICAgICAgICAgbV9oYXNQZW5kaW5nQ29tbWl0RGF0YSA9
IGZhbHNlOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
Y29tbWl0TG9jayk7CisKKyAgICAgICAgICAgIGlmIChtX3BsYWNlaG9sZGVyQ2FudmFzICYmIG1f
aGFzUGVuZGluZ0NvbW1pdERhdGEpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKG1fcGVu
ZGluZ0NvbW1pdERhdGEtPnNpemUoKSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwor
ICAgICAgICAgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsICptX3BlbmRpbmdDb21taXREYXRhLCBJbnRSZWN0KEludFBvaW50
KCksIG1fcGVuZGluZ0NvbW1pdERhdGEtPnNpemUoKSkpOworICAgICAgICAgICAgICAgIG1fcGxh
Y2Vob2xkZXJDYW52YXMtPnNldEltYWdlQnVmZmVyQW5kTWFya0RpcnR5KFdURk1vdmUoYnVmZmVy
KSk7CisgICAgICAgICAgICAgICAgbV9oYXNQZW5kaW5nQ29tbWl0RGF0YSA9IGZhbHNlOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5wb3N0VGFzayhbcmVsZWFzZVRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYpIHsgfSk7CisgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+cG9zdFRhc2soeyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrOjpDbGVhbnVwVGFzaywK
KyAgICAgICAgICAgIFtyZWxlYXNlVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JikgeyB9IH0pOwogICAgIH0pOwogfQogCisjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKQordm9pZCBPZmZzY3JlZW5DYW52YXM6OnB1c2hQZW5kaW5nQ29tbWl0RGF0
YVRvQ29tcG9zaXRvcigpIGNvbnN0Cit7CisgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9CisgICAg
ICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkgbXV0YWJs
ZSB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOworCisgICAg
ICAgICAgICBpZiAocHJveHkuaXNBY3RpdmUoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gdGV4
dHVyZSA9IEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlKFRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmli
dXRlczo6Z2V0KCkpOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2NvbW1pdExvY2spOworCisgICAgICAgICAgICAgICAgICAg
IGF1dG8gc2l6ZSA9IG1fcGVuZGluZ0NvbW1pdERhdGEtPnNpemUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHNpemUuYXJlYSgpLnVuc2FmZUdldCgpICogNCA9PSBtX3BlbmRpbmdDb21t
aXREYXRhLT5kYXRhKCktPmxlbmd0aCgpKTsKKworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5yZXNldChzaXplLCBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+dXBkYXRlQ29udGVudHMoKHZvaWQqKW1fcGVuZGluZ0NvbW1pdERh
dGEtPmRhdGEoKS0+ZGF0YSgpLCBJbnRSZWN0KEludFBvaW50KCksIHNpemUpLCBJbnRQb2ludCgp
LCBzaXplLndpZHRoKCkgKiA0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBhdXRvIGxheWVyQnVmZmVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ckJ1ZmZlcj4oV1RGTW92ZSh0ZXh0dXJlKSk7CisgICAgICAgICAgICAgICAgbGF5ZXJCdWZmZXIt
PnNldEV4dHJhRmxhZ3MoVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCk7CisgICAgICAgICAg
ICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIoV1RGTW92ZShsYXllckJ1ZmZlcikpOworICAgICAg
ICAgICAgfQorICAgICAgICB9OworCisjaWYgVVNFKE5JQ09TSUEpCisgICAgcHJveHlPcGVyYXRp
b24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmlj
b3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UKKyAgICBwcm94eU9wZXJhdGlvbigq
bV9wbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCit9CisjZW5kaWYKKwogdm9pZCBPZmZzY3Jl
ZW5DYW52YXM6OmNvbW1pdFRvUGxhY2Vob2xkZXJDYW52YXMoKQogewogICAgIGF1dG8qIGltYWdl
QnVmZmVyID0gYnVmZmVyKCk7CkBAIC0zNzksNiArNDQ2LDE5IEBAIHZvaWQgT2Zmc2NyZWVuQ2Fu
dmFzOjpjb21taXRUb1BsYWNlaG9sZGVyQ2FudmFzKCkKIAogICAgIGlmIChzaG91bGRQdXNoQnVm
ZmVyKQogICAgICAgICBwdXNoQnVmZmVyVG9QbGFjZWhvbGRlcigpOworCisjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKQorICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPSBbdGhpc10gKFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KSBtdXRhYmxlIHsKKyAgICAgICAgcmV0dXJu
IHByb3h5LnNjaGVkdWxlVXBkYXRlT25Db21wb3NpdG9yVGhyZWFkKFt0aGlzXSAoKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIHRoaXMtPnB1c2hQZW5kaW5nQ29tbWl0RGF0YVRvQ29tcG9zaXRvcigp
OworICAgICAgICB9KTsKKyAgICB9OworI2lmIFVTRShOSUNPU0lBKQorICAgIHByb3h5T3BlcmF0
aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25p
Y29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKKyNlbHNlCisgICAgcHJveHlPcGVyYXRpb24o
Km1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorI2VuZGlmCiB9CiAKIHZvaWQgT2Zmc2Ny
ZWVuQ2FudmFzOjpzY2hlZHVsZUNvbW1pdFRvUGxhY2Vob2xkZXJDYW52YXMoKQpAQCAtNDQzLDYg
KzUyMywyOCBAQCB2b2lkIE9mZnNjcmVlbkNhbnZhczo6cmVzZXQoKQogICAgIHNjaGVkdWxlQ29t
bWl0VG9QbGFjZWhvbGRlckNhbnZhcygpOwogfQogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQorUGxhdGZvcm1MYXllciogT2Zmc2NyZWVuQ2FudmFzOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QK
K3sKKyNpZiBVU0UoTklDT1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIucHRyKCk7Cisj
ZWxzZQorICAgIHJldHVybiBjb25zdF9jYXN0PE9mZnNjcmVlbkNhbnZhcyo+KHRoaXMpOworI2Vu
ZGlmCit9CisKKyNpZiAhVVNFKE5JQ09TSUEpCitSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eT4gT2Zmc2NyZWVuQ2FudmFzOjpwcm94eSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsKK30KKyNlbmRpZiAvLyAhVVNFKE5JQ09T
SUEpCisKK3ZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKK30K
KyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisKIH0KIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAppbmRleCA3Y2JlMWVhZTQ1MThjMDY4MzQ2NmFiYzJm
NWUxMDUzMWM3OGI4OWY1Li5hNWI0NzdkMThkNjRjZjhiNjcxZGM5YzNiOTJiNWRjNTdjYzk1N2Zl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgKQEAgLTQxLDYgKzQxLDE0IEBA
CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyNpZiBVU0UoTklDT1NJQSkKKyNpbmNs
dWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKyNlbHNlCisjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCisjZW5kaWYK
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQ7CkBAIC01MCw2ICs1OCw3IEBAIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50OwogY2xhc3Mg
SW1hZ2VCaXRtYXA7CiBjbGFzcyBJbWFnZURhdGE7CiBjbGFzcyBPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ7CitjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Owog
Y2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OwogCiAjaWYgRU5BQkxFKFdFQkdMKQpAQCAtODUs
NyArOTQsMTUgQEAgcHJpdmF0ZToKICAgICBXZWFrUHRyPEhUTUxDYW52YXNFbGVtZW50PiBtX3Bs
YWNlaG9sZGVyQ2FudmFzOwogfTsKIAotY2xhc3MgT2Zmc2NyZWVuQ2FudmFzIGZpbmFsIDogcHVi
bGljIFJlZkNvdW50ZWQ8T2Zmc2NyZWVuQ2FudmFzPiwgcHVibGljIENhbnZhc0Jhc2UsIHB1Ymxp
YyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwcml2YXRlIENvbnRleHREZXN0cnVjdGlvbk9i
c2VydmVyIHsKK2NsYXNzIE9mZnNjcmVlbkNhbnZhcyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVk
PE9mZnNjcmVlbkNhbnZhcz4sIHB1YmxpYyBDYW52YXNCYXNlLCBwdWJsaWMgRXZlbnRUYXJnZXRX
aXRoSW5saW5lRGF0YSwgcHJpdmF0ZSBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcgorI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkKKyNpZiBVU0UoTklDT1NJQSkKKyAgICAsIHB1YmxpYyBOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50CisjZWxzZQorICAgICwg
cHVibGljIFBsYXRmb3JtTGF5ZXIKKyNlbmRpZgorI2VuZGlmCit7CiAgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChPZmZzY3JlZW5DYW52YXMpOwogcHVibGljOgogCkBAIC0xMjksNiArMTQ2LDEw
IEBAIHB1YmxpYzoKIAogICAgIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCk7CiAKKyNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0OworI2VuZGlmCisKICAgICB1c2luZyBSZWZDb3VudGVkOjpyZWY7CiAgICAgdXNpbmcg
UmVmQ291bnRlZDo6ZGVyZWY7CiAKQEAgLTE2MCw2ICsxODEsMTQgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHB1c2hCdWZmZXJUb1BsYWNlaG9sZGVyKCk7CiAgICAgdm9pZCBzY2hlZHVsZUNvbW1pdFRv
UGxhY2Vob2xkZXJDYW52YXMoKTsKIAorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICB2
b2lkIHB1c2hQZW5kaW5nQ29tbWl0RGF0YVRvQ29tcG9zaXRvcigpIGNvbnN0OworICAgIHZvaWQg
c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworI2lmICFVU0UoTklDT1NJQSkKKyAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVy
cmlkZTsKKyNlbmRpZgorI2VuZGlmCisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dD4gbV9jb250ZXh0OwogCiAgICAgLy8gbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIg
bWVhbnMgd2UgdHJpZWQgdG8gbWFsbG9jIHRoZSBidWZmZXIuIFdlIGRpZG4ndCBuZWNlc3Nhcmls
eSBnZXQgaXQuCkBAIC0xNzIsNiArMjAxLDE0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1Nj
aGVkdWxlZENvbW1pdCB7IGZhbHNlIH07CiAgICAgV2Vha1B0cjxIVE1MQ2FudmFzRWxlbWVudD4g
bV9wbGFjZWhvbGRlckNhbnZhczsKIAorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyNpZiBV
U0UoTklDT1NJQSkKKyAgICBSZWY8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXll
cjsKKyNlbHNlCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1f
cGxhdGZvcm1MYXllclByb3h5OworI2VuZGlmCisjZW5kaWYKKwogICAgIG11dGFibGUgTG9jayBt
X2NvbW1pdExvY2s7CiAgICAgYm9vbCBtX2hhc1BlbmRpbmdDb21taXREYXRhIHsgZmFsc2UgfTsK
ICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3BlbmRpbmdDb21taXREYXRhOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dC5jcHAKaW5kZXggMWVjN2EyNGVkZjQ0NTIxMWJiYmE5OTQyZTgxNDZiYjFlN2Y2ODRjMC4uZTQz
MTdkODgyYzg0MTJmOGI3YWYyN2E5ZThlZjdlYzY3YjhlYjY4ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQu
Y3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgog
I2luY2x1ZGUgIk9mZnNjcmVlbkNhbnZhcy5oIgorI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC00OSw2ICs1MCwyNSBAQCBIVE1MQ2FudmFzRWxlbWVudCogUGxhY2Vob2xkZXJSZW5k
ZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdAogICAgIHJldHVybiAmZG93bmNhc3Q8SFRNTENh
bnZhc0VsZW1lbnQ+KGJhc2UpOwogfQogCit2b2lkIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dDo6c2V0UGxhdGZvcm1MYXllcihQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQoreworICAg
IGlmIChtX3BsYXRmb3JtTGF5ZXIgPT0gcGxhdGZvcm1MYXllcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9wbGF0Zm9ybUxheWVyID0gcGxhdGZvcm1MYXllcjsKKworICAgIGlmIChhdXRvKiBo
dG1sQ2FudmFzID0gY2FudmFzKCkpIHsKKyAgICAgICAgYXV0byogcmVuZGVyZXIgPSBodG1sQ2Fu
dmFzLT5yZW5kZXJlcigpOworICAgICAgICBpZiAoaXM8UmVuZGVySFRNTENhbnZhcz4ocmVuZGVy
ZXIpKSB7CisgICAgICAgICAgICBhdXRvJiBjYW52YXNSZW5kZXJlciA9IGRvd25jYXN0PFJlbmRl
ckhUTUxDYW52YXM+KCpyZW5kZXJlcik7CisgICAgICAgICAgICBpZiAoY2FudmFzUmVuZGVyZXIu
aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7CisgICAgICAgICAgICAgICAgY2FudmFzUmVu
ZGVyZXIuY29udGVudENoYW5nZWQoQ2FudmFzQ2hhbmdlZCk7CisgICAgICAgICAgICAgICAgaHRt
bENhbnZhcy0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaApp
bmRleCA2NDUwOTE0NTlkZDAxY2MyYTc5NzdkYzAwM2I0NTI2NWRlNWJhN2Q4Li4zN2MyZDc0ZThm
ZDgyZWU2NDIwODQxODRlZTU1Mjc5YWU2MDdjYTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaApAQCAtNDAs
OCArNDAsMTQgQEAgcHVibGljOgogCiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcygpIGNv
bnN0OwogCisgICAgdm9pZCBzZXRQbGF0Zm9ybUxheWVyKFBsYXRmb3JtTGF5ZXIqKTsKKwogcHJp
dmF0ZToKICAgICBib29sIGlzUGxhY2Vob2xkZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVl
OyB9CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9wbGF0Zm9ybUxheWVyOyB9CisKKyAgICBQbGF0Zm9ybUxheWVyKiBtX3BsYXRm
b3JtTGF5ZXIgeyBudWxscHRyIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHAKaW5kZXggNTQyYmZhNWJiNGUyMGVhMjJhN2U3ZDFm
MWMyM2QyYWFkNGMxMGM3ZS4uZTI4NzFmNzk1NjJjNWIwNTUwMzJiYTAxYzEzNDc3YjA0YTQzOTUx
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNw
cApAQCAtNjUsMTkgKzY1LDI3IEBAIHZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eTo6YWN0aXZhdGVPbkNvbXBvc2l0aW5nVGhyZWFkKENvbXBvc2l0b3IqIGNvCiAgICAgQVNTRVJU
KG1fY29tcG9zaXRvclRocmVhZCA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwogICAgIEFTU0VSVChj
b21wb3NpdG9yKTsKICAgICBBU1NFUlQodGFyZ2V0TGF5ZXIpOwotICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fbG9jayk7Ci0gICAgbV9jb21wb3NpdG9yID0gY29tcG9zaXRvcjsKLSAgICBtX3Rhcmdl
dExheWVyID0gdGFyZ2V0TGF5ZXI7Ci0gICAgaWYgKG1fdGFyZ2V0TGF5ZXIgJiYgbV9jdXJyZW50
QnVmZmVyKQotICAgICAgICBtX3RhcmdldExheWVyLT5zZXRDb250ZW50c0xheWVyKG1fY3VycmVu
dEJ1ZmZlci5nZXQoKSk7CisgICAgRnVuY3Rpb248dm9pZCgpPiB1cGRhdGVGdW5jdGlvbjsKKyAg
ICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIG1fY29tcG9z
aXRvciA9IGNvbXBvc2l0b3I7CisgICAgICAgIG1fdGFyZ2V0TGF5ZXIgPSB0YXJnZXRMYXllcjsK
KyAgICAgICAgaWYgKG1fdGFyZ2V0TGF5ZXIgJiYgbV9jdXJyZW50QnVmZmVyKQorICAgICAgICAg
ICAgbV90YXJnZXRMYXllci0+c2V0Q29udGVudHNMYXllcihtX2N1cnJlbnRCdWZmZXIuZ2V0KCkp
OwogCi0gICAgbV9yZWxlYXNlVW51c2VkQnVmZmVyc1RpbWVyID0gbWFrZVVuaXF1ZTxSdW5Mb29w
OjpUaW1lcjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Pj4oUnVuTG9vcDo6Y3VycmVu
dCgpLCB0aGlzLCAmVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6cmVsZWFzZVVudXNl
ZEJ1ZmZlcnNUaW1lckZpcmVkKTsKLSAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lciA9
IG1ha2VVbmlxdWU8UnVuTG9vcDo6VGltZXI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eT4+KFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHk6OmNvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lckZpcmVkKTsKKyAgICAgICAgbV9yZWxl
YXNlVW51c2VkQnVmZmVyc1RpbWVyID0gbWFrZVVuaXF1ZTxSdW5Mb29wOjpUaW1lcjxUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5Pj4oUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6cmVsZWFzZVVudXNlZEJ1ZmZlcnNUaW1lckZp
cmVkKTsKKyAgICAgICAgbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXIgPSBtYWtlVW5pcXVl
PFJ1bkxvb3A6OlRpbWVyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+PihSdW5Mb29w
OjpjdXJyZW50KCksIHRoaXMsICZUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Ojpjb21w
b3NpdG9yVGhyZWFkVXBkYXRlVGltZXJGaXJlZCk7CiAKICNpZiBVU0UoR0xJQl9FVkVOVF9MT09Q
KQotICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVyLT5zZXRQcmlvcml0eShSdW5Mb29w
U291cmNlUHJpb3JpdHk6OkNvbXBvc2l0aW5nVGhyZWFkVXBkYXRlVGltZXIpOwotICAgIG1fcmVs
ZWFzZVVudXNlZEJ1ZmZlcnNUaW1lci0+c2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5
OjpSZWxlYXNlVW51c2VkUmVzb3VyY2VzVGltZXIpOworICAgICAgICBtX2NvbXBvc2l0b3JUaHJl
YWRVcGRhdGVUaW1lci0+c2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpDb21wb3Np
dGluZ1RocmVhZFVwZGF0ZVRpbWVyKTsKKyAgICAgICAgbV9yZWxlYXNlVW51c2VkQnVmZmVyc1Rp
bWVyLT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3JpdHk6OlJlbGVhc2VVbnVzZWRSZXNv
dXJjZXNUaW1lcik7CiAjZW5kaWYKKworICAgICAgICBpZiAoIW1fY29tcG9zaXRvclRocmVhZFVw
ZGF0ZUZ1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB1cGRhdGVGdW5jdGlv
biA9IFdURk1vdmUobV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlRnVuY3Rpb24pOworICAgIH0KKyAg
ICB1cGRhdGVGdW5jdGlvbigpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHk6OmludmFsaWRhdGUoKQpAQCAtMjQ5LDEwICsyNTcsMTEgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5Ojpkcm9wQ3VycmVudEJ1ZmZlcldoaWxlUHJlc2VydmluZ1Rl
eHR1cmUoYm8KIGJvb2wgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6c2NoZWR1bGVV
cGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQoRnVuY3Rpb248dm9pZCgpPiYmIHVwZGF0ZUZ1bmN0aW9u
KQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgbV9jb21wb3NpdG9yVGhy
ZWFkVXBkYXRlRnVuY3Rpb24gPSBXVEZNb3ZlKHVwZGF0ZUZ1bmN0aW9uKTsKKwogICAgIGlmICgh
bV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0ZUZ1bmN0aW9uID0gV1RGTW92ZSh1cGRhdGVGdW5j
dGlvbik7CiAgICAgbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXItPnN0YXJ0T25lU2hvdCgw
X3MpOwogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckhUTUxDYW52YXMuY3BwCmluZGV4IDdkZGQzNzJlYzQ0ZTVkNjk4NzJkNmI4Y2VmNDIyM2Ri
ZTkyMWVhZGUuLmNkOWIyMjk4NmQ3MGJkMjIxZTczZWYxM2YwMjhiYWUxMzE4YTU1NGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKQEAgLTYwLDgg
KzYwLDEzIEBAIGJvb2wgUmVuZGVySFRNTENhbnZhczo6cmVxdWlyZXNMYXllcigpIGNvbnN0CiAg
ICAgaWYgKFJlbmRlclJlcGxhY2VkOjpyZXF1aXJlc0xheWVyKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgaWYgKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXNF
bGVtZW50KCkucmVuZGVyaW5nQ29udGV4dCgpKQorICAgIGlmIChDYW52YXNSZW5kZXJpbmdDb250
ZXh0KiBjb250ZXh0ID0gY2FudmFzRWxlbWVudCgpLnJlbmRlcmluZ0NvbnRleHQoKSkgeworI2lm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQWNjZWxl
cmF0ZWQoKSB8fCBjb250ZXh0LT5pc1BsYWNlaG9sZGVyKCk7CisjZWxzZQogICAgICAgICByZXR1
cm4gY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpOworI2VuZGlmCisgICAgfQogCiAgICAgcmV0dXJu
IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAppbmRleCA1MTlkMzYxMDc4MDhlMzYyZjdjMDQwZjQyNzhjODgzYTJmMzkwNjFlLi5m
ZGJmODlhNzllZTBkYzRhM2EzZTJiMTQ1ZjNmMTY1YmExYzVhZDhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtODgsNiArODgsMTEg
QEAgQ2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneSBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIKICAgICBBU1NFUlQocmVuZGVyZXIuaXNDYW52YXMo
KSk7CiAgICAgCiAgICAgY29uc3QgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGRvd25jYXN0
PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlci5ub2RlKCkpOworI2lmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKKyAgICBpZiAoY2FudmFzLT5pc0NvbnRyb2xsZWRCeU9mZnNjcmVlbigpKQorICAg
ICAgICByZXR1cm4gQ2FudmFzQXNMYXllckNvbnRlbnRzOworI2VuZGlmCisKICAgICBhdXRvKiBj
b250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0IHx8
ICFjb250ZXh0LT5pc0FjY2VsZXJhdGVkKCkpCiAgICAgICAgIHJldHVybiBVbmFjY2VsZXJhdGVk
Q2FudmFzOwpAQCAtMTA1MCw3ICsxMDU1LDYgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUNvbmZpZ3VyYXRpb24oY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXMKICAg
ICAgICAgdXBkYXRlQ29udGVudHNSZWN0cygpOwogICAgIH0KICNlbmRpZgotI2lmIEVOQUJMRShX
RUJHTCkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQVSkK
ICAgICBlbHNlIGlmIChyZW5kZXJlcigpLmlzQ2FudmFzKCkgJiYgY2FudmFzQ29tcG9zaXRpbmdT
dHJhdGVneShyZW5kZXJlcigpKSA9PSBDYW52YXNBc0xheWVyQ29udGVudHMpIHsKICAgICAgICAg
Y29uc3QgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVt
ZW50PihyZW5kZXJlcigpLmVsZW1lbnQoKSk7CiAgICAgICAgIGlmIChhdXRvKiBjb250ZXh0ID0g
Y2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpCkBAIC0xMDU4LDcgKzEwNjIsNiBAQCBib29sIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmlndXJhdGlvbihjb25zdCBSZW5kZXJMYXllciog
Y29tcG9zaXRpbmdBbmNlcwogCiAgICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlZCA9IHRydWU7CiAg
ICAgfQotI2VuZGlmCiAgICAgaWYgKGlzPFJlbmRlcldpZGdldD4ocmVuZGVyZXIoKSkgJiYgY29t
cG9zaXRvci5wYXJlbnRGcmFtZUNvbnRlbnRMYXllcnMoZG93bmNhc3Q8UmVuZGVyV2lkZ2V0Pihy
ZW5kZXJlcigpKSkpIHsKICAgICAgICAgbV9vd25pbmdMYXllci5zZXROZWVkc0NvbXBvc2l0aW5n
R2VvbWV0cnlVcGRhdGUoKTsKICAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gdHJ1ZTsKQEAg
LTI2NzQsMTAgKzI2NzcsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6Y29udGFpbnNQYWlu
dGVkQ29udGVudChQYWludGVkQ29udGVudHNJbmZvJiBjb250ZW50c0luZgogICAgICAgICByZXR1
cm4gbV9vd25pbmdMYXllci5oYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSB8
fCAoIShkb3duY2FzdDxSZW5kZXJWaWRlbz4ocmVuZGVyZXIoKSkuc3VwcG9ydHNBY2NlbGVyYXRl
ZFJlbmRlcmluZygpKSAmJiBtX3JlcXVpcmVzT3duQmFja2luZ1N0b3JlKTsKICNlbmRpZgogCi0j
aWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGlm
IChpczxSZW5kZXJIVE1MQ2FudmFzPihyZW5kZXJlcigpKSAmJiBjYW52YXNDb21wb3NpdGluZ1N0
cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJDb250ZW50cykKICAgICAgICAgcmV0
dXJuIG1fb3duaW5nTGF5ZXIuaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCk7
Ci0jZW5kaWYKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjczOSw3ICsyNzQwLDYgQEAgdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRlbnRDaGFuZ2VkKENvbnRlbnRDaGFuZ2VUeXBlIGNo
YW5nZVR5cGUpCiAgICAgaWYgKChjaGFuZ2VUeXBlID09IE1hc2tJbWFnZUNoYW5nZWQpICYmIG1f
bWFza0xheWVyKQogICAgICAgICBtX293bmluZ0xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdDb25m
aWd1cmF0aW9uVXBkYXRlKCk7CiAKLSNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgaWYgKChjaGFuZ2VUeXBlID09
IENhbnZhc0NoYW5nZWQgfHwgY2hhbmdlVHlwZSA9PSBDYW52YXNQaXhlbHNDaGFuZ2VkKSAmJiBy
ZW5kZXJlcigpLmlzQ2FudmFzKCkgJiYgY2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneShyZW5kZXJl
cigpKSA9PSBDYW52YXNBc0xheWVyQ29udGVudHMpIHsKICAgICAgICAgaWYgKGNoYW5nZVR5cGUg
PT0gQ2FudmFzQ2hhbmdlZCkKICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS5zY2hlZHVsZUNvbXBv
c2l0aW5nTGF5ZXJVcGRhdGUoKTsKQEAgLTI3NDcsNyArMjc0Nyw2IEBAIHZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjpjb250ZW50Q2hhbmdlZChDb250ZW50Q2hhbmdlVHlwZSBjaGFuZ2VUeXBlKQog
ICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OnVwZGF0ZUltYWdlQ29udGVudHMoUGFpbnRlZENvbnRlbnRzSW5mbyYgY29udGVudHNJbmZvKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406704</attachid>
            <date>2020-08-17 02:08:28 -0700</date>
            <delta_ts>2020-08-27 04:06:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202798-20200817100827.patch</filename>
            <type>text/plain</type>
            <size>20695</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1NGM1MDg0NDNkNjBi
YmNjYzM5YTk4OWM5MTY1OTE0MjhhNDE0ZS4uMzJiMDg2NzE1OGNiZTVlNzc3MmNhNDljYzk2NWQ1
YmY2YTRlMmE1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIwLTA4LTEyICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYXN5bmNocm9u
b3VzIE9mZnNjcmVlbkNhbnZhcyBwbGFjZWhvbGRlciB1cGRhdGVzIGZvciBUZXh0dXJlTWFwcGVy
R0wtYmFzZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAyNzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IGFzeW5jaHJvbm91cyB1cGRhdGVzIGZvciB1c2VycyBvZiB0
aGUgVGV4dHVyZU1hcHBlckdMCisgICAgICAgIGNvbXBvc2l0b3IgKGUuZy4gR1RLLCBXUEUpLiBU
aGlzIGFsbG93cyBPZmZzY3JlZW5DYW52YXMtY29udHJvbGxlZAorICAgICAgICBjYW52YXNlcyB0
byB1cGRhdGUgdmlzdWFsbHkgd2hpbGUgdGhlIG1haW4gdGhyZWFkIGlzIGJsb2NrZWQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVu
Q2FudmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpPZmZz
Y3JlZW5DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp+T2Zmc2Ny
ZWVuQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6cHVzaEJ1ZmZl
clRvUGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpwdXNo
UGVuZGluZ0NvbW1pdERhdGFUb0NvbXBvc2l0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
T2Zmc2NyZWVuQ2FudmFzOjpjb21taXRUb1BsYWNlaG9sZGVyQ2FudmFzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnByb3h5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok9mZnNjcmVlbkNhbnZhczo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgICogaHRtbC9P
ZmZzY3JlZW5DYW52YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRl
cmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0OjpzZXRQbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QbGFjZWhv
bGRlclJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjphY3RpdmF0ZU9uQ29tcG9zaXRpbmdU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eTo6c2NoZWR1bGVVcGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJIVE1MQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxDYW52
YXM6OnJlcXVpcmVzTGF5ZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FudmFzQ29tcG9zaXRpbmdTdHJhdGVn
eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3Vy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb250YWluc1Bh
aW50ZWRDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2lu
Zzo6Y29udGVudENoYW5nZWQpOgorCiAyMDIwLTA4LTE3ICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUg
c2hvdWxkIGJlIGEgY29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
T2Zmc2NyZWVuQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFz
LmNwcAppbmRleCA3MzRiNzlkNWZhYTAyYzViYTJiM2NlMDdmMTM5NTQ5NzQ0N2M5NzBhLi5jZjU5
YWFiNmFiZGQyNzU5NzkzNmQyOGRhODNhOTJkNDEzOTFiOWRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9PZmZzY3JlZW5DYW52YXMuY3BwCkBAIC00Myw2ICs0MywxMiBAQAogI2luY2x1ZGUgIldvcmtl
ckdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIAorI2lm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyNpbmNsdWRlICJCaXRtYXBUZXh0dXJlR0wuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChPZmZzY3JlZW5DYW52YXMpOwpA
QCAtNzksNiArODUsMTIgQEAgUmVmPE9mZnNjcmVlbkNhbnZhcz4gT2Zmc2NyZWVuQ2FudmFzOjpj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgc3QKIAogICAgIGNhbGxPbk1h
aW5UaHJlYWQoW2RldGFjaGVkQ2FudmFzID0gV1RGTW92ZShkZXRhY2hlZENhbnZhcyksIG9mZnNj
cmVlbkNhbnZhcyA9IG1ha2VSZWYoY2xvbmUuZ2V0KCkpXSAoKSBtdXRhYmxlIHsKICAgICAgICAg
b2Zmc2NyZWVuQ2FudmFzLT5tX3BsYWNlaG9sZGVyQ2FudmFzID0gZGV0YWNoZWRDYW52YXMtPnRh
a2VQbGFjZWhvbGRlckNhbnZhcygpOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICAg
ICAgaWYgKG9mZnNjcmVlbkNhbnZhcy0+bV9wbGFjZWhvbGRlckNhbnZhcykgeworICAgICAgICAg
ICAgYXV0byYgcGxhY2Vob2xkZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJSZW5kZXJp
bmdDb250ZXh0Pigqb2Zmc2NyZWVuQ2FudmFzLT5tX3BsYWNlaG9sZGVyQ2FudmFzLT5yZW5kZXJp
bmdDb250ZXh0KCkpOworICAgICAgICAgICAgcGxhY2Vob2xkZXJDb250ZXh0LnNldFBsYXRmb3Jt
TGF5ZXIob2Zmc2NyZWVuQ2FudmFzLT5wbGF0Zm9ybUxheWVyKCkpOworICAgICAgICB9CisjZW5k
aWYKICAgICAgICAgb2Zmc2NyZWVuQ2FudmFzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBv
c3RUYXNrKHsgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzazo6Q2xlYW51cFRhc2ssCiAgICAg
ICAgICAgICBbcmVsZWFzZU9mZnNjcmVlbkNhbnZhcyA9IFdURk1vdmUob2Zmc2NyZWVuQ2FudmFz
KV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7IH0gfSk7CiAgICAgfSk7CkBAIC05Niw2ICsx
MDgsMTEgQEAgUmVmPE9mZnNjcmVlbkNhbnZhcz4gT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSFQKIE9mZnNjcmVlbkNhbnZhczo6T2Zmc2Ny
ZWVuQ2FudmFzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQpCiAgICAgOiBDYW52YXNCYXNlKEludFNpemUod2lkdGgsIGhlaWdo
dCkpCiAgICAgLCBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcigmY29udGV4dCkKKyNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfR0wpICYmIFVTRShOSUNPU0lBKQorICAgICwgbV9uaWNvc2lhTGF5ZXIo
Tmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKSkKKyNlbGlmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKKyAgICAsIG1fcGxhdGZvcm1MYXllclByb3h5KGFkb3B0UmVmKG5ldyBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5KCkpKQorI2VuZGlmCiB7CiB9CiAKQEAgLTEwMyw2ICsx
MjAsMTggQEAgT2Zmc2NyZWVuQ2FudmFzOjp+T2Zmc2NyZWVuQ2FudmFzKCkKIHsKICAgICBub3Rp
ZnlPYnNlcnZlcnNDYW52YXNEZXN0cm95ZWQoKTsKIAorI2lmIFVTRShURVhUVVJFX01BUFBFUl9H
TCkKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwbGFjZWhvbGRlciA9IFdURk1vdmUobV9wbGFjZWhv
bGRlckNhbnZhcyldICgpIHsKKyAgICAgICAgaWYgKHBsYWNlaG9sZGVyKSB7CisgICAgICAgICAg
ICBhdXRvJiBwbGFjZWhvbGRlckNvbnRleHQgPSBkb3duY2FzdDxQbGFjZWhvbGRlclJlbmRlcmlu
Z0NvbnRleHQ+KCpwbGFjZWhvbGRlci0+cmVuZGVyaW5nQ29udGV4dCgpKTsKKyAgICAgICAgICAg
IHBsYWNlaG9sZGVyQ29udGV4dC5zZXRQbGF0Zm9ybUxheWVyKG51bGxwdHIpOworICAgICAgICB9
CisgICAgfSk7CisjZW5kaWYKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFVTRShOSUNP
U0lBKQorICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBs
PihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7CisjZW5kaWYKKwog
ICAgIG1fY29udGV4dCA9IG51bGxwdHI7IC8vIEVuc3VyZSB0aGlzIGdvZXMgYXdheSBiZWZvcmUg
dGhlIEltYWdlQnVmZmVyLgogICAgIHNldEltYWdlQnVmZmVyKG51bGxwdHIpOwogfQpAQCAtMzQw
LDE5ICszNjksNTUgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OnNldFBsYWNlaG9sZGVyQ2FudmFz
KEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMpCiB2b2lkIE9mZnNjcmVlbkNhbnZhczo6cHVzaEJ1
ZmZlclRvUGxhY2Vob2xkZXIoKQogewogICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgdGhpc10gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9jb21taXRMb2NrKTsKLQotICAgICAgICBpZiAobV9wbGFjZWhvbGRl
ckNhbnZhcyAmJiBtX2hhc1BlbmRpbmdDb21taXREYXRhKSB7Ci0gICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRT
aXplKG1fcGVuZGluZ0NvbW1pdERhdGEtPnNpemUoKSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpOwotICAgICAgICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcGVuZGluZ0NvbW1pdERhdGEsIEludFJlY3QoSW50
UG9pbnQoKSwgbV9wZW5kaW5nQ29tbWl0RGF0YS0+c2l6ZSgpKSk7Ci0gICAgICAgICAgICBtX3Bs
YWNlaG9sZGVyQ2FudmFzLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShXVEZNb3ZlKGJ1ZmZl
cikpOwotICAgICAgICAgICAgbV9oYXNQZW5kaW5nQ29tbWl0RGF0YSA9IGZhbHNlOworICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY29tbWl0TG9jayk7CisK
KyAgICAgICAgICAgIGlmIChtX3BsYWNlaG9sZGVyQ2FudmFzICYmIG1faGFzUGVuZGluZ0NvbW1p
dERhdGEpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKG1fcGVuZGluZ0NvbW1pdERhdGEt
PnNpemUoKSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOworICAgICAgICAgICAgICAg
IGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsICptX3BlbmRpbmdDb21taXREYXRhLCBJbnRSZWN0KEludFBvaW50KCksIG1fcGVuZGluZ0Nv
bW1pdERhdGEtPnNpemUoKSkpOworICAgICAgICAgICAgICAgIG1fcGxhY2Vob2xkZXJDYW52YXMt
PnNldEltYWdlQnVmZmVyQW5kTWFya0RpcnR5KFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgICAg
ICAgICAgbV9oYXNQZW5kaW5nQ29tbWl0RGF0YSA9IGZhbHNlOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhbcmVs
ZWFzZVRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYpIHsgfSk7CisgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soeyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrOjpDbGVhbnVwVGFzaywKKyAgICAgICAgICAgIFty
ZWxlYXNlVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JikgeyB9IH0pOwogICAgIH0pOwogfQogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQor
dm9pZCBPZmZzY3JlZW5DYW52YXM6OnB1c2hQZW5kaW5nQ29tbWl0RGF0YVRvQ29tcG9zaXRvcigp
IGNvbnN0Cit7CisgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9CisgICAgICAgIFt0aGlzXShUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkgbXV0YWJsZSB7CisgICAgICAgICAg
ICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOworCisgICAgICAgICAgICBpZiAocHJv
eHkuaXNBY3RpdmUoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gdGV4dHVyZSA9IEJpdG1hcFRl
eHR1cmVHTDo6Y3JlYXRlKFRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlczo6Z2V0KCkpOwor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2NvbW1pdExvY2spOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gc2l6ZSA9IG1f
cGVuZGluZ0NvbW1pdERhdGEtPnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHNp
emUuYXJlYSgpLnVuc2FmZUdldCgpICogNCA9PSBtX3BlbmRpbmdDb21taXREYXRhLT5kYXRhKCkt
Pmxlbmd0aCgpKTsKKworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChzaXplLCBC
aXRtYXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+dXBkYXRlQ29udGVudHMoKHZvaWQqKW1fcGVuZGluZ0NvbW1pdERhdGEtPmRhdGEoKS0+ZGF0
YSgpLCBJbnRSZWN0KEludFBvaW50KCksIHNpemUpLCBJbnRQb2ludCgpLCBzaXplLndpZHRoKCkg
KiA0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhdXRvIGxheWVyQnVm
ZmVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4oV1RGTW92
ZSh0ZXh0dXJlKSk7CisgICAgICAgICAgICAgICAgbGF5ZXJCdWZmZXItPnNldEV4dHJhRmxhZ3Mo
VGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCk7CisgICAgICAgICAgICAgICAgcHJveHkucHVz
aE5leHRCdWZmZXIoV1RGTW92ZShsYXllckJ1ZmZlcikpOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworCisjaWYgVVNFKE5JQ09TSUEpCisgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmlj
b3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBs
KCkpLnByb3h5KCkpOworI2Vsc2UKKyAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVy
UHJveHkpOworI2VuZGlmCit9CisjZW5kaWYKKwogdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNvbW1p
dFRvUGxhY2Vob2xkZXJDYW52YXMoKQogewogICAgIGF1dG8qIGltYWdlQnVmZmVyID0gYnVmZmVy
KCk7CkBAIC0zNzksNiArNDQ0LDE5IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjb21taXRUb1Bs
YWNlaG9sZGVyQ2FudmFzKCkKIAogICAgIGlmIChzaG91bGRQdXNoQnVmZmVyKQogICAgICAgICBw
dXNoQnVmZmVyVG9QbGFjZWhvbGRlcigpOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQor
ICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPSBbdGhpc10gKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHkmIHByb3h5KSBtdXRhYmxlIHsKKyAgICAgICAgcmV0dXJuIHByb3h5LnNjaGVkdWxl
VXBkYXRlT25Db21wb3NpdG9yVGhyZWFkKFt0aGlzXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
IHRoaXMtPnB1c2hQZW5kaW5nQ29tbWl0RGF0YVRvQ29tcG9zaXRvcigpOworICAgICAgICB9KTsK
KyAgICB9OworI2lmIFVTRShOSUNPU0lBKQorICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5p
Y29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1w
bCgpKS5wcm94eSgpKTsKKyNlbHNlCisgICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXll
clByb3h5KTsKKyNlbmRpZgorI2VuZGlmCiB9CiAKIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpzY2hl
ZHVsZUNvbW1pdFRvUGxhY2Vob2xkZXJDYW52YXMoKQpAQCAtNDQzLDYgKzUyMSwyMyBAQCB2b2lk
IE9mZnNjcmVlbkNhbnZhczo6cmVzZXQoKQogICAgIHNjaGVkdWxlQ29tbWl0VG9QbGFjZWhvbGRl
ckNhbnZhcygpOwogfQogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBVU0UoTklDT1NJ
QSkKK1BsYXRmb3JtTGF5ZXIqIE9mZnNjcmVlbkNhbnZhczo6cGxhdGZvcm1MYXllcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLnB0cigpOworfQorI2VsaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKQorUGxhdGZvcm1MYXllciogT2Zmc2NyZWVuQ2FudmFzOjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxPZmZzY3JlZW5DYW52YXMqPih0
aGlzKTsKK30KKworUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IE9mZnNj
cmVlbkNhbnZhczo6cHJveHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXJQ
cm94eS5jb3B5UmVmKCk7Cit9CisjZW5kaWYKKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L09mZnNjcmVlbkNhbnZhcy5oCmluZGV4IDdjYmUxZWFlNDUxOGMwNjgzNDY2YWJjMmY1ZTEwNTMx
Yzc4Yjg5ZjUuLjgxOWVmNGY2ZjlmODBlNDYwZmNiNzA2MDI5MDYwOTcyOGUyYjQyMGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaApAQCAtNDEsNiArNDEsMTIgQEAKICNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisj
aWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBVU0UoTklDT1NJQSkKKyNpbmNsdWRlICJOaWNv
c2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKyNlbGlmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlk
ZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQ7CkBAIC01MCw2ICs1Niw3IEBAIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50Owog
Y2xhc3MgSW1hZ2VCaXRtYXA7CiBjbGFzcyBJbWFnZURhdGE7CiBjbGFzcyBPZmZzY3JlZW5DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ7CitjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5OwogY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OwogCiAjaWYgRU5BQkxFKFdFQkdMKQpA
QCAtODUsNyArOTIsMTMgQEAgcHJpdmF0ZToKICAgICBXZWFrUHRyPEhUTUxDYW52YXNFbGVtZW50
PiBtX3BsYWNlaG9sZGVyQ2FudmFzOwogfTsKIAotY2xhc3MgT2Zmc2NyZWVuQ2FudmFzIGZpbmFs
IDogcHVibGljIFJlZkNvdW50ZWQ8T2Zmc2NyZWVuQ2FudmFzPiwgcHVibGljIENhbnZhc0Jhc2Us
IHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwcml2YXRlIENvbnRleHREZXN0cnVj
dGlvbk9ic2VydmVyIHsKK2NsYXNzIE9mZnNjcmVlbkNhbnZhcyBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGVkPE9mZnNjcmVlbkNhbnZhcz4sIHB1YmxpYyBDYW52YXNCYXNlLCBwdWJsaWMgRXZlbnRU
YXJnZXRXaXRoSW5saW5lRGF0YSwgcHJpdmF0ZSBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcgor
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgVVNFKE5JQ09TSUEpCisgICAgLCBwdWJsaWMg
Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2VsaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQorICAgICwgcHVibGljIFBsYXRmb3JtTGF5ZXIKKyNlbmRpZgor
ewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoT2Zmc2NyZWVuQ2FudmFzKTsKIHB1YmxpYzoK
IApAQCAtMTI5LDYgKzE0MiwxMCBAQCBwdWJsaWM6CiAKICAgICBDU1NWYWx1ZVBvb2wmIGNzc1Zh
bHVlUG9vbCgpOwogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgdXNpbmcgUmVmQ291bnRl
ZDo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ6OmRlcmVmOwogCkBAIC0xNjAsNiArMTc3LDE0
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwdXNoQnVmZmVyVG9QbGFjZWhvbGRlcigpOwogICAgIHZv
aWQgc2NoZWR1bGVDb21taXRUb1BsYWNlaG9sZGVyQ2FudmFzKCk7CiAKKyNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpCisgICAgdm9pZCBwdXNoUGVuZGluZ0NvbW1pdERhdGFUb0NvbXBvc2l0b3Io
KSBjb25zdDsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZSB7IH07Cisj
ZW5kaWYKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmICFVU0UoTklDT1NJQSkKKyAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVy
cmlkZTsKKyNlbmRpZgorCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQ+IG1fY29udGV4dDsKIAogICAgIC8vIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyIG1lYW5zIHdl
IHRyaWVkIHRvIG1hbGxvYyB0aGUgYnVmZmVyLiBXZSBkaWRuJ3QgbmVjZXNzYXJpbHkgZ2V0IGl0
LgpAQCAtMTcyLDYgKzE5NywxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNTY2hlZHVsZWRD
b21taXQgeyBmYWxzZSB9OwogICAgIFdlYWtQdHI8SFRNTENhbnZhc0VsZW1lbnQ+IG1fcGxhY2Vo
b2xkZXJDYW52YXM7CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFVTRShOSUNPU0lB
KQorICAgIFJlZjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOworI2VsaWYg
VVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgorCiAgICAgbXV0YWJsZSBM
b2NrIG1fY29tbWl0TG9jazsKICAgICBib29sIG1faGFzUGVuZGluZ0NvbW1pdERhdGEgeyBmYWxz
ZSB9OwogICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fcGVuZGluZ0NvbW1pdERhdGE7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0LmNwcAppbmRleCAxZWM3YTI0ZWRmNDQ1MjExYmJiYTk5NDJlODE0NmJiMWU3ZjY4NGMw
Li5lNDMxN2Q4ODJjODQxMmY4YjdhZjI3YTllOGVmN2VjNjdiOGViNjhmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29u
dGV4dC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50
LmgiCiAjaW5jbHVkZSAiT2Zmc2NyZWVuQ2FudmFzLmgiCisjaW5jbHVkZSAiUmVuZGVySFRNTENh
bnZhcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTQ5LDYgKzUwLDI1IEBAIEhUTUxDYW52YXNFbGVtZW50KiBQbGFjZWhvbGRl
clJlbmRlcmluZ0NvbnRleHQ6OmNhbnZhcygpIGNvbnN0CiAgICAgcmV0dXJuICZkb3duY2FzdDxI
VE1MQ2FudmFzRWxlbWVudD4oYmFzZSk7CiB9CiAKK3ZvaWQgUGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0OjpzZXRQbGF0Zm9ybUxheWVyKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCit7
CisgICAgaWYgKG1fcGxhdGZvcm1MYXllciA9PSBwbGF0Zm9ybUxheWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3BsYXRmb3JtTGF5ZXIgPSBwbGF0Zm9ybUxheWVyOworCisgICAgaWYgKGF1
dG8qIGh0bWxDYW52YXMgPSBjYW52YXMoKSkgeworICAgICAgICBhdXRvKiByZW5kZXJlciA9IGh0
bWxDYW52YXMtPnJlbmRlcmVyKCk7CisgICAgICAgIGlmIChpczxSZW5kZXJIVE1MQ2FudmFzPihy
ZW5kZXJlcikpIHsKKyAgICAgICAgICAgIGF1dG8mIGNhbnZhc1JlbmRlcmVyID0gZG93bmNhc3Q8
UmVuZGVySFRNTENhbnZhcz4oKnJlbmRlcmVyKTsKKyAgICAgICAgICAgIGlmIChjYW52YXNSZW5k
ZXJlci5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKKyAgICAgICAgICAgICAgICBjYW52
YXNSZW5kZXJlci5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKKyAgICAgICAgICAgICAg
ICBodG1sQ2FudmFzLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dC5oCmluZGV4IDY0NTA5MTQ1OWRkMDFjYzJhNzk3N2RjMDAzYjQ1MjY1ZGU1YmE3ZDguLjM3YzJk
NzRlOGZkODJlZTY0MjA4NDE4NGVlNTUyNzlhZTYwN2NhMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCkBA
IC00MCw4ICs0MCwxNCBAQCBwdWJsaWM6CiAKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
KCkgY29uc3Q7CiAKKyAgICB2b2lkIHNldFBsYXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllciopOwor
CiBwcml2YXRlOgogICAgIGJvb2wgaXNQbGFjZWhvbGRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3BsYXRmb3JtTGF5ZXI7IH0KKworICAgIFBsYXRmb3JtTGF5ZXIqIG1f
cGxhdGZvcm1MYXllciB7IG51bGxwdHIgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNwcAppbmRleCA1NDJiZmE1YmI0ZTIwZWEyMmE3
ZTdkMWYxYzIzZDJhYWQ0YzEwYzdlLi5lMjg3MWY3OTU2MmM1YjA1NTAzMmJhMDFjMTM0NzdiMDRh
NDM5NTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHkuY3BwCkBAIC02NSwxOSArNjUsMjcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5OjphY3RpdmF0ZU9uQ29tcG9zaXRpbmdUaHJlYWQoQ29tcG9zaXRvciogY28KICAgICBB
U1NFUlQobV9jb21wb3NpdG9yVGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CiAgICAgQVNT
RVJUKGNvbXBvc2l0b3IpOwogICAgIEFTU0VSVCh0YXJnZXRMYXllcik7Ci0gICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9sb2NrKTsKLSAgICBtX2NvbXBvc2l0b3IgPSBjb21wb3NpdG9yOwotICAgIG1f
dGFyZ2V0TGF5ZXIgPSB0YXJnZXRMYXllcjsKLSAgICBpZiAobV90YXJnZXRMYXllciAmJiBtX2N1
cnJlbnRCdWZmZXIpCi0gICAgICAgIG1fdGFyZ2V0TGF5ZXItPnNldENvbnRlbnRzTGF5ZXIobV9j
dXJyZW50QnVmZmVyLmdldCgpKTsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IHVwZGF0ZUZ1bmN0aW9u
OworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgbV9j
b21wb3NpdG9yID0gY29tcG9zaXRvcjsKKyAgICAgICAgbV90YXJnZXRMYXllciA9IHRhcmdldExh
eWVyOworICAgICAgICBpZiAobV90YXJnZXRMYXllciAmJiBtX2N1cnJlbnRCdWZmZXIpCisgICAg
ICAgICAgICBtX3RhcmdldExheWVyLT5zZXRDb250ZW50c0xheWVyKG1fY3VycmVudEJ1ZmZlci5n
ZXQoKSk7CiAKLSAgICBtX3JlbGVhc2VVbnVzZWRCdWZmZXJzVGltZXIgPSBtYWtlVW5pcXVlPFJ1
bkxvb3A6OlRpbWVyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+PihSdW5Mb29wOjpj
dXJyZW50KCksIHRoaXMsICZUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjpyZWxlYXNl
VW51c2VkQnVmZmVyc1RpbWVyRmlyZWQpOwotICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0ZVRp
bWVyID0gbWFrZVVuaXF1ZTxSdW5Mb29wOjpUaW1lcjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5Pj4oUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eTo6Y29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVyRmlyZWQpOworICAgICAgICBt
X3JlbGVhc2VVbnVzZWRCdWZmZXJzVGltZXIgPSBtYWtlVW5pcXVlPFJ1bkxvb3A6OlRpbWVyPFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+PihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMs
ICZUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjpyZWxlYXNlVW51c2VkQnVmZmVyc1Rp
bWVyRmlyZWQpOworICAgICAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lciA9IG1ha2VV
bmlxdWU8UnVuTG9vcDo6VGltZXI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4+KFJ1
bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6
OmNvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lckZpcmVkKTsKIAogI2lmIFVTRShHTElCX0VWRU5U
X0xPT1ApCi0gICAgbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXItPnNldFByaW9yaXR5KFJ1
bkxvb3BTb3VyY2VQcmlvcml0eTo6Q29tcG9zaXRpbmdUaHJlYWRVcGRhdGVUaW1lcik7Ci0gICAg
bV9yZWxlYXNlVW51c2VkQnVmZmVyc1RpbWVyLT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJp
b3JpdHk6OlJlbGVhc2VVbnVzZWRSZXNvdXJjZXNUaW1lcik7CisgICAgICAgIG1fY29tcG9zaXRv
clRocmVhZFVwZGF0ZVRpbWVyLT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3JpdHk6OkNv
bXBvc2l0aW5nVGhyZWFkVXBkYXRlVGltZXIpOworICAgICAgICBtX3JlbGVhc2VVbnVzZWRCdWZm
ZXJzVGltZXItPnNldFByaW9yaXR5KFJ1bkxvb3BTb3VyY2VQcmlvcml0eTo6UmVsZWFzZVVudXNl
ZFJlc291cmNlc1RpbWVyKTsKICNlbmRpZgorCisgICAgICAgIGlmICghbV9jb21wb3NpdG9yVGhy
ZWFkVXBkYXRlRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHVwZGF0ZUZ1
bmN0aW9uID0gV1RGTW92ZShtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVGdW5jdGlvbik7CisgICAg
fQorICAgIHVwZGF0ZUZ1bmN0aW9uKCk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eTo6aW52YWxpZGF0ZSgpCkBAIC0yNDksMTAgKzI1NywxMSBAQCB2b2lkIFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6OmRyb3BDdXJyZW50QnVmZmVyV2hpbGVQcmVzZXJ2
aW5nVGV4dHVyZShibwogYm9vbCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjpzY2hl
ZHVsZVVwZGF0ZU9uQ29tcG9zaXRvclRocmVhZChGdW5jdGlvbjx2b2lkKCk+JiYgdXBkYXRlRnVu
Y3Rpb24pCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICBtX2NvbXBvc2l0
b3JUaHJlYWRVcGRhdGVGdW5jdGlvbiA9IFdURk1vdmUodXBkYXRlRnVuY3Rpb24pOworCiAgICAg
aWYgKCFtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlRnVuY3Rpb24gPSBXVEZNb3ZlKHVwZGF0
ZUZ1bmN0aW9uKTsKICAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lci0+c3RhcnRPbmVT
aG90KDBfcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySFRNTENhbnZhcy5jcHAKaW5kZXggN2RkZDM3MmVjNDRlNWQ2OTg3MmQ2YjhjZWY0
MjIzZGJlOTIxZWFkZS4uY2Q5YjIyOTg2ZDcwYmQyMjFlNzNlZjEzZjAyOGJhZTEzMThhNTU0YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcApAQCAt
NjAsOCArNjAsMTMgQEAgYm9vbCBSZW5kZXJIVE1MQ2FudmFzOjpyZXF1aXJlc0xheWVyKCkgY29u
c3QKICAgICBpZiAoUmVuZGVyUmVwbGFjZWQ6OnJlcXVpcmVzTGF5ZXIoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBpZiAoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IGNh
bnZhc0VsZW1lbnQoKS5yZW5kZXJpbmdDb250ZXh0KCkpCisgICAgaWYgKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXNFbGVtZW50KCkucmVuZGVyaW5nQ29udGV4dCgpKSB7
CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgICAgICByZXR1cm4gY29udGV4dC0+aXNB
Y2NlbGVyYXRlZCgpIHx8IGNvbnRleHQtPmlzUGxhY2Vob2xkZXIoKTsKKyNlbHNlCiAgICAgICAg
IHJldHVybiBjb250ZXh0LT5pc0FjY2VsZXJhdGVkKCk7CisjZW5kaWYKKyAgICB9CiAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCmluZGV4IDUxOWQzNjEwNzgwOGUzNjJmN2MwNDBmNDI3OGM4ODNhMmYzOTA2
MWUuLmZkYmY4OWE3OWVlMGRjNGEzYTNlMmIxNDVmM2YxNjViYTFjNWFkOGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC04OCw2ICs4
OCwxMSBAQCBDYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5IGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRl
Z3koY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcgogICAgIEFTU0VSVChyZW5kZXJlci5pc0Nh
bnZhcygpKTsKICAgICAKICAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gZG93
bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyLm5vZGUoKSk7CisjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKQorICAgIGlmIChjYW52YXMtPmlzQ29udHJvbGxlZEJ5T2Zmc2NyZWVuKCkp
CisgICAgICAgIHJldHVybiBDYW52YXNBc0xheWVyQ29udGVudHM7CisjZW5kaWYKKwogICAgIGF1
dG8qIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsKICAgICBpZiAoIWNvbnRl
eHQgfHwgIWNvbnRleHQtPmlzQWNjZWxlcmF0ZWQoKSkKICAgICAgICAgcmV0dXJuIFVuYWNjZWxl
cmF0ZWRDYW52YXM7CkBAIC0xMDUwLDcgKzEwNTUsNiBAQCBib29sIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlQ29uZmlndXJhdGlvbihjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNl
cwogICAgICAgICB1cGRhdGVDb250ZW50c1JlY3RzKCk7CiAgICAgfQogI2VuZGlmCi0jaWYgRU5B
QkxFKFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUoV0VC
R1BVKQogICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkuaXNDYW52YXMoKSAmJiBjYW52YXNDb21wb3Np
dGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJDb250ZW50cykgewogICAg
ICAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZh
c0VsZW1lbnQ+KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKICAgICAgICAgaWYgKGF1dG8qIGNvbnRl
eHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSkKQEAgLTEwNTgsNyArMTA2Miw2IEBAIGJv
b2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKGNvbnN0IFJlbmRlckxh
eWVyKiBjb21wb3NpdGluZ0FuY2VzCiAKICAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gdHJ1
ZTsKICAgICB9Ci0jZW5kaWYKICAgICBpZiAoaXM8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcigpKSAm
JiBjb21wb3NpdG9yLnBhcmVudEZyYW1lQ29udGVudExheWVycyhkb3duY2FzdDxSZW5kZXJXaWRn
ZXQ+KHJlbmRlcmVyKCkpKSkgewogICAgICAgICBtX293bmluZ0xheWVyLnNldE5lZWRzQ29tcG9z
aXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVl
OwpAQCAtMjY3NCwxMCArMjY3Nyw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250YWlu
c1BhaW50ZWRDb250ZW50KFBhaW50ZWRDb250ZW50c0luZm8mIGNvbnRlbnRzSW5mCiAgICAgICAg
IHJldHVybiBtX293bmluZ0xheWVyLmhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3Vu
ZCgpIHx8ICghKGRvd25jYXN0PFJlbmRlclZpZGVvPihyZW5kZXJlcigpKS5zdXBwb3J0c0FjY2Vs
ZXJhdGVkUmVuZGVyaW5nKCkpICYmIG1fcmVxdWlyZXNPd25CYWNraW5nU3RvcmUpOwogI2VuZGlm
CiAKLSNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAg
ICAgaWYgKGlzPFJlbmRlckhUTUxDYW52YXM+KHJlbmRlcmVyKCkpICYmIGNhbnZhc0NvbXBvc2l0
aW5nU3RyYXRlZ3kocmVuZGVyZXIoKSkgPT0gQ2FudmFzQXNMYXllckNvbnRlbnRzKQogICAgICAg
ICByZXR1cm4gbV9vd25pbmdMYXllci5oYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91
bmQoKTsKLSNlbmRpZgogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yNzM5LDcgKzI3NDAsNiBA
QCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6Y29udGVudENoYW5nZWQoQ29udGVudENoYW5nZVR5
cGUgY2hhbmdlVHlwZSkKICAgICBpZiAoKGNoYW5nZVR5cGUgPT0gTWFza0ltYWdlQ2hhbmdlZCkg
JiYgbV9tYXNrTGF5ZXIpCiAgICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNDb21wb3NpdGlu
Z0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKIAotI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQVSkKICAgICBpZiAoKGNoYW5nZVR5
cGUgPT0gQ2FudmFzQ2hhbmdlZCB8fCBjaGFuZ2VUeXBlID09IENhbnZhc1BpeGVsc0NoYW5nZWQp
ICYmIHJlbmRlcmVyKCkuaXNDYW52YXMoKSAmJiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJl
bmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJDb250ZW50cykgewogICAgICAgICBpZiAoY2hhbmdl
VHlwZSA9PSBDYW52YXNDaGFuZ2VkKQogICAgICAgICAgICAgY29tcG9zaXRvcigpLnNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllclVwZGF0ZSgpOwpAQCAtMjc0Nyw3ICsyNzQ3LDYgQEAgdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OmNvbnRlbnRDaGFuZ2VkKENvbnRlbnRDaGFuZ2VUeXBlIGNoYW5nZVR5
cGUpCiAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6dXBkYXRlSW1hZ2VDb250ZW50cyhQYWludGVkQ29udGVudHNJbmZvJiBjb250ZW50c0lu
Zm8pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407389</attachid>
            <date>2020-08-27 04:06:33 -0700</date>
            <delta_ts>2020-09-04 04:01:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202798-20200827120631.patch</filename>
            <type>text/plain</type>
            <size>18635</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc3ZmU0NzA0OTg3NWJk
M2YxNjI4YjVhMjI1NTRlMThhNzM3OWNkZS4uOGViNGZkMDk0ZWVmNzc1ZGYwZmZlNjc0NzNhMzYw
NzQxYzg3ZjM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIwLTA4LTEyICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYXN5bmNocm9u
b3VzIE9mZnNjcmVlbkNhbnZhcyBwbGFjZWhvbGRlciB1cGRhdGVzIGZvciBUZXh0dXJlTWFwcGVy
R0wtYmFzZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAyNzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IGFzeW5jaHJvbm91cyB1cGRhdGVzIGZvciB1c2VycyBvZiB0
aGUgVGV4dHVyZU1hcHBlckdMCisgICAgICAgIGNvbXBvc2l0b3IgKGUuZy4gR1RLLCBXUEUpLiBU
aGlzIGFsbG93cyBPZmZzY3JlZW5DYW52YXMtY29udHJvbGxlZAorICAgICAgICBjYW52YXNlcyB0
byB1cGRhdGUgdmlzdWFsbHkgd2hpbGUgdGhlIG1haW4gdGhyZWFkIGlzIGJsb2NrZWQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVu
Q2FudmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpPZmZz
Y3JlZW5DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp+T2Zmc2Ny
ZWVuQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6cHVzaEJ1ZmZl
clRvUGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpwdXNo
UGVuZGluZ0NvbW1pdERhdGFUb0NvbXBvc2l0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
T2Zmc2NyZWVuQ2FudmFzOjpjb21taXRUb1BsYWNlaG9sZGVyQ2FudmFzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgICog
aHRtbC9PZmZzY3JlZW5DYW52YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QbGFjZWhvbGRl
clJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJSZW5k
ZXJpbmdDb250ZXh0OjpzZXRQbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9Q
bGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjphY3RpdmF0ZU9uQ29tcG9z
aXRpbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eTo6c2NoZWR1bGVVcGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FudmFz
Q29tcG9zaXRpbmdTdHJhdGVneSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjpjb250YWluc1BhaW50ZWRDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQmFja2luZzo6Y29udGVudENoYW5nZWQpOgorCiAyMDIwLTA4LTI3ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBbmltYXRpb24gYXJlIGlu
dmFsaWRhdGluZyB0b28gbXVjaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3Bw
CmluZGV4IGFhZDMzYTg5OGYyMGMyMzRlMzNiNTBiMGU4Mjk3ZTlmZjYzOGQ3MWMuLjhhYWRmNGRi
ZjVhZWEyM2I1MzcyMmYyMDM1NWFhNThjNTdkZTZlMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09m
ZnNjcmVlbkNhbnZhcy5jcHAKQEAgLTQzLDYgKzQzLDEyIEBACiAjaW5jbHVkZSAiV29ya2VyR2xv
YmFsU2NvcGUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBVU0UoTklDT1NJQSkKKyNpbmNsdWRlICJCaXRtYXBUZXh0
dXJlR0wuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChPZmZzY3Jl
ZW5DYW52YXMpOwpAQCAtNzksNiArODUsMTIgQEAgUmVmPE9mZnNjcmVlbkNhbnZhcz4gT2Zmc2Ny
ZWVuQ2FudmFzOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgc3QKIAog
ICAgIGNhbGxPbk1haW5UaHJlYWQoW2RldGFjaGVkQ2FudmFzID0gV1RGTW92ZShkZXRhY2hlZENh
bnZhcyksIG9mZnNjcmVlbkNhbnZhcyA9IG1ha2VSZWYoY2xvbmUuZ2V0KCkpXSAoKSBtdXRhYmxl
IHsKICAgICAgICAgb2Zmc2NyZWVuQ2FudmFzLT5tX3BsYWNlaG9sZGVyQ2FudmFzID0gZGV0YWNo
ZWRDYW52YXMtPnRha2VQbGFjZWhvbGRlckNhbnZhcygpOworI2lmIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkgJiYgVVNFKE5JQ09TSUEpCisgICAgICAgIGlmIChvZmZzY3JlZW5DYW52YXMtPm1fcGxh
Y2Vob2xkZXJDYW52YXMpIHsKKyAgICAgICAgICAgIGF1dG8mIHBsYWNlaG9sZGVyQ29udGV4dCA9
IGRvd25jYXN0PFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dD4oKm9mZnNjcmVlbkNhbnZhcy0+
bV9wbGFjZWhvbGRlckNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKTsKKyAgICAgICAgICAgIHBs
YWNlaG9sZGVyQ29udGV4dC5zZXRQbGF0Zm9ybUxheWVyKG9mZnNjcmVlbkNhbnZhcy0+cGxhdGZv
cm1MYXllcigpKTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIG9mZnNjcmVlbkNhbnZhcy0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayh7IFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s6OkNsZWFudXBUYXNrLAogICAgICAgICAgICAgW3JlbGVhc2VPZmZzY3JlZW5DYW52
YXMgPSBXVEZNb3ZlKG9mZnNjcmVlbkNhbnZhcyldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jikg
eyB9IH0pOwogICAgIH0pOwpAQCAtOTYsNiArMTA4LDkgQEAgUmVmPE9mZnNjcmVlbkNhbnZhcz4g
T2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
SFQKIE9mZnNjcmVlbkNhbnZhczo6T2Zmc2NyZWVuQ2FudmFzKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiAgICAgOiBDYW52
YXNCYXNlKEludFNpemUod2lkdGgsIGhlaWdodCkpCiAgICAgLCBDb250ZXh0RGVzdHJ1Y3Rpb25P
YnNlcnZlcigmY29udGV4dCkKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFVTRShOSUNP
U0lBKQorICAgICwgbV9uaWNvc2lhTGF5ZXIoTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUo
Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRo
aXMpKSkKKyNlbmRpZgogewogfQogCkBAIC0xMDMsNiArMTE4LDE2IEBAIE9mZnNjcmVlbkNhbnZh
czo6fk9mZnNjcmVlbkNhbnZhcygpCiB7CiAgICAgbm90aWZ5T2JzZXJ2ZXJzQ2FudmFzRGVzdHJv
eWVkKCk7CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFVTRShOSUNPU0lBKQorICAg
IGNhbGxPbk1haW5UaHJlYWQoW3BsYWNlaG9sZGVyID0gV1RGTW92ZShtX3BsYWNlaG9sZGVyQ2Fu
dmFzKV0gKCkgeworICAgICAgICBpZiAocGxhY2Vob2xkZXIpIHsKKyAgICAgICAgICAgIGF1dG8m
IHBsYWNlaG9sZGVyQ29udGV4dCA9IGRvd25jYXN0PFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dD4oKnBsYWNlaG9sZGVyLT5yZW5kZXJpbmdDb250ZXh0KCkpOworICAgICAgICAgICAgcGxhY2Vo
b2xkZXJDb250ZXh0LnNldFBsYXRmb3JtTGF5ZXIobnVsbHB0cik7CisgICAgICAgIH0KKyAgICB9
KTsKKyAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4o
bV9uaWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCisKICAg
ICBtX2NvbnRleHQgPSBudWxscHRyOyAvLyBFbnN1cmUgdGhpcyBnb2VzIGF3YXkgYmVmb3JlIHRo
ZSBJbWFnZUJ1ZmZlci4KICAgICBzZXRJbWFnZUJ1ZmZlcihudWxscHRyKTsKIH0KQEAgLTM0MCwx
OSArMzY1LDUxIEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpzZXRQbGFjZWhvbGRlckNhbnZhcyhI
VE1MQ2FudmFzRWxlbWVudCYgY2FudmFzKQogdm9pZCBPZmZzY3JlZW5DYW52YXM6OnB1c2hCdWZm
ZXJUb1BsYWNlaG9sZGVyKCkKIHsKICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIHRoaXNdICgpIG11dGFibGUgewotICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fY29tbWl0TG9jayk7Ci0KLSAgICAgICAgaWYgKG1fcGxhY2Vob2xkZXJD
YW52YXMgJiYgbV9oYXNQZW5kaW5nQ29tbWl0RGF0YSkgewotICAgICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6
ZShtX3BlbmRpbmdDb21taXREYXRhLT5zaXplKCkpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkKTsKLSAgICAgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsICptX3BlbmRpbmdDb21taXREYXRhLCBJbnRSZWN0KEludFBv
aW50KCksIG1fcGVuZGluZ0NvbW1pdERhdGEtPnNpemUoKSkpOwotICAgICAgICAgICAgbV9wbGFj
ZWhvbGRlckNhbnZhcy0+c2V0SW1hZ2VCdWZmZXJBbmRNYXJrRGlydHkoV1RGTW92ZShidWZmZXIp
KTsKLSAgICAgICAgICAgIG1faGFzUGVuZGluZ0NvbW1pdERhdGEgPSBmYWxzZTsKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2NvbW1pdExvY2spOworCisg
ICAgICAgICAgICBpZiAobV9wbGFjZWhvbGRlckNhbnZhcyAmJiBtX2hhc1BlbmRpbmdDb21taXRE
YXRhKSB7CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShtX3BlbmRpbmdDb21taXREYXRhLT5z
aXplKCkpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKKyAgICAgICAgICAgICAgICBi
dWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCAqbV9wZW5kaW5nQ29tbWl0RGF0YSwgSW50UmVjdChJbnRQb2ludCgpLCBtX3BlbmRpbmdDb21t
aXREYXRhLT5zaXplKCkpKTsKKyAgICAgICAgICAgICAgICBtX3BsYWNlaG9sZGVyQ2FudmFzLT5z
ZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICAgICAg
ICAgIG1faGFzUGVuZGluZ0NvbW1pdERhdGEgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soW3JlbGVh
c2VUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
KSB7IH0pOworICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKHsgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzazo6Q2xlYW51cFRhc2ssCisgICAgICAgICAgICBbcmVs
ZWFzZVRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYpIHsgfSB9KTsKICAgICB9KTsKIH0KIAorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYg
VVNFKE5JQ09TSUEpCit2b2lkIE9mZnNjcmVlbkNhbnZhczo6cHVzaFBlbmRpbmdDb21taXREYXRh
VG9Db21wb3NpdG9yKCkgY29uc3QKK3sKKyAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAg
ICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7CisKKyAgICAg
ICAgICAgIGlmIChwcm94eS5pc0FjdGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgYXV0byB0ZXh0
dXJlID0gQml0bWFwVGV4dHVyZUdMOjpjcmVhdGUoVGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1
dGVzOjpnZXQoKSk7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fY29tbWl0TG9jayk7CisKKyAgICAgICAgICAgICAgICAgICAg
YXV0byBzaXplID0gbV9wZW5kaW5nQ29tbWl0RGF0YS0+c2l6ZSgpOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoc2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkgKiA0ID09IG1fcGVuZGluZ0NvbW1p
dERhdGEtPmRhdGEoKS0+bGVuZ3RoKCkpOworCisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUt
PnJlc2V0KHNpemUsIEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEpOworICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cygodm9pZCopbV9wZW5kaW5nQ29tbWl0RGF0
YS0+ZGF0YSgpLT5kYXRhKCksIEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSksIEludFBvaW50KCks
IHNpemUud2lkdGgoKSAqIDQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGF1dG8gbGF5ZXJCdWZmZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
QnVmZmVyPihXVEZNb3ZlKHRleHR1cmUpKTsKKyAgICAgICAgICAgICAgICBsYXllckJ1ZmZlci0+
c2V0RXh0cmFGbGFncyhUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kKTsKKyAgICAgICAgICAg
ICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGxheWVyQnVmZmVyKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisKKyAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lh
OjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSku
cHJveHkoKSk7Cit9CisjZW5kaWYKKwogdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNvbW1pdFRvUGxh
Y2Vob2xkZXJDYW52YXMoKQogewogICAgIGF1dG8qIGltYWdlQnVmZmVyID0gYnVmZmVyKCk7CkBA
IC0zNzksNiArNDM2LDE1IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjb21taXRUb1BsYWNlaG9s
ZGVyQ2FudmFzKCkKIAogICAgIGlmIChzaG91bGRQdXNoQnVmZmVyKQogICAgICAgICBwdXNoQnVm
ZmVyVG9QbGFjZWhvbGRlcigpOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBVU0Uo
TklDT1NJQSkKKyAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0gW3RoaXNdIChUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkgbXV0YWJsZSB7CisgICAgICAgIHJldHVybiBwcm94
eS5zY2hlZHVsZVVwZGF0ZU9uQ29tcG9zaXRvclRocmVhZChbdGhpc10gKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICB0aGlzLT5wdXNoUGVuZGluZ0NvbW1pdERhdGFUb0NvbXBvc2l0b3IoKTsKKyAg
ICAgICAgfSk7CisgICAgfTsKKyAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpD
b250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJv
eHkoKSk7CisjZW5kaWYKIH0KIAogdm9pZCBPZmZzY3JlZW5DYW52YXM6OnNjaGVkdWxlQ29tbWl0
VG9QbGFjZWhvbGRlckNhbnZhcygpCkBAIC00NDMsNiArNTA5LDEzIEBAIHZvaWQgT2Zmc2NyZWVu
Q2FudmFzOjpyZXNldCgpCiAgICAgc2NoZWR1bGVDb21taXRUb1BsYWNlaG9sZGVyQ2FudmFzKCk7
CiB9CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFVTRShOSUNPU0lBKQorUGxhdGZv
cm1MYXllciogT2Zmc2NyZWVuQ2FudmFzOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9uaWNvc2lhTGF5ZXIucHRyKCk7Cit9CisjZW5kaWYKKwogfQogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCmluZGV4IDdjYmUxZWFlNDUxOGMwNjgzNDY2
YWJjMmY1ZTEwNTMxYzc4Yjg5ZjUuLjQ2ZGViM2Q2MDgxM2M0Y2NkOTJkYTMwOTE5NTM5YjgyNDIw
MmQ3NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaApAQCAtNDEsNiArNDEs
MTAgQEAKICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBVU0UoTklDT1NJQSkKKyNp
bmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7CkBA
IC01MCw2ICs1NCw3IEBAIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50OwogY2xhc3MgSW1hZ2VCaXRt
YXA7CiBjbGFzcyBJbWFnZURhdGE7CiBjbGFzcyBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ7CitjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OwogY2xhc3MgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OwogCiAjaWYgRU5BQkxFKFdFQkdMKQpAQCAtODUsNyArOTAsMTEg
QEAgcHJpdmF0ZToKICAgICBXZWFrUHRyPEhUTUxDYW52YXNFbGVtZW50PiBtX3BsYWNlaG9sZGVy
Q2FudmFzOwogfTsKIAotY2xhc3MgT2Zmc2NyZWVuQ2FudmFzIGZpbmFsIDogcHVibGljIFJlZkNv
dW50ZWQ8T2Zmc2NyZWVuQ2FudmFzPiwgcHVibGljIENhbnZhc0Jhc2UsIHB1YmxpYyBFdmVudFRh
cmdldFdpdGhJbmxpbmVEYXRhLCBwcml2YXRlIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyIHsK
K2NsYXNzIE9mZnNjcmVlbkNhbnZhcyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPE9mZnNjcmVl
bkNhbnZhcz4sIHB1YmxpYyBDYW52YXNCYXNlLCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5l
RGF0YSwgcHJpdmF0ZSBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcgorI2lmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkgJiYgVVNFKE5JQ09TSUEpCisgICAgLCBwdWJsaWMgTmljb3NpYTo6Q29udGVu
dExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2VuZGlmCit7CiAgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChPZmZzY3JlZW5DYW52YXMpOwogcHVibGljOgogCkBAIC0xMjksNiArMTM4
LDEwIEBAIHB1YmxpYzoKIAogICAgIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCk7CiAKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFVTRShOSUNPU0lBKQorICAgIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgdXNpbmcgUmVmQ291bnRl
ZDo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ6OmRlcmVmOwogCkBAIC0xNjAsNiArMTczLDEx
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwdXNoQnVmZmVyVG9QbGFjZWhvbGRlcigpOwogICAgIHZv
aWQgc2NoZWR1bGVDb21taXRUb1BsYWNlaG9sZGVyQ2FudmFzKCk7CiAKKyNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpICYmIFVTRShOSUNPU0lBKQorICAgIHZvaWQgcHVzaFBlbmRpbmdDb21taXRE
YXRhVG9Db21wb3NpdG9yKCkgY29uc3Q7CisgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkg
b3ZlcnJpZGUgeyB9OworI2VuZGlmCisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dD4gbV9jb250ZXh0OwogCiAgICAgLy8gbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIg
bWVhbnMgd2UgdHJpZWQgdG8gbWFsbG9jIHRoZSBidWZmZXIuIFdlIGRpZG4ndCBuZWNlc3Nhcmls
eSBnZXQgaXQuCkBAIC0xNzIsNiArMTkwLDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1Nj
aGVkdWxlZENvbW1pdCB7IGZhbHNlIH07CiAgICAgV2Vha1B0cjxIVE1MQ2FudmFzRWxlbWVudD4g
bV9wbGFjZWhvbGRlckNhbnZhczsKIAorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgVVNF
KE5JQ09TSUEpCisgICAgUmVmPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7
CisjZW5kaWYKKwogICAgIG11dGFibGUgTG9jayBtX2NvbW1pdExvY2s7CiAgICAgYm9vbCBtX2hh
c1BlbmRpbmdDb21taXREYXRhIHsgZmFsc2UgfTsKICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3Bl
bmRpbmdDb21taXREYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMWVjN2EyNGVkZjQ0NTIx
MWJiYmE5OTQyZTgxNDZiYjFlN2Y2ODRjMC4uZTQzMTdkODgyYzg0MTJmOGI3YWYyN2E5ZThlZjdl
YzY3YjhlYjY4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vo
b2xkZXJSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNp
bmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIk9mZnNjcmVlbkNhbnZhcy5o
IgorI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OSw2ICs1MCwyNSBAQCBIVE1M
Q2FudmFzRWxlbWVudCogUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25z
dAogICAgIHJldHVybiAmZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGJhc2UpOwogfQogCit2
b2lkIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6c2V0UGxhdGZvcm1MYXllcihQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKQoreworICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIgPT0gcGxh
dGZvcm1MYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wbGF0Zm9ybUxheWVyID0gcGxh
dGZvcm1MYXllcjsKKworICAgIGlmIChhdXRvKiBodG1sQ2FudmFzID0gY2FudmFzKCkpIHsKKyAg
ICAgICAgYXV0byogcmVuZGVyZXIgPSBodG1sQ2FudmFzLT5yZW5kZXJlcigpOworICAgICAgICBp
ZiAoaXM8UmVuZGVySFRNTENhbnZhcz4ocmVuZGVyZXIpKSB7CisgICAgICAgICAgICBhdXRvJiBj
YW52YXNSZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckhUTUxDYW52YXM+KCpyZW5kZXJlcik7Cisg
ICAgICAgICAgICBpZiAoY2FudmFzUmVuZGVyZXIuaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygp
KSB7CisgICAgICAgICAgICAgICAgY2FudmFzUmVuZGVyZXIuY29udGVudENoYW5nZWQoQ2FudmFz
Q2hhbmdlZCk7CisgICAgICAgICAgICAgICAgaHRtbENhbnZhcy0+aW52YWxpZGF0ZVN0eWxlQW5k
TGF5ZXJDb21wb3NpdGlvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxh
Y2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9Q
bGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA2NDUwOTE0NTlkZDAxY2MyYTc5Nzdk
YzAwM2I0NTI2NWRlNWJhN2Q4Li42OTgyMmFiYjEyNWUyMWMwOTZlNzVhNjAxYjZhODVlNTJiZjc3
ZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhv
bGRlclJlbmRlcmluZ0NvbnRleHQuaApAQCAtNDAsOCArNDAsMTggQEAgcHVibGljOgogCiAgICAg
SFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcygpIGNvbnN0OwogCisgICAgdm9pZCBzZXRQbGF0Zm9y
bUxheWVyKFBsYXRmb3JtTGF5ZXIqKTsKKwogcHJpdmF0ZToKICAgICBib29sIGlzUGxhY2Vob2xk
ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbGF0Zm9ybUxheWVyOyB9
CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFVTRShOSUNPU0lBKQorICAgIGJvb2wg
aXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgor
CisgICAgUGxhdGZvcm1MYXllciogbV9wbGF0Zm9ybUxheWVyIHsgbnVsbHB0ciB9OwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuY3BwCmlu
ZGV4IDU0MmJmYTViYjRlMjBlYTIyYTdlN2QxZjFjMjNkMmFhZDRjMTBjN2UuLmUyODcxZjc5NTYy
YzViMDU1MDMyYmEwMWMxMzQ3N2IwNGE0Mzk1MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHAKQEAgLTY1LDE5ICs2NSwyNyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6OmFjdGl2YXRlT25Db21wb3NpdGluZ1RocmVh
ZChDb21wb3NpdG9yKiBjbwogICAgIEFTU0VSVChtX2NvbXBvc2l0b3JUaHJlYWQgPT0gJlRocmVh
ZDo6Y3VycmVudCgpKTsKICAgICBBU1NFUlQoY29tcG9zaXRvcik7CiAgICAgQVNTRVJUKHRhcmdl
dExheWVyKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwotICAgIG1fY29tcG9zaXRv
ciA9IGNvbXBvc2l0b3I7Ci0gICAgbV90YXJnZXRMYXllciA9IHRhcmdldExheWVyOwotICAgIGlm
IChtX3RhcmdldExheWVyICYmIG1fY3VycmVudEJ1ZmZlcikKLSAgICAgICAgbV90YXJnZXRMYXll
ci0+c2V0Q29udGVudHNMYXllcihtX2N1cnJlbnRCdWZmZXIuZ2V0KCkpOworICAgIEZ1bmN0aW9u
PHZvaWQoKT4gdXBkYXRlRnVuY3Rpb247CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2xvY2spOworICAgICAgICBtX2NvbXBvc2l0b3IgPSBjb21wb3NpdG9yOworICAgICAgICBt
X3RhcmdldExheWVyID0gdGFyZ2V0TGF5ZXI7CisgICAgICAgIGlmIChtX3RhcmdldExheWVyICYm
IG1fY3VycmVudEJ1ZmZlcikKKyAgICAgICAgICAgIG1fdGFyZ2V0TGF5ZXItPnNldENvbnRlbnRz
TGF5ZXIobV9jdXJyZW50QnVmZmVyLmdldCgpKTsKIAotICAgIG1fcmVsZWFzZVVudXNlZEJ1ZmZl
cnNUaW1lciA9IG1ha2VVbmlxdWU8UnVuTG9vcDo6VGltZXI8VGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eT4+KFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJlRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHk6OnJlbGVhc2VVbnVzZWRCdWZmZXJzVGltZXJGaXJlZCk7Ci0gICAgbV9j
b21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXIgPSBtYWtlVW5pcXVlPFJ1bkxvb3A6OlRpbWVyPFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+PihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMs
ICZUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Ojpjb21wb3NpdG9yVGhyZWFkVXBkYXRl
VGltZXJGaXJlZCk7CisgICAgICAgIG1fcmVsZWFzZVVudXNlZEJ1ZmZlcnNUaW1lciA9IG1ha2VV
bmlxdWU8UnVuTG9vcDo6VGltZXI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4+KFJ1
bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6
OnJlbGVhc2VVbnVzZWRCdWZmZXJzVGltZXJGaXJlZCk7CisgICAgICAgIG1fY29tcG9zaXRvclRo
cmVhZFVwZGF0ZVRpbWVyID0gbWFrZVVuaXF1ZTxSdW5Mb29wOjpUaW1lcjxUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5Pj4oUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6Y29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVyRmlyZWQp
OwogCiAjaWYgVVNFKEdMSUJfRVZFTlRfTE9PUCkKLSAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRh
dGVUaW1lci0+c2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpDb21wb3NpdGluZ1Ro
cmVhZFVwZGF0ZVRpbWVyKTsKLSAgICBtX3JlbGVhc2VVbnVzZWRCdWZmZXJzVGltZXItPnNldFBy
aW9yaXR5KFJ1bkxvb3BTb3VyY2VQcmlvcml0eTo6UmVsZWFzZVVudXNlZFJlc291cmNlc1RpbWVy
KTsKKyAgICAgICAgbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXItPnNldFByaW9yaXR5KFJ1
bkxvb3BTb3VyY2VQcmlvcml0eTo6Q29tcG9zaXRpbmdUaHJlYWRVcGRhdGVUaW1lcik7CisgICAg
ICAgIG1fcmVsZWFzZVVudXNlZEJ1ZmZlcnNUaW1lci0+c2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJj
ZVByaW9yaXR5OjpSZWxlYXNlVW51c2VkUmVzb3VyY2VzVGltZXIpOwogI2VuZGlmCisKKyAgICAg
ICAgaWYgKCFtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVGdW5jdGlvbikKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgdXBkYXRlRnVuY3Rpb24gPSBXVEZNb3ZlKG1fY29tcG9zaXRvclRocmVh
ZFVwZGF0ZUZ1bmN0aW9uKTsKKyAgICB9CisgICAgdXBkYXRlRnVuY3Rpb24oKTsKIH0KIAogdm9p
ZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjppbnZhbGlkYXRlKCkKQEAgLTI0OSwx
MCArMjU3LDExIEBAIHZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6ZHJvcEN1
cnJlbnRCdWZmZXJXaGlsZVByZXNlcnZpbmdUZXh0dXJlKGJvCiBib29sIFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHk6OnNjaGVkdWxlVXBkYXRlT25Db21wb3NpdG9yVGhyZWFkKEZ1bmN0
aW9uPHZvaWQoKT4mJiB1cGRhdGVGdW5jdGlvbikKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2xvY2spOworICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0ZUZ1bmN0aW9uID0gV1RGTW92ZSh1
cGRhdGVGdW5jdGlvbik7CisKICAgICBpZiAoIW1fY29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVG
dW5jdGlvbiA9IFdURk1vdmUodXBkYXRlRnVuY3Rpb24pOwogICAgIG1fY29tcG9zaXRvclRocmVh
ZFVwZGF0ZVRpbWVyLT5zdGFydE9uZVNob3QoMF9zKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXgg
NTE5ZDM2MTA3ODA4ZTM2MmY3YzA0MGY0Mjc4Yzg4M2EyZjM5MDYxZS4uNDlmOTc5MGNiM2VlNWM3
MjUyZDY5ZGM5ZjRmNzBmNDRiMzM5ODIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTg4LDEwICs4OCwxNCBAQCBDYW52YXNDb21w
b3NpdGluZ1N0cmF0ZWd5IGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3koY29uc3QgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJlcgogICAgIEFTU0VSVChyZW5kZXJlci5pc0NhbnZhcygpKTsKICAgICAKICAg
ICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0Vs
ZW1lbnQ+KHJlbmRlcmVyLm5vZGUoKSk7CisKICAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzLT5y
ZW5kZXJpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5pc0FjY2Vs
ZXJhdGVkKCkpCiAgICAgICAgIHJldHVybiBVbmFjY2VsZXJhdGVkQ2FudmFzOwotICAgIAorCisg
ICAgaWYgKGNhbnZhcy0+aXNDb250cm9sbGVkQnlPZmZzY3JlZW4oKSkKKyAgICAgICAgcmV0dXJu
IENhbnZhc0FzTGF5ZXJDb250ZW50czsKKwogICAgIGlmIChjb250ZXh0LT5pc0dQVUJhc2VkKCkp
CiAgICAgICAgIHJldHVybiBDYW52YXNBc0xheWVyQ29udGVudHM7CiAKQEAgLTEwNTAsNyArMTA1
NCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKGNvbnN0
IFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzCiAgICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVj
dHMoKTsKICAgICB9CiAjZW5kaWYKLSNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRShXRUJHUFUpCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUoV0VCR1BVKSB8fCBFTkFCTEUo
T0ZGU0NSRUVOX0NBTlZBUykKICAgICBlbHNlIGlmIChyZW5kZXJlcigpLmlzQ2FudmFzKCkgJiYg
Y2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneShyZW5kZXJlcigpKSA9PSBDYW52YXNBc0xheWVyQ29u
dGVudHMpIHsKICAgICAgICAgY29uc3QgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGRvd25j
YXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlcigpLmVsZW1lbnQoKSk7CiAgICAgICAgIGlm
IChhdXRvKiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpCkBAIC0yNjc0LDcg
KzI2NzgsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6Y29udGFpbnNQYWludGVkQ29udGVu
dChQYWludGVkQ29udGVudHNJbmZvJiBjb250ZW50c0luZgogICAgICAgICByZXR1cm4gbV9vd25p
bmdMYXllci5oYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSB8fCAoIShkb3du
Y2FzdDxSZW5kZXJWaWRlbz4ocmVuZGVyZXIoKSkuc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmlu
ZygpKSAmJiBtX3JlcXVpcmVzT3duQmFja2luZ1N0b3JlKTsKICNlbmRpZgogCi0jaWYgRU5BQkxF
KFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorI2lmIEVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKE9GRlNDUkVFTl9D
QU5WQVMpCiAgICAgaWYgKGlzPFJlbmRlckhUTUxDYW52YXM+KHJlbmRlcmVyKCkpICYmIGNhbnZh
c0NvbXBvc2l0aW5nU3RyYXRlZ3kocmVuZGVyZXIoKSkgPT0gQ2FudmFzQXNMYXllckNvbnRlbnRz
KQogICAgICAgICByZXR1cm4gbV9vd25pbmdMYXllci5oYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNP
ckJhY2tncm91bmQoKTsKICNlbmRpZgpAQCAtMjczOSw3ICsyNzQzLDcgQEAgdm9pZCBSZW5kZXJM
YXllckJhY2tpbmc6OmNvbnRlbnRDaGFuZ2VkKENvbnRlbnRDaGFuZ2VUeXBlIGNoYW5nZVR5cGUp
CiAgICAgaWYgKChjaGFuZ2VUeXBlID09IE1hc2tJbWFnZUNoYW5nZWQpICYmIG1fbWFza0xheWVy
KQogICAgICAgICBtX293bmluZ0xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdDb25maWd1cmF0aW9u
VXBkYXRlKCk7CiAKLSNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpIHx8IEVOQUJMRShXRUJHUFUpCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUoV0VCR1BVKSB8fCBFTkFCTEUoT0ZGU0NSRUVO
X0NBTlZBUykKICAgICBpZiAoKGNoYW5nZVR5cGUgPT0gQ2FudmFzQ2hhbmdlZCB8fCBjaGFuZ2VU
eXBlID09IENhbnZhc1BpeGVsc0NoYW5nZWQpICYmIHJlbmRlcmVyKCkuaXNDYW52YXMoKSAmJiBj
YW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJDb250
ZW50cykgewogICAgICAgICBpZiAoY2hhbmdlVHlwZSA9PSBDYW52YXNDaGFuZ2VkKQogICAgICAg
ICAgICAgY29tcG9zaXRvcigpLnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclVwZGF0ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407955</attachid>
            <date>2020-09-04 04:01:35 -0700</date>
            <delta_ts>2020-09-04 04:54:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202798-20200904120134.patch</filename>
            <type>text/plain</type>
            <size>34381</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2Mzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDEzODQ4MDkzMzBlMzZh
YTUwNzFhMmYyMDA5NzdkNjE4NWY0NjEyMC4uYzBlZTlmYzI3YWY4MmE3ZDMyMzA3NDY5NTIwYWM1
NDhmOTAzNzNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDIwLTA5LTA0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYXN5bmNocm9u
b3VzIE9mZnNjcmVlbkNhbnZhcyBwbGFjZWhvbGRlciB1cGRhdGVzIGZvciBUZXh0dXJlTWFwcGVy
R0wtYmFzZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAyNzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IGFzeW5jaHJvbm91cyB1cGRhdGVzIGZvciB1c2VycyBvZiB0
aGUgTmljb3NpYSBjb21wb3NpdG9yCisgICAgICAgIChpLmUuIEdUSywgV1BFKS4gVGhpcyBhbGxv
d3MgT2Zmc2NyZWVuQ2FudmFzLWNvbnRyb2xsZWQgY2FudmFzZXMgdG8KKyAgICAgICAgdXBkYXRl
IHZpc3VhbGx5IHdoaWxlIHRoZSBtYWluIHRocmVhZCBpcyBibG9ja2VkLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50Ojp0cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbik6CisgICAgICAgICog
aHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2Fu
dmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpzZXRQbGFj
ZWhvbGRlckNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnB1c2hC
dWZmZXJUb1BsYWNlaG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6
Y29tbWl0VG9QbGFjZWhvbGRlckNhbnZhcyk6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52
YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpQbGFj
ZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJS
ZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9U
ZXh0dXJlTWFwcGVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyUGlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJQaXBlOjpp
c1N1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJQaXBlLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdlQnVmZmVyUGlw
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNv
dXJjZTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSk6CisgICAgICAgIChOaWNvc2lhOjpO
aWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpoYW5kbGUpOgorICAgICAgICAoTmljb3NpYTo6
Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAg
ICAgIChOaWNvc2lhOjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpzd2FwQnVmZmVyc0lm
TmVlZGVkKToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGU6Ok5pY29z
aWFJbWFnZUJ1ZmZlclBpcGUpOgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVy
UGlwZTo6c291cmNlIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZl
clBpcGU6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJQaXBlOjppc1N1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlclBpcGU6
OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1h
Z2VCdWZmZXJQaXBlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6OmFjdGl2YXRlT25Db21wb3NpdGluZ1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
OjpzY2hlZHVsZVVwZGF0ZU9uQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjpjb250YWluc1BhaW50ZWRDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6Y29udGVudENoYW5nZWQpOgorCiAyMDIwLTA4LTMxICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgQWhvbSB0
ZXh0IGlzIHN0aWxsIGJ1c3RlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBiZGIzYTQyMTAwZDE4MTE5MzU4
MmI5OWJiMTIzNzMwZGU2M2Q0Nzg4Li40ZmVjYTAyMGNmYmJlYTQ3M2Q0OWZmOTA0YzJhNTVhOWU2
ZDM0MDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTg4MCw2ICsxODgwLDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlclBpcGUuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMWNkMWM3ZDcwMTExNjUx
MDliZjA1MWFhNDY1MDYxMGUwMDQ2NjJkYy4uN2RiYWExN2Q5MDA2ZDY3NDJkM2I0ZTkxYWVlZmIz
ODg2YzY5MzZhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtNzg0Nyw2ICs3ODQ3LDcgQEAKIAkJNDNDMDkyQjkxMkQ5RTRFRTAw
QTk4OUMzIC8qIFJlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQzQzA5MkJBMTJEOUU0RUUwMEE5ODlDMyAvKiBSZW5kZXJTVkdG
b3JlaWduT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNW
R0ZvcmVpZ25PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDNEMjU5NzYx
M0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDNEMjU5ODYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyUGlwZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlclBpcGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0M0VERDY3QzFCNDg1REJGMDA2NDBFNzUgLyog
Q29tYmluZWRGaWx0ZXJzQWxwaGFiZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29tYmluZWRGaWx0ZXJzQWxwaGFiZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0M0VERDY3RDFCNDg1REJGMDA2NDBFNzUgLyogQ29tYmluZWRGaWx0ZXJzQWxw
aGFiZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tYmluZWRGaWx0ZXJz
QWxwaGFiZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkMwRTFBRThB
MDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTMxMDQsNiArMTMxMDUsNyBAQAogCQlCMkEwMTU5NDBBRjZDRDUzMDA2
QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR3JhcGhpY3NUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyQTAxNTk1MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJBMTBDOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVm
ZmVyUGlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJQ
aXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkExMENFRjBBQkYwMDQ0
MkY2QSAvKiBTVkdGb250RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkExRjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyQTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVu
dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1OTQzLDYgKzI1OTQ1LDggQEAKIAkJCQlCMkExMEI5
MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQk3MkJBQzNBNDIzRTE3
MzI3MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLywKIAkJCQk3MkJBQzNBNTIz
RTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCisJCQkJNDNEMjU5ODYx
M0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyUGlwZS5jcHAgKi8sCisJCQkJQjJBMTBDOTEw
QjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyUGlwZS5oICovLAogCQkJCUNEMTlGRUE3MUY1
NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJCUNEMTlGRUE2MUY1NzM5
NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2QTU2MjFEODhBNzA4MDBD
Q0MwNEMgLyogSW1hZ2VGcmFtZS5jcHAgKi8sCkBAIC0zMTU4NCw2ICszMTU4OCw3IEBACiAJCQkJ
NzJCQUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTUwNjQwQjAyNDA3NTg3RTAwQUFFMDQ1IC8qIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MjdBN0YzQTI0MDc4Qjg0MDA0RDI5MzEgLyogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMkExMEM5MTBC
MzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJQaXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
RDNFMjFERDIxODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNC
dXR0b25FbGVtZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3
RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggZDhjZDdiNjZhNTg0Nzk4
YWJiYjc1N2RmZmQzMGNjMGJmODVkNWVlYy4uMzI5MWU4OWQyN2Q4MWRhNjU3NTQ3OTg2ZWMwZWU5
OGNmZWRhNDM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAK
QEAgLTc3Niw2ICs3NzYsOSBAQCBFeGNlcHRpb25PcjxSZWY8T2Zmc2NyZWVuQ2FudmFzPj4gSFRN
TENhbnZhc0VsZW1lbnQ6OnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuKAogICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIG1fY29udGV4dCA9IG1h
a2VVbmlxdWU8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0PigqdGhpcyk7CisgICAgaWYgKG1f
Y29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKQorICAgICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXll
ckNvbXBvc2l0aW9uKCk7CisKICAgICByZXR1cm4gT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGUoY29u
dGV4dCwgKnRoaXMpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZh
cy5jcHAKaW5kZXggMTg5YWMxOTI1NDRkYzlkZWI2ZDUzNjYzYzgyOTQwYTYwMTI3MzAwYy4uNzVm
MTIwY2ZhZjk0ZDU1OWQyOGM4MDEwMDkwZDk3NzU0Zjc0MGMxMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtODcsNiArODcsMTIgQEAgUmVmPE9mZnNjcmVlbkNh
bnZhcz4gT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgc3QKIAogICAgIGNhbGxPbk1haW5UaHJlYWQoW2RldGFjaGVkQ2FudmFzID0gV1RGTW92
ZShkZXRhY2hlZENhbnZhcyksIG9mZnNjcmVlbkNhbnZhcyA9IG1ha2VSZWYoY2xvbmUuZ2V0KCkp
XSAoKSBtdXRhYmxlIHsKICAgICAgICAgb2Zmc2NyZWVuQ2FudmFzLT5tX3BsYWNlaG9sZGVyQ2Fu
dmFzID0gZGV0YWNoZWRDYW52YXMtPnRha2VQbGFjZWhvbGRlckNhbnZhcygpOworICAgICAgICBp
ZiAob2Zmc2NyZWVuQ2FudmFzLT5tX3BsYWNlaG9sZGVyQ2FudmFzKSB7CisgICAgICAgICAgICBh
dXRvJiBwbGFjZWhvbGRlckNvbnRleHQgPSBkb3duY2FzdDxQbGFjZWhvbGRlclJlbmRlcmluZ0Nv
bnRleHQ+KCpvZmZzY3JlZW5DYW52YXMtPm1fcGxhY2Vob2xkZXJDYW52YXMtPnJlbmRlcmluZ0Nv
bnRleHQoKSk7CisgICAgICAgICAgICBhdXRvJiBpbWFnZUJ1ZmZlclBpcGUgPSBwbGFjZWhvbGRl
ckNvbnRleHQuaW1hZ2VCdWZmZXJQaXBlKCk7CisgICAgICAgICAgICBpZiAoaW1hZ2VCdWZmZXJQ
aXBlKQorICAgICAgICAgICAgICAgIG9mZnNjcmVlbkNhbnZhcy0+bV9idWZmZXJQaXBlU291cmNl
ID0gaW1hZ2VCdWZmZXJQaXBlLT5zb3VyY2UoKTsKKyAgICAgICAgfQogICAgICAgICBvZmZzY3Jl
ZW5DYW52YXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soeyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrOjpDbGVhbnVwVGFzaywKICAgICAgICAgICAgIFtyZWxlYXNlT2Zm
c2NyZWVuQ2FudmFzID0gV1RGTW92ZShvZmZzY3JlZW5DYW52YXMpXSAoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYpIHsgfSB9KTsKICAgICB9KTsKQEAgLTM5MywyMSArMzk5LDI0IEBAIHZvaWQgT2Zm
c2NyZWVuQ2FudmFzOjpzZXRQbGFjZWhvbGRlckNhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYgY2Fu
dmFzKQogICAgIEFTU0VSVCghbV9jb250ZXh0KTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIG1fcGxhY2Vob2xkZXJDYW52YXMgPSBtYWtlV2Vha1B0cihjYW52YXMpOworICAgIGF1
dG8mIHBsYWNlaG9sZGVyQ29udGV4dCA9IGRvd25jYXN0PFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29u
dGV4dD4oKmNhbnZhcy5yZW5kZXJpbmdDb250ZXh0KCkpOworICAgIGF1dG8mIGltYWdlQnVmZmVy
UGlwZSA9IHBsYWNlaG9sZGVyQ29udGV4dC5pbWFnZUJ1ZmZlclBpcGUoKTsKKyAgICBpZiAoaW1h
Z2VCdWZmZXJQaXBlKQorICAgICAgICBtX2J1ZmZlclBpcGVTb3VyY2UgPSBpbWFnZUJ1ZmZlclBp
cGUtPnNvdXJjZSgpOwogfQogCiB2b2lkIE9mZnNjcmVlbkNhbnZhczo6cHVzaEJ1ZmZlclRvUGxh
Y2Vob2xkZXIoKQogewogICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgdGhpc10gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9jb21taXRMb2NrKTsKLQotICAgICAgICBpZiAobV9wbGFjZWhvbGRlckNhbnZhcyAm
JiBtX2hhc1BlbmRpbmdDb21taXREYXRhKSB7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKG1fcGVu
ZGluZ0NvbW1pdERhdGEtPnNpemUoKSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwot
ICAgICAgICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgKm1fcGVuZGluZ0NvbW1pdERhdGEsIEludFJlY3QoSW50UG9pbnQoKSwg
bV9wZW5kaW5nQ29tbWl0RGF0YS0+c2l6ZSgpKSk7Ci0gICAgICAgICAgICBtX3BsYWNlaG9sZGVy
Q2FudmFzLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShXVEZNb3ZlKGJ1ZmZlcikpOwotICAg
ICAgICAgICAgbV9oYXNQZW5kaW5nQ29tbWl0RGF0YSA9IGZhbHNlOworICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY29tbWl0TG9jayk7CisgICAgICAgICAg
ICBpZiAobV9wbGFjZWhvbGRlckNhbnZhcyAmJiBtX3BlbmRpbmdDb21taXRCdWZmZXIpCisgICAg
ICAgICAgICAgICAgbV9wbGFjZWhvbGRlckNhbnZhcy0+c2V0SW1hZ2VCdWZmZXJBbmRNYXJrRGly
dHkoV1RGTW92ZShtX3BlbmRpbmdDb21taXRCdWZmZXIpKTsKKyAgICAgICAgICAgIG1fcGVuZGlu
Z0NvbW1pdEJ1ZmZlciA9IG51bGxwdHI7CiAgICAgICAgIH0KIAotICAgICAgICBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPnBvc3RUYXNrKFtyZWxlYXNlVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgeyB9KTsKKyAgICAgICAgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayh7IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s6
OkNsZWFudXBUYXNrLAorICAgICAgICAgICAgW3JlbGVhc2VUaGlzID0gV1RGTW92ZShwcm90ZWN0
ZWRUaGlzKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7IH0gfSk7CiAgICAgfSk7CiB9CiAK
QEAgLTQyMSwyMSArNDMwLDE2IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjb21taXRUb1BsYWNl
aG9sZGVyQ2FudmFzKCkKICAgICBpZiAobV9jb250ZXh0ICYmIChtX2NvbnRleHQtPmlzV2ViR0wo
KSB8fCBtX2NvbnRleHQtPmlzQWNjZWxlcmF0ZWQoKSkpCiAgICAgICAgIG1fY29udGV4dC0+cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKIAotICAgIGlmIChpc01haW5UaHJlYWQoKSkg
ewotICAgICAgICBpZiAobV9wbGFjZWhvbGRlckNhbnZhcykgewotICAgICAgICAgICAgaWYgKGF1
dG8gYnVmZmVyQ29weSA9IGltYWdlQnVmZmVyLT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29sb3JTcGFjZTo6U1JH
QiwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSkpCi0gICAgICAgICAgICAgICAgbV9wbGFjZWhvbGRl
ckNhbnZhcy0+c2V0SW1hZ2VCdWZmZXJBbmRNYXJrRGlydHkoV1RGTW92ZShidWZmZXJDb3B5KSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2J1ZmZlclBpcGVTb3VyY2Up
IHsKKyAgICAgICAgYXV0byBidWZmZXJDb3B5ID0gaW1hZ2VCdWZmZXItPmNvcHlSZWN0VG9CdWZm
ZXIoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBD
b2xvclNwYWNlOjpTUkdCLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKKyAgICAgICAgaWYgKGJ1
ZmZlckNvcHkpCisgICAgICAgICAgICBtX2J1ZmZlclBpcGVTb3VyY2UtPmhhbmRsZShXVEZNb3Zl
KGJ1ZmZlckNvcHkpKTsKICAgICB9CiAKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY29t
bWl0TG9jayk7Ci0KLSAgICBib29sIHNob3VsZFB1c2hCdWZmZXIgPSAhbV9oYXNQZW5kaW5nQ29t
bWl0RGF0YTsKLSAgICBtX3BlbmRpbmdDb21taXREYXRhID0gaW1hZ2VCdWZmZXItPmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBv
aW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSk7Ci0gICAgbV9oYXNQZW5kaW5nQ29t
bWl0RGF0YSA9IHRydWU7Ci0KLSAgICBpZiAoc2hvdWxkUHVzaEJ1ZmZlcikKKyAgICBib29sIHNo
b3VsZFB1c2hCdWZmZXIgPSAhbV9wZW5kaW5nQ29tbWl0QnVmZmVyOworICAgIG1fcGVuZGluZ0Nv
bW1pdEJ1ZmZlciA9IGltYWdlQnVmZmVyLT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29sb3JTcGFjZTo6U1JHQiwg
aW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CisgICAgaWYgKG1fcGVuZGluZ0NvbW1pdEJ1ZmZlciAm
JiBzaG91bGRQdXNoQnVmZmVyKQogICAgICAgICBwdXNoQnVmZmVyVG9QbGFjZWhvbGRlcigpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAppbmRleCAyMGRkMDNmNTMzMjU0
YTcyZWY5OTMzZDM0MjEyZWZjOTkxMTNlNGVhLi4yNzc0NjUyN2YxYzA3YjkwOWUxY2UwMzQ1ZDhi
Yjc5OWM1MTkzOWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNh
bnZhcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgogI2luY2x1ZGUgIklETFR5cGVz
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclBpcGUu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTE4NywxMCArMTg4LDEwIEBAIHByaXZhdGU6CiAK
ICAgICBib29sIG1faGFzU2NoZWR1bGVkQ29tbWl0IHsgZmFsc2UgfTsKICAgICBXZWFrUHRyPEhU
TUxDYW52YXNFbGVtZW50PiBtX3BsYWNlaG9sZGVyQ2FudmFzOworICAgIFJlZlB0cjxJbWFnZUJ1
ZmZlclBpcGU6OlNvdXJjZT4gbV9idWZmZXJQaXBlU291cmNlOwogCiAgICAgbXV0YWJsZSBMb2Nr
IG1fY29tbWl0TG9jazsKLSAgICBib29sIG1faGFzUGVuZGluZ0NvbW1pdERhdGEgeyBmYWxzZSB9
OwotICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fcGVuZGluZ0NvbW1pdERhdGE7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtX3BlbmRpbmdDb21taXRCdWZmZXI7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmlu
Z0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5k
ZXJpbmdDb250ZXh0LmNwcAppbmRleCAxZWM3YTI0ZWRmNDQ1MjExYmJiYTk5NDJlODE0NmJiMWU3
ZjY4NGMwLi41Nzg2OGIwYTIzYjIyM2JkZGU5MWMwNzhkYmZkODViOTJkZTVhNTcyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVy
aW5nQ29udGV4dC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NB
TlZBUykKIAogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJQaXBlLmgiCiAjaW5jbHVkZSAiT2Zmc2NyZWVuQ2FudmFzLmgiCiAjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMzksNiArNDAsNyBAQCBXVEZfTUFLRV9JU09fQUxM
T0NBVEVEX0lNUEwoUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KTsKIFBsYWNlaG9sZGVyUmVu
ZGVyaW5nQ29udGV4dDo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmIGNh
bnZhcykKICAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQogeworICAgIG1faW1h
Z2VCdWZmZXJQaXBlID0gSW1hZ2VCdWZmZXJQaXBlOjpjcmVhdGUoKTsKIH0KIAogSFRNTENhbnZh
c0VsZW1lbnQqIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6Y2FudmFzKCkgY29uc3QKQEAg
LTQ5LDYgKzUxLDE0IEBAIEhUTUxDYW52YXNFbGVtZW50KiBQbGFjZWhvbGRlclJlbmRlcmluZ0Nv
bnRleHQ6OmNhbnZhcygpIGNvbnN0CiAgICAgcmV0dXJuICZkb3duY2FzdDxIVE1MQ2FudmFzRWxl
bWVudD4oYmFzZSk7CiB9CiAKK1BsYXRmb3JtTGF5ZXIqIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29u
dGV4dDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXJQaXBl
KQorICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclBpcGUtPnBsYXRmb3JtTGF5ZXIoKTsKKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaAppbmRl
eCA2NDUwOTE0NTlkZDAxY2MyYTc5NzdkYzAwM2I0NTI2NWRlNWJhN2Q4Li4zM2ZhOGYyYWRjNzhi
NDljYmU0OTc2MGE2YzY2YTM4MzRkZjk5MTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaApAQCAtMzEsNiAr
MzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdlQnVmZmVyUGlwZTsK
IGNsYXNzIE9mZnNjcmVlbkNhbnZhczsKIAogY2xhc3MgUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250
ZXh0IGZpbmFsIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewpAQCAtNDAsOCArNDEs
MTcgQEAgcHVibGljOgogCiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcygpIGNvbnN0Owog
CisgICAgY29uc3QgUmVmUHRyPEltYWdlQnVmZmVyUGlwZT4mIGltYWdlQnVmZmVyUGlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW1hZ2VCdWZmZXJQaXBlOyB9CisKIHByaXZhdGU6CiAgICAgYm9vbCBp
c1BsYWNlaG9sZGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBpc0FjY2Vs
ZXJhdGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gISFtX2ltYWdlQnVmZmVyUGlwZTsgfQorICAg
IGJvb2wgaXNHUFVCYXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICEhbV9pbWFnZUJ1ZmZlclBp
cGU7IH0KKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlclBpcGU+IG1faW1hZ2VCdWZmZXJQaXBlOwog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBl
ci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKaW5k
ZXggNDk1MjUzNmFlZDM0ZGYzOWM1ZGY2MGU2MzlkNGY1MTE3YTBkZTM4MC4uZmU2NDc1NzQ4YjNk
MGQwMWYxMzhmYzkzMjg5NTBhMTg0ZWZhYmE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UZXh0dXJlTWFwcGVyLmNtYWtlCkBAIC03Niw2ICs3Niw3IEBAIGlmIChVU0VfQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCiAgICAgKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFCdWZmZXIuY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdlQnVmZmVyUGlwZS5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGFpbnRpbmdDb250ZXh0LmNw
cAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2lu
ZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGFpbnRpbmdF
bmdpbmVCYXNpYy5jcHAKQEAgLTk5LDYgKzEwMCw3IEBAIGlmIChVU0VfQ09PUkRJTkFURURfR1JB
UEhJQ1MpCiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhQW5pbWF0
ZWRCYWNraW5nU3RvcmVDbGllbnQuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L05pY29zaWFCdWZmZXIuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29z
aWFJbWFnZUJ1ZmZlclBpcGUuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05p
Y29zaWFQYWludGluZ0VuZ2luZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Tmljb3NpYVBsYXRmb3JtTGF5ZXIuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L05pY29zaWFTY2VuZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlclBpcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJQaXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYzhiYmVkM2RlYWUzYTIwZDQ2MDBh
N2ViNzFjYTM1Mjg4OWE4OGI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJQaXBlLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAyMCBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlclBpcGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIVVTRShO
SUNPU0lBKQorCitib29sIEltYWdlQnVmZmVyUGlwZTo6aXNTdXBwb3J0ZWQoKQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworUmVmUHRyPEltYWdlQnVmZmVyUGlwZT4gSW1hZ2VCdWZmZXJQaXBl
OjpjcmVhdGUoKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCisjZW5kaWYKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJQaXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlclBpcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YjFlZTdjMzM0NDNjMTI4NmRmYmVhMjBl
YWNjMmY4NmJhNzlhN2QxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJQaXBlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlBsYXRmb3Jt
TGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKKworY2xhc3MgSW1hZ2VCdWZmZXJQaXBl
IDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VCdWZmZXJQaXBlPiB7CitwdWJsaWM6CisgICAgY2xh
c3MgU291cmNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNvdXJjZT4geworICAgIHB1
YmxpYzoKKyAgICAgICAgdmlydHVhbCB+U291cmNlKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGUoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmKSA9IDA7Cisg
ICAgfTsKKworICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkKCk7CisgICAgc3RhdGljIFJlZlB0
cjxJbWFnZUJ1ZmZlclBpcGU+IGNyZWF0ZSgpOworCisgICAgdmlydHVhbCB+SW1hZ2VCdWZmZXJQ
aXBlKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBSZWZQdHI8U291cmNlPiBzb3VyY2UoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29u
c3QgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUlt
YWdlQnVmZmVyUGlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTcxMGQyOTM2OTI3ZTU3Zjg5Y2U0ZmMxOGZh
YTliZDNmYjE4OTBkYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdlQnVmZmVyUGlwZS5jcHAKQEAgLTAsMCArMSwx
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0
IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIk5pY29zaWFJbWFnZUJ1ZmZlclBpcGUuaCIKKworI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCisjaW5jbHVkZSAiTmljb3NpYVBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKworI2lmIFVTRShDQUlSTykKKyNpbmNsdWRlIDxjYWly
by5oPgorI2VuZGlmCisKKyNpZiBVU0UoTklDT1NJQSkKKworbmFtZXNwYWNlIE5pY29zaWEgewor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJj
ZTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSgpCit7CisgICAgbV9uaWNvc2lhTGF5ZXIg
PSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0
dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOworfQorCitOaWNvc2lhSW1hZ2VC
dWZmZXJQaXBlU291cmNlOjp+Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSgpCit7CisgICAg
ZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3Np
YUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsKK30KKwordm9pZCBOaWNvc2lhSW1h
Z2VCdWZmZXJQaXBlU291cmNlOjpoYW5kbGUoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYm
IGJ1ZmZlcikKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2ltYWdlQnVmZmVyTG9jayk7CisKKyAgICBpZiAoIW1faW1h
Z2VCdWZmZXIpIHsKKyAgICAgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9IFt0aGlzXSAoVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJveHkpIG11dGFibGUgeworICAgICAgICAgICAg
cmV0dXJuIHByb3h5LnNjaGVkdWxlVXBkYXRlT25Db21wb3NpdG9yVGhyZWFkKFt0aGlzXSAoKSBt
dXRhYmxlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBwcm94eSA9IGRvd25jYXN0PE5pY29zaWE6
OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5w
cm94eSgpOworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7
CisKKyAgICAgICAgICAgICAgICBpZiAoIXByb3h5LmlzQWN0aXZlKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGF1dG8gdGV4dHVyZSA9IEJpdG1hcFRl
eHR1cmVHTDo6Y3JlYXRlKFRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlczo6Z2V0KCkpOwor
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1faW1hZ2VCdWZmZXJMb2NrKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
aW1hZ2VCdWZmZXIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBuYXRpdmVJbWFnZSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2
ZUltYWdlKFdURk1vdmUobV9pbWFnZUJ1ZmZlcikpOworICAgICAgICAgICAgICAgICAgICBhdXRv
IHNpemUgPSBuYXRpdmVJbWFnZVNpemUobmF0aXZlSW1hZ2UpOworCisgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUtPnJlc2V0KHNpemUsIG5hdGl2ZUltYWdlSGFzQWxwaGEobmF0aXZlSW1hZ2Up
ID8gQml0bWFwVGV4dHVyZTo6U3VwcG9ydHNBbHBoYSA6IEJpdG1hcFRleHR1cmU6Ok5vRmxhZyk7
CisjaWYgVVNFKENBSVJPKQorICAgICAgICAgICAgICAgICAgICBhdXRvKiBzdXJmYWNlID0gbmF0
aXZlSW1hZ2UuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8qIGltYWdlRGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
c3VyZmFjZSkpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cyhp
bWFnZURhdGEsIEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSksIEludFBvaW50KCksIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSk7CisjZWxzZQorICAgICAgICAgICAgICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgYXV0byBsYXllckJ1ZmZlciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJCdWZmZXI+KFdURk1vdmUodGV4dHVyZSkpOworICAgICAgICAgICAgICAgIGxh
eWVyQnVmZmVyLT5zZXRFeHRyYUZsYWdzKFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQpOwor
ICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKFdURk1vdmUobGF5ZXJCdWZmZXIp
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9OworICAgICAgICBwcm94eU9wZXJhdGlvbihk
b3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lh
TGF5ZXItPmltcGwoKSkucHJveHkoKSk7CisgICAgfQorCisgICAgbV9pbWFnZUJ1ZmZlciA9IFdU
Rk1vdmUoYnVmZmVyKTsKK30KKworUGxhdGZvcm1MYXllciogTmljb3NpYUltYWdlQnVmZmVyUGlw
ZVNvdXJjZTo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmljb3NpYUxh
eWVyLmdldCgpOworfQorCit2b2lkIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2U6OnN3YXBC
dWZmZXJzSWZOZWVkZWQoKQoreworfQorCitOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlOjpOaWNvc2lh
SW1hZ2VCdWZmZXJQaXBlKCkKK3sKKyAgICBtX3NvdXJjZSA9IGFkb3B0UmVmKG5ldyBOaWNvc2lh
SW1hZ2VCdWZmZXJQaXBlU291cmNlKTsKK30KKworUmVmUHRyPEltYWdlQnVmZmVyUGlwZTo6U291
cmNlPiBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlOjpzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVy
biBtX3NvdXJjZTsKK30KKworUGxhdGZvcm1MYXllciogTmljb3NpYUltYWdlQnVmZmVyUGlwZTo6
cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgaWYgKG1fc291cmNlKQorICAgICAgICByZXR1
cm4gbV9zb3VyY2UtPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
fSAvLyBuYW1lc3BhY2UgTmljb3NpYQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgSW1h
Z2VCdWZmZXJQaXBlOjppc1N1cHBvcnRlZCgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Jl
ZlB0cjxJbWFnZUJ1ZmZlclBpcGU+IEltYWdlQnVmZmVyUGlwZTo6Y3JlYXRlKCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IE5pY29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGUpOworfQor
Cit9CisKKyNlbmRpZiAvLyBVU0UoTklDT1NJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdlQnVmZmVyUGlwZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQ
aXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTBkYzJlNDA2ZDRkYWI3MzM4Y2VjZDhlZmViZGQ5OTA1Mzk1YTFi
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvTmljb3NpYUltYWdlQnVmZmVyUGlwZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlclBpcGUuaCIKKyNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlcklt
cGwuaCIKKworbmFtZXNwYWNlIE5pY29zaWEgeworCitjbGFzcyBOaWNvc2lhSW1hZ2VCdWZmZXJQ
aXBlU291cmNlIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkltYWdlQnVmZmVyUGlwZTo6U291cmNl
LCBwdWJsaWMgQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudCB7CitwdWJsaWM6
CisgICAgTmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSgpOworICAgIHZpcnR1YWwgfk5pY29z
aWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2UoKTsKKworICAgIHZvaWQgaGFuZGxlKHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4mJikgZmluYWw7CisKKyAgICBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzd2FwQnVmZmVy
c0lmTmVlZGVkKCkgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8Q29udGVudExheWVyPiBtX25pY29z
aWFMYXllcjsKKworICAgIG11dGFibGUgTG9jayBtX2ltYWdlQnVmZmVyTG9jazsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7Cit9OworCitj
bGFzcyBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkltYWdl
QnVmZmVyUGlwZSB7CitwdWJsaWM6CisgICAgTmljb3NpYUltYWdlQnVmZmVyUGlwZSgpOworICAg
IHZpcnR1YWwgfk5pY29zaWFJbWFnZUJ1ZmZlclBpcGUoKSA9IGRlZmF1bHQ7CisKK3ByaXZhdGU6
CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyUGlwZTo6U291cmNlPiBzb3VyY2UoKSBj
b25zdCBmaW5hbDsKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmlu
YWw7CisKKyAgICBSZWZQdHI8Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZT4gbV9zb3VyY2U7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHAKaW5kZXggNTQyYmZhNWJiNGUyMGVhMjJhN2U3ZDFm
MWMyM2QyYWFkNGMxMGM3ZS4uZTI4NzFmNzk1NjJjNWIwNTUwMzJiYTAxYzEzNDc3YjA0YTQzOTUx
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNw
cApAQCAtNjUsMTkgKzY1LDI3IEBAIHZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eTo6YWN0aXZhdGVPbkNvbXBvc2l0aW5nVGhyZWFkKENvbXBvc2l0b3IqIGNvCiAgICAgQVNTRVJU
KG1fY29tcG9zaXRvclRocmVhZCA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwogICAgIEFTU0VSVChj
b21wb3NpdG9yKTsKICAgICBBU1NFUlQodGFyZ2V0TGF5ZXIpOwotICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fbG9jayk7Ci0gICAgbV9jb21wb3NpdG9yID0gY29tcG9zaXRvcjsKLSAgICBtX3Rhcmdl
dExheWVyID0gdGFyZ2V0TGF5ZXI7Ci0gICAgaWYgKG1fdGFyZ2V0TGF5ZXIgJiYgbV9jdXJyZW50
QnVmZmVyKQotICAgICAgICBtX3RhcmdldExheWVyLT5zZXRDb250ZW50c0xheWVyKG1fY3VycmVu
dEJ1ZmZlci5nZXQoKSk7CisgICAgRnVuY3Rpb248dm9pZCgpPiB1cGRhdGVGdW5jdGlvbjsKKyAg
ICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIG1fY29tcG9z
aXRvciA9IGNvbXBvc2l0b3I7CisgICAgICAgIG1fdGFyZ2V0TGF5ZXIgPSB0YXJnZXRMYXllcjsK
KyAgICAgICAgaWYgKG1fdGFyZ2V0TGF5ZXIgJiYgbV9jdXJyZW50QnVmZmVyKQorICAgICAgICAg
ICAgbV90YXJnZXRMYXllci0+c2V0Q29udGVudHNMYXllcihtX2N1cnJlbnRCdWZmZXIuZ2V0KCkp
OwogCi0gICAgbV9yZWxlYXNlVW51c2VkQnVmZmVyc1RpbWVyID0gbWFrZVVuaXF1ZTxSdW5Mb29w
OjpUaW1lcjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Pj4oUnVuTG9vcDo6Y3VycmVu
dCgpLCB0aGlzLCAmVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6cmVsZWFzZVVudXNl
ZEJ1ZmZlcnNUaW1lckZpcmVkKTsKLSAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lciA9
IG1ha2VVbmlxdWU8UnVuTG9vcDo6VGltZXI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eT4+KFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHk6OmNvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lckZpcmVkKTsKKyAgICAgICAgbV9yZWxl
YXNlVW51c2VkQnVmZmVyc1RpbWVyID0gbWFrZVVuaXF1ZTxSdW5Mb29wOjpUaW1lcjxUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5Pj4oUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6cmVsZWFzZVVudXNlZEJ1ZmZlcnNUaW1lckZp
cmVkKTsKKyAgICAgICAgbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXIgPSBtYWtlVW5pcXVl
PFJ1bkxvb3A6OlRpbWVyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+PihSdW5Mb29w
OjpjdXJyZW50KCksIHRoaXMsICZUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Ojpjb21w
b3NpdG9yVGhyZWFkVXBkYXRlVGltZXJGaXJlZCk7CiAKICNpZiBVU0UoR0xJQl9FVkVOVF9MT09Q
KQotICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVyLT5zZXRQcmlvcml0eShSdW5Mb29w
U291cmNlUHJpb3JpdHk6OkNvbXBvc2l0aW5nVGhyZWFkVXBkYXRlVGltZXIpOwotICAgIG1fcmVs
ZWFzZVVudXNlZEJ1ZmZlcnNUaW1lci0+c2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5
OjpSZWxlYXNlVW51c2VkUmVzb3VyY2VzVGltZXIpOworICAgICAgICBtX2NvbXBvc2l0b3JUaHJl
YWRVcGRhdGVUaW1lci0+c2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpDb21wb3Np
dGluZ1RocmVhZFVwZGF0ZVRpbWVyKTsKKyAgICAgICAgbV9yZWxlYXNlVW51c2VkQnVmZmVyc1Rp
bWVyLT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3JpdHk6OlJlbGVhc2VVbnVzZWRSZXNv
dXJjZXNUaW1lcik7CiAjZW5kaWYKKworICAgICAgICBpZiAoIW1fY29tcG9zaXRvclRocmVhZFVw
ZGF0ZUZ1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB1cGRhdGVGdW5jdGlv
biA9IFdURk1vdmUobV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlRnVuY3Rpb24pOworICAgIH0KKyAg
ICB1cGRhdGVGdW5jdGlvbigpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHk6OmludmFsaWRhdGUoKQpAQCAtMjQ5LDEwICsyNTcsMTEgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5Ojpkcm9wQ3VycmVudEJ1ZmZlcldoaWxlUHJlc2VydmluZ1Rl
eHR1cmUoYm8KIGJvb2wgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6c2NoZWR1bGVV
cGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQoRnVuY3Rpb248dm9pZCgpPiYmIHVwZGF0ZUZ1bmN0aW9u
KQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgbV9jb21wb3NpdG9yVGhy
ZWFkVXBkYXRlRnVuY3Rpb24gPSBXVEZNb3ZlKHVwZGF0ZUZ1bmN0aW9uKTsKKwogICAgIGlmICgh
bV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0ZUZ1bmN0aW9uID0gV1RGTW92ZSh1cGRhdGVGdW5j
dGlvbik7CiAgICAgbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXItPnN0YXJ0T25lU2hvdCgw
X3MpOwogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBjMmJkNjZkY2ZmY2UxZWEwMzU2YzQ4OTEzYWMw
YWMxNzVhNDZmOTllLi5jMzNmYWFhYjMwNWViOTNmYzgyODNkODZkOWQ2ZDlhNjVkODdhZjIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApA
QCAtMTA1MCw3ICsxMDUwLDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZp
Z3VyYXRpb24oY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXMKICAgICAgICAgdXBk
YXRlQ29udGVudHNSZWN0cygpOwogICAgIH0KICNlbmRpZgotI2lmIEVOQUJMRShXRUJHTCkgfHwg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQVSkKKyNpZiBFTkFC
TEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRShXRUJH
UFUpIHx8IEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgIGVsc2UgaWYgKHJlbmRlcmVyKCku
aXNDYW52YXMoKSAmJiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENh
bnZhc0FzTGF5ZXJDb250ZW50cykgewogICAgICAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCog
Y2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyKCkuZWxlbWVudCgp
KTsKICAgICAgICAgaWYgKGF1dG8qIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQo
KSkKQEAgLTI2NjYsNyArMjY2Niw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250YWlu
c1BhaW50ZWRDb250ZW50KFBhaW50ZWRDb250ZW50c0luZm8mIGNvbnRlbnRzSW5mCiAgICAgICAg
IHJldHVybiBtX293bmluZ0xheWVyLmhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3Vu
ZCgpIHx8ICghKGRvd25jYXN0PFJlbmRlclZpZGVvPihyZW5kZXJlcigpKS5zdXBwb3J0c0FjY2Vs
ZXJhdGVkUmVuZGVyaW5nKCkpICYmIG1fcmVxdWlyZXNPd25CYWNraW5nU3RvcmUpOwogI2VuZGlm
CiAKLSNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisj
aWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSB8fCBFTkFC
TEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBpZiAoaXM8UmVuZGVySFRNTENhbnZhcz4ocmVuZGVy
ZXIoKSkgJiYgY2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneShyZW5kZXJlcigpKSA9PSBDYW52YXNB
c0xheWVyQ29udGVudHMpCiAgICAgICAgIHJldHVybiBtX293bmluZ0xheWVyLmhhc1Zpc2libGVC
b3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpOwogI2VuZGlmCkBAIC0yNzMxLDcgKzI3MzEsNyBA
QCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6Y29udGVudENoYW5nZWQoQ29udGVudENoYW5nZVR5
cGUgY2hhbmdlVHlwZSkKICAgICBpZiAoKGNoYW5nZVR5cGUgPT0gTWFza0ltYWdlQ2hhbmdlZCkg
JiYgbV9tYXNrTGF5ZXIpCiAgICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNDb21wb3NpdGlu
Z0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKIAotI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQVSkKKyNpZiBFTkFCTEUoV0VCR0wp
IHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRShXRUJHUFUpIHx8IEVO
QUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgIGlmICgoY2hhbmdlVHlwZSA9PSBDYW52YXNDaGFu
Z2VkIHx8IGNoYW5nZVR5cGUgPT0gQ2FudmFzUGl4ZWxzQ2hhbmdlZCkgJiYgcmVuZGVyZXIoKS5p
c0NhbnZhcygpICYmIGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kocmVuZGVyZXIoKSkgPT0gQ2Fu
dmFzQXNMYXllckNvbnRlbnRzKSB7CiAgICAgICAgIGlmIChjaGFuZ2VUeXBlID09IENhbnZhc0No
YW5nZWQpCiAgICAgICAgICAgICBjb21wb3NpdG9yKCkuc2NoZWR1bGVDb21wb3NpdGluZ0xheWVy
VXBkYXRlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407960</attachid>
            <date>2020-09-04 04:54:25 -0700</date>
            <delta_ts>2020-09-04 07:18:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202798-20200904125424.patch</filename>
            <type>text/plain</type>
            <size>35628</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDFkZDVkZDIxNjU4OTNh
MTAwNTBkYWMwZjIwZGVlZjcxZjljYTM5Yy4uZDUxNjQxZGU2ZTlhYzc1YmMzNDc5MWI4Yzk4ZWU1
NTBiMjY2ZWY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDIwLTA5LTA0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYXN5bmNocm9u
b3VzIE9mZnNjcmVlbkNhbnZhcyBwbGFjZWhvbGRlciB1cGRhdGVzIGZvciBUZXh0dXJlTWFwcGVy
R0wtYmFzZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAyNzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IGFzeW5jaHJvbm91cyB1cGRhdGVzIGZvciB1c2VycyBvZiB0
aGUgTmljb3NpYSBjb21wb3NpdG9yCisgICAgICAgIChpLmUuIEdUSywgV1BFKS4gVGhpcyBhbGxv
d3MgT2Zmc2NyZWVuQ2FudmFzLWNvbnRyb2xsZWQgY2FudmFzZXMgdG8KKyAgICAgICAgdXBkYXRl
IHZpc3VhbGx5IHdoaWxlIHRoZSBtYWluIHRocmVhZCBpcyBibG9ja2VkLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50Ojp0cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbik6CisgICAgICAgICog
aHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2Fu
dmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpzZXRQbGFj
ZWhvbGRlckNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnB1c2hC
dWZmZXJUb1BsYWNlaG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6
Y29tbWl0VG9QbGFjZWhvbGRlckNhbnZhcyk6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52
YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpQbGFj
ZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJS
ZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9U
ZXh0dXJlTWFwcGVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyUGlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJQaXBlOjpp
c1N1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJQaXBlLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdlQnVmZmVyUGlw
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNv
dXJjZTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSk6CisgICAgICAgIChOaWNvc2lhOjpO
aWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpoYW5kbGUpOgorICAgICAgICAoTmljb3NpYTo6
Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAg
ICAgIChOaWNvc2lhOjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpzd2FwQnVmZmVyc0lm
TmVlZGVkKToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGU6Ok5pY29z
aWFJbWFnZUJ1ZmZlclBpcGUpOgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVy
UGlwZTo6c291cmNlIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZl
clBpcGU6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJQaXBlOjppc1N1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlclBpcGU6
OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1h
Z2VCdWZmZXJQaXBlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6OmFjdGl2YXRlT25Db21wb3NpdGluZ1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
OjpzY2hlZHVsZVVwZGF0ZU9uQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjpjb250YWluc1BhaW50ZWRDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6Y29udGVudENoYW5nZWQpOgorCiAyMDIwLTA5LTAzICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFN0b3JlIGFsbCBzdHls
aW5nIGZsYWdzIGluIG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAx
ZDBlMjgyZGUwY2M4M2ZlYzhjMzBlNmI3YTM2M2M0MWRlOGY1MzAyLi41N2I0Zjg0YjBjOTIxN2Q5
ZTExZTI5ZDEyYjdjNGI5NGRkNDA5ODMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTg4MCw2ICsxODgw
LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlclBp
cGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMDQwMWEyZTIzNWM2YTQ5ZTBhZTA1ZWMzNjBmZWVjYjgwOGE1ODRjMy4uN2RhYmE2NGE2NjAz
MTY0NmFkNGFmNDE2ZWRiZjk3MzI1YTlmOTIyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzYzOSw2ICszNjM5LDcgQEAKIAkJ
QjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMDE1OTMwQUY2Q0Q1MzAwNkJD
RTBFIC8qIEdyYXBoaWNzQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUIyQTAxNUFCMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5
cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkEw
MTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFB
NCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjJBMTBEOTEwQjM4
MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyUGlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdl
QnVmZmVyUGlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUIyQTFGMkFCMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMUYyQTIwQ0VGMEFC
RjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggKi87IH07CiAJCUIyQTFGMkFFMENFRjBBQkYw
MDQ0MkY2QSAvKiBTVkdHbHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTFGMkE1MENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdHbHlwaEVs
ZW1lbnQuaCAqLzsgfTsKIAkJQjJBMUYyQjEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR01pc3NpbmdH
bHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyQTFGMkE4MENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdNaXNzaW5nR2x5cGhFbGVtZW50Lmgg
Ki87IH07CkBAIC03ODU0LDYgKzc4NTUsNyBAQAogCQk0M0MwOTJCOTEyRDlFNEVFMDBBOTg5QzMg
LyogUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDNDMDkyQkExMkQ5RTRFRTAwQTk4OUMzIC8qIFJlbmRlclNWR0ZvcmVpZ25P
YmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHRm9yZWln
bk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0M0QyNTk3NjEzQzgxNkY0
MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1hZ2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
M0QyNTk4NjEzQzgxNkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXJQaXBlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyUGlwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzRURENjdDMUI0ODVEQkYwMDY0MEU3NSAvKiBDb21iaW5l
ZEZpbHRlcnNBbHBoYWJldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQzRURENjdEMUI0ODVEQkYwMDY0MEU3NSAvKiBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21iaW5lZEZpbHRlcnNBbHBoYWJl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyQzBFMUFFOEEwMDBDNEEy
RDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMzEwOCw2ICsxMzExMCw3IEBACiAJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAv
KiBHcmFwaGljc1R5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHcmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMDE1
OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCMkExMEM5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJQaXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlclBpcGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8q
IFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTVkdGb250RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFG
MkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjU5NTEsNiArMjU5NTQsOCBAQAogCQkJCUIyQTEwQjkxMEIzODE4
QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovLAogCQkJCTcyQkFDM0E0MjNFMTczMjcwMDhE
NzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovLAogCQkJCTcyQkFDM0E1MjNFMTczMjgw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKKwkJCQk0M0QyNTk4NjEzQzgxNkY0
MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXJQaXBlLmNwcCAqLywKKwkJCQlCMkExMEM5MTBCMzgxOEJE
MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJQaXBlLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3MjAw
MEM0MkZCIC8qIEltYWdlRGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAwMEM0
MkZCIC8qIEltYWdlRGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0QyAv
KiBJbWFnZUZyYW1lLmNwcCAqLywKQEAgLTMxNTk4LDYgKzMxNjAzLDcgQEAKIAkJCQk3MkJBQzNB
RTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1NTA2NDBCMDI0MDc1ODdFMDBBQUUwNDUgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCTcyN0E3RjNBMjQwNzhCODQwMDREMjkzMSAvKiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyQTEwRDkxMEIzODE4QkQw
MDA5OUFBNCAvKiBJbWFnZUJ1ZmZlclBpcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0UyMURE
MjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAyMjIgLyogSW1hZ2VDb250cm9sc0J1dHRvbkVs
ZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdBMSAv
KiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCBjMzFmYjE5NWY0OGEwZjc1Zjc1M2U1
OTgxNDAyODkzZWZmMzU5ZWMwLi4zNjkxMjEzNTZiZjUxMGVjZWVlNGQ4YTMyM2RmMWVjODMwZmEz
YWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtNzc5
LDYgKzc3OSw5IEBAIEV4Y2VwdGlvbk9yPFJlZjxPZmZzY3JlZW5DYW52YXM+PiBIVE1MQ2FudmFz
RWxlbWVudDo6dHJhbnNmZXJDb250cm9sVG9PZmZzY3JlZW4oCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1
ZTxQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ+KCp0aGlzKTsKKyAgICBpZiAobV9jb250ZXh0
LT5pc0FjY2VsZXJhdGVkKCkpCisgICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9z
aXRpb24oKTsKKwogICAgIHJldHVybiBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZShjb250ZXh0LCAq
dGhpcyk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2Ny
ZWVuQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApp
bmRleCAxODlhYzE5MjU0NGRjOWRlYjZkNTM2NjNjODI5NDBhNjAxMjczMDBjLi43NWYxMjBjZmFm
OTRkNTU5ZDI4YzgwMTAwOTBkOTc3NTRmNzQwYzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwCkBAIC04Nyw2ICs4NywxMiBAQCBSZWY8T2Zmc2NyZWVuQ2FudmFzPiBP
ZmZzY3JlZW5DYW52YXM6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBz
dAogCiAgICAgY2FsbE9uTWFpblRocmVhZChbZGV0YWNoZWRDYW52YXMgPSBXVEZNb3ZlKGRldGFj
aGVkQ2FudmFzKSwgb2Zmc2NyZWVuQ2FudmFzID0gbWFrZVJlZihjbG9uZS5nZXQoKSldICgpIG11
dGFibGUgewogICAgICAgICBvZmZzY3JlZW5DYW52YXMtPm1fcGxhY2Vob2xkZXJDYW52YXMgPSBk
ZXRhY2hlZENhbnZhcy0+dGFrZVBsYWNlaG9sZGVyQ2FudmFzKCk7CisgICAgICAgIGlmIChvZmZz
Y3JlZW5DYW52YXMtPm1fcGxhY2Vob2xkZXJDYW52YXMpIHsKKyAgICAgICAgICAgIGF1dG8mIHBs
YWNlaG9sZGVyQ29udGV4dCA9IGRvd25jYXN0PFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dD4o
Km9mZnNjcmVlbkNhbnZhcy0+bV9wbGFjZWhvbGRlckNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgp
KTsKKyAgICAgICAgICAgIGF1dG8mIGltYWdlQnVmZmVyUGlwZSA9IHBsYWNlaG9sZGVyQ29udGV4
dC5pbWFnZUJ1ZmZlclBpcGUoKTsKKyAgICAgICAgICAgIGlmIChpbWFnZUJ1ZmZlclBpcGUpCisg
ICAgICAgICAgICAgICAgb2Zmc2NyZWVuQ2FudmFzLT5tX2J1ZmZlclBpcGVTb3VyY2UgPSBpbWFn
ZUJ1ZmZlclBpcGUtPnNvdXJjZSgpOworICAgICAgICB9CiAgICAgICAgIG9mZnNjcmVlbkNhbnZh
cy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayh7IFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s6OkNsZWFudXBUYXNrLAogICAgICAgICAgICAgW3JlbGVhc2VPZmZzY3JlZW5D
YW52YXMgPSBXVEZNb3ZlKG9mZnNjcmVlbkNhbnZhcyldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JikgeyB9IH0pOwogICAgIH0pOwpAQCAtMzkzLDIxICszOTksMjQgQEAgdm9pZCBPZmZzY3JlZW5D
YW52YXM6OnNldFBsYWNlaG9sZGVyQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMpCiAg
ICAgQVNTRVJUKCFtX2NvbnRleHQpOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
bV9wbGFjZWhvbGRlckNhbnZhcyA9IG1ha2VXZWFrUHRyKGNhbnZhcyk7CisgICAgYXV0byYgcGxh
Y2Vob2xkZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Pigq
Y2FudmFzLnJlbmRlcmluZ0NvbnRleHQoKSk7CisgICAgYXV0byYgaW1hZ2VCdWZmZXJQaXBlID0g
cGxhY2Vob2xkZXJDb250ZXh0LmltYWdlQnVmZmVyUGlwZSgpOworICAgIGlmIChpbWFnZUJ1ZmZl
clBpcGUpCisgICAgICAgIG1fYnVmZmVyUGlwZVNvdXJjZSA9IGltYWdlQnVmZmVyUGlwZS0+c291
cmNlKCk7CiB9CiAKIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpwdXNoQnVmZmVyVG9QbGFjZWhvbGRl
cigpCiB7CiAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCB0aGlzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2NvbW1pdExvY2spOwotCi0gICAgICAgIGlmIChtX3BsYWNlaG9sZGVyQ2FudmFzICYmIG1faGFz
UGVuZGluZ0NvbW1pdERhdGEpIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShGbG9hdFNpemUobV9wZW5kaW5nQ29t
bWl0RGF0YS0+c2l6ZSgpKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7Ci0gICAgICAg
ICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCAqbV9wZW5kaW5nQ29tbWl0RGF0YSwgSW50UmVjdChJbnRQb2ludCgpLCBtX3BlbmRp
bmdDb21taXREYXRhLT5zaXplKCkpKTsKLSAgICAgICAgICAgIG1fcGxhY2Vob2xkZXJDYW52YXMt
PnNldEltYWdlQnVmZmVyQW5kTWFya0RpcnR5KFdURk1vdmUoYnVmZmVyKSk7Ci0gICAgICAgICAg
ICBtX2hhc1BlbmRpbmdDb21taXREYXRhID0gZmFsc2U7CisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb21taXRMb2NrKTsKKyAgICAgICAgICAgIGlmICht
X3BsYWNlaG9sZGVyQ2FudmFzICYmIG1fcGVuZGluZ0NvbW1pdEJ1ZmZlcikKKyAgICAgICAgICAg
ICAgICBtX3BsYWNlaG9sZGVyQ2FudmFzLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShXVEZN
b3ZlKG1fcGVuZGluZ0NvbW1pdEJ1ZmZlcikpOworICAgICAgICAgICAgbV9wZW5kaW5nQ29tbWl0
QnVmZmVyID0gbnVsbHB0cjsKICAgICAgICAgfQogCi0gICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+cG9zdFRhc2soW3JlbGVhc2VUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0g
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7IH0pOworICAgICAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnBvc3RUYXNrKHsgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzazo6Q2xlYW51
cFRhc2ssCisgICAgICAgICAgICBbcmVsZWFzZVRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMp
XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsgfSB9KTsKICAgICB9KTsKIH0KIApAQCAtNDIx
LDIxICs0MzAsMTYgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNvbW1pdFRvUGxhY2Vob2xkZXJD
YW52YXMoKQogICAgIGlmIChtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+aXNXZWJHTCgpIHx8IG1f
Y29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKSkKICAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogCi0gICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0gICAg
ICAgIGlmIChtX3BsYWNlaG9sZGVyQ2FudmFzKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBidWZm
ZXJDb3B5ID0gaW1hZ2VCdWZmZXItPmNvcHlSZWN0VG9CdWZmZXIoRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb2xvclNwYWNlOjpTUkdCLCBpbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpKSkKLSAgICAgICAgICAgICAgICBtX3BsYWNlaG9sZGVyQ2FudmFz
LT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShXVEZNb3ZlKGJ1ZmZlckNvcHkpKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fYnVmZmVyUGlwZVNvdXJjZSkgeworICAg
ICAgICBhdXRvIGJ1ZmZlckNvcHkgPSBpbWFnZUJ1ZmZlci0+Y29weVJlY3RUb0J1ZmZlcihGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbG9yU3Bh
Y2U6OlNSR0IsIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworICAgICAgICBpZiAoYnVmZmVyQ29w
eSkKKyAgICAgICAgICAgIG1fYnVmZmVyUGlwZVNvdXJjZS0+aGFuZGxlKFdURk1vdmUoYnVmZmVy
Q29weSkpOwogICAgIH0KIAogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb21taXRMb2Nr
KTsKLQotICAgIGJvb2wgc2hvdWxkUHVzaEJ1ZmZlciA9ICFtX2hhc1BlbmRpbmdDb21taXREYXRh
OwotICAgIG1fcGVuZGluZ0NvbW1pdERhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwg
aW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpKTsKLSAgICBtX2hhc1BlbmRpbmdDb21taXREYXRh
ID0gdHJ1ZTsKLQotICAgIGlmIChzaG91bGRQdXNoQnVmZmVyKQorICAgIGJvb2wgc2hvdWxkUHVz
aEJ1ZmZlciA9ICFtX3BlbmRpbmdDb21taXRCdWZmZXI7CisgICAgbV9wZW5kaW5nQ29tbWl0QnVm
ZmVyID0gaW1hZ2VCdWZmZXItPmNvcHlSZWN0VG9CdWZmZXIoRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb2xvclNwYWNlOjpTUkdCLCBpbWFnZUJ1
ZmZlci0+Y29udGV4dCgpKTsKKyAgICBpZiAobV9wZW5kaW5nQ29tbWl0QnVmZmVyICYmIHNob3Vs
ZFB1c2hCdWZmZXIpCiAgICAgICAgIHB1c2hCdWZmZXJUb1BsYWNlaG9sZGVyKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCmluZGV4IDIwZGQwM2Y1MzMyNTRhNzJlZjk5
MzNkMzQyMTJlZmM5OTExM2U0ZWEuLjI3NzQ2NTI3ZjFjMDdiOTA5ZTFjZTAzNDVkOGJiNzk5YzUx
OTM5YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyUGlwZS5oIgogI2lu
Y2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgpAQCAtMTg3LDEwICsxODgsMTAgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgbV9oYXNTY2hlZHVsZWRDb21taXQgeyBmYWxzZSB9OwogICAgIFdlYWtQdHI8SFRNTENhbnZh
c0VsZW1lbnQ+IG1fcGxhY2Vob2xkZXJDYW52YXM7CisgICAgUmVmUHRyPEltYWdlQnVmZmVyUGlw
ZTo6U291cmNlPiBtX2J1ZmZlclBpcGVTb3VyY2U7CiAKICAgICBtdXRhYmxlIExvY2sgbV9jb21t
aXRMb2NrOwotICAgIGJvb2wgbV9oYXNQZW5kaW5nQ29tbWl0RGF0YSB7IGZhbHNlIH07Ci0gICAg
UmVmUHRyPEltYWdlRGF0YT4gbV9wZW5kaW5nQ29tbWl0RGF0YTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IG1fcGVuZGluZ0NvbW1pdEJ1ZmZlcjsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0Nv
bnRleHQuY3BwCmluZGV4IDFlYzdhMjRlZGY0NDUyMTFiYmJhOTk0MmU4MTQ2YmIxZTdmNjg0YzAu
LjU3ODY4YjBhMjNiMjIzYmRkZTkxYzA3OGRiZmQ4NWI5MmRlNWE1NzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250
ZXh0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQog
CiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclBp
cGUuaCIKICNpbmNsdWRlICJPZmZzY3JlZW5DYW52YXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgogCkBAIC0zOSw2ICs0MCw3IEBAIFdURl9NQUtFX0lTT19BTExPQ0FURURf
SU1QTChQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOwogUGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0OjpQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFzKQog
ICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChjYW52YXMpCiB7CisgICAgbV9pbWFnZUJ1ZmZl
clBpcGUgPSBJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSgpOwogfQogCiBIVE1MQ2FudmFzRWxlbWVu
dCogUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdApAQCAtNDksNiAr
NTEsMTQgQEAgSFRNTENhbnZhc0VsZW1lbnQqIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6
Y2FudmFzKCkgY29uc3QKICAgICByZXR1cm4gJmRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihi
YXNlKTsKIH0KIAorUGxhdGZvcm1MYXllciogUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Ojpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlclBpcGUpCisgICAg
ICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUGlwZS0+cGxhdGZvcm1MYXllcigpOworCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDY0NTA5
MTQ1OWRkMDFjYzJhNzk3N2RjMDAzYjQ1MjY1ZGU1YmE3ZDguLjMzZmE4ZjJhZGM3OGI0OWNiZTQ5
NzYwYTZjNjZhMzgzNGRmOTkxOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0zMSw2ICszMSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VCdWZmZXJQaXBlOwogY2xhc3Mg
T2Zmc2NyZWVuQ2FudmFzOwogCiBjbGFzcyBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQgZmlu
YWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CkBAIC00MCw4ICs0MSwxNyBAQCBw
dWJsaWM6CiAKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKCkgY29uc3Q7CiAKKyAgICBj
b25zdCBSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlPiYgaW1hZ2VCdWZmZXJQaXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlclBpcGU7IH0KKwogcHJpdmF0ZToKICAgICBib29sIGlzUGxhY2Vo
b2xkZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGlzQWNjZWxlcmF0ZWQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAhIW1faW1hZ2VCdWZmZXJQaXBlOyB9CisgICAgYm9vbCBp
c0dQVUJhc2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gISFtX2ltYWdlQnVmZmVyUGlwZTsgfQor
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyUGlwZT4gbV9pbWFnZUJ1ZmZlclBpcGU7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQppbmRleCA0OTUy
NTM2YWVkMzRkZjM5YzVkZjYwZTYzOWQ0ZjUxMTdhMGRlMzgwLi5mZTY0NzU3NDhiM2QwZDAxZjEz
OGZjOTMyODk1MGExODRlZmFiYTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1
cmVNYXBwZXIuY21ha2UKQEAgLTc2LDYgKzc2LDcgQEAgaWYgKFVTRV9DT09SRElOQVRFRF9HUkFQ
SElDUykKICAgICApCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUJ1ZmZlci5jcHAKKyAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0NvbnRleHQuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBhaW50aW5nRW5naW5lLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2luZUJh
c2ljLmNwcApAQCAtOTksNiArMTAwLDcgQEAgaWYgKFVTRV9DT09SRElOQVRFRF9HUkFQSElDUykK
IAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmltYXRlZEJhY2tp
bmdTdG9yZUNsaWVudC5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3Np
YUJ1ZmZlci5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdl
QnVmZmVyUGlwZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBh
aW50aW5nRW5naW5lLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lh
UGxhdGZvcm1MYXllci5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3Np
YVNjZW5lLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyUGlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlclBpcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjOGJiZWQzZGVhZTNhMjBkNDYwMGE3ZWI3MWNh
MzUyODg5YTg4YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlclBpcGUuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyUGlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhVVNFKE5JQ09TSUEp
CisKK2Jvb2wgSW1hZ2VCdWZmZXJQaXBlOjppc1N1cHBvcnRlZCgpCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlPiBJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0
ZSgpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlclBpcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyUGlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiMWVlN2MzMzQ0M2MxMjg2ZGZiZWEyMGVhY2MyZjg2
YmE3OWE3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlclBpcGUuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5o
IgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyOworCitjbGFzcyBJbWFnZUJ1ZmZlclBpcGUgOiBwdWJs
aWMgUmVmQ291bnRlZDxJbWFnZUJ1ZmZlclBpcGU+IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBTb3Vy
Y2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U291cmNlPiB7CisgICAgcHVibGljOgor
ICAgICAgICB2aXJ0dWFsIH5Tb3VyY2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIGhhbmRsZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYpID0gMDsKKyAgICB9Owor
CisgICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWQoKTsKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdl
QnVmZmVyUGlwZT4gY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlclBpcGUoKSA9
IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxTb3VyY2U+IHNvdXJjZSgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1ZmZlclBpcGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZm
ZXJQaXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NzEwZDI5MzY5MjdlNTdmODljZTRmYzE4ZmFhOWJkM2Zi
MTg5MGRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmNwcApAQCAtMCwwICsxLDE0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTmljb3NpYUltYWdlQnVmZmVyUGlwZS5oIgorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKKyNpbmNsdWRlICJOaWNvc2lhUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eS5oIgorCisjaWYgVVNFKENBSVJPKQorI2luY2x1ZGUgPGNhaXJvLmg+Cisj
ZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpOaWNv
c2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKCkKK3sKKyAgICBtX25pY29zaWFMYXllciA9IE5pY29z
aWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7Cit9CisKK05pY29zaWFJbWFnZUJ1ZmZlclBp
cGVTb3VyY2U6On5OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKCkKK3sKKyAgICBkb3duY2Fz
dDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXIt
PmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworfQorCit2b2lkIE5pY29zaWFJbWFnZUJ1ZmZl
clBpcGVTb3VyY2U6OmhhbmRsZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVy
KQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1faW1hZ2VCdWZmZXJMb2NrKTsKKworICAgIGlmICghbV9pbWFnZUJ1ZmZl
cikgeworICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0gW3RoaXNdIChUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkgbXV0YWJsZSB7CisgICAgICAgICAgICByZXR1cm4g
cHJveHkuc2NoZWR1bGVVcGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQoW3RoaXNdICgpIG11dGFibGUg
eworICAgICAgICAgICAgICAgIGF1dG8mIHByb3h5ID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVu
dExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCk7
CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKKworICAg
ICAgICAgICAgICAgIGlmICghcHJveHkuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICAgICAgYXV0byB0ZXh0dXJlID0gQml0bWFwVGV4dHVyZUdM
OjpjcmVhdGUoVGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzOjpnZXQoKSk7CisKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9pbWFnZUJ1ZmZlckxvY2spOworCisgICAgICAgICAgICAgICAgICAgIGlmICghbV9pbWFnZUJ1
ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAg
ICAgICBhdXRvIG5hdGl2ZUltYWdlID0gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uo
V1RGTW92ZShtX2ltYWdlQnVmZmVyKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gc2l6ZSA9
IG5hdGl2ZUltYWdlU2l6ZShuYXRpdmVJbWFnZSk7CisKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+cmVzZXQoc2l6ZSwgbmF0aXZlSW1hZ2VIYXNBbHBoYShuYXRpdmVJbWFnZSkgPyBCaXRt
YXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhIDogQml0bWFwVGV4dHVyZTo6Tm9GbGFnKTsKKyNpZiBV
U0UoQ0FJUk8pCisgICAgICAgICAgICAgICAgICAgIGF1dG8qIHN1cmZhY2UgPSBuYXRpdmVJbWFn
ZS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byogaW1hZ2VEYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNl
KSk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGltYWdlRGF0
YSwgSW50UmVjdChJbnRQb2ludCgpLCBzaXplKSwgSW50UG9pbnQoKSwgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIG5v
dEltcGxlbWVudGVkKCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBhdXRvIGxheWVyQnVmZmVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllckJ1ZmZlcj4oV1RGTW92ZSh0ZXh0dXJlKSk7CisgICAgICAgICAgICAgICAgbGF5ZXJCdWZm
ZXItPnNldEV4dHJhRmxhZ3MoVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCk7CisgICAgICAg
ICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIoV1RGTW92ZShsYXllckJ1ZmZlcikpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH07CisgICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0
PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+
aW1wbCgpKS5wcm94eSgpKTsKKyAgICB9CisKKyAgICBtX2ltYWdlQnVmZmVyID0gV1RGTW92ZShi
dWZmZXIpOworfQorCitQbGF0Zm9ybUxheWVyKiBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNl
OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0
KCk7Cit9CisKK3ZvaWQgTmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6c3dhcEJ1ZmZlcnNJ
Zk5lZWRlZCgpCit7Cit9CisKK05pY29zaWFJbWFnZUJ1ZmZlclBpcGU6Ok5pY29zaWFJbWFnZUJ1
ZmZlclBpcGUoKQoreworICAgIG1fc291cmNlID0gYWRvcHRSZWYobmV3IE5pY29zaWFJbWFnZUJ1
ZmZlclBpcGVTb3VyY2UpOworfQorCitSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2U+IE5p
Y29zaWFJbWFnZUJ1ZmZlclBpcGU6OnNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc291
cmNlOworfQorCitQbGF0Zm9ybUxheWVyKiBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlOjpwbGF0Zm9y
bUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAobV9zb3VyY2UpCisgICAgICAgIHJldHVybiBtX3Nv
dXJjZS0+cGxhdGZvcm1MYXllcigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5h
bWVzcGFjZSBOaWNvc2lhCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBJbWFnZUJ1ZmZl
clBpcGU6OmlzU3VwcG9ydGVkKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUmVmUHRyPElt
YWdlQnVmZmVyUGlwZT4gSW1hZ2VCdWZmZXJQaXBlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZSk7Cit9CisKK30KKwor
I2VuZGlmIC8vIFVTRShOSUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1ZmZlclBpcGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hMGRjMmU0MDZkNGRhYjczMzhjZWNkOGVmZWJkZDk5MDUzOTVhMWI2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9O
aWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyUGlw
ZS5oIgorI2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgor
CituYW1lc3BhY2UgTmljb3NpYSB7CisKK2NsYXNzIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3Vy
Y2UgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6SW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2UsIHB1Ymxp
YyBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBO
aWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKCk7CisgICAgdmlydHVhbCB+Tmljb3NpYUltYWdl
QnVmZmVyUGlwZVNvdXJjZSgpOworCisgICAgdm9pZCBoYW5kbGUoc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OkltYWdlQnVmZmVyPiYmKSBmaW5hbDsKKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVk
ZWQoKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVy
OworCisgICAgbXV0YWJsZSBMb2NrIG1faW1hZ2VCdWZmZXJMb2NrOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKK307CisKK2NsYXNzIE5p
Y29zaWFJbWFnZUJ1ZmZlclBpcGUgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6SW1hZ2VCdWZmZXJQ
aXBlIHsKK3B1YmxpYzoKKyAgICBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlKCk7CisgICAgdmlydHVh
bCB+Tmljb3NpYUltYWdlQnVmZmVyUGlwZSgpID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2U+IHNvdXJjZSgpIGNvbnN0IGZp
bmFsOworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBmaW5hbDsKKwor
ICAgIFJlZlB0cjxOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlPiBtX3NvdXJjZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIE5pY29zaWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5LmNwcAppbmRleCA1NDJiZmE1YmI0ZTIwZWEyMmE3ZTdkMWYxYzIzZDJh
YWQ0YzEwYzdlLi5lMjg3MWY3OTU2MmM1YjA1NTAzMmJhMDFjMTM0NzdiMDRhNDM5NTFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuY3BwCkBAIC02
NSwxOSArNjUsMjcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjphY3Rp
dmF0ZU9uQ29tcG9zaXRpbmdUaHJlYWQoQ29tcG9zaXRvciogY28KICAgICBBU1NFUlQobV9jb21w
b3NpdG9yVGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CiAgICAgQVNTRVJUKGNvbXBvc2l0
b3IpOwogICAgIEFTU0VSVCh0YXJnZXRMYXllcik7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9s
b2NrKTsKLSAgICBtX2NvbXBvc2l0b3IgPSBjb21wb3NpdG9yOwotICAgIG1fdGFyZ2V0TGF5ZXIg
PSB0YXJnZXRMYXllcjsKLSAgICBpZiAobV90YXJnZXRMYXllciAmJiBtX2N1cnJlbnRCdWZmZXIp
Ci0gICAgICAgIG1fdGFyZ2V0TGF5ZXItPnNldENvbnRlbnRzTGF5ZXIobV9jdXJyZW50QnVmZmVy
LmdldCgpKTsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IHVwZGF0ZUZ1bmN0aW9uOworICAgIHsKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgbV9jb21wb3NpdG9yID0g
Y29tcG9zaXRvcjsKKyAgICAgICAgbV90YXJnZXRMYXllciA9IHRhcmdldExheWVyOworICAgICAg
ICBpZiAobV90YXJnZXRMYXllciAmJiBtX2N1cnJlbnRCdWZmZXIpCisgICAgICAgICAgICBtX3Rh
cmdldExheWVyLT5zZXRDb250ZW50c0xheWVyKG1fY3VycmVudEJ1ZmZlci5nZXQoKSk7CiAKLSAg
ICBtX3JlbGVhc2VVbnVzZWRCdWZmZXJzVGltZXIgPSBtYWtlVW5pcXVlPFJ1bkxvb3A6OlRpbWVy
PFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+PihSdW5Mb29wOjpjdXJyZW50KCksIHRo
aXMsICZUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjpyZWxlYXNlVW51c2VkQnVmZmVy
c1RpbWVyRmlyZWQpOwotICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVyID0gbWFrZVVu
aXF1ZTxSdW5Mb29wOjpUaW1lcjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Pj4oUnVu
TG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6
Y29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVyRmlyZWQpOworICAgICAgICBtX3JlbGVhc2VVbnVz
ZWRCdWZmZXJzVGltZXIgPSBtYWtlVW5pcXVlPFJ1bkxvb3A6OlRpbWVyPFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHk+PihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5OjpyZWxlYXNlVW51c2VkQnVmZmVyc1RpbWVyRmlyZWQpOwor
ICAgICAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lciA9IG1ha2VVbmlxdWU8UnVuTG9v
cDo6VGltZXI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4+KFJ1bkxvb3A6OmN1cnJl
bnQoKSwgdGhpcywgJlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6OmNvbXBvc2l0b3JU
aHJlYWRVcGRhdGVUaW1lckZpcmVkKTsKIAogI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCi0gICAg
bV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXItPnNldFByaW9yaXR5KFJ1bkxvb3BTb3VyY2VQ
cmlvcml0eTo6Q29tcG9zaXRpbmdUaHJlYWRVcGRhdGVUaW1lcik7Ci0gICAgbV9yZWxlYXNlVW51
c2VkQnVmZmVyc1RpbWVyLT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3JpdHk6OlJlbGVh
c2VVbnVzZWRSZXNvdXJjZXNUaW1lcik7CisgICAgICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0
ZVRpbWVyLT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3JpdHk6OkNvbXBvc2l0aW5nVGhy
ZWFkVXBkYXRlVGltZXIpOworICAgICAgICBtX3JlbGVhc2VVbnVzZWRCdWZmZXJzVGltZXItPnNl
dFByaW9yaXR5KFJ1bkxvb3BTb3VyY2VQcmlvcml0eTo6UmVsZWFzZVVudXNlZFJlc291cmNlc1Rp
bWVyKTsKICNlbmRpZgorCisgICAgICAgIGlmICghbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlRnVu
Y3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHVwZGF0ZUZ1bmN0aW9uID0gV1RG
TW92ZShtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVGdW5jdGlvbik7CisgICAgfQorICAgIHVwZGF0
ZUZ1bmN0aW9uKCk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6
aW52YWxpZGF0ZSgpCkBAIC0yNDksMTAgKzI1NywxMSBAQCB2b2lkIFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHk6OmRyb3BDdXJyZW50QnVmZmVyV2hpbGVQcmVzZXJ2aW5nVGV4dHVyZShi
bwogYm9vbCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjpzY2hlZHVsZVVwZGF0ZU9u
Q29tcG9zaXRvclRocmVhZChGdW5jdGlvbjx2b2lkKCk+JiYgdXBkYXRlRnVuY3Rpb24pCiB7CiAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRh
dGVGdW5jdGlvbiA9IFdURk1vdmUodXBkYXRlRnVuY3Rpb24pOworCiAgICAgaWYgKCFtX2NvbXBv
c2l0b3JUaHJlYWRVcGRhdGVUaW1lcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9j
b21wb3NpdG9yVGhyZWFkVXBkYXRlRnVuY3Rpb24gPSBXVEZNb3ZlKHVwZGF0ZUZ1bmN0aW9uKTsK
ICAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lci0+c3RhcnRPbmVTaG90KDBfcyk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCmluZGV4IGMyYmQ2NmRjZmZjZTFlYTAzNTZjNDg5MTNhYzBhYzE3NWE0
NmY5OWUuLmMzM2ZhYWFiMzA1ZWI5M2ZjODI4M2Q4NmQ5ZDZkOWE2NWQ4N2FmMjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0xMDUw
LDcgKzEwNTAsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmlndXJhdGlv
bihjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlcwogICAgICAgICB1cGRhdGVDb250
ZW50c1JlY3RzKCk7CiAgICAgfQogI2VuZGlmCi0jaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUoV0VCR1BVKQorI2lmIEVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQVSkgfHwg
RU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgZWxzZSBpZiAocmVuZGVyZXIoKS5pc0NhbnZh
cygpICYmIGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kocmVuZGVyZXIoKSkgPT0gQ2FudmFzQXNM
YXllckNvbnRlbnRzKSB7CiAgICAgICAgIGNvbnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMg
PSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVyZXIoKS5lbGVtZW50KCkpOwogICAg
ICAgICBpZiAoYXV0byogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKQpAQCAt
MjY2Niw3ICsyNjY2LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRhaW5zUGFpbnRl
ZENvbnRlbnQoUGFpbnRlZENvbnRlbnRzSW5mbyYgY29udGVudHNJbmYKICAgICAgICAgcmV0dXJu
IG1fb3duaW5nTGF5ZXIuaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwg
KCEoZG93bmNhc3Q8UmVuZGVyVmlkZW8+KHJlbmRlcmVyKCkpLnN1cHBvcnRzQWNjZWxlcmF0ZWRS
ZW5kZXJpbmcoKSkgJiYgbV9yZXF1aXJlc093bkJhY2tpbmdTdG9yZSk7CiAjZW5kaWYKIAotI2lm
IEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyNpZiBFTkFC
TEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRShPRkZT
Q1JFRU5fQ0FOVkFTKQogICAgIGlmIChpczxSZW5kZXJIVE1MQ2FudmFzPihyZW5kZXJlcigpKSAm
JiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJD
b250ZW50cykKICAgICAgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXIuaGFzVmlzaWJsZUJveERlY29y
YXRpb25zT3JCYWNrZ3JvdW5kKCk7CiAjZW5kaWYKQEAgLTI3MzEsNyArMjczMSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjpjb250ZW50Q2hhbmdlZChDb250ZW50Q2hhbmdlVHlwZSBjaGFu
Z2VUeXBlKQogICAgIGlmICgoY2hhbmdlVHlwZSA9PSBNYXNrSW1hZ2VDaGFuZ2VkKSAmJiBtX21h
c2tMYXllcikKICAgICAgICAgbV9vd25pbmdMYXllci5zZXROZWVkc0NvbXBvc2l0aW5nQ29uZmln
dXJhdGlvblVwZGF0ZSgpOwogCi0jaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUoV0VCR1BVKQorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQVSkgfHwgRU5BQkxFKE9G
RlNDUkVFTl9DQU5WQVMpCiAgICAgaWYgKChjaGFuZ2VUeXBlID09IENhbnZhc0NoYW5nZWQgfHwg
Y2hhbmdlVHlwZSA9PSBDYW52YXNQaXhlbHNDaGFuZ2VkKSAmJiByZW5kZXJlcigpLmlzQ2FudmFz
KCkgJiYgY2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneShyZW5kZXJlcigpKSA9PSBDYW52YXNBc0xh
eWVyQ29udGVudHMpIHsKICAgICAgICAgaWYgKGNoYW5nZVR5cGUgPT0gQ2FudmFzQ2hhbmdlZCkK
ICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJVcGRhdGUo
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407966</attachid>
            <date>2020-09-04 07:18:37 -0700</date>
            <delta_ts>2020-09-04 07:49:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202798-20200904151836.patch</filename>
            <type>text/plain</type>
            <size>35628</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDFkZDVkZDIxNjU4OTNh
MTAwNTBkYWMwZjIwZGVlZjcxZjljYTM5Yy4uZDUxNjQxZGU2ZTlhYzc1YmMzNDc5MWI4Yzk4ZWU1
NTBiMjY2ZWY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDIwLTA5LTA0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYXN5bmNocm9u
b3VzIE9mZnNjcmVlbkNhbnZhcyBwbGFjZWhvbGRlciB1cGRhdGVzIGZvciBUZXh0dXJlTWFwcGVy
R0wtYmFzZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAyNzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IGFzeW5jaHJvbm91cyB1cGRhdGVzIGZvciB1c2VycyBvZiB0
aGUgTmljb3NpYSBjb21wb3NpdG9yCisgICAgICAgIChpLmUuIEdUSywgV1BFKS4gVGhpcyBhbGxv
d3MgT2Zmc2NyZWVuQ2FudmFzLWNvbnRyb2xsZWQgY2FudmFzZXMgdG8KKyAgICAgICAgdXBkYXRl
IHZpc3VhbGx5IHdoaWxlIHRoZSBtYWluIHRocmVhZCBpcyBibG9ja2VkLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50Ojp0cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbik6CisgICAgICAgICog
aHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2Fu
dmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpzZXRQbGFj
ZWhvbGRlckNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnB1c2hC
dWZmZXJUb1BsYWNlaG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6
Y29tbWl0VG9QbGFjZWhvbGRlckNhbnZhcyk6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52
YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpQbGFj
ZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJS
ZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9U
ZXh0dXJlTWFwcGVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyUGlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJQaXBlOjpp
c1N1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJQaXBlLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdlQnVmZmVyUGlw
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNv
dXJjZTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSk6CisgICAgICAgIChOaWNvc2lhOjpO
aWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpoYW5kbGUpOgorICAgICAgICAoTmljb3NpYTo6
Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAg
ICAgIChOaWNvc2lhOjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpzd2FwQnVmZmVyc0lm
TmVlZGVkKToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGU6Ok5pY29z
aWFJbWFnZUJ1ZmZlclBpcGUpOgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVy
UGlwZTo6c291cmNlIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZl
clBpcGU6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJQaXBlOjppc1N1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlclBpcGU6
OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1h
Z2VCdWZmZXJQaXBlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6OmFjdGl2YXRlT25Db21wb3NpdGluZ1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
OjpzY2hlZHVsZVVwZGF0ZU9uQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjpjb250YWluc1BhaW50ZWRDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6Y29udGVudENoYW5nZWQpOgorCiAyMDIwLTA5LTAzICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFN0b3JlIGFsbCBzdHls
aW5nIGZsYWdzIGluIG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAx
ZDBlMjgyZGUwY2M4M2ZlYzhjMzBlNmI3YTM2M2M0MWRlOGY1MzAyLi41N2I0Zjg0YjBjOTIxN2Q5
ZTExZTI5ZDEyYjdjNGI5NGRkNDA5ODMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTg4MCw2ICsxODgw
LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlclBp
cGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMDQwMWEyZTIzNWM2YTQ5ZTBhZTA1ZWMzNjBmZWVjYjgwOGE1ODRjMy4uMGIzMTQ4NDllMjk3
YWRlZjVlZjg1Y2ZhMjYxNTFmMTY5MDcyYmQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzYzOSw2ICszNjM5LDcgQEAKIAkJ
QjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMDE1OTMwQUY2Q0Q1MzAwNkJD
RTBFIC8qIEdyYXBoaWNzQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUIyQTAxNUFCMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5
cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkEw
MTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFB
NCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjJBMTBEOTEwQjM4
MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyUGlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMTBEOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdl
QnVmZmVyUGlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUIyQTFGMkFCMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMUYyQTIwQ0VGMEFC
RjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggKi87IH07CiAJCUIyQTFGMkFFMENFRjBBQkYw
MDQ0MkY2QSAvKiBTVkdHbHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTFGMkE1MENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdHbHlwaEVs
ZW1lbnQuaCAqLzsgfTsKIAkJQjJBMUYyQjEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR01pc3NpbmdH
bHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyQTFGMkE4MENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdNaXNzaW5nR2x5cGhFbGVtZW50Lmgg
Ki87IH07CkBAIC03ODU0LDYgKzc4NTUsNyBAQAogCQk0M0MwOTJCOTEyRDlFNEVFMDBBOTg5QzMg
LyogUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDNDMDkyQkExMkQ5RTRFRTAwQTk4OUMzIC8qIFJlbmRlclNWR0ZvcmVpZ25P
YmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHRm9yZWln
bk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0M0QyNTk3NjEzQzgxNkY0
MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1hZ2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
M0QyNTk4NjEzQzgxNkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXJQaXBlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyUGlwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzRURENjdDMUI0ODVEQkYwMDY0MEU3NSAvKiBDb21iaW5l
ZEZpbHRlcnNBbHBoYWJldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQzRURENjdEMUI0ODVEQkYwMDY0MEU3NSAvKiBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21iaW5lZEZpbHRlcnNBbHBoYWJl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyQzBFMUFFOEEwMDBDNEEy
RDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMzEwOCw2ICsxMzExMCw3IEBACiAJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAv
KiBHcmFwaGljc1R5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHcmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMDE1
OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCMkExMEM5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJQaXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlclBpcGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8q
IFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTVkdGb250RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFG
MkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjU5NTEsNiArMjU5NTQsOCBAQAogCQkJCUIyQTEwQjkxMEIzODE4
QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovLAogCQkJCTcyQkFDM0E0MjNFMTczMjcwMDhE
NzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovLAogCQkJCTcyQkFDM0E1MjNFMTczMjgw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKKwkJCQk0M0QyNTk4NjEzQzgxNkY0
MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXJQaXBlLmNwcCAqLywKKwkJCQlCMkExMEM5MTBCMzgxOEJE
MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJQaXBlLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3MjAw
MEM0MkZCIC8qIEltYWdlRGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAwMEM0
MkZCIC8qIEltYWdlRGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0QyAv
KiBJbWFnZUZyYW1lLmNwcCAqLywKQEAgLTMxNTk4LDYgKzMxNjAzLDcgQEAKIAkJCQk3MkJBQzNB
RTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1NTA2NDBCMDI0MDc1ODdFMDBBQUUwNDUgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCTcyN0E3RjNBMjQwNzhCODQwMDREMjkzMSAvKiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyQTEwRDkxMEIzODE4QkQw
MDA5OUFBNCAvKiBJbWFnZUJ1ZmZlclBpcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0UyMURE
MjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAyMjIgLyogSW1hZ2VDb250cm9sc0J1dHRvbkVs
ZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdBMSAv
KiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCBjMzFmYjE5NWY0OGEwZjc1Zjc1M2U1
OTgxNDAyODkzZWZmMzU5ZWMwLi4zNjkxMjEzNTZiZjUxMGVjZWVlNGQ4YTMyM2RmMWVjODMwZmEz
YWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtNzc5
LDYgKzc3OSw5IEBAIEV4Y2VwdGlvbk9yPFJlZjxPZmZzY3JlZW5DYW52YXM+PiBIVE1MQ2FudmFz
RWxlbWVudDo6dHJhbnNmZXJDb250cm9sVG9PZmZzY3JlZW4oCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1
ZTxQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ+KCp0aGlzKTsKKyAgICBpZiAobV9jb250ZXh0
LT5pc0FjY2VsZXJhdGVkKCkpCisgICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9z
aXRpb24oKTsKKwogICAgIHJldHVybiBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZShjb250ZXh0LCAq
dGhpcyk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2Ny
ZWVuQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApp
bmRleCAxODlhYzE5MjU0NGRjOWRlYjZkNTM2NjNjODI5NDBhNjAxMjczMDBjLi43NWYxMjBjZmFm
OTRkNTU5ZDI4YzgwMTAwOTBkOTc3NTRmNzQwYzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwCkBAIC04Nyw2ICs4NywxMiBAQCBSZWY8T2Zmc2NyZWVuQ2FudmFzPiBP
ZmZzY3JlZW5DYW52YXM6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBz
dAogCiAgICAgY2FsbE9uTWFpblRocmVhZChbZGV0YWNoZWRDYW52YXMgPSBXVEZNb3ZlKGRldGFj
aGVkQ2FudmFzKSwgb2Zmc2NyZWVuQ2FudmFzID0gbWFrZVJlZihjbG9uZS5nZXQoKSldICgpIG11
dGFibGUgewogICAgICAgICBvZmZzY3JlZW5DYW52YXMtPm1fcGxhY2Vob2xkZXJDYW52YXMgPSBk
ZXRhY2hlZENhbnZhcy0+dGFrZVBsYWNlaG9sZGVyQ2FudmFzKCk7CisgICAgICAgIGlmIChvZmZz
Y3JlZW5DYW52YXMtPm1fcGxhY2Vob2xkZXJDYW52YXMpIHsKKyAgICAgICAgICAgIGF1dG8mIHBs
YWNlaG9sZGVyQ29udGV4dCA9IGRvd25jYXN0PFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dD4o
Km9mZnNjcmVlbkNhbnZhcy0+bV9wbGFjZWhvbGRlckNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgp
KTsKKyAgICAgICAgICAgIGF1dG8mIGltYWdlQnVmZmVyUGlwZSA9IHBsYWNlaG9sZGVyQ29udGV4
dC5pbWFnZUJ1ZmZlclBpcGUoKTsKKyAgICAgICAgICAgIGlmIChpbWFnZUJ1ZmZlclBpcGUpCisg
ICAgICAgICAgICAgICAgb2Zmc2NyZWVuQ2FudmFzLT5tX2J1ZmZlclBpcGVTb3VyY2UgPSBpbWFn
ZUJ1ZmZlclBpcGUtPnNvdXJjZSgpOworICAgICAgICB9CiAgICAgICAgIG9mZnNjcmVlbkNhbnZh
cy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayh7IFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s6OkNsZWFudXBUYXNrLAogICAgICAgICAgICAgW3JlbGVhc2VPZmZzY3JlZW5D
YW52YXMgPSBXVEZNb3ZlKG9mZnNjcmVlbkNhbnZhcyldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JikgeyB9IH0pOwogICAgIH0pOwpAQCAtMzkzLDIxICszOTksMjQgQEAgdm9pZCBPZmZzY3JlZW5D
YW52YXM6OnNldFBsYWNlaG9sZGVyQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMpCiAg
ICAgQVNTRVJUKCFtX2NvbnRleHQpOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
bV9wbGFjZWhvbGRlckNhbnZhcyA9IG1ha2VXZWFrUHRyKGNhbnZhcyk7CisgICAgYXV0byYgcGxh
Y2Vob2xkZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Pigq
Y2FudmFzLnJlbmRlcmluZ0NvbnRleHQoKSk7CisgICAgYXV0byYgaW1hZ2VCdWZmZXJQaXBlID0g
cGxhY2Vob2xkZXJDb250ZXh0LmltYWdlQnVmZmVyUGlwZSgpOworICAgIGlmIChpbWFnZUJ1ZmZl
clBpcGUpCisgICAgICAgIG1fYnVmZmVyUGlwZVNvdXJjZSA9IGltYWdlQnVmZmVyUGlwZS0+c291
cmNlKCk7CiB9CiAKIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpwdXNoQnVmZmVyVG9QbGFjZWhvbGRl
cigpCiB7CiAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCB0aGlzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2NvbW1pdExvY2spOwotCi0gICAgICAgIGlmIChtX3BsYWNlaG9sZGVyQ2FudmFzICYmIG1faGFz
UGVuZGluZ0NvbW1pdERhdGEpIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShGbG9hdFNpemUobV9wZW5kaW5nQ29t
bWl0RGF0YS0+c2l6ZSgpKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7Ci0gICAgICAg
ICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCAqbV9wZW5kaW5nQ29tbWl0RGF0YSwgSW50UmVjdChJbnRQb2ludCgpLCBtX3BlbmRp
bmdDb21taXREYXRhLT5zaXplKCkpKTsKLSAgICAgICAgICAgIG1fcGxhY2Vob2xkZXJDYW52YXMt
PnNldEltYWdlQnVmZmVyQW5kTWFya0RpcnR5KFdURk1vdmUoYnVmZmVyKSk7Ci0gICAgICAgICAg
ICBtX2hhc1BlbmRpbmdDb21taXREYXRhID0gZmFsc2U7CisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb21taXRMb2NrKTsKKyAgICAgICAgICAgIGlmICht
X3BsYWNlaG9sZGVyQ2FudmFzICYmIG1fcGVuZGluZ0NvbW1pdEJ1ZmZlcikKKyAgICAgICAgICAg
ICAgICBtX3BsYWNlaG9sZGVyQ2FudmFzLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShXVEZN
b3ZlKG1fcGVuZGluZ0NvbW1pdEJ1ZmZlcikpOworICAgICAgICAgICAgbV9wZW5kaW5nQ29tbWl0
QnVmZmVyID0gbnVsbHB0cjsKICAgICAgICAgfQogCi0gICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+cG9zdFRhc2soW3JlbGVhc2VUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0g
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7IH0pOworICAgICAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnBvc3RUYXNrKHsgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzazo6Q2xlYW51
cFRhc2ssCisgICAgICAgICAgICBbcmVsZWFzZVRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMp
XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsgfSB9KTsKICAgICB9KTsKIH0KIApAQCAtNDIx
LDIxICs0MzAsMTYgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNvbW1pdFRvUGxhY2Vob2xkZXJD
YW52YXMoKQogICAgIGlmIChtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+aXNXZWJHTCgpIHx8IG1f
Y29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKSkKICAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogCi0gICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0gICAg
ICAgIGlmIChtX3BsYWNlaG9sZGVyQ2FudmFzKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBidWZm
ZXJDb3B5ID0gaW1hZ2VCdWZmZXItPmNvcHlSZWN0VG9CdWZmZXIoRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb2xvclNwYWNlOjpTUkdCLCBpbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpKSkKLSAgICAgICAgICAgICAgICBtX3BsYWNlaG9sZGVyQ2FudmFz
LT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShXVEZNb3ZlKGJ1ZmZlckNvcHkpKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fYnVmZmVyUGlwZVNvdXJjZSkgeworICAg
ICAgICBhdXRvIGJ1ZmZlckNvcHkgPSBpbWFnZUJ1ZmZlci0+Y29weVJlY3RUb0J1ZmZlcihGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbG9yU3Bh
Y2U6OlNSR0IsIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworICAgICAgICBpZiAoYnVmZmVyQ29w
eSkKKyAgICAgICAgICAgIG1fYnVmZmVyUGlwZVNvdXJjZS0+aGFuZGxlKFdURk1vdmUoYnVmZmVy
Q29weSkpOwogICAgIH0KIAogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb21taXRMb2Nr
KTsKLQotICAgIGJvb2wgc2hvdWxkUHVzaEJ1ZmZlciA9ICFtX2hhc1BlbmRpbmdDb21taXREYXRh
OwotICAgIG1fcGVuZGluZ0NvbW1pdERhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwg
aW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpKTsKLSAgICBtX2hhc1BlbmRpbmdDb21taXREYXRh
ID0gdHJ1ZTsKLQotICAgIGlmIChzaG91bGRQdXNoQnVmZmVyKQorICAgIGJvb2wgc2hvdWxkUHVz
aEJ1ZmZlciA9ICFtX3BlbmRpbmdDb21taXRCdWZmZXI7CisgICAgbV9wZW5kaW5nQ29tbWl0QnVm
ZmVyID0gaW1hZ2VCdWZmZXItPmNvcHlSZWN0VG9CdWZmZXIoRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb2xvclNwYWNlOjpTUkdCLCBpbWFnZUJ1
ZmZlci0+Y29udGV4dCgpKTsKKyAgICBpZiAobV9wZW5kaW5nQ29tbWl0QnVmZmVyICYmIHNob3Vs
ZFB1c2hCdWZmZXIpCiAgICAgICAgIHB1c2hCdWZmZXJUb1BsYWNlaG9sZGVyKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCmluZGV4IDIwZGQwM2Y1MzMyNTRhNzJlZjk5
MzNkMzQyMTJlZmM5OTExM2U0ZWEuLjI3NzQ2NTI3ZjFjMDdiOTA5ZTFjZTAzNDVkOGJiNzk5YzUx
OTM5YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyUGlwZS5oIgogI2lu
Y2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgpAQCAtMTg3LDEwICsxODgsMTAgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgbV9oYXNTY2hlZHVsZWRDb21taXQgeyBmYWxzZSB9OwogICAgIFdlYWtQdHI8SFRNTENhbnZh
c0VsZW1lbnQ+IG1fcGxhY2Vob2xkZXJDYW52YXM7CisgICAgUmVmUHRyPEltYWdlQnVmZmVyUGlw
ZTo6U291cmNlPiBtX2J1ZmZlclBpcGVTb3VyY2U7CiAKICAgICBtdXRhYmxlIExvY2sgbV9jb21t
aXRMb2NrOwotICAgIGJvb2wgbV9oYXNQZW5kaW5nQ29tbWl0RGF0YSB7IGZhbHNlIH07Ci0gICAg
UmVmUHRyPEltYWdlRGF0YT4gbV9wZW5kaW5nQ29tbWl0RGF0YTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IG1fcGVuZGluZ0NvbW1pdEJ1ZmZlcjsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0Nv
bnRleHQuY3BwCmluZGV4IDFlYzdhMjRlZGY0NDUyMTFiYmJhOTk0MmU4MTQ2YmIxZTdmNjg0YzAu
LjU3ODY4YjBhMjNiMjIzYmRkZTkxYzA3OGRiZmQ4NWI5MmRlNWE1NzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250
ZXh0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQog
CiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclBp
cGUuaCIKICNpbmNsdWRlICJPZmZzY3JlZW5DYW52YXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgogCkBAIC0zOSw2ICs0MCw3IEBAIFdURl9NQUtFX0lTT19BTExPQ0FURURf
SU1QTChQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOwogUGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0OjpQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFzKQog
ICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChjYW52YXMpCiB7CisgICAgbV9pbWFnZUJ1ZmZl
clBpcGUgPSBJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSgpOwogfQogCiBIVE1MQ2FudmFzRWxlbWVu
dCogUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdApAQCAtNDksNiAr
NTEsMTQgQEAgSFRNTENhbnZhc0VsZW1lbnQqIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6
Y2FudmFzKCkgY29uc3QKICAgICByZXR1cm4gJmRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihi
YXNlKTsKIH0KIAorUGxhdGZvcm1MYXllciogUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Ojpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlclBpcGUpCisgICAg
ICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUGlwZS0+cGxhdGZvcm1MYXllcigpOworCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDY0NTA5
MTQ1OWRkMDFjYzJhNzk3N2RjMDAzYjQ1MjY1ZGU1YmE3ZDguLjMzZmE4ZjJhZGM3OGI0OWNiZTQ5
NzYwYTZjNjZhMzgzNGRmOTkxOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0zMSw2ICszMSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VCdWZmZXJQaXBlOwogY2xhc3Mg
T2Zmc2NyZWVuQ2FudmFzOwogCiBjbGFzcyBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQgZmlu
YWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CkBAIC00MCw4ICs0MSwxNyBAQCBw
dWJsaWM6CiAKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKCkgY29uc3Q7CiAKKyAgICBj
b25zdCBSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlPiYgaW1hZ2VCdWZmZXJQaXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlclBpcGU7IH0KKwogcHJpdmF0ZToKICAgICBib29sIGlzUGxhY2Vo
b2xkZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGlzQWNjZWxlcmF0ZWQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAhIW1faW1hZ2VCdWZmZXJQaXBlOyB9CisgICAgYm9vbCBp
c0dQVUJhc2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gISFtX2ltYWdlQnVmZmVyUGlwZTsgfQor
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyUGlwZT4gbV9pbWFnZUJ1ZmZlclBpcGU7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQppbmRleCA0OTUy
NTM2YWVkMzRkZjM5YzVkZjYwZTYzOWQ0ZjUxMTdhMGRlMzgwLi5mZTY0NzU3NDhiM2QwZDAxZjEz
OGZjOTMyODk1MGExODRlZmFiYTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1
cmVNYXBwZXIuY21ha2UKQEAgLTc2LDYgKzc2LDcgQEAgaWYgKFVTRV9DT09SRElOQVRFRF9HUkFQ
SElDUykKICAgICApCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUJ1ZmZlci5jcHAKKyAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0NvbnRleHQuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBhaW50aW5nRW5naW5lLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2luZUJh
c2ljLmNwcApAQCAtOTksNiArMTAwLDcgQEAgaWYgKFVTRV9DT09SRElOQVRFRF9HUkFQSElDUykK
IAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmltYXRlZEJhY2tp
bmdTdG9yZUNsaWVudC5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3Np
YUJ1ZmZlci5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdl
QnVmZmVyUGlwZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBh
aW50aW5nRW5naW5lLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lh
UGxhdGZvcm1MYXllci5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3Np
YVNjZW5lLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyUGlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlclBpcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjOGJiZWQzZGVhZTNhMjBkNDYwMGE3ZWI3MWNh
MzUyODg5YTg4YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlclBpcGUuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyUGlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhVVNFKE5JQ09TSUEp
CisKK2Jvb2wgSW1hZ2VCdWZmZXJQaXBlOjppc1N1cHBvcnRlZCgpCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlPiBJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0
ZSgpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlclBpcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyUGlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiMWVlN2MzMzQ0M2MxMjg2ZGZiZWEyMGVhY2MyZjg2
YmE3OWE3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlclBpcGUuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5o
IgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyOworCitjbGFzcyBJbWFnZUJ1ZmZlclBpcGUgOiBwdWJs
aWMgUmVmQ291bnRlZDxJbWFnZUJ1ZmZlclBpcGU+IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBTb3Vy
Y2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U291cmNlPiB7CisgICAgcHVibGljOgor
ICAgICAgICB2aXJ0dWFsIH5Tb3VyY2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIGhhbmRsZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYpID0gMDsKKyAgICB9Owor
CisgICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWQoKTsKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdl
QnVmZmVyUGlwZT4gY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlclBpcGUoKSA9
IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxTb3VyY2U+IHNvdXJjZSgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1ZmZlclBpcGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZm
ZXJQaXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NzEwZDI5MzY5MjdlNTdmODljZTRmYzE4ZmFhOWJkM2Zi
MTg5MGRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmNwcApAQCAtMCwwICsxLDE0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTmljb3NpYUltYWdlQnVmZmVyUGlwZS5oIgorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKKyNpbmNsdWRlICJOaWNvc2lhUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eS5oIgorCisjaWYgVVNFKENBSVJPKQorI2luY2x1ZGUgPGNhaXJvLmg+Cisj
ZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpOaWNv
c2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKCkKK3sKKyAgICBtX25pY29zaWFMYXllciA9IE5pY29z
aWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7Cit9CisKK05pY29zaWFJbWFnZUJ1ZmZlclBp
cGVTb3VyY2U6On5OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKCkKK3sKKyAgICBkb3duY2Fz
dDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXIt
PmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworfQorCit2b2lkIE5pY29zaWFJbWFnZUJ1ZmZl
clBpcGVTb3VyY2U6OmhhbmRsZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVy
KQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1faW1hZ2VCdWZmZXJMb2NrKTsKKworICAgIGlmICghbV9pbWFnZUJ1ZmZl
cikgeworICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0gW3RoaXNdIChUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkgbXV0YWJsZSB7CisgICAgICAgICAgICByZXR1cm4g
cHJveHkuc2NoZWR1bGVVcGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQoW3RoaXNdICgpIG11dGFibGUg
eworICAgICAgICAgICAgICAgIGF1dG8mIHByb3h5ID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVu
dExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCk7
CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKKworICAg
ICAgICAgICAgICAgIGlmICghcHJveHkuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICAgICAgYXV0byB0ZXh0dXJlID0gQml0bWFwVGV4dHVyZUdM
OjpjcmVhdGUoVGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzOjpnZXQoKSk7CisKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9pbWFnZUJ1ZmZlckxvY2spOworCisgICAgICAgICAgICAgICAgICAgIGlmICghbV9pbWFnZUJ1
ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAg
ICAgICBhdXRvIG5hdGl2ZUltYWdlID0gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uo
V1RGTW92ZShtX2ltYWdlQnVmZmVyKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gc2l6ZSA9
IG5hdGl2ZUltYWdlU2l6ZShuYXRpdmVJbWFnZSk7CisKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+cmVzZXQoc2l6ZSwgbmF0aXZlSW1hZ2VIYXNBbHBoYShuYXRpdmVJbWFnZSkgPyBCaXRt
YXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhIDogQml0bWFwVGV4dHVyZTo6Tm9GbGFnKTsKKyNpZiBV
U0UoQ0FJUk8pCisgICAgICAgICAgICAgICAgICAgIGF1dG8qIHN1cmZhY2UgPSBuYXRpdmVJbWFn
ZS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byogaW1hZ2VEYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNl
KSk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGltYWdlRGF0
YSwgSW50UmVjdChJbnRQb2ludCgpLCBzaXplKSwgSW50UG9pbnQoKSwgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIG5v
dEltcGxlbWVudGVkKCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBhdXRvIGxheWVyQnVmZmVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllckJ1ZmZlcj4oV1RGTW92ZSh0ZXh0dXJlKSk7CisgICAgICAgICAgICAgICAgbGF5ZXJCdWZm
ZXItPnNldEV4dHJhRmxhZ3MoVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCk7CisgICAgICAg
ICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIoV1RGTW92ZShsYXllckJ1ZmZlcikpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH07CisgICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0
PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+
aW1wbCgpKS5wcm94eSgpKTsKKyAgICB9CisKKyAgICBtX2ltYWdlQnVmZmVyID0gV1RGTW92ZShi
dWZmZXIpOworfQorCitQbGF0Zm9ybUxheWVyKiBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNl
OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0
KCk7Cit9CisKK3ZvaWQgTmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6c3dhcEJ1ZmZlcnNJ
Zk5lZWRlZCgpCit7Cit9CisKK05pY29zaWFJbWFnZUJ1ZmZlclBpcGU6Ok5pY29zaWFJbWFnZUJ1
ZmZlclBpcGUoKQoreworICAgIG1fc291cmNlID0gYWRvcHRSZWYobmV3IE5pY29zaWFJbWFnZUJ1
ZmZlclBpcGVTb3VyY2UpOworfQorCitSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2U+IE5p
Y29zaWFJbWFnZUJ1ZmZlclBpcGU6OnNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc291
cmNlOworfQorCitQbGF0Zm9ybUxheWVyKiBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlOjpwbGF0Zm9y
bUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAobV9zb3VyY2UpCisgICAgICAgIHJldHVybiBtX3Nv
dXJjZS0+cGxhdGZvcm1MYXllcigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5h
bWVzcGFjZSBOaWNvc2lhCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBJbWFnZUJ1ZmZl
clBpcGU6OmlzU3VwcG9ydGVkKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUmVmUHRyPElt
YWdlQnVmZmVyUGlwZT4gSW1hZ2VCdWZmZXJQaXBlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZSk7Cit9CisKK30KKwor
I2VuZGlmIC8vIFVTRShOSUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1ZmZlclBpcGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hMGRjMmU0MDZkNGRhYjczMzhjZWNkOGVmZWJkZDk5MDUzOTVhMWI2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9O
aWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyUGlw
ZS5oIgorI2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgor
CituYW1lc3BhY2UgTmljb3NpYSB7CisKK2NsYXNzIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3Vy
Y2UgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6SW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2UsIHB1Ymxp
YyBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBO
aWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKCk7CisgICAgdmlydHVhbCB+Tmljb3NpYUltYWdl
QnVmZmVyUGlwZVNvdXJjZSgpOworCisgICAgdm9pZCBoYW5kbGUoc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OkltYWdlQnVmZmVyPiYmKSBmaW5hbDsKKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVk
ZWQoKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVy
OworCisgICAgbXV0YWJsZSBMb2NrIG1faW1hZ2VCdWZmZXJMb2NrOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKK307CisKK2NsYXNzIE5p
Y29zaWFJbWFnZUJ1ZmZlclBpcGUgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6SW1hZ2VCdWZmZXJQ
aXBlIHsKK3B1YmxpYzoKKyAgICBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlKCk7CisgICAgdmlydHVh
bCB+Tmljb3NpYUltYWdlQnVmZmVyUGlwZSgpID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2U+IHNvdXJjZSgpIGNvbnN0IGZp
bmFsOworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBmaW5hbDsKKwor
ICAgIFJlZlB0cjxOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlPiBtX3NvdXJjZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIE5pY29zaWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5LmNwcAppbmRleCA1NDJiZmE1YmI0ZTIwZWEyMmE3ZTdkMWYxYzIzZDJh
YWQ0YzEwYzdlLi5lMjg3MWY3OTU2MmM1YjA1NTAzMmJhMDFjMTM0NzdiMDRhNDM5NTFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuY3BwCkBAIC02
NSwxOSArNjUsMjcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjphY3Rp
dmF0ZU9uQ29tcG9zaXRpbmdUaHJlYWQoQ29tcG9zaXRvciogY28KICAgICBBU1NFUlQobV9jb21w
b3NpdG9yVGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CiAgICAgQVNTRVJUKGNvbXBvc2l0
b3IpOwogICAgIEFTU0VSVCh0YXJnZXRMYXllcik7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9s
b2NrKTsKLSAgICBtX2NvbXBvc2l0b3IgPSBjb21wb3NpdG9yOwotICAgIG1fdGFyZ2V0TGF5ZXIg
PSB0YXJnZXRMYXllcjsKLSAgICBpZiAobV90YXJnZXRMYXllciAmJiBtX2N1cnJlbnRCdWZmZXIp
Ci0gICAgICAgIG1fdGFyZ2V0TGF5ZXItPnNldENvbnRlbnRzTGF5ZXIobV9jdXJyZW50QnVmZmVy
LmdldCgpKTsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IHVwZGF0ZUZ1bmN0aW9uOworICAgIHsKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgbV9jb21wb3NpdG9yID0g
Y29tcG9zaXRvcjsKKyAgICAgICAgbV90YXJnZXRMYXllciA9IHRhcmdldExheWVyOworICAgICAg
ICBpZiAobV90YXJnZXRMYXllciAmJiBtX2N1cnJlbnRCdWZmZXIpCisgICAgICAgICAgICBtX3Rh
cmdldExheWVyLT5zZXRDb250ZW50c0xheWVyKG1fY3VycmVudEJ1ZmZlci5nZXQoKSk7CiAKLSAg
ICBtX3JlbGVhc2VVbnVzZWRCdWZmZXJzVGltZXIgPSBtYWtlVW5pcXVlPFJ1bkxvb3A6OlRpbWVy
PFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+PihSdW5Mb29wOjpjdXJyZW50KCksIHRo
aXMsICZUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjpyZWxlYXNlVW51c2VkQnVmZmVy
c1RpbWVyRmlyZWQpOwotICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVyID0gbWFrZVVu
aXF1ZTxSdW5Mb29wOjpUaW1lcjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Pj4oUnVu
TG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6
Y29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVyRmlyZWQpOworICAgICAgICBtX3JlbGVhc2VVbnVz
ZWRCdWZmZXJzVGltZXIgPSBtYWtlVW5pcXVlPFJ1bkxvb3A6OlRpbWVyPFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHk+PihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5OjpyZWxlYXNlVW51c2VkQnVmZmVyc1RpbWVyRmlyZWQpOwor
ICAgICAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lciA9IG1ha2VVbmlxdWU8UnVuTG9v
cDo6VGltZXI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4+KFJ1bkxvb3A6OmN1cnJl
bnQoKSwgdGhpcywgJlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6OmNvbXBvc2l0b3JU
aHJlYWRVcGRhdGVUaW1lckZpcmVkKTsKIAogI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCi0gICAg
bV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXItPnNldFByaW9yaXR5KFJ1bkxvb3BTb3VyY2VQ
cmlvcml0eTo6Q29tcG9zaXRpbmdUaHJlYWRVcGRhdGVUaW1lcik7Ci0gICAgbV9yZWxlYXNlVW51
c2VkQnVmZmVyc1RpbWVyLT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3JpdHk6OlJlbGVh
c2VVbnVzZWRSZXNvdXJjZXNUaW1lcik7CisgICAgICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0
ZVRpbWVyLT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3JpdHk6OkNvbXBvc2l0aW5nVGhy
ZWFkVXBkYXRlVGltZXIpOworICAgICAgICBtX3JlbGVhc2VVbnVzZWRCdWZmZXJzVGltZXItPnNl
dFByaW9yaXR5KFJ1bkxvb3BTb3VyY2VQcmlvcml0eTo6UmVsZWFzZVVudXNlZFJlc291cmNlc1Rp
bWVyKTsKICNlbmRpZgorCisgICAgICAgIGlmICghbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlRnVu
Y3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHVwZGF0ZUZ1bmN0aW9uID0gV1RG
TW92ZShtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVGdW5jdGlvbik7CisgICAgfQorICAgIHVwZGF0
ZUZ1bmN0aW9uKCk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6
aW52YWxpZGF0ZSgpCkBAIC0yNDksMTAgKzI1NywxMSBAQCB2b2lkIFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHk6OmRyb3BDdXJyZW50QnVmZmVyV2hpbGVQcmVzZXJ2aW5nVGV4dHVyZShi
bwogYm9vbCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjpzY2hlZHVsZVVwZGF0ZU9u
Q29tcG9zaXRvclRocmVhZChGdW5jdGlvbjx2b2lkKCk+JiYgdXBkYXRlRnVuY3Rpb24pCiB7CiAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRh
dGVGdW5jdGlvbiA9IFdURk1vdmUodXBkYXRlRnVuY3Rpb24pOworCiAgICAgaWYgKCFtX2NvbXBv
c2l0b3JUaHJlYWRVcGRhdGVUaW1lcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9j
b21wb3NpdG9yVGhyZWFkVXBkYXRlRnVuY3Rpb24gPSBXVEZNb3ZlKHVwZGF0ZUZ1bmN0aW9uKTsK
ICAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lci0+c3RhcnRPbmVTaG90KDBfcyk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCmluZGV4IGMyYmQ2NmRjZmZjZTFlYTAzNTZjNDg5MTNhYzBhYzE3NWE0
NmY5OWUuLmMzM2ZhYWFiMzA1ZWI5M2ZjODI4M2Q4NmQ5ZDZkOWE2NWQ4N2FmMjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0xMDUw
LDcgKzEwNTAsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmlndXJhdGlv
bihjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlcwogICAgICAgICB1cGRhdGVDb250
ZW50c1JlY3RzKCk7CiAgICAgfQogI2VuZGlmCi0jaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUoV0VCR1BVKQorI2lmIEVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQVSkgfHwg
RU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgZWxzZSBpZiAocmVuZGVyZXIoKS5pc0NhbnZh
cygpICYmIGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kocmVuZGVyZXIoKSkgPT0gQ2FudmFzQXNM
YXllckNvbnRlbnRzKSB7CiAgICAgICAgIGNvbnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMg
PSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVyZXIoKS5lbGVtZW50KCkpOwogICAg
ICAgICBpZiAoYXV0byogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKQpAQCAt
MjY2Niw3ICsyNjY2LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRhaW5zUGFpbnRl
ZENvbnRlbnQoUGFpbnRlZENvbnRlbnRzSW5mbyYgY29udGVudHNJbmYKICAgICAgICAgcmV0dXJu
IG1fb3duaW5nTGF5ZXIuaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwg
KCEoZG93bmNhc3Q8UmVuZGVyVmlkZW8+KHJlbmRlcmVyKCkpLnN1cHBvcnRzQWNjZWxlcmF0ZWRS
ZW5kZXJpbmcoKSkgJiYgbV9yZXF1aXJlc093bkJhY2tpbmdTdG9yZSk7CiAjZW5kaWYKIAotI2lm
IEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyNpZiBFTkFC
TEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRShPRkZT
Q1JFRU5fQ0FOVkFTKQogICAgIGlmIChpczxSZW5kZXJIVE1MQ2FudmFzPihyZW5kZXJlcigpKSAm
JiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJD
b250ZW50cykKICAgICAgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXIuaGFzVmlzaWJsZUJveERlY29y
YXRpb25zT3JCYWNrZ3JvdW5kKCk7CiAjZW5kaWYKQEAgLTI3MzEsNyArMjczMSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjpjb250ZW50Q2hhbmdlZChDb250ZW50Q2hhbmdlVHlwZSBjaGFu
Z2VUeXBlKQogICAgIGlmICgoY2hhbmdlVHlwZSA9PSBNYXNrSW1hZ2VDaGFuZ2VkKSAmJiBtX21h
c2tMYXllcikKICAgICAgICAgbV9vd25pbmdMYXllci5zZXROZWVkc0NvbXBvc2l0aW5nQ29uZmln
dXJhdGlvblVwZGF0ZSgpOwogCi0jaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUoV0VCR1BVKQorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQVSkgfHwgRU5BQkxFKE9G
RlNDUkVFTl9DQU5WQVMpCiAgICAgaWYgKChjaGFuZ2VUeXBlID09IENhbnZhc0NoYW5nZWQgfHwg
Y2hhbmdlVHlwZSA9PSBDYW52YXNQaXhlbHNDaGFuZ2VkKSAmJiByZW5kZXJlcigpLmlzQ2FudmFz
KCkgJiYgY2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneShyZW5kZXJlcigpKSA9PSBDYW52YXNBc0xh
eWVyQ29udGVudHMpIHsKICAgICAgICAgaWYgKGNoYW5nZVR5cGUgPT0gQ2FudmFzQ2hhbmdlZCkK
ICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJVcGRhdGUo
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407969</attachid>
            <date>2020-09-04 07:49:41 -0700</date>
            <delta_ts>2020-09-17 03:30:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202798-20200904154940.patch</filename>
            <type>text/plain</type>
            <size>35628</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDFkZDVkZDIxNjU4OTNh
MTAwNTBkYWMwZjIwZGVlZjcxZjljYTM5Yy4uZDUxNjQxZGU2ZTlhYzc1YmMzNDc5MWI4Yzk4ZWU1
NTBiMjY2ZWY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDIwLTA5LTA0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYXN5bmNocm9u
b3VzIE9mZnNjcmVlbkNhbnZhcyBwbGFjZWhvbGRlciB1cGRhdGVzIGZvciBUZXh0dXJlTWFwcGVy
R0wtYmFzZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAyNzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IGFzeW5jaHJvbm91cyB1cGRhdGVzIGZvciB1c2VycyBvZiB0
aGUgTmljb3NpYSBjb21wb3NpdG9yCisgICAgICAgIChpLmUuIEdUSywgV1BFKS4gVGhpcyBhbGxv
d3MgT2Zmc2NyZWVuQ2FudmFzLWNvbnRyb2xsZWQgY2FudmFzZXMgdG8KKyAgICAgICAgdXBkYXRl
IHZpc3VhbGx5IHdoaWxlIHRoZSBtYWluIHRocmVhZCBpcyBibG9ja2VkLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50Ojp0cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbik6CisgICAgICAgICog
aHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2Fu
dmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpzZXRQbGFj
ZWhvbGRlckNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnB1c2hC
dWZmZXJUb1BsYWNlaG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6
Y29tbWl0VG9QbGFjZWhvbGRlckNhbnZhcyk6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52
YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpQbGFj
ZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJS
ZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9U
ZXh0dXJlTWFwcGVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyUGlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJQaXBlOjpp
c1N1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJQaXBlLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdlQnVmZmVyUGlw
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNv
dXJjZTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSk6CisgICAgICAgIChOaWNvc2lhOjpO
aWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpoYW5kbGUpOgorICAgICAgICAoTmljb3NpYTo6
Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAg
ICAgIChOaWNvc2lhOjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpzd2FwQnVmZmVyc0lm
TmVlZGVkKToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGU6Ok5pY29z
aWFJbWFnZUJ1ZmZlclBpcGUpOgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVy
UGlwZTo6c291cmNlIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZl
clBpcGU6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJQaXBlOjppc1N1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlclBpcGU6
OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1h
Z2VCdWZmZXJQaXBlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6OmFjdGl2YXRlT25Db21wb3NpdGluZ1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
OjpzY2hlZHVsZVVwZGF0ZU9uQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjpjb250YWluc1BhaW50ZWRDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6Y29udGVudENoYW5nZWQpOgorCiAyMDIwLTA5LTAzICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFN0b3JlIGFsbCBzdHls
aW5nIGZsYWdzIGluIG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAx
ZDBlMjgyZGUwY2M4M2ZlYzhjMzBlNmI3YTM2M2M0MWRlOGY1MzAyLi41N2I0Zjg0YjBjOTIxN2Q5
ZTExZTI5ZDEyYjdjNGI5NGRkNDA5ODMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTg4MCw2ICsxODgw
LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlclBp
cGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMDQwMWEyZTIzNWM2YTQ5ZTBhZTA1ZWMzNjBmZWVjYjgwOGE1ODRjMy4uODZkYTc5Yzg0MDlh
ZmFmNzY4NDQwNjRmMjA2MmYyYTBiZWUxMDBhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzYzOSw2ICszNjM5LDcgQEAKIAkJ
QjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMDE1OTMwQUY2Q0Q1MzAwNkJD
RTBFIC8qIEdyYXBoaWNzQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUIyQTAxNUFCMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5
cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkEw
MTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFB
NCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjJBMTBEOTEwQjM4
MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyUGlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMTBDOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdl
QnVmZmVyUGlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUIyQTFGMkFCMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMUYyQTIwQ0VGMEFC
RjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggKi87IH07CiAJCUIyQTFGMkFFMENFRjBBQkYw
MDQ0MkY2QSAvKiBTVkdHbHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTFGMkE1MENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdHbHlwaEVs
ZW1lbnQuaCAqLzsgfTsKIAkJQjJBMUYyQjEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR01pc3NpbmdH
bHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyQTFGMkE4MENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdNaXNzaW5nR2x5cGhFbGVtZW50Lmgg
Ki87IH07CkBAIC03ODU0LDYgKzc4NTUsNyBAQAogCQk0M0MwOTJCOTEyRDlFNEVFMDBBOTg5QzMg
LyogUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDNDMDkyQkExMkQ5RTRFRTAwQTk4OUMzIC8qIFJlbmRlclNWR0ZvcmVpZ25P
YmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHRm9yZWln
bk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0M0QyNTk3NjEzQzgxNkY0
MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1hZ2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
M0QyNTk4NjEzQzgxNkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXJQaXBlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyUGlwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzRURENjdDMUI0ODVEQkYwMDY0MEU3NSAvKiBDb21iaW5l
ZEZpbHRlcnNBbHBoYWJldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQzRURENjdEMUI0ODVEQkYwMDY0MEU3NSAvKiBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21iaW5lZEZpbHRlcnNBbHBoYWJl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyQzBFMUFFOEEwMDBDNEEy
RDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMzEwOCw2ICsxMzExMCw3IEBACiAJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAv
KiBHcmFwaGljc1R5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHcmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMDE1
OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCMkExMEM5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJQaXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlclBpcGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8q
IFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTVkdGb250RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFG
MkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjU5NTEsNiArMjU5NTQsOCBAQAogCQkJCUIyQTEwQjkxMEIzODE4
QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovLAogCQkJCTcyQkFDM0E0MjNFMTczMjcwMDhE
NzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovLAogCQkJCTcyQkFDM0E1MjNFMTczMjgw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKKwkJCQk0M0QyNTk4NjEzQzgxNkY0
MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXJQaXBlLmNwcCAqLywKKwkJCQlCMkExMEM5MTBCMzgxOEJE
MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJQaXBlLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3MjAw
MEM0MkZCIC8qIEltYWdlRGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAwMEM0
MkZCIC8qIEltYWdlRGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0QyAv
KiBJbWFnZUZyYW1lLmNwcCAqLywKQEAgLTMxNTk4LDYgKzMxNjAzLDcgQEAKIAkJCQk3MkJBQzNB
RTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1NTA2NDBCMDI0MDc1ODdFMDBBQUUwNDUgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCTcyN0E3RjNBMjQwNzhCODQwMDREMjkzMSAvKiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyQTEwRDkxMEIzODE4QkQw
MDA5OUFBNCAvKiBJbWFnZUJ1ZmZlclBpcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0UyMURE
MjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAyMjIgLyogSW1hZ2VDb250cm9sc0J1dHRvbkVs
ZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdBMSAv
KiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCBjMzFmYjE5NWY0OGEwZjc1Zjc1M2U1
OTgxNDAyODkzZWZmMzU5ZWMwLi4zNjkxMjEzNTZiZjUxMGVjZWVlNGQ4YTMyM2RmMWVjODMwZmEz
YWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtNzc5
LDYgKzc3OSw5IEBAIEV4Y2VwdGlvbk9yPFJlZjxPZmZzY3JlZW5DYW52YXM+PiBIVE1MQ2FudmFz
RWxlbWVudDo6dHJhbnNmZXJDb250cm9sVG9PZmZzY3JlZW4oCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1
ZTxQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ+KCp0aGlzKTsKKyAgICBpZiAobV9jb250ZXh0
LT5pc0FjY2VsZXJhdGVkKCkpCisgICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9z
aXRpb24oKTsKKwogICAgIHJldHVybiBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZShjb250ZXh0LCAq
dGhpcyk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2Ny
ZWVuQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApp
bmRleCAxODlhYzE5MjU0NGRjOWRlYjZkNTM2NjNjODI5NDBhNjAxMjczMDBjLi43NWYxMjBjZmFm
OTRkNTU5ZDI4YzgwMTAwOTBkOTc3NTRmNzQwYzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwCkBAIC04Nyw2ICs4NywxMiBAQCBSZWY8T2Zmc2NyZWVuQ2FudmFzPiBP
ZmZzY3JlZW5DYW52YXM6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBz
dAogCiAgICAgY2FsbE9uTWFpblRocmVhZChbZGV0YWNoZWRDYW52YXMgPSBXVEZNb3ZlKGRldGFj
aGVkQ2FudmFzKSwgb2Zmc2NyZWVuQ2FudmFzID0gbWFrZVJlZihjbG9uZS5nZXQoKSldICgpIG11
dGFibGUgewogICAgICAgICBvZmZzY3JlZW5DYW52YXMtPm1fcGxhY2Vob2xkZXJDYW52YXMgPSBk
ZXRhY2hlZENhbnZhcy0+dGFrZVBsYWNlaG9sZGVyQ2FudmFzKCk7CisgICAgICAgIGlmIChvZmZz
Y3JlZW5DYW52YXMtPm1fcGxhY2Vob2xkZXJDYW52YXMpIHsKKyAgICAgICAgICAgIGF1dG8mIHBs
YWNlaG9sZGVyQ29udGV4dCA9IGRvd25jYXN0PFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dD4o
Km9mZnNjcmVlbkNhbnZhcy0+bV9wbGFjZWhvbGRlckNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgp
KTsKKyAgICAgICAgICAgIGF1dG8mIGltYWdlQnVmZmVyUGlwZSA9IHBsYWNlaG9sZGVyQ29udGV4
dC5pbWFnZUJ1ZmZlclBpcGUoKTsKKyAgICAgICAgICAgIGlmIChpbWFnZUJ1ZmZlclBpcGUpCisg
ICAgICAgICAgICAgICAgb2Zmc2NyZWVuQ2FudmFzLT5tX2J1ZmZlclBpcGVTb3VyY2UgPSBpbWFn
ZUJ1ZmZlclBpcGUtPnNvdXJjZSgpOworICAgICAgICB9CiAgICAgICAgIG9mZnNjcmVlbkNhbnZh
cy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayh7IFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s6OkNsZWFudXBUYXNrLAogICAgICAgICAgICAgW3JlbGVhc2VPZmZzY3JlZW5D
YW52YXMgPSBXVEZNb3ZlKG9mZnNjcmVlbkNhbnZhcyldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JikgeyB9IH0pOwogICAgIH0pOwpAQCAtMzkzLDIxICszOTksMjQgQEAgdm9pZCBPZmZzY3JlZW5D
YW52YXM6OnNldFBsYWNlaG9sZGVyQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMpCiAg
ICAgQVNTRVJUKCFtX2NvbnRleHQpOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
bV9wbGFjZWhvbGRlckNhbnZhcyA9IG1ha2VXZWFrUHRyKGNhbnZhcyk7CisgICAgYXV0byYgcGxh
Y2Vob2xkZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Pigq
Y2FudmFzLnJlbmRlcmluZ0NvbnRleHQoKSk7CisgICAgYXV0byYgaW1hZ2VCdWZmZXJQaXBlID0g
cGxhY2Vob2xkZXJDb250ZXh0LmltYWdlQnVmZmVyUGlwZSgpOworICAgIGlmIChpbWFnZUJ1ZmZl
clBpcGUpCisgICAgICAgIG1fYnVmZmVyUGlwZVNvdXJjZSA9IGltYWdlQnVmZmVyUGlwZS0+c291
cmNlKCk7CiB9CiAKIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpwdXNoQnVmZmVyVG9QbGFjZWhvbGRl
cigpCiB7CiAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCB0aGlzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2NvbW1pdExvY2spOwotCi0gICAgICAgIGlmIChtX3BsYWNlaG9sZGVyQ2FudmFzICYmIG1faGFz
UGVuZGluZ0NvbW1pdERhdGEpIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShGbG9hdFNpemUobV9wZW5kaW5nQ29t
bWl0RGF0YS0+c2l6ZSgpKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7Ci0gICAgICAg
ICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCAqbV9wZW5kaW5nQ29tbWl0RGF0YSwgSW50UmVjdChJbnRQb2ludCgpLCBtX3BlbmRp
bmdDb21taXREYXRhLT5zaXplKCkpKTsKLSAgICAgICAgICAgIG1fcGxhY2Vob2xkZXJDYW52YXMt
PnNldEltYWdlQnVmZmVyQW5kTWFya0RpcnR5KFdURk1vdmUoYnVmZmVyKSk7Ci0gICAgICAgICAg
ICBtX2hhc1BlbmRpbmdDb21taXREYXRhID0gZmFsc2U7CisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb21taXRMb2NrKTsKKyAgICAgICAgICAgIGlmICht
X3BsYWNlaG9sZGVyQ2FudmFzICYmIG1fcGVuZGluZ0NvbW1pdEJ1ZmZlcikKKyAgICAgICAgICAg
ICAgICBtX3BsYWNlaG9sZGVyQ2FudmFzLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShXVEZN
b3ZlKG1fcGVuZGluZ0NvbW1pdEJ1ZmZlcikpOworICAgICAgICAgICAgbV9wZW5kaW5nQ29tbWl0
QnVmZmVyID0gbnVsbHB0cjsKICAgICAgICAgfQogCi0gICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+cG9zdFRhc2soW3JlbGVhc2VUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0g
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7IH0pOworICAgICAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnBvc3RUYXNrKHsgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzazo6Q2xlYW51
cFRhc2ssCisgICAgICAgICAgICBbcmVsZWFzZVRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMp
XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsgfSB9KTsKICAgICB9KTsKIH0KIApAQCAtNDIx
LDIxICs0MzAsMTYgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNvbW1pdFRvUGxhY2Vob2xkZXJD
YW52YXMoKQogICAgIGlmIChtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+aXNXZWJHTCgpIHx8IG1f
Y29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKSkKICAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogCi0gICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0gICAg
ICAgIGlmIChtX3BsYWNlaG9sZGVyQ2FudmFzKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBidWZm
ZXJDb3B5ID0gaW1hZ2VCdWZmZXItPmNvcHlSZWN0VG9CdWZmZXIoRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb2xvclNwYWNlOjpTUkdCLCBpbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpKSkKLSAgICAgICAgICAgICAgICBtX3BsYWNlaG9sZGVyQ2FudmFz
LT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShXVEZNb3ZlKGJ1ZmZlckNvcHkpKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fYnVmZmVyUGlwZVNvdXJjZSkgeworICAg
ICAgICBhdXRvIGJ1ZmZlckNvcHkgPSBpbWFnZUJ1ZmZlci0+Y29weVJlY3RUb0J1ZmZlcihGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbG9yU3Bh
Y2U6OlNSR0IsIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworICAgICAgICBpZiAoYnVmZmVyQ29w
eSkKKyAgICAgICAgICAgIG1fYnVmZmVyUGlwZVNvdXJjZS0+aGFuZGxlKFdURk1vdmUoYnVmZmVy
Q29weSkpOwogICAgIH0KIAogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb21taXRMb2Nr
KTsKLQotICAgIGJvb2wgc2hvdWxkUHVzaEJ1ZmZlciA9ICFtX2hhc1BlbmRpbmdDb21taXREYXRh
OwotICAgIG1fcGVuZGluZ0NvbW1pdERhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwg
aW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpKTsKLSAgICBtX2hhc1BlbmRpbmdDb21taXREYXRh
ID0gdHJ1ZTsKLQotICAgIGlmIChzaG91bGRQdXNoQnVmZmVyKQorICAgIGJvb2wgc2hvdWxkUHVz
aEJ1ZmZlciA9ICFtX3BlbmRpbmdDb21taXRCdWZmZXI7CisgICAgbV9wZW5kaW5nQ29tbWl0QnVm
ZmVyID0gaW1hZ2VCdWZmZXItPmNvcHlSZWN0VG9CdWZmZXIoRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb2xvclNwYWNlOjpTUkdCLCBpbWFnZUJ1
ZmZlci0+Y29udGV4dCgpKTsKKyAgICBpZiAobV9wZW5kaW5nQ29tbWl0QnVmZmVyICYmIHNob3Vs
ZFB1c2hCdWZmZXIpCiAgICAgICAgIHB1c2hCdWZmZXJUb1BsYWNlaG9sZGVyKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCmluZGV4IDIwZGQwM2Y1MzMyNTRhNzJlZjk5
MzNkMzQyMTJlZmM5OTExM2U0ZWEuLjI3NzQ2NTI3ZjFjMDdiOTA5ZTFjZTAzNDVkOGJiNzk5YzUx
OTM5YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyUGlwZS5oIgogI2lu
Y2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgpAQCAtMTg3LDEwICsxODgsMTAgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgbV9oYXNTY2hlZHVsZWRDb21taXQgeyBmYWxzZSB9OwogICAgIFdlYWtQdHI8SFRNTENhbnZh
c0VsZW1lbnQ+IG1fcGxhY2Vob2xkZXJDYW52YXM7CisgICAgUmVmUHRyPEltYWdlQnVmZmVyUGlw
ZTo6U291cmNlPiBtX2J1ZmZlclBpcGVTb3VyY2U7CiAKICAgICBtdXRhYmxlIExvY2sgbV9jb21t
aXRMb2NrOwotICAgIGJvb2wgbV9oYXNQZW5kaW5nQ29tbWl0RGF0YSB7IGZhbHNlIH07Ci0gICAg
UmVmUHRyPEltYWdlRGF0YT4gbV9wZW5kaW5nQ29tbWl0RGF0YTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IG1fcGVuZGluZ0NvbW1pdEJ1ZmZlcjsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0Nv
bnRleHQuY3BwCmluZGV4IDFlYzdhMjRlZGY0NDUyMTFiYmJhOTk0MmU4MTQ2YmIxZTdmNjg0YzAu
LjU3ODY4YjBhMjNiMjIzYmRkZTkxYzA3OGRiZmQ4NWI5MmRlNWE1NzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250
ZXh0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQog
CiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclBp
cGUuaCIKICNpbmNsdWRlICJPZmZzY3JlZW5DYW52YXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgogCkBAIC0zOSw2ICs0MCw3IEBAIFdURl9NQUtFX0lTT19BTExPQ0FURURf
SU1QTChQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOwogUGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0OjpQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFzKQog
ICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChjYW52YXMpCiB7CisgICAgbV9pbWFnZUJ1ZmZl
clBpcGUgPSBJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSgpOwogfQogCiBIVE1MQ2FudmFzRWxlbWVu
dCogUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdApAQCAtNDksNiAr
NTEsMTQgQEAgSFRNTENhbnZhc0VsZW1lbnQqIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6
Y2FudmFzKCkgY29uc3QKICAgICByZXR1cm4gJmRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihi
YXNlKTsKIH0KIAorUGxhdGZvcm1MYXllciogUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Ojpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlclBpcGUpCisgICAg
ICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUGlwZS0+cGxhdGZvcm1MYXllcigpOworCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDY0NTA5
MTQ1OWRkMDFjYzJhNzk3N2RjMDAzYjQ1MjY1ZGU1YmE3ZDguLjMzZmE4ZjJhZGM3OGI0OWNiZTQ5
NzYwYTZjNjZhMzgzNGRmOTkxOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0zMSw2ICszMSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VCdWZmZXJQaXBlOwogY2xhc3Mg
T2Zmc2NyZWVuQ2FudmFzOwogCiBjbGFzcyBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQgZmlu
YWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CkBAIC00MCw4ICs0MSwxNyBAQCBw
dWJsaWM6CiAKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKCkgY29uc3Q7CiAKKyAgICBj
b25zdCBSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlPiYgaW1hZ2VCdWZmZXJQaXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlclBpcGU7IH0KKwogcHJpdmF0ZToKICAgICBib29sIGlzUGxhY2Vo
b2xkZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGlzQWNjZWxlcmF0ZWQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAhIW1faW1hZ2VCdWZmZXJQaXBlOyB9CisgICAgYm9vbCBp
c0dQVUJhc2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gISFtX2ltYWdlQnVmZmVyUGlwZTsgfQor
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyUGlwZT4gbV9pbWFnZUJ1ZmZlclBpcGU7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQppbmRleCA0OTUy
NTM2YWVkMzRkZjM5YzVkZjYwZTYzOWQ0ZjUxMTdhMGRlMzgwLi5mZTY0NzU3NDhiM2QwZDAxZjEz
OGZjOTMyODk1MGExODRlZmFiYTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1
cmVNYXBwZXIuY21ha2UKQEAgLTc2LDYgKzc2LDcgQEAgaWYgKFVTRV9DT09SRElOQVRFRF9HUkFQ
SElDUykKICAgICApCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUJ1ZmZlci5jcHAKKyAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0NvbnRleHQuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBhaW50aW5nRW5naW5lLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2luZUJh
c2ljLmNwcApAQCAtOTksNiArMTAwLDcgQEAgaWYgKFVTRV9DT09SRElOQVRFRF9HUkFQSElDUykK
IAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmltYXRlZEJhY2tp
bmdTdG9yZUNsaWVudC5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3Np
YUJ1ZmZlci5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdl
QnVmZmVyUGlwZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBh
aW50aW5nRW5naW5lLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lh
UGxhdGZvcm1MYXllci5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3Np
YVNjZW5lLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyUGlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlclBpcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjOGJiZWQzZGVhZTNhMjBkNDYwMGE3ZWI3MWNh
MzUyODg5YTg4YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlclBpcGUuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyUGlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhVVNFKE5JQ09TSUEp
CisKK2Jvb2wgSW1hZ2VCdWZmZXJQaXBlOjppc1N1cHBvcnRlZCgpCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlPiBJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0
ZSgpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlclBpcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyUGlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiMWVlN2MzMzQ0M2MxMjg2ZGZiZWEyMGVhY2MyZjg2
YmE3OWE3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlclBpcGUuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5o
IgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyOworCitjbGFzcyBJbWFnZUJ1ZmZlclBpcGUgOiBwdWJs
aWMgUmVmQ291bnRlZDxJbWFnZUJ1ZmZlclBpcGU+IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBTb3Vy
Y2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U291cmNlPiB7CisgICAgcHVibGljOgor
ICAgICAgICB2aXJ0dWFsIH5Tb3VyY2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIGhhbmRsZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYpID0gMDsKKyAgICB9Owor
CisgICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWQoKTsKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdl
QnVmZmVyUGlwZT4gY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlclBpcGUoKSA9
IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxTb3VyY2U+IHNvdXJjZSgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1ZmZlclBpcGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZm
ZXJQaXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NzEwZDI5MzY5MjdlNTdmODljZTRmYzE4ZmFhOWJkM2Zi
MTg5MGRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmNwcApAQCAtMCwwICsxLDE0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTmljb3NpYUltYWdlQnVmZmVyUGlwZS5oIgorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKKyNpbmNsdWRlICJOaWNvc2lhUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eS5oIgorCisjaWYgVVNFKENBSVJPKQorI2luY2x1ZGUgPGNhaXJvLmg+Cisj
ZW5kaWYKKworI2lmIFVTRShOSUNPU0lBKQorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpOaWNv
c2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKCkKK3sKKyAgICBtX25pY29zaWFMYXllciA9IE5pY29z
aWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7Cit9CisKK05pY29zaWFJbWFnZUJ1ZmZlclBp
cGVTb3VyY2U6On5OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKCkKK3sKKyAgICBkb3duY2Fz
dDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXIt
PmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworfQorCit2b2lkIE5pY29zaWFJbWFnZUJ1ZmZl
clBpcGVTb3VyY2U6OmhhbmRsZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVy
KQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1faW1hZ2VCdWZmZXJMb2NrKTsKKworICAgIGlmICghbV9pbWFnZUJ1ZmZl
cikgeworICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0gW3RoaXNdIChUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkgbXV0YWJsZSB7CisgICAgICAgICAgICByZXR1cm4g
cHJveHkuc2NoZWR1bGVVcGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQoW3RoaXNdICgpIG11dGFibGUg
eworICAgICAgICAgICAgICAgIGF1dG8mIHByb3h5ID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVu
dExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCk7
CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKKworICAg
ICAgICAgICAgICAgIGlmICghcHJveHkuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICAgICAgYXV0byB0ZXh0dXJlID0gQml0bWFwVGV4dHVyZUdM
OjpjcmVhdGUoVGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzOjpnZXQoKSk7CisKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9pbWFnZUJ1ZmZlckxvY2spOworCisgICAgICAgICAgICAgICAgICAgIGlmICghbV9pbWFnZUJ1
ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAg
ICAgICBhdXRvIG5hdGl2ZUltYWdlID0gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uo
V1RGTW92ZShtX2ltYWdlQnVmZmVyKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gc2l6ZSA9
IG5hdGl2ZUltYWdlU2l6ZShuYXRpdmVJbWFnZSk7CisKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+cmVzZXQoc2l6ZSwgbmF0aXZlSW1hZ2VIYXNBbHBoYShuYXRpdmVJbWFnZSkgPyBCaXRt
YXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhIDogQml0bWFwVGV4dHVyZTo6Tm9GbGFnKTsKKyNpZiBV
U0UoQ0FJUk8pCisgICAgICAgICAgICAgICAgICAgIGF1dG8qIHN1cmZhY2UgPSBuYXRpdmVJbWFn
ZS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byogaW1hZ2VEYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNl
KSk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGltYWdlRGF0
YSwgSW50UmVjdChJbnRQb2ludCgpLCBzaXplKSwgSW50UG9pbnQoKSwgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIG5v
dEltcGxlbWVudGVkKCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBhdXRvIGxheWVyQnVmZmVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllckJ1ZmZlcj4oV1RGTW92ZSh0ZXh0dXJlKSk7CisgICAgICAgICAgICAgICAgbGF5ZXJCdWZm
ZXItPnNldEV4dHJhRmxhZ3MoVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCk7CisgICAgICAg
ICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIoV1RGTW92ZShsYXllckJ1ZmZlcikpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH07CisgICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0
PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+
aW1wbCgpKS5wcm94eSgpKTsKKyAgICB9CisKKyAgICBtX2ltYWdlQnVmZmVyID0gV1RGTW92ZShi
dWZmZXIpOworfQorCitQbGF0Zm9ybUxheWVyKiBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNl
OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0
KCk7Cit9CisKK3ZvaWQgTmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6c3dhcEJ1ZmZlcnNJ
Zk5lZWRlZCgpCit7Cit9CisKK05pY29zaWFJbWFnZUJ1ZmZlclBpcGU6Ok5pY29zaWFJbWFnZUJ1
ZmZlclBpcGUoKQoreworICAgIG1fc291cmNlID0gYWRvcHRSZWYobmV3IE5pY29zaWFJbWFnZUJ1
ZmZlclBpcGVTb3VyY2UpOworfQorCitSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2U+IE5p
Y29zaWFJbWFnZUJ1ZmZlclBpcGU6OnNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc291
cmNlOworfQorCitQbGF0Zm9ybUxheWVyKiBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlOjpwbGF0Zm9y
bUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAobV9zb3VyY2UpCisgICAgICAgIHJldHVybiBtX3Nv
dXJjZS0+cGxhdGZvcm1MYXllcigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5h
bWVzcGFjZSBOaWNvc2lhCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBJbWFnZUJ1ZmZl
clBpcGU6OmlzU3VwcG9ydGVkKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUmVmUHRyPElt
YWdlQnVmZmVyUGlwZT4gSW1hZ2VCdWZmZXJQaXBlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZSk7Cit9CisKK30KKwor
I2VuZGlmIC8vIFVTRShOSUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1ZmZlclBpcGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hMGRjMmU0MDZkNGRhYjczMzhjZWNkOGVmZWJkZDk5MDUzOTVhMWI2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9O
aWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyUGlw
ZS5oIgorI2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgor
CituYW1lc3BhY2UgTmljb3NpYSB7CisKK2NsYXNzIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3Vy
Y2UgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6SW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2UsIHB1Ymxp
YyBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBO
aWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKCk7CisgICAgdmlydHVhbCB+Tmljb3NpYUltYWdl
QnVmZmVyUGlwZVNvdXJjZSgpOworCisgICAgdm9pZCBoYW5kbGUoc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OkltYWdlQnVmZmVyPiYmKSBmaW5hbDsKKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVk
ZWQoKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVy
OworCisgICAgbXV0YWJsZSBMb2NrIG1faW1hZ2VCdWZmZXJMb2NrOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKK307CisKK2NsYXNzIE5p
Y29zaWFJbWFnZUJ1ZmZlclBpcGUgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6SW1hZ2VCdWZmZXJQ
aXBlIHsKK3B1YmxpYzoKKyAgICBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlKCk7CisgICAgdmlydHVh
bCB+Tmljb3NpYUltYWdlQnVmZmVyUGlwZSgpID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2U+IHNvdXJjZSgpIGNvbnN0IGZp
bmFsOworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBmaW5hbDsKKwor
ICAgIFJlZlB0cjxOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlPiBtX3NvdXJjZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIE5pY29zaWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5LmNwcAppbmRleCA1NDJiZmE1YmI0ZTIwZWEyMmE3ZTdkMWYxYzIzZDJh
YWQ0YzEwYzdlLi5lMjg3MWY3OTU2MmM1YjA1NTAzMmJhMDFjMTM0NzdiMDRhNDM5NTFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuY3BwCkBAIC02
NSwxOSArNjUsMjcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjphY3Rp
dmF0ZU9uQ29tcG9zaXRpbmdUaHJlYWQoQ29tcG9zaXRvciogY28KICAgICBBU1NFUlQobV9jb21w
b3NpdG9yVGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CiAgICAgQVNTRVJUKGNvbXBvc2l0
b3IpOwogICAgIEFTU0VSVCh0YXJnZXRMYXllcik7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9s
b2NrKTsKLSAgICBtX2NvbXBvc2l0b3IgPSBjb21wb3NpdG9yOwotICAgIG1fdGFyZ2V0TGF5ZXIg
PSB0YXJnZXRMYXllcjsKLSAgICBpZiAobV90YXJnZXRMYXllciAmJiBtX2N1cnJlbnRCdWZmZXIp
Ci0gICAgICAgIG1fdGFyZ2V0TGF5ZXItPnNldENvbnRlbnRzTGF5ZXIobV9jdXJyZW50QnVmZmVy
LmdldCgpKTsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IHVwZGF0ZUZ1bmN0aW9uOworICAgIHsKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgbV9jb21wb3NpdG9yID0g
Y29tcG9zaXRvcjsKKyAgICAgICAgbV90YXJnZXRMYXllciA9IHRhcmdldExheWVyOworICAgICAg
ICBpZiAobV90YXJnZXRMYXllciAmJiBtX2N1cnJlbnRCdWZmZXIpCisgICAgICAgICAgICBtX3Rh
cmdldExheWVyLT5zZXRDb250ZW50c0xheWVyKG1fY3VycmVudEJ1ZmZlci5nZXQoKSk7CiAKLSAg
ICBtX3JlbGVhc2VVbnVzZWRCdWZmZXJzVGltZXIgPSBtYWtlVW5pcXVlPFJ1bkxvb3A6OlRpbWVy
PFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+PihSdW5Mb29wOjpjdXJyZW50KCksIHRo
aXMsICZUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjpyZWxlYXNlVW51c2VkQnVmZmVy
c1RpbWVyRmlyZWQpOwotICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVyID0gbWFrZVVu
aXF1ZTxSdW5Mb29wOjpUaW1lcjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Pj4oUnVu
TG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6
Y29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVyRmlyZWQpOworICAgICAgICBtX3JlbGVhc2VVbnVz
ZWRCdWZmZXJzVGltZXIgPSBtYWtlVW5pcXVlPFJ1bkxvb3A6OlRpbWVyPFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHk+PihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5OjpyZWxlYXNlVW51c2VkQnVmZmVyc1RpbWVyRmlyZWQpOwor
ICAgICAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lciA9IG1ha2VVbmlxdWU8UnVuTG9v
cDo6VGltZXI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4+KFJ1bkxvb3A6OmN1cnJl
bnQoKSwgdGhpcywgJlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6OmNvbXBvc2l0b3JU
aHJlYWRVcGRhdGVUaW1lckZpcmVkKTsKIAogI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCi0gICAg
bV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXItPnNldFByaW9yaXR5KFJ1bkxvb3BTb3VyY2VQ
cmlvcml0eTo6Q29tcG9zaXRpbmdUaHJlYWRVcGRhdGVUaW1lcik7Ci0gICAgbV9yZWxlYXNlVW51
c2VkQnVmZmVyc1RpbWVyLT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3JpdHk6OlJlbGVh
c2VVbnVzZWRSZXNvdXJjZXNUaW1lcik7CisgICAgICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0
ZVRpbWVyLT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3JpdHk6OkNvbXBvc2l0aW5nVGhy
ZWFkVXBkYXRlVGltZXIpOworICAgICAgICBtX3JlbGVhc2VVbnVzZWRCdWZmZXJzVGltZXItPnNl
dFByaW9yaXR5KFJ1bkxvb3BTb3VyY2VQcmlvcml0eTo6UmVsZWFzZVVudXNlZFJlc291cmNlc1Rp
bWVyKTsKICNlbmRpZgorCisgICAgICAgIGlmICghbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlRnVu
Y3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHVwZGF0ZUZ1bmN0aW9uID0gV1RG
TW92ZShtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVGdW5jdGlvbik7CisgICAgfQorICAgIHVwZGF0
ZUZ1bmN0aW9uKCk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6
aW52YWxpZGF0ZSgpCkBAIC0yNDksMTAgKzI1NywxMSBAQCB2b2lkIFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHk6OmRyb3BDdXJyZW50QnVmZmVyV2hpbGVQcmVzZXJ2aW5nVGV4dHVyZShi
bwogYm9vbCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjpzY2hlZHVsZVVwZGF0ZU9u
Q29tcG9zaXRvclRocmVhZChGdW5jdGlvbjx2b2lkKCk+JiYgdXBkYXRlRnVuY3Rpb24pCiB7CiAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRh
dGVGdW5jdGlvbiA9IFdURk1vdmUodXBkYXRlRnVuY3Rpb24pOworCiAgICAgaWYgKCFtX2NvbXBv
c2l0b3JUaHJlYWRVcGRhdGVUaW1lcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9j
b21wb3NpdG9yVGhyZWFkVXBkYXRlRnVuY3Rpb24gPSBXVEZNb3ZlKHVwZGF0ZUZ1bmN0aW9uKTsK
ICAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lci0+c3RhcnRPbmVTaG90KDBfcyk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCmluZGV4IGMyYmQ2NmRjZmZjZTFlYTAzNTZjNDg5MTNhYzBhYzE3NWE0
NmY5OWUuLmMzM2ZhYWFiMzA1ZWI5M2ZjODI4M2Q4NmQ5ZDZkOWE2NWQ4N2FmMjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0xMDUw
LDcgKzEwNTAsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmlndXJhdGlv
bihjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlcwogICAgICAgICB1cGRhdGVDb250
ZW50c1JlY3RzKCk7CiAgICAgfQogI2VuZGlmCi0jaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUoV0VCR1BVKQorI2lmIEVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQVSkgfHwg
RU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgZWxzZSBpZiAocmVuZGVyZXIoKS5pc0NhbnZh
cygpICYmIGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kocmVuZGVyZXIoKSkgPT0gQ2FudmFzQXNM
YXllckNvbnRlbnRzKSB7CiAgICAgICAgIGNvbnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMg
PSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVyZXIoKS5lbGVtZW50KCkpOwogICAg
ICAgICBpZiAoYXV0byogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKQpAQCAt
MjY2Niw3ICsyNjY2LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRhaW5zUGFpbnRl
ZENvbnRlbnQoUGFpbnRlZENvbnRlbnRzSW5mbyYgY29udGVudHNJbmYKICAgICAgICAgcmV0dXJu
IG1fb3duaW5nTGF5ZXIuaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwg
KCEoZG93bmNhc3Q8UmVuZGVyVmlkZW8+KHJlbmRlcmVyKCkpLnN1cHBvcnRzQWNjZWxlcmF0ZWRS
ZW5kZXJpbmcoKSkgJiYgbV9yZXF1aXJlc093bkJhY2tpbmdTdG9yZSk7CiAjZW5kaWYKIAotI2lm
IEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyNpZiBFTkFC
TEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRShPRkZT
Q1JFRU5fQ0FOVkFTKQogICAgIGlmIChpczxSZW5kZXJIVE1MQ2FudmFzPihyZW5kZXJlcigpKSAm
JiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJD
b250ZW50cykKICAgICAgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXIuaGFzVmlzaWJsZUJveERlY29y
YXRpb25zT3JCYWNrZ3JvdW5kKCk7CiAjZW5kaWYKQEAgLTI3MzEsNyArMjczMSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjpjb250ZW50Q2hhbmdlZChDb250ZW50Q2hhbmdlVHlwZSBjaGFu
Z2VUeXBlKQogICAgIGlmICgoY2hhbmdlVHlwZSA9PSBNYXNrSW1hZ2VDaGFuZ2VkKSAmJiBtX21h
c2tMYXllcikKICAgICAgICAgbV9vd25pbmdMYXllci5zZXROZWVkc0NvbXBvc2l0aW5nQ29uZmln
dXJhdGlvblVwZGF0ZSgpOwogCi0jaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUoV0VCR1BVKQorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQVSkgfHwgRU5BQkxFKE9G
RlNDUkVFTl9DQU5WQVMpCiAgICAgaWYgKChjaGFuZ2VUeXBlID09IENhbnZhc0NoYW5nZWQgfHwg
Y2hhbmdlVHlwZSA9PSBDYW52YXNQaXhlbHNDaGFuZ2VkKSAmJiByZW5kZXJlcigpLmlzQ2FudmFz
KCkgJiYgY2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneShyZW5kZXJlcigpKSA9PSBDYW52YXNBc0xh
eWVyQ29udGVudHMpIHsKICAgICAgICAgaWYgKGNoYW5nZVR5cGUgPT0gQ2FudmFzQ2hhbmdlZCkK
ICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJVcGRhdGUo
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409017</attachid>
            <date>2020-09-17 03:30:07 -0700</date>
            <delta_ts>2020-09-29 04:59:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202798-20200917113006.patch</filename>
            <type>text/plain</type>
            <size>33262</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzM3Njg5ZDA2MTdlOTI4
N2Q4ZjEzYzg1Yjg5N2ExMGU2MDMwNDRiMC4uNDE5Y2I3ZGNkNzRhOGFjNjNhZjM1NzViMDdlNWFh
YTMzNzk4ZjYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDIwLTA5LTA0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYXN5bmNocm9u
b3VzIE9mZnNjcmVlbkNhbnZhcyBwbGFjZWhvbGRlciB1cGRhdGVzIGZvciBUZXh0dXJlTWFwcGVy
R0wtYmFzZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAyNzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IGFzeW5jaHJvbm91cyB1cGRhdGVzIGZvciB1c2VycyBvZiB0
aGUgTmljb3NpYSBjb21wb3NpdG9yCisgICAgICAgIChpLmUuIEdUSywgV1BFKS4gVGhpcyBhbGxv
d3MgT2Zmc2NyZWVuQ2FudmFzLWNvbnRyb2xsZWQgY2FudmFzZXMgdG8KKyAgICAgICAgdXBkYXRl
IHZpc3VhbGx5IHdoaWxlIHRoZSBtYWluIHRocmVhZCBpcyBibG9ja2VkLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50Ojp0cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbik6CisgICAgICAgICog
aHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2Fu
dmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpzZXRQbGFj
ZWhvbGRlckNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnB1c2hC
dWZmZXJUb1BsYWNlaG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6
Y29tbWl0VG9QbGFjZWhvbGRlckNhbnZhcyk6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52
YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpQbGFj
ZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJS
ZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9U
ZXh0dXJlTWFwcGVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyUGlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJQaXBlOjpp
c1N1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJQaXBlLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdlQnVmZmVyUGlw
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNv
dXJjZTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSk6CisgICAgICAgIChOaWNvc2lhOjpO
aWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpoYW5kbGUpOgorICAgICAgICAoTmljb3NpYTo6
Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAg
ICAgIChOaWNvc2lhOjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpzd2FwQnVmZmVyc0lm
TmVlZGVkKToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGU6Ok5pY29z
aWFJbWFnZUJ1ZmZlclBpcGUpOgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVy
UGlwZTo6c291cmNlIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZl
clBpcGU6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJQaXBlOjppc1N1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlclBpcGU6
OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eTo6YWN0aXZhdGVPbkNvbXBvc2l0aW5nVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6OnNjaGVkdWxlVXBk
YXRlT25Db21wb3NpdG9yVGhyZWFkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
Q29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNv
bnRhaW5zUGFpbnRlZENvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjpjb250ZW50Q2hhbmdlZCk6CisKIDIwMjAtMDktMTcgIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5pZmllZCBidWlsZCBmaXggZm9yICJyZWRl
ZmluaXRpb24gb2YgJ2tDTVZpZGVvQ29kZWNUeXBlX1ZQOSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggN2Zk
MWE0N2M2NTAzODJjYzdlOWViMGEwZDZhYmViZjczNmI0NmRiNS4uNzcxNmU0ZWQxMGFkNjRmM2Nk
MmZkZmFiZDAwMDU5NzA1NzQ0OTNiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4ODQsNiArMTg4NCw3
IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJQaXBl
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDRmYmEyMDI3MDMzYzhlNmYyMjU3Y2Q1YWI1YzE5MTk4NjFkY2M4YzYuLjAxYmRkMmVlOTE4ZmQ0
MDA0NzNmYjgxYTNmZjUwZjk4YzU1YmM1YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM2NDQsNiArMzY0NCw3IEBACiAJCUIy
QTAxNUE5MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTAxNTkzMEFGNkNENTMwMDZCQ0Uw
RSAvKiBHcmFwaGljc0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlCMkEwMTVBQjBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBl
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMDE1
OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlBQTQg
LyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUIyQTEwRDkxMEIzODE4
QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlclBpcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTEwQzkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1
ZmZlclBpcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlCMkExRjJBQjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTFGMkEyMENFRjBBQkYw
MDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovOyB9OwogCQlCMkExRjJBRTBDRUYwQUJGMDA0
NDJGNkEgLyogU1ZHR2x5cGhFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMkExRjJBNTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHR2x5cGhFbGVt
ZW50LmggKi87IH07CiAJCUIyQTFGMkIxMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdNaXNzaW5nR2x5
cGhFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkExRjJBODBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oICov
OyB9OwpAQCAtNzg3MCw2ICs3ODcxLDcgQEAKIAkJNDNDMDkyQjkxMkQ5RTRFRTAwQTk4OUMzIC8q
IFJlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQzQzA5MkJBMTJEOUU0RUUwMEE5ODlDMyAvKiBSZW5kZXJTVkdGb3JlaWduT2Jq
ZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0ZvcmVpZ25P
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDNEMjU5NzYxM0M4MTZGNDAw
NjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEltYWdlQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNE
MjU5ODYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyUGlwZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlclBpcGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0M0VERDY3QzFCNDg1REJGMDA2NDBFNzUgLyogQ29tYmluZWRG
aWx0ZXJzQWxwaGFiZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q29tYmluZWRGaWx0ZXJzQWxwaGFiZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0M0VERDY3RDFCNDg1REJGMDA2NDBFNzUgLyogQ29tYmluZWRGaWx0ZXJzQWxwaGFiZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tYmluZWRGaWx0ZXJzQWxwaGFiZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkMwRTFBRThBMDAwQzRBMkQw
IC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTMxNTcsNiArMTMxNTksNyBAQAogCQlCMkEwMTU5NDBBRjZDRDUzMDA2QkNFMEUgLyog
R3JhcGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
R3JhcGhpY3NUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTAxNTk1
MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHcmFwaGljc1R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQjJBMTBDOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyUGlwZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJQaXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkExMENFRjBBQkYwMDQ0MkY2QSAvKiBT
VkdGb250RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U1ZHRm9udEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJB
MjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyQTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI2MDQ2LDYgKzI2MDQ5LDggQEAKIAkJCQlCMkExMEI5MTBCMzgxOEJE
MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQk3MkJBQzNBNDIzRTE3MzI3MDA4RDc0
MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLywKIAkJCQk3MkJBQzNBNTIzRTE3MzI4MDA4
RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCisJCQkJNDNEMjU5ODYxM0M4MTZGNDAw
NjA4NTU5IC8qIEltYWdlQnVmZmVyUGlwZS5jcHAgKi8sCisJCQkJQjJBMTBDOTEwQjM4MThCRDAw
MDk5QUE0IC8qIEltYWdlQnVmZmVyUGlwZS5oICovLAogCQkJCUNEMTlGRUE3MUY1NzM5NzIwMDBD
NDJGQiAvKiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJCUNEMTlGRUE2MUY1NzM5NzIwMDBDNDJG
QiAvKiBJbWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2QTU2MjFEODhBNzA4MDBDQ0MwNEMgLyog
SW1hZ2VGcmFtZS5jcHAgKi8sCkBAIC0zMTcwOSw2ICszMTcxNCw3IEBACiAJCQkJNzJCQUMzQUUy
M0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTUwNjQwQjAyNDA3NTg3RTAwQUFFMDQ1IC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MjdBN0YzQTI0MDc4Qjg0MDA0RDI5MzEgLyogSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMkExMEQ5MTBCMzgxOEJEMDAw
OTlBQTQgLyogSW1hZ2VCdWZmZXJQaXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNFMjFERDIx
ODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVt
ZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEgLyog
SW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggYzMxZmIxOTVmNDhhMGY3NWY3NTNlNTk4
MTQwMjg5M2VmZjM1OWVjMC4uMzY5MTIxMzU2YmY1MTBlY2VlZTRkOGEzMjNkZjFlYzgzMGZhM2Fj
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTc3OSw2
ICs3NzksOSBAQCBFeGNlcHRpb25PcjxSZWY8T2Zmc2NyZWVuQ2FudmFzPj4gSFRNTENhbnZhc0Vs
ZW1lbnQ6OnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuKAogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIG1fY29udGV4dCA9IG1ha2VVbmlxdWU8
UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0PigqdGhpcyk7CisgICAgaWYgKG1fY29udGV4dC0+
aXNBY2NlbGVyYXRlZCgpKQorICAgICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0
aW9uKCk7CisKICAgICByZXR1cm4gT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGUoY29udGV4dCwgKnRo
aXMpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVl
bkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKaW5k
ZXggMTg5YWMxOTI1NDRkYzlkZWI2ZDUzNjYzYzgyOTQwYTYwMTI3MzAwYy4uNzVmMTIwY2ZhZjk0
ZDU1OWQyOGM4MDEwMDkwZDk3NzU0Zjc0MGMxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2Ny
ZWVuQ2FudmFzLmNwcApAQCAtODcsNiArODcsMTIgQEAgUmVmPE9mZnNjcmVlbkNhbnZhcz4gT2Zm
c2NyZWVuQ2FudmFzOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgc3QK
IAogICAgIGNhbGxPbk1haW5UaHJlYWQoW2RldGFjaGVkQ2FudmFzID0gV1RGTW92ZShkZXRhY2hl
ZENhbnZhcyksIG9mZnNjcmVlbkNhbnZhcyA9IG1ha2VSZWYoY2xvbmUuZ2V0KCkpXSAoKSBtdXRh
YmxlIHsKICAgICAgICAgb2Zmc2NyZWVuQ2FudmFzLT5tX3BsYWNlaG9sZGVyQ2FudmFzID0gZGV0
YWNoZWRDYW52YXMtPnRha2VQbGFjZWhvbGRlckNhbnZhcygpOworICAgICAgICBpZiAob2Zmc2Ny
ZWVuQ2FudmFzLT5tX3BsYWNlaG9sZGVyQ2FudmFzKSB7CisgICAgICAgICAgICBhdXRvJiBwbGFj
ZWhvbGRlckNvbnRleHQgPSBkb3duY2FzdDxQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ+KCpv
ZmZzY3JlZW5DYW52YXMtPm1fcGxhY2Vob2xkZXJDYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSk7
CisgICAgICAgICAgICBhdXRvJiBpbWFnZUJ1ZmZlclBpcGUgPSBwbGFjZWhvbGRlckNvbnRleHQu
aW1hZ2VCdWZmZXJQaXBlKCk7CisgICAgICAgICAgICBpZiAoaW1hZ2VCdWZmZXJQaXBlKQorICAg
ICAgICAgICAgICAgIG9mZnNjcmVlbkNhbnZhcy0+bV9idWZmZXJQaXBlU291cmNlID0gaW1hZ2VC
dWZmZXJQaXBlLT5zb3VyY2UoKTsKKyAgICAgICAgfQogICAgICAgICBvZmZzY3JlZW5DYW52YXMt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soeyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrOjpDbGVhbnVwVGFzaywKICAgICAgICAgICAgIFtyZWxlYXNlT2Zmc2NyZWVuQ2Fu
dmFzID0gV1RGTW92ZShvZmZzY3JlZW5DYW52YXMpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYp
IHsgfSB9KTsKICAgICB9KTsKQEAgLTM5MywyMSArMzk5LDI0IEBAIHZvaWQgT2Zmc2NyZWVuQ2Fu
dmFzOjpzZXRQbGFjZWhvbGRlckNhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzKQogICAg
IEFTU0VSVCghbV9jb250ZXh0KTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIG1f
cGxhY2Vob2xkZXJDYW52YXMgPSBtYWtlV2Vha1B0cihjYW52YXMpOworICAgIGF1dG8mIHBsYWNl
aG9sZGVyQ29udGV4dCA9IGRvd25jYXN0PFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dD4oKmNh
bnZhcy5yZW5kZXJpbmdDb250ZXh0KCkpOworICAgIGF1dG8mIGltYWdlQnVmZmVyUGlwZSA9IHBs
YWNlaG9sZGVyQ29udGV4dC5pbWFnZUJ1ZmZlclBpcGUoKTsKKyAgICBpZiAoaW1hZ2VCdWZmZXJQ
aXBlKQorICAgICAgICBtX2J1ZmZlclBpcGVTb3VyY2UgPSBpbWFnZUJ1ZmZlclBpcGUtPnNvdXJj
ZSgpOwogfQogCiB2b2lkIE9mZnNjcmVlbkNhbnZhczo6cHVzaEJ1ZmZlclRvUGxhY2Vob2xkZXIo
KQogewogICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgdGhpc10gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9j
b21taXRMb2NrKTsKLQotICAgICAgICBpZiAobV9wbGFjZWhvbGRlckNhbnZhcyAmJiBtX2hhc1Bl
bmRpbmdDb21taXREYXRhKSB7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKG1fcGVuZGluZ0NvbW1p
dERhdGEtPnNpemUoKSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwotICAgICAgICAg
ICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgKm1fcGVuZGluZ0NvbW1pdERhdGEsIEludFJlY3QoSW50UG9pbnQoKSwgbV9wZW5kaW5n
Q29tbWl0RGF0YS0+c2l6ZSgpKSk7Ci0gICAgICAgICAgICBtX3BsYWNlaG9sZGVyQ2FudmFzLT5z
ZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShXVEZNb3ZlKGJ1ZmZlcikpOwotICAgICAgICAgICAg
bV9oYXNQZW5kaW5nQ29tbWl0RGF0YSA9IGZhbHNlOworICAgICAgICB7CisgICAgICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY29tbWl0TG9jayk7CisgICAgICAgICAgICBpZiAobV9w
bGFjZWhvbGRlckNhbnZhcyAmJiBtX3BlbmRpbmdDb21taXRCdWZmZXIpCisgICAgICAgICAgICAg
ICAgbV9wbGFjZWhvbGRlckNhbnZhcy0+c2V0SW1hZ2VCdWZmZXJBbmRNYXJrRGlydHkoV1RGTW92
ZShtX3BlbmRpbmdDb21taXRCdWZmZXIpKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ0NvbW1pdEJ1
ZmZlciA9IG51bGxwdHI7CiAgICAgICAgIH0KIAotICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPnBvc3RUYXNrKFtyZWxlYXNlVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JikgeyB9KTsKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5wb3N0VGFzayh7IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s6OkNsZWFudXBU
YXNrLAorICAgICAgICAgICAgW3JlbGVhc2VUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0g
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7IH0gfSk7CiAgICAgfSk7CiB9CiAKQEAgLTQyMSwy
MSArNDMwLDE2IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjb21taXRUb1BsYWNlaG9sZGVyQ2Fu
dmFzKCkKICAgICBpZiAobV9jb250ZXh0ICYmIChtX2NvbnRleHQtPmlzV2ViR0woKSB8fCBtX2Nv
bnRleHQtPmlzQWNjZWxlcmF0ZWQoKSkpCiAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoKTsKIAotICAgIGlmIChpc01haW5UaHJlYWQoKSkgewotICAgICAg
ICBpZiAobV9wbGFjZWhvbGRlckNhbnZhcykgewotICAgICAgICAgICAgaWYgKGF1dG8gYnVmZmVy
Q29weSA9IGltYWdlQnVmZmVyLT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29sb3JTcGFjZTo6U1JHQiwgaW1hZ2VC
dWZmZXItPmNvbnRleHQoKSkpCi0gICAgICAgICAgICAgICAgbV9wbGFjZWhvbGRlckNhbnZhcy0+
c2V0SW1hZ2VCdWZmZXJBbmRNYXJrRGlydHkoV1RGTW92ZShidWZmZXJDb3B5KSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2J1ZmZlclBpcGVTb3VyY2UpIHsKKyAgICAg
ICAgYXV0byBidWZmZXJDb3B5ID0gaW1hZ2VCdWZmZXItPmNvcHlSZWN0VG9CdWZmZXIoRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb2xvclNwYWNl
OjpTUkdCLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKKyAgICAgICAgaWYgKGJ1ZmZlckNvcHkp
CisgICAgICAgICAgICBtX2J1ZmZlclBpcGVTb3VyY2UtPmhhbmRsZShXVEZNb3ZlKGJ1ZmZlckNv
cHkpKTsKICAgICB9CiAKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY29tbWl0TG9jayk7
Ci0KLSAgICBib29sIHNob3VsZFB1c2hCdWZmZXIgPSAhbV9oYXNQZW5kaW5nQ29tbWl0RGF0YTsK
LSAgICBtX3BlbmRpbmdDb21taXREYXRhID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIGlt
YWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSk7Ci0gICAgbV9oYXNQZW5kaW5nQ29tbWl0RGF0YSA9
IHRydWU7Ci0KLSAgICBpZiAoc2hvdWxkUHVzaEJ1ZmZlcikKKyAgICBib29sIHNob3VsZFB1c2hC
dWZmZXIgPSAhbV9wZW5kaW5nQ29tbWl0QnVmZmVyOworICAgIG1fcGVuZGluZ0NvbW1pdEJ1ZmZl
ciA9IGltYWdlQnVmZmVyLT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29sb3JTcGFjZTo6U1JHQiwgaW1hZ2VCdWZm
ZXItPmNvbnRleHQoKSk7CisgICAgaWYgKG1fcGVuZGluZ0NvbW1pdEJ1ZmZlciAmJiBzaG91bGRQ
dXNoQnVmZmVyKQogICAgICAgICBwdXNoQnVmZmVyVG9QbGFjZWhvbGRlcigpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAppbmRleCAyMGRkMDNmNTMzMjU0YTcyZWY5OTMz
ZDM0MjEyZWZjOTkxMTNlNGVhLi4yNzc0NjUyN2YxYzA3YjkwOWUxY2UwMzQ1ZDhiYjc5OWM1MTkz
OWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclBpcGUuaCIKICNpbmNs
dWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KQEAgLTE4NywxMCArMTg4LDEwIEBAIHByaXZhdGU6CiAKICAgICBib29s
IG1faGFzU2NoZWR1bGVkQ29tbWl0IHsgZmFsc2UgfTsKICAgICBXZWFrUHRyPEhUTUxDYW52YXNF
bGVtZW50PiBtX3BsYWNlaG9sZGVyQ2FudmFzOworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlclBpcGU6
OlNvdXJjZT4gbV9idWZmZXJQaXBlU291cmNlOwogCiAgICAgbXV0YWJsZSBMb2NrIG1fY29tbWl0
TG9jazsKLSAgICBib29sIG1faGFzUGVuZGluZ0NvbW1pdERhdGEgeyBmYWxzZSB9OwotICAgIFJl
ZlB0cjxJbWFnZURhdGE+IG1fcGVuZGluZ0NvbW1pdERhdGE7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBtX3BlbmRpbmdDb21taXRCdWZmZXI7CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250
ZXh0LmNwcAppbmRleCAxZWM3YTI0ZWRmNDQ1MjExYmJiYTk5NDJlODE0NmJiMWU3ZjY4NGMwLi41
Nzg2OGIwYTIzYjIyM2JkZGU5MWMwNzhkYmZkODViOTJkZTVhNTcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKIAog
I2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJQaXBl
LmgiCiAjaW5jbHVkZSAiT2Zmc2NyZWVuQ2FudmFzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KIApAQCAtMzksNiArNDAsNyBAQCBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KTsKIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29u
dGV4dDo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmIGNhbnZhcykKICAg
ICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQogeworICAgIG1faW1hZ2VCdWZmZXJQ
aXBlID0gSW1hZ2VCdWZmZXJQaXBlOjpjcmVhdGUoKTsKIH0KIAogSFRNTENhbnZhc0VsZW1lbnQq
IFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6Y2FudmFzKCkgY29uc3QKQEAgLTQ5LDYgKzUx
LDE0IEBAIEhUTUxDYW52YXNFbGVtZW50KiBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ6OmNh
bnZhcygpIGNvbnN0CiAgICAgcmV0dXJuICZkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oYmFz
ZSk7CiB9CiAKK1BsYXRmb3JtTGF5ZXIqIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6cGxh
dGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXJQaXBlKQorICAgICAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlclBpcGUtPnBsYXRmb3JtTGF5ZXIoKTsKKworICAgIHJldHVy
biBudWxscHRyOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA2NDUwOTE0
NTlkZDAxY2MyYTc5NzdkYzAwM2I0NTI2NWRlNWJhN2Q4Li4zM2ZhOGYyYWRjNzhiNDljYmU0OTc2
MGE2YzY2YTM4MzRkZjk5MTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaApAQCAtMzEsNiArMzEsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdlQnVmZmVyUGlwZTsKIGNsYXNzIE9m
ZnNjcmVlbkNhbnZhczsKIAogY2xhc3MgUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0IGZpbmFs
IDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewpAQCAtNDAsOCArNDEsMTcgQEAgcHVi
bGljOgogCiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcygpIGNvbnN0OwogCisgICAgY29u
c3QgUmVmUHRyPEltYWdlQnVmZmVyUGlwZT4mIGltYWdlQnVmZmVyUGlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2VCdWZmZXJQaXBlOyB9CisKIHByaXZhdGU6CiAgICAgYm9vbCBpc1BsYWNlaG9s
ZGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBpc0FjY2VsZXJhdGVkKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gISFtX2ltYWdlQnVmZmVyUGlwZTsgfQorICAgIGJvb2wgaXNH
UFVCYXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICEhbV9pbWFnZUJ1ZmZlclBpcGU7IH0KKwor
ICAgIFJlZlB0cjxJbWFnZUJ1ZmZlclBpcGU+IG1faW1hZ2VCdWZmZXJQaXBlOwogfTsKIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKaW5kZXggNDk1MjUz
NmFlZDM0ZGYzOWM1ZGY2MGU2MzlkNGY1MTE3YTBkZTM4MC4uNGQ1M2Q5OTllYjU5ZjZkY2Y5NGU1
YmQ5NTUxZGQ2YWZkZGI1ZThlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGV4dHVyZU1hcHBlci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJl
TWFwcGVyLmNtYWtlCkBAIC03Niw2ICs3Niw3IEBAIGlmIChVU0VfQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCiAgICAgKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFCdWZmZXIuY3BwCisgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdlQnVmZmVyUGlwZS5jcHAKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGFpbnRpbmdDb250ZXh0LmNwcAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2luZS5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGFpbnRpbmdFbmdpbmVCYXNp
Yy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyUGlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlclBpcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjOGJiZWQzZGVhZTNhMjBkNDYwMGE3ZWI3MWNhMzUy
ODg5YTg4YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlclBpcGUuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyUGlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhVVNFKE5JQ09TSUEpCisK
K2Jvb2wgSW1hZ2VCdWZmZXJQaXBlOjppc1N1cHBvcnRlZCgpCit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlPiBJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSgp
Cit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlclBpcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyUGlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiMWVlN2MzMzQ0M2MxMjg2ZGZiZWEyMGVhY2MyZjg2YmE3
OWE3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlclBpcGUuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEltYWdlQnVmZmVyOworCitjbGFzcyBJbWFnZUJ1ZmZlclBpcGUgOiBwdWJsaWMg
UmVmQ291bnRlZDxJbWFnZUJ1ZmZlclBpcGU+IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBTb3VyY2Ug
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U291cmNlPiB7CisgICAgcHVibGljOgorICAg
ICAgICB2aXJ0dWFsIH5Tb3VyY2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdmlydHVhbCB2b2lk
IGhhbmRsZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYpID0gMDsKKyAgICB9OworCisg
ICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWQoKTsKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdlQnVm
ZmVyUGlwZT4gY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlclBpcGUoKSA9IGRl
ZmF1bHQ7CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxTb3VyY2U+IHNvdXJjZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1ZmZlclBpcGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQ
aXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42MWI5MzFiYTZjYjE5ZTc2NjcyNjc2OGQ0YWQ3NWIzNDJlNWZl
ZmYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmNwcApAQCAtMCwwICsxLDE3NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyUGlwZS5oIgorI2luY2x1
ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgorI2luY2x1ZGUgIk5p
Y29zaWFQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Lmgi
CisKKyNpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNlbmRpZgorCisjaWYgVVNF
KE5JQ09TSUEpCisKK25hbWVzcGFjZSBOaWNvc2lhIHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK2NsYXNzIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2UgZmluYWwgOiBwdWJsaWMg
SW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2UsIHB1YmxpYyBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbDo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNl
KCk7CisgICAgdmlydHVhbCB+Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSgpOworCisgICAg
dm9pZCBoYW5kbGUoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmKSBmaW5hbDsKKworICAg
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2
b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxDb250ZW50
TGF5ZXI+IG1fbmljb3NpYUxheWVyOworCisgICAgbXV0YWJsZSBMb2NrIG1faW1hZ2VCdWZmZXJM
b2NrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKK307
CisKK2NsYXNzIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGUgZmluYWwgOiBwdWJsaWMgSW1hZ2VCdWZm
ZXJQaXBlIHsKK3B1YmxpYzoKKyAgICBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlKCk7CisgICAgdmly
dHVhbCB+Tmljb3NpYUltYWdlQnVmZmVyUGlwZSgpID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2U+IHNvdXJjZSgpIGNvbnN0IGZpbmFsOwor
ICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBmaW5hbDsKKworICAgIFJl
ZlB0cjxOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlPiBtX3NvdXJjZTsKK307CisKK05pY29z
aWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2U6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2UoKQor
eworICAgIG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmlj
b3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMp
KTsKK30KKworTmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6fk5pY29zaWFJbWFnZUJ1ZmZl
clBpcGVTb3VyY2UoKQoreworICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1
cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7
Cit9CisKK3ZvaWQgTmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6aGFuZGxlKHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbWFnZUJ1ZmZlckxv
Y2spOworCisgICAgaWYgKCFtX2ltYWdlQnVmZmVyKSB7CisgICAgICAgIGF1dG8gcHJveHlPcGVy
YXRpb24gPSBbdGhpc10gKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KSBt
dXRhYmxlIHsKKyAgICAgICAgICAgIHJldHVybiBwcm94eS5zY2hlZHVsZVVwZGF0ZU9uQ29tcG9z
aXRvclRocmVhZChbdGhpc10gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgYXV0byYgcHJv
eHkgPSBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9u
aWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKTsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVy
IGhvbGRlcihwcm94eS5sb2NrKCkpOworCisgICAgICAgICAgICAgICAgaWYgKCFwcm94eS5pc0Fj
dGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBh
dXRvIHRleHR1cmUgPSBCaXRtYXBUZXh0dXJlR0w6OmNyZWF0ZShUZXh0dXJlTWFwcGVyQ29udGV4
dEF0dHJpYnV0ZXM6OmdldCgpKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2ltYWdlQnVmZmVyTG9jayk7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBJbWFn
ZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKG1faW1hZ2VCdWZmZXIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBzaXplID0gbmF0aXZlSW1hZ2VTaXplKG5hdGl2ZUltYWdl
KTsKKworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChzaXplLCBuYXRpdmVJbWFn
ZUhhc0FscGhhKG5hdGl2ZUltYWdlKSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiBC
aXRtYXBUZXh0dXJlOjpOb0ZsYWcpOworI2lmIFVTRShDQUlSTykKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byogc3VyZmFjZSA9IG5hdGl2ZUltYWdlLmdldCgpOworICAgICAgICAgICAgICAgICAg
ICBhdXRvKiBpbWFnZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2VEYXRhLCBJbnRSZWN0KEludFBvaW50KCksIHNpemUp
LCBJbnRQb2ludCgpLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkpOwor
I2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNlbmRpZgorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGF1dG8gbGF5ZXJCdWZmZXIgPSBtYWtl
VW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihXVEZNb3ZlKHRleHR1cmUp
KTsKKyAgICAgICAgICAgICAgICBsYXllckJ1ZmZlci0+c2V0RXh0cmFGbGFncyhUZXh0dXJlTWFw
cGVyR0w6OlNob3VsZEJsZW5kKTsKKyAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZl
cihXVEZNb3ZlKGxheWVyQnVmZmVyKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKyAg
ICAgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworICAgIH0KKwor
ICAgIG1faW1hZ2VCdWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcik7Cit9CisKK1BsYXRmb3JtTGF5ZXIq
IE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2U6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorewor
ICAgIHJldHVybiBtX25pY29zaWFMYXllci5nZXQoKTsKK30KKwordm9pZCBOaWNvc2lhSW1hZ2VC
dWZmZXJQaXBlU291cmNlOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKK30KKworTmljb3NpYUlt
YWdlQnVmZmVyUGlwZTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZSgpCit7CisgICAgbV9zb3VyY2Ug
PSBhZG9wdFJlZihuZXcgTmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSk7Cit9CisKK1JlZlB0
cjxJbWFnZUJ1ZmZlclBpcGU6OlNvdXJjZT4gTmljb3NpYUltYWdlQnVmZmVyUGlwZTo6c291cmNl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zb3VyY2U7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIE5p
Y29zaWFJbWFnZUJ1ZmZlclBpcGU6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworICAgIGlmICht
X3NvdXJjZSkKKyAgICAgICAgcmV0dXJuIG1fc291cmNlLT5wbGF0Zm9ybUxheWVyKCk7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5pY29zaWEKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIEltYWdlQnVmZmVyUGlwZTo6aXNTdXBwb3J0ZWQoKQoreworICAg
IHJldHVybiB0cnVlOworfQorCitSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlPiBJbWFnZUJ1ZmZlclBp
cGU6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBOaWNvc2lhOjpOaWNvc2lh
SW1hZ2VCdWZmZXJQaXBlKTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKE5JQ09TSUEpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHAKaW5kZXggNTQy
YmZhNWJiNGUyMGVhMjJhN2U3ZDFmMWMyM2QyYWFkNGMxMGM3ZS4uZTI4NzFmNzk1NjJjNWIwNTUw
MzJiYTAxYzEzNDc3YjA0YTQzOTUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5LmNwcApAQCAtNjUsMTkgKzY1LDI3IEBAIHZvaWQgVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6YWN0aXZhdGVPbkNvbXBvc2l0aW5nVGhyZWFkKENvbXBv
c2l0b3IqIGNvCiAgICAgQVNTRVJUKG1fY29tcG9zaXRvclRocmVhZCA9PSAmVGhyZWFkOjpjdXJy
ZW50KCkpOwogICAgIEFTU0VSVChjb21wb3NpdG9yKTsKICAgICBBU1NFUlQodGFyZ2V0TGF5ZXIp
OwotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgbV9jb21wb3NpdG9yID0gY29t
cG9zaXRvcjsKLSAgICBtX3RhcmdldExheWVyID0gdGFyZ2V0TGF5ZXI7Ci0gICAgaWYgKG1fdGFy
Z2V0TGF5ZXIgJiYgbV9jdXJyZW50QnVmZmVyKQotICAgICAgICBtX3RhcmdldExheWVyLT5zZXRD
b250ZW50c0xheWVyKG1fY3VycmVudEJ1ZmZlci5nZXQoKSk7CisgICAgRnVuY3Rpb248dm9pZCgp
PiB1cGRhdGVGdW5jdGlvbjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgICAgIG1fY29tcG9zaXRvciA9IGNvbXBvc2l0b3I7CisgICAgICAgIG1fdGFyZ2V0
TGF5ZXIgPSB0YXJnZXRMYXllcjsKKyAgICAgICAgaWYgKG1fdGFyZ2V0TGF5ZXIgJiYgbV9jdXJy
ZW50QnVmZmVyKQorICAgICAgICAgICAgbV90YXJnZXRMYXllci0+c2V0Q29udGVudHNMYXllciht
X2N1cnJlbnRCdWZmZXIuZ2V0KCkpOwogCi0gICAgbV9yZWxlYXNlVW51c2VkQnVmZmVyc1RpbWVy
ID0gbWFrZVVuaXF1ZTxSdW5Mb29wOjpUaW1lcjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5Pj4oUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eTo6cmVsZWFzZVVudXNlZEJ1ZmZlcnNUaW1lckZpcmVkKTsKLSAgICBtX2NvbXBvc2l0
b3JUaHJlYWRVcGRhdGVUaW1lciA9IG1ha2VVbmlxdWU8UnVuTG9vcDo6VGltZXI8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eT4+KFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6OmNvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lckZp
cmVkKTsKKyAgICAgICAgbV9yZWxlYXNlVW51c2VkQnVmZmVyc1RpbWVyID0gbWFrZVVuaXF1ZTxS
dW5Mb29wOjpUaW1lcjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Pj4oUnVuTG9vcDo6
Y3VycmVudCgpLCB0aGlzLCAmVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6cmVsZWFz
ZVVudXNlZEJ1ZmZlcnNUaW1lckZpcmVkKTsKKyAgICAgICAgbV9jb21wb3NpdG9yVGhyZWFkVXBk
YXRlVGltZXIgPSBtYWtlVW5pcXVlPFJ1bkxvb3A6OlRpbWVyPFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHk+PihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5Ojpjb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXJGaXJlZCk7CiAKICNp
ZiBVU0UoR0xJQl9FVkVOVF9MT09QKQotICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVy
LT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3JpdHk6OkNvbXBvc2l0aW5nVGhyZWFkVXBk
YXRlVGltZXIpOwotICAgIG1fcmVsZWFzZVVudXNlZEJ1ZmZlcnNUaW1lci0+c2V0UHJpb3JpdHko
UnVuTG9vcFNvdXJjZVByaW9yaXR5OjpSZWxlYXNlVW51c2VkUmVzb3VyY2VzVGltZXIpOworICAg
ICAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lci0+c2V0UHJpb3JpdHkoUnVuTG9vcFNv
dXJjZVByaW9yaXR5OjpDb21wb3NpdGluZ1RocmVhZFVwZGF0ZVRpbWVyKTsKKyAgICAgICAgbV9y
ZWxlYXNlVW51c2VkQnVmZmVyc1RpbWVyLT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3Jp
dHk6OlJlbGVhc2VVbnVzZWRSZXNvdXJjZXNUaW1lcik7CiAjZW5kaWYKKworICAgICAgICBpZiAo
IW1fY29tcG9zaXRvclRocmVhZFVwZGF0ZUZ1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB1cGRhdGVGdW5jdGlvbiA9IFdURk1vdmUobV9jb21wb3NpdG9yVGhyZWFkVXBkYXRl
RnVuY3Rpb24pOworICAgIH0KKyAgICB1cGRhdGVGdW5jdGlvbigpOwogfQogCiB2b2lkIFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6OmludmFsaWRhdGUoKQpAQCAtMjQ5LDEwICsyNTcs
MTEgQEAgdm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Ojpkcm9wQ3VycmVudEJ1
ZmZlcldoaWxlUHJlc2VydmluZ1RleHR1cmUoYm8KIGJvb2wgVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eTo6c2NoZWR1bGVVcGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQoRnVuY3Rpb248dm9p
ZCgpPiYmIHVwZGF0ZUZ1bmN0aW9uKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7
CisgICAgbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlRnVuY3Rpb24gPSBXVEZNb3ZlKHVwZGF0ZUZ1
bmN0aW9uKTsKKwogICAgIGlmICghbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0ZUZ1bmN0aW9u
ID0gV1RGTW92ZSh1cGRhdGVGdW5jdGlvbik7CiAgICAgbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRl
VGltZXItPnN0YXJ0T25lU2hvdCgwX3MpOwogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCA0ZDU0N2M0
YjdmZGQxYWU0MDlhNmNlNmY4MjkyZjZhNmNkMzAzMjZmLi4zZmMwNGEzOWUyY2I3MGUwOTZjZDk5
YWZlZTgyYTQ2MjYzODdlNzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMTA1OSw3ICsxMDU5LDcgQEAgYm9vbCBSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24oY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0
aW5nQW5jZXMKICAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0cygpOwogICAgIH0KICNlbmRpZgot
I2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5B
QkxFKFdFQkdQVSkKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpIHx8IEVOQUJMRShXRUJHUFUpIHx8IEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAg
IGVsc2UgaWYgKHJlbmRlcmVyKCkuaXNDYW52YXMoKSAmJiBjYW52YXNDb21wb3NpdGluZ1N0cmF0
ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJDb250ZW50cykgewogICAgICAgICBjb25z
dCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+
KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKICAgICAgICAgaWYgKGF1dG8qIGNvbnRleHQgPSBjYW52
YXMtPnJlbmRlcmluZ0NvbnRleHQoKSkKQEAgLTI3NzcsNyArMjc3Nyw3IEBAIGJvb2wgUmVuZGVy
TGF5ZXJCYWNraW5nOjpjb250YWluc1BhaW50ZWRDb250ZW50KFBhaW50ZWRDb250ZW50c0luZm8m
IGNvbnRlbnRzSW5mCiAgICAgICAgIHJldHVybiBtX293bmluZ0xheWVyLmhhc1Zpc2libGVCb3hE
ZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpIHx8ICghKGRvd25jYXN0PFJlbmRlclZpZGVvPihyZW5k
ZXJlcigpKS5zdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkpICYmIG1fcmVxdWlyZXNPd25C
YWNraW5nU3RvcmUpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBpZiAoaXM8UmVu
ZGVySFRNTENhbnZhcz4ocmVuZGVyZXIoKSkgJiYgY2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneShy
ZW5kZXJlcigpKSA9PSBDYW52YXNBc0xheWVyQ29udGVudHMpCiAgICAgICAgIHJldHVybiBtX293
bmluZ0xheWVyLmhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpOwogI2VuZGlm
CkBAIC0yODQyLDcgKzI4NDIsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6Y29udGVudENo
YW5nZWQoQ29udGVudENoYW5nZVR5cGUgY2hhbmdlVHlwZSkKICAgICBpZiAoKGNoYW5nZVR5cGUg
PT0gTWFza0ltYWdlQ2hhbmdlZCkgJiYgbV9tYXNrTGF5ZXIpCiAgICAgICAgIG1fb3duaW5nTGF5
ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKIAotI2lmIEVOQUJM
RShXRUJHTCkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQ
VSkKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8
IEVOQUJMRShXRUJHUFUpIHx8IEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgIGlmICgoY2hh
bmdlVHlwZSA9PSBDYW52YXNDaGFuZ2VkIHx8IGNoYW5nZVR5cGUgPT0gQ2FudmFzUGl4ZWxzQ2hh
bmdlZCkgJiYgcmVuZGVyZXIoKS5pc0NhbnZhcygpICYmIGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRl
Z3kocmVuZGVyZXIoKSkgPT0gQ2FudmFzQXNMYXllckNvbnRlbnRzKSB7CiAgICAgICAgIGlmIChj
aGFuZ2VUeXBlID09IENhbnZhc0NoYW5nZWQpCiAgICAgICAgICAgICBjb21wb3NpdG9yKCkuc2No
ZWR1bGVDb21wb3NpdGluZ0xheWVyVXBkYXRlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409984</attachid>
            <date>2020-09-29 04:59:22 -0700</date>
            <delta_ts>2020-09-29 08:26:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202798-20200929125920.patch</filename>
            <type>text/plain</type>
            <size>33183</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTZiZDUxNTY5OTMwNGFm
MmM1NzUxYTRmMzAwNzJiOTJmZWU0ZTMzMC4uOTlhZTg2ODZhZjljOTIxMTdjYTE0NTQ0M2VjODUy
ZDllMmVlNGU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIwLTA5LTA0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYXN5bmNocm9u
b3VzIE9mZnNjcmVlbkNhbnZhcyBwbGFjZWhvbGRlciB1cGRhdGVzIGZvciBUZXh0dXJlTWFwcGVy
R0wtYmFzZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAyNzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IGFzeW5jaHJvbm91cyB1cGRhdGVzIGZvciB1c2VycyBvZiB0
aGUgTmljb3NpYSBjb21wb3NpdG9yCisgICAgICAgIChpLmUuIEdUSywgV1BFKS4gVGhpcyBhbGxv
d3MgT2Zmc2NyZWVuQ2FudmFzLWNvbnRyb2xsZWQgY2FudmFzZXMgdG8KKyAgICAgICAgdXBkYXRl
IHZpc3VhbGx5IHdoaWxlIHRoZSBtYWluIHRocmVhZCBpcyBibG9ja2VkLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50Ojp0cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbik6CisgICAgICAgICog
aHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2Fu
dmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpzZXRQbGFj
ZWhvbGRlckNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnB1c2hC
dWZmZXJUb1BsYWNlaG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6
Y29tbWl0VG9QbGFjZWhvbGRlckNhbnZhcyk6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52
YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpQbGFj
ZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJS
ZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9U
ZXh0dXJlTWFwcGVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyUGlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJQaXBlOjpj
cmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyUGlwZS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1
ZmZlclBpcGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZl
clBpcGVTb3VyY2U6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2UpOgorICAgICAgICAoTmlj
b3NpYTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6aGFuZGxlKToKKyAgICAgICAgKE5p
Y29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2U6OnBsYXRmb3JtTGF5ZXIgY29uc3Qp
OgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6c3dhcEJ1
ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChOaWNvc2lhOjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBl
OjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlKToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFJbWFn
ZUJ1ZmZlclBpcGU6OnNvdXJjZSBjb25zdCk6CisgICAgICAgIChOaWNvc2lhOjpOaWNvc2lhSW1h
Z2VCdWZmZXJQaXBlOjpwbGF0Zm9ybUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyUGlwZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjphY3RpdmF0ZU9uQ29tcG9zaXRpbmdU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eTo6c2NoZWR1bGVVcGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQmFja2luZzo6Y29udGFpbnNQYWludGVkQ29udGVudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRlbnRDaGFuZ2VkKToKKwogMjAyMC0wOS0yOSAg
U2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAgIERh
dGEgVVJMIGltYWdlIGlzIG5vdCByZW5kZXJlZCBpZiB0aGVyZSBpcyB3aGl0ZXNwYWNlIGJldHdl
ZW4gdGhlIG1pbWUgdHlwZSBhbmQgYW5kICJiYXNlNjQiIHN0cmluZwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRl
eCA4NWNhMDRhNmE4OThjNDQzZDE0ZDY4NjI0NzdiNzQ5ODY3NjA0ZmM5Li5mMWYxMzc0OWI2MjUz
MDAyMzcyZTVkMzQzZjhjNjY1NWZmMzdlZTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTg5NCw2ICsx
ODk0LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
clBpcGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggZDM1MDcxNGI1MGNmNDVjYWE4NjNmNjUxYjUzYWI5MmEwNjE5MmNlYi4uNmE4MmFmYTRj
OTM4YjFlNGY5ZjE5MzMyMzg2ZTgxNTk1Mjg5ZjgxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzY0Nyw2ICszNjQ3LDcgQEAK
IAkJQjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMDE1OTMwQUY2Q0Q1MzAw
NkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUIyQTAxNUFCMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGlj
c1R5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQTEwQjkyMEIzODE4QkQwMDA5
OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjJBMTBEOTEw
QjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyUGlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMTBDOTEwQjM4MThCRDAwMDk5QUE0IC8qIElt
YWdlQnVmZmVyUGlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUIyQTFGMkFCMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMUYyQTIwQ0VG
MEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggKi87IH07CiAJCUIyQTFGMkFFMENFRjBB
QkYwMDQ0MkY2QSAvKiBTVkdHbHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTFGMkE1MENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdHbHlw
aEVsZW1lbnQuaCAqLzsgfTsKIAkJQjJBMUYyQjEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR01pc3Np
bmdHbHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyQTFGMkE4MENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdNaXNzaW5nR2x5cGhFbGVtZW50
LmggKi87IH07CkBAIC03ODc1LDYgKzc4NzYsNyBAQAogCQk0M0MwOTJCOTEyRDlFNEVFMDBBOTg5
QzMgLyogUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDNDMDkyQkExMkQ5RTRFRTAwQTk4OUMzIC8qIFJlbmRlclNWR0ZvcmVp
Z25PYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHRm9y
ZWlnbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0M0QyNTk3NjEzQzgx
NkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0M0QyNTk4NjEzQzgxNkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXJQaXBlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyUGlwZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzRURENjdDMUI0ODVEQkYwMDY0MEU3NSAvKiBDb21i
aW5lZEZpbHRlcnNBbHBoYWJldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQzRURENjdEMUI0ODVEQkYwMDY0MEU3NSAvKiBDb21iaW5lZEZpbHRlcnNBbHBoYWJl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21iaW5lZEZpbHRlcnNBbHBo
YWJldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyQzBFMUFFOEEwMDBD
NEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMzE4NSw2ICsxMzE4Nyw3IEBACiAJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0Uw
RSAvKiBHcmFwaGljc1R5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBHcmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJB
MDE1OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCMkExMEM5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJQ
aXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlclBpcGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZB
IC8qIFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdGb250RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
QTFGMkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjYxMDMsNiArMjYxMDYsOCBAQAogCQkJCUIyQTEwQjkxMEIz
ODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovLAogCQkJCTcyQkFDM0E0MjNFMTczMjcw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovLAogCQkJCTcyQkFDM0E1MjNFMTcz
MjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKKwkJCQk0M0QyNTk4NjEzQzgx
NkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXJQaXBlLmNwcCAqLywKKwkJCQlCMkExMEM5MTBCMzgx
OEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJQaXBlLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3
MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAw
MEM0MkZCIC8qIEltYWdlRGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0
QyAvKiBJbWFnZUZyYW1lLmNwcCAqLywKQEAgLTMxNzU5LDYgKzMxNzY0LDcgQEAKIAkJCQk3MkJB
QzNBRTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1NTA2NDBCMDI0MDc1ODdFMDBBQUUwNDUgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcyN0E3RjNBMjQwNzhCODQwMDREMjkzMSAvKiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyQTEwRDkxMEIzODE4
QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlclBpcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0Uy
MUREMjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAyMjIgLyogSW1hZ2VDb250cm9sc0J1dHRv
bkVsZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdB
MSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCBjMzFmYjE5NWY0OGEwZjc1Zjc1
M2U1OTgxNDAyODkzZWZmMzU5ZWMwLi4zNjkxMjEzNTZiZjUxMGVjZWVlNGQ4YTMyM2RmMWVjODMw
ZmEzYWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAt
Nzc5LDYgKzc3OSw5IEBAIEV4Y2VwdGlvbk9yPFJlZjxPZmZzY3JlZW5DYW52YXM+PiBIVE1MQ2Fu
dmFzRWxlbWVudDo6dHJhbnNmZXJDb250cm9sVG9PZmZzY3JlZW4oCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgbV9jb250ZXh0ID0gbWFrZVVu
aXF1ZTxQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ+KCp0aGlzKTsKKyAgICBpZiAobV9jb250
ZXh0LT5pc0FjY2VsZXJhdGVkKCkpCisgICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29t
cG9zaXRpb24oKTsKKwogICAgIHJldHVybiBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZShjb250ZXh0
LCAqdGhpcyk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zm
c2NyZWVuQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNw
cAppbmRleCBiOWI4NTY1OWQ3ZTEzYmI3NmFkZGFkMmZhMjc0NWFiM2JjZmViYzBlLi4xZTI2MDMz
ZjIzODAwODNhMzE2YTVkNDZiYjExYjFkNzQyYThmZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9P
ZmZzY3JlZW5DYW52YXMuY3BwCkBAIC04Nyw2ICs4NywxMiBAQCBSZWY8T2Zmc2NyZWVuQ2FudmFz
PiBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCBzdAogCiAgICAgY2FsbE9uTWFpblRocmVhZChbZGV0YWNoZWRDYW52YXMgPSBXVEZNb3ZlKGRl
dGFjaGVkQ2FudmFzKSwgb2Zmc2NyZWVuQ2FudmFzID0gbWFrZVJlZihjbG9uZS5nZXQoKSldICgp
IG11dGFibGUgewogICAgICAgICBvZmZzY3JlZW5DYW52YXMtPm1fcGxhY2Vob2xkZXJDYW52YXMg
PSBkZXRhY2hlZENhbnZhcy0+dGFrZVBsYWNlaG9sZGVyQ2FudmFzKCk7CisgICAgICAgIGlmIChv
ZmZzY3JlZW5DYW52YXMtPm1fcGxhY2Vob2xkZXJDYW52YXMpIHsKKyAgICAgICAgICAgIGF1dG8m
IHBsYWNlaG9sZGVyQ29udGV4dCA9IGRvd25jYXN0PFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dD4oKm9mZnNjcmVlbkNhbnZhcy0+bV9wbGFjZWhvbGRlckNhbnZhcy0+cmVuZGVyaW5nQ29udGV4
dCgpKTsKKyAgICAgICAgICAgIGF1dG8mIGltYWdlQnVmZmVyUGlwZSA9IHBsYWNlaG9sZGVyQ29u
dGV4dC5pbWFnZUJ1ZmZlclBpcGUoKTsKKyAgICAgICAgICAgIGlmIChpbWFnZUJ1ZmZlclBpcGUp
CisgICAgICAgICAgICAgICAgb2Zmc2NyZWVuQ2FudmFzLT5tX2J1ZmZlclBpcGVTb3VyY2UgPSBp
bWFnZUJ1ZmZlclBpcGUtPnNvdXJjZSgpOworICAgICAgICB9CiAgICAgICAgIG9mZnNjcmVlbkNh
bnZhcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayh7IFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2s6OkNsZWFudXBUYXNrLAogICAgICAgICAgICAgW3JlbGVhc2VPZmZzY3Jl
ZW5DYW52YXMgPSBXVEZNb3ZlKG9mZnNjcmVlbkNhbnZhcyldIChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JikgeyB9IH0pOwogICAgIH0pOwpAQCAtMzkzLDIxICszOTksMjQgQEAgdm9pZCBPZmZzY3Jl
ZW5DYW52YXM6OnNldFBsYWNlaG9sZGVyQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMp
CiAgICAgQVNTRVJUKCFtX2NvbnRleHQpOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgbV9wbGFjZWhvbGRlckNhbnZhcyA9IG1ha2VXZWFrUHRyKGNhbnZhcyk7CisgICAgYXV0byYg
cGxhY2Vob2xkZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0
PigqY2FudmFzLnJlbmRlcmluZ0NvbnRleHQoKSk7CisgICAgYXV0byYgaW1hZ2VCdWZmZXJQaXBl
ID0gcGxhY2Vob2xkZXJDb250ZXh0LmltYWdlQnVmZmVyUGlwZSgpOworICAgIGlmIChpbWFnZUJ1
ZmZlclBpcGUpCisgICAgICAgIG1fYnVmZmVyUGlwZVNvdXJjZSA9IGltYWdlQnVmZmVyUGlwZS0+
c291cmNlKCk7CiB9CiAKIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpwdXNoQnVmZmVyVG9QbGFjZWhv
bGRlcigpCiB7CiAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCB0aGlzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2NvbW1pdExvY2spOwotCi0gICAgICAgIGlmIChtX3BsYWNlaG9sZGVyQ2FudmFzICYmIG1f
aGFzUGVuZGluZ0NvbW1pdERhdGEpIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShGbG9hdFNpemUobV9wZW5kaW5n
Q29tbWl0RGF0YS0+c2l6ZSgpKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7Ci0gICAg
ICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCAqbV9wZW5kaW5nQ29tbWl0RGF0YSwgSW50UmVjdChJbnRQb2ludCgpLCBtX3Bl
bmRpbmdDb21taXREYXRhLT5zaXplKCkpKTsKLSAgICAgICAgICAgIG1fcGxhY2Vob2xkZXJDYW52
YXMtPnNldEltYWdlQnVmZmVyQW5kTWFya0RpcnR5KFdURk1vdmUoYnVmZmVyKSk7Ci0gICAgICAg
ICAgICBtX2hhc1BlbmRpbmdDb21taXREYXRhID0gZmFsc2U7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb21taXRMb2NrKTsKKyAgICAgICAgICAgIGlm
IChtX3BsYWNlaG9sZGVyQ2FudmFzICYmIG1fcGVuZGluZ0NvbW1pdEJ1ZmZlcikKKyAgICAgICAg
ICAgICAgICBtX3BsYWNlaG9sZGVyQ2FudmFzLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShX
VEZNb3ZlKG1fcGVuZGluZ0NvbW1pdEJ1ZmZlcikpOworICAgICAgICAgICAgbV9wZW5kaW5nQ29t
bWl0QnVmZmVyID0gbnVsbHB0cjsKICAgICAgICAgfQogCi0gICAgICAgIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+cG9zdFRhc2soW3JlbGVhc2VUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlz
KV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7IH0pOworICAgICAgICBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPnBvc3RUYXNrKHsgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzazo6Q2xl
YW51cFRhc2ssCisgICAgICAgICAgICBbcmVsZWFzZVRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsgfSB9KTsKICAgICB9KTsKIH0KIApAQCAt
NDIxLDIxICs0MzAsMTYgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNvbW1pdFRvUGxhY2Vob2xk
ZXJDYW52YXMoKQogICAgIGlmIChtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+aXNXZWJHTCgpIHx8
IG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKSkKICAgICAgICAgbV9jb250ZXh0LT5wYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogCi0gICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0g
ICAgICAgIGlmIChtX3BsYWNlaG9sZGVyQ2FudmFzKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBi
dWZmZXJDb3B5ID0gaW1hZ2VCdWZmZXItPmNvcHlSZWN0VG9CdWZmZXIoRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb2xvclNwYWNlOjpTUkdCLCBp
bWFnZUJ1ZmZlci0+Y29udGV4dCgpKSkKLSAgICAgICAgICAgICAgICBtX3BsYWNlaG9sZGVyQ2Fu
dmFzLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShXVEZNb3ZlKGJ1ZmZlckNvcHkpKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fYnVmZmVyUGlwZVNvdXJjZSkgewor
ICAgICAgICBhdXRvIGJ1ZmZlckNvcHkgPSBpbWFnZUJ1ZmZlci0+Y29weVJlY3RUb0J1ZmZlcihG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbG9y
U3BhY2U6OlNSR0IsIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworICAgICAgICBpZiAoYnVmZmVy
Q29weSkKKyAgICAgICAgICAgIG1fYnVmZmVyUGlwZVNvdXJjZS0+aGFuZGxlKFdURk1vdmUoYnVm
ZmVyQ29weSkpOwogICAgIH0KIAogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb21taXRM
b2NrKTsKLQotICAgIGJvb2wgc2hvdWxkUHVzaEJ1ZmZlciA9ICFtX2hhc1BlbmRpbmdDb21taXRE
YXRhOwotICAgIG1fcGVuZGluZ0NvbW1pdERhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQo
KSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpKTsKLSAgICBtX2hhc1BlbmRpbmdDb21taXRE
YXRhID0gdHJ1ZTsKLQotICAgIGlmIChzaG91bGRQdXNoQnVmZmVyKQorICAgIGJvb2wgc2hvdWxk
UHVzaEJ1ZmZlciA9ICFtX3BlbmRpbmdDb21taXRCdWZmZXI7CisgICAgbV9wZW5kaW5nQ29tbWl0
QnVmZmVyID0gaW1hZ2VCdWZmZXItPmNvcHlSZWN0VG9CdWZmZXIoRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb2xvclNwYWNlOjpTUkdCLCBpbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpKTsKKyAgICBpZiAobV9wZW5kaW5nQ29tbWl0QnVmZmVyICYmIHNo
b3VsZFB1c2hCdWZmZXIpCiAgICAgICAgIHB1c2hCdWZmZXJUb1BsYWNlaG9sZGVyKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCmluZGV4IDIwZGQwM2Y1MzMyNTRhNzJl
Zjk5MzNkMzQyMTJlZmM5OTExM2U0ZWEuLjI3NzQ2NTI3ZjFjMDdiOTA5ZTFjZTAzNDVkOGJiNzk5
YzUxOTM5YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaApAQCAtMzQsNiAr
MzQsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyUGlwZS5oIgog
I2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMTg3LDEwICsxODgsMTAgQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgbV9oYXNTY2hlZHVsZWRDb21taXQgeyBmYWxzZSB9OwogICAgIFdlYWtQdHI8SFRNTENh
bnZhc0VsZW1lbnQ+IG1fcGxhY2Vob2xkZXJDYW52YXM7CisgICAgUmVmUHRyPEltYWdlQnVmZmVy
UGlwZTo6U291cmNlPiBtX2J1ZmZlclBpcGVTb3VyY2U7CiAKICAgICBtdXRhYmxlIExvY2sgbV9j
b21taXRMb2NrOwotICAgIGJvb2wgbV9oYXNQZW5kaW5nQ29tbWl0RGF0YSB7IGZhbHNlIH07Ci0g
ICAgUmVmUHRyPEltYWdlRGF0YT4gbV9wZW5kaW5nQ29tbWl0RGF0YTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IG1fcGVuZGluZ0NvbW1pdEJ1ZmZlcjsKIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmlu
Z0NvbnRleHQuY3BwCmluZGV4IDFlYzdhMjRlZGY0NDUyMTFiYmJhOTk0MmU4MTQ2YmIxZTdmNjg0
YzAuLjU3ODY4YjBhMjNiMjIzYmRkZTkxYzA3OGRiZmQ4NWI5MmRlNWE1NzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFT
KQogCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
clBpcGUuaCIKICNpbmNsdWRlICJPZmZzY3JlZW5DYW52YXMuaCIKICNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgogCkBAIC0zOSw2ICs0MCw3IEBAIFdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOwogUGxhY2Vob2xkZXJSZW5kZXJp
bmdDb250ZXh0OjpQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFz
KQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChjYW52YXMpCiB7CisgICAgbV9pbWFnZUJ1
ZmZlclBpcGUgPSBJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSgpOwogfQogCiBIVE1MQ2FudmFzRWxl
bWVudCogUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdApAQCAtNDks
NiArNTEsMTQgQEAgSFRNTENhbnZhc0VsZW1lbnQqIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dDo6Y2FudmFzKCkgY29uc3QKICAgICByZXR1cm4gJmRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50
PihiYXNlKTsKIH0KIAorUGxhdGZvcm1MYXllciogUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0
OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlclBpcGUpCisg
ICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUGlwZS0+cGxhdGZvcm1MYXllcigpOworCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDY0
NTA5MTQ1OWRkMDFjYzJhNzk3N2RjMDAzYjQ1MjY1ZGU1YmE3ZDguLjMzZmE4ZjJhZGM3OGI0OWNi
ZTQ5NzYwYTZjNjZhMzgzNGRmOTkxOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0zMSw2ICszMSw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VCdWZmZXJQaXBlOwogY2xh
c3MgT2Zmc2NyZWVuQ2FudmFzOwogCiBjbGFzcyBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQg
ZmluYWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CkBAIC00MCw4ICs0MSwxNyBA
QCBwdWJsaWM6CiAKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKCkgY29uc3Q7CiAKKyAg
ICBjb25zdCBSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlPiYgaW1hZ2VCdWZmZXJQaXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9pbWFnZUJ1ZmZlclBpcGU7IH0KKwogcHJpdmF0ZToKICAgICBib29sIGlzUGxh
Y2Vob2xkZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGlzQWNjZWxlcmF0
ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhIW1faW1hZ2VCdWZmZXJQaXBlOyB9CisgICAgYm9v
bCBpc0dQVUJhc2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gISFtX2ltYWdlQnVmZmVyUGlwZTsg
fQorCisgICAgUmVmUHRyPEltYWdlQnVmZmVyUGlwZT4gbV9pbWFnZUJ1ZmZlclBpcGU7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQppbmRleCA0
OTUyNTM2YWVkMzRkZjM5YzVkZjYwZTYzOWQ0ZjUxMTdhMGRlMzgwLi40ZDUzZDk5OWViNTlmNmRj
Zjk0ZTViZDk1NTFkZDZhZmRkYjVlOGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Rl
eHR1cmVNYXBwZXIuY21ha2UKQEAgLTc2LDYgKzc2LDcgQEAgaWYgKFVTRV9DT09SRElOQVRFRF9H
UkFQSElDUykKICAgICApCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUJ1ZmZlci5jcHAKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmNwcAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0NvbnRleHQuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBhaW50aW5nRW5naW5lLmNw
cAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2lu
ZUJhc2ljLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJQaXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyUGlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmRkZDQwYTBkMmY0NzY5MDYzNmIxZmQ2YWQ1
YWZmNGVkZWMwYWZjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyUGlwZS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJQaXBlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFVU0UoTklDT1NJ
QSkKKworUmVmUHRyPEltYWdlQnVmZmVyUGlwZT4gSW1hZ2VCdWZmZXJQaXBlOjpjcmVhdGUoKQor
eworICAgIHJldHVybiBudWxscHRyOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJQaXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
clBpcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xZTFkNDcwMGIyZTQ1ODMzNjk2ZThhZWNiYWQzYmQ1MzQ5ZGVj
YmIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJQaXBlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJbWFnZUJ1ZmZlcjsKKworLy8gVXNlZCB0byBwcm92aWRlIGEgUGxhdGZvcm1MYXll
ciBmb3IgYW4gZXh0ZXJuYWxseSBtYW5hZ2VkIEltYWdlQnVmZmVyOyBlLmcuIGFuIEltYWdlQnVm
ZmVyIGNyZWF0ZWQgYW5kIG93bmVkIGJ5IGEgV29ya2VyIHRocmVhZAorY2xhc3MgSW1hZ2VCdWZm
ZXJQaXBlIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VCdWZmZXJQaXBlPiB7CitwdWJsaWM6Cisg
ICAgY2xhc3MgU291cmNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNvdXJjZT4gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+U291cmNlKCkgPSBkZWZhdWx0OworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmKSA9
IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlPiBjcmVhdGUo
KTsKKworICAgIHZpcnR1YWwgfkltYWdlQnVmZmVyUGlwZSgpID0gZGVmYXVsdDsKKworICAgIHZp
cnR1YWwgUmVmUHRyPFNvdXJjZT4gc291cmNlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0ID0gMDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvTmljb3NpYUltYWdlQnVmZmVyUGlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1ZmZlclBpcGUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE4YjRmOGRlOTcxNzBjZTY0NGViNjRiZTNlYWI4NTdmM2E3NDMyZjQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJ
bWFnZUJ1ZmZlclBpcGUuY3BwCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJQaXBlLmgiCisjaW5jbHVkZSAiTmljb3NpYUNvbnRl
bnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCisjaW5jbHVkZSAiTmljb3NpYVBsYXRmb3JtTGF5
ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKworI2lmIFVTRShDQUlS
TykKKyNpbmNsdWRlIDxjYWlyby5oPgorI2VuZGlmCisKKyNpZiBVU0UoTklDT1NJQSkKKworbmFt
ZXNwYWNlIE5pY29zaWEgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgTmlj
b3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSBmaW5hbCA6IHB1YmxpYyBJbWFnZUJ1ZmZlclBpcGU6
OlNvdXJjZSwgcHVibGljIENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQgewor
cHVibGljOgorICAgIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2UoKTsKKyAgICB2aXJ0dWFs
IH5OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKCk7CisKKyAgICB2b2lkIGhhbmRsZShzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYpIGZpbmFsOworCisgICAgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgc3dhcEJ1ZmZlcnNJ
Zk5lZWRlZCgpIG92ZXJyaWRlOworCisgICAgUmVmUHRyPENvbnRlbnRMYXllcj4gbV9uaWNvc2lh
TGF5ZXI7CisKKyAgICBtdXRhYmxlIExvY2sgbV9pbWFnZUJ1ZmZlckxvY2s7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworfTsKKworY2xhc3MgTmljb3Np
YUltYWdlQnVmZmVyUGlwZSBmaW5hbCA6IHB1YmxpYyBJbWFnZUJ1ZmZlclBpcGUgeworcHVibGlj
OgorICAgIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGUoKTsKKyAgICB2aXJ0dWFsIH5OaWNvc2lhSW1h
Z2VCdWZmZXJQaXBlKCkgPSBkZWZhdWx0OworCitwcml2YXRlOgorICAgIFJlZlB0cjxJbWFnZUJ1
ZmZlclBpcGU6OlNvdXJjZT4gc291cmNlKCkgY29uc3QgZmluYWw7CisgICAgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0IGZpbmFsOworCisgICAgUmVmUHRyPE5pY29zaWFJbWFn
ZUJ1ZmZlclBpcGVTb3VyY2U+IG1fc291cmNlOworfTsKKworTmljb3NpYUltYWdlQnVmZmVyUGlw
ZVNvdXJjZTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSgpCit7CisgICAgbV9uaWNvc2lh
TGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5
ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOworfQorCitOaWNvc2lh
SW1hZ2VCdWZmZXJQaXBlU291cmNlOjp+Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSgpCit7
CisgICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1f
bmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsKK30KKwordm9pZCBOaWNv
c2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpoYW5kbGUoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiYmIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2ltYWdlQnVmZmVyTG9jayk7CisKKyAgICBpZiAo
IW1faW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9IFt0aGlzXSAo
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJveHkpIG11dGFibGUgeworICAgICAg
ICAgICAgcmV0dXJuIHByb3h5LnNjaGVkdWxlVXBkYXRlT25Db21wb3NpdG9yVGhyZWFkKFt0aGlz
XSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBwcm94eSA9IGRvd25jYXN0PE5p
Y29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1w
bCgpKS5wcm94eSgpOworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5Lmxv
Y2soKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXByb3h5LmlzQWN0aXZlKCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGF1dG8gdGV4dHVyZSA9IEJp
dG1hcFRleHR1cmVHTDo6Y3JlYXRlKFRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlczo6Z2V0
KCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1faW1hZ2VCdWZmZXJMb2NrKTsKKworICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1faW1hZ2VCdWZmZXIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBuYXRpdmVJbWFnZSA9IEltYWdlQnVmZmVyOjpzaW5rSW50
b05hdGl2ZUltYWdlKFdURk1vdmUobV9pbWFnZUJ1ZmZlcikpOworICAgICAgICAgICAgICAgICAg
ICBhdXRvIHNpemUgPSBuYXRpdmVJbWFnZVNpemUobmF0aXZlSW1hZ2UpOworCisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnJlc2V0KHNpemUsIG5hdGl2ZUltYWdlSGFzQWxwaGEobmF0aXZl
SW1hZ2UpID8gQml0bWFwVGV4dHVyZTo6U3VwcG9ydHNBbHBoYSA6IEJpdG1hcFRleHR1cmU6Ok5v
RmxhZyk7CisjaWYgVVNFKENBSVJPKQorICAgICAgICAgICAgICAgICAgICBhdXRvKiBzdXJmYWNl
ID0gbmF0aXZlSW1hZ2UuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8qIGltYWdlRGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEoc3VyZmFjZSkpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT51cGRhdGVDb250
ZW50cyhpbWFnZURhdGEsIEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSksIEludFBvaW50KCksIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSk7CisjZWxzZQorICAgICAgICAg
ICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgYXV0byBsYXllckJ1ZmZlciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KFdURk1vdmUodGV4dHVyZSkpOworICAgICAgICAgICAg
ICAgIGxheWVyQnVmZmVyLT5zZXRFeHRyYUZsYWdzKFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxl
bmQpOworICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKFdURk1vdmUobGF5ZXJC
dWZmZXIpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9OworICAgICAgICBwcm94eU9wZXJh
dGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9u
aWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7CisgICAgfQorCisgICAgbV9pbWFnZUJ1ZmZl
ciA9IFdURk1vdmUoYnVmZmVyKTsKK30KKworUGxhdGZvcm1MYXllciogTmljb3NpYUltYWdlQnVm
ZmVyUGlwZVNvdXJjZTo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmlj
b3NpYUxheWVyLmdldCgpOworfQorCit2b2lkIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2U6
OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQoreworfQorCitOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlOjpO
aWNvc2lhSW1hZ2VCdWZmZXJQaXBlKCkKK3sKKyAgICBtX3NvdXJjZSA9IGFkb3B0UmVmKG5ldyBO
aWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKTsKK30KKworUmVmUHRyPEltYWdlQnVmZmVyUGlw
ZTo6U291cmNlPiBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlOjpzb3VyY2UoKSBjb25zdAoreworICAg
IHJldHVybiBtX3NvdXJjZTsKK30KKworUGxhdGZvcm1MYXllciogTmljb3NpYUltYWdlQnVmZmVy
UGlwZTo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgaWYgKG1fc291cmNlKQorICAgICAg
ICByZXR1cm4gbV9zb3VyY2UtPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworfSAvLyBuYW1lc3BhY2UgTmljb3NpYQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Jl
ZlB0cjxJbWFnZUJ1ZmZlclBpcGU+IEltYWdlQnVmZmVyUGlwZTo6Y3JlYXRlKCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IE5pY29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGUpOworfQor
Cit9CisKKyNlbmRpZiAvLyBVU0UoTklDT1NJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5LmNwcAppbmRleCA1NDJiZmE1YmI0ZTIwZWEyMmE3ZTdkMWYx
YzIzZDJhYWQ0YzEwYzdlLi5lMjg3MWY3OTU2MmM1YjA1NTAzMmJhMDFjMTM0NzdiMDRhNDM5NTFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuY3Bw
CkBAIC02NSwxOSArNjUsMjcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
OjphY3RpdmF0ZU9uQ29tcG9zaXRpbmdUaHJlYWQoQ29tcG9zaXRvciogY28KICAgICBBU1NFUlQo
bV9jb21wb3NpdG9yVGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CiAgICAgQVNTRVJUKGNv
bXBvc2l0b3IpOwogICAgIEFTU0VSVCh0YXJnZXRMYXllcik7Ci0gICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICBtX2NvbXBvc2l0b3IgPSBjb21wb3NpdG9yOwotICAgIG1fdGFyZ2V0
TGF5ZXIgPSB0YXJnZXRMYXllcjsKLSAgICBpZiAobV90YXJnZXRMYXllciAmJiBtX2N1cnJlbnRC
dWZmZXIpCi0gICAgICAgIG1fdGFyZ2V0TGF5ZXItPnNldENvbnRlbnRzTGF5ZXIobV9jdXJyZW50
QnVmZmVyLmdldCgpKTsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IHVwZGF0ZUZ1bmN0aW9uOworICAg
IHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgbV9jb21wb3Np
dG9yID0gY29tcG9zaXRvcjsKKyAgICAgICAgbV90YXJnZXRMYXllciA9IHRhcmdldExheWVyOwor
ICAgICAgICBpZiAobV90YXJnZXRMYXllciAmJiBtX2N1cnJlbnRCdWZmZXIpCisgICAgICAgICAg
ICBtX3RhcmdldExheWVyLT5zZXRDb250ZW50c0xheWVyKG1fY3VycmVudEJ1ZmZlci5nZXQoKSk7
CiAKLSAgICBtX3JlbGVhc2VVbnVzZWRCdWZmZXJzVGltZXIgPSBtYWtlVW5pcXVlPFJ1bkxvb3A6
OlRpbWVyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+PihSdW5Mb29wOjpjdXJyZW50
KCksIHRoaXMsICZUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjpyZWxlYXNlVW51c2Vk
QnVmZmVyc1RpbWVyRmlyZWQpOwotICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVyID0g
bWFrZVVuaXF1ZTxSdW5Mb29wOjpUaW1lcjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
Pj4oUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eTo6Y29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVyRmlyZWQpOworICAgICAgICBtX3JlbGVh
c2VVbnVzZWRCdWZmZXJzVGltZXIgPSBtYWtlVW5pcXVlPFJ1bkxvb3A6OlRpbWVyPFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+PihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjpyZWxlYXNlVW51c2VkQnVmZmVyc1RpbWVyRmly
ZWQpOworICAgICAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lciA9IG1ha2VVbmlxdWU8
UnVuTG9vcDo6VGltZXI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4+KFJ1bkxvb3A6
OmN1cnJlbnQoKSwgdGhpcywgJlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6OmNvbXBv
c2l0b3JUaHJlYWRVcGRhdGVUaW1lckZpcmVkKTsKIAogI2lmIFVTRShHTElCX0VWRU5UX0xPT1Ap
Ci0gICAgbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXItPnNldFByaW9yaXR5KFJ1bkxvb3BT
b3VyY2VQcmlvcml0eTo6Q29tcG9zaXRpbmdUaHJlYWRVcGRhdGVUaW1lcik7Ci0gICAgbV9yZWxl
YXNlVW51c2VkQnVmZmVyc1RpbWVyLT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3JpdHk6
OlJlbGVhc2VVbnVzZWRSZXNvdXJjZXNUaW1lcik7CisgICAgICAgIG1fY29tcG9zaXRvclRocmVh
ZFVwZGF0ZVRpbWVyLT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3JpdHk6OkNvbXBvc2l0
aW5nVGhyZWFkVXBkYXRlVGltZXIpOworICAgICAgICBtX3JlbGVhc2VVbnVzZWRCdWZmZXJzVGlt
ZXItPnNldFByaW9yaXR5KFJ1bkxvb3BTb3VyY2VQcmlvcml0eTo6UmVsZWFzZVVudXNlZFJlc291
cmNlc1RpbWVyKTsKICNlbmRpZgorCisgICAgICAgIGlmICghbV9jb21wb3NpdG9yVGhyZWFkVXBk
YXRlRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHVwZGF0ZUZ1bmN0aW9u
ID0gV1RGTW92ZShtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVGdW5jdGlvbik7CisgICAgfQorICAg
IHVwZGF0ZUZ1bmN0aW9uKCk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eTo6aW52YWxpZGF0ZSgpCkBAIC0yNDksMTAgKzI1NywxMSBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHk6OmRyb3BDdXJyZW50QnVmZmVyV2hpbGVQcmVzZXJ2aW5nVGV4
dHVyZShibwogYm9vbCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjpzY2hlZHVsZVVw
ZGF0ZU9uQ29tcG9zaXRvclRocmVhZChGdW5jdGlvbjx2b2lkKCk+JiYgdXBkYXRlRnVuY3Rpb24p
CiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICBtX2NvbXBvc2l0b3JUaHJl
YWRVcGRhdGVGdW5jdGlvbiA9IFdURk1vdmUodXBkYXRlRnVuY3Rpb24pOworCiAgICAgaWYgKCFt
X2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlRnVuY3Rpb24gPSBXVEZNb3ZlKHVwZGF0ZUZ1bmN0
aW9uKTsKICAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lci0+c3RhcnRPbmVTaG90KDBf
cyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDJmN2I1ODkyMzJmYTcyMjM0NmY3MDJhOGQ0MmRl
MTMzYmRlN2VlYTUuLjljYTBmOTNiYmJjMWQ1MWQ5MDBjOWZmOWY4MTA3MzY0OTU1ZGZlMmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBA
IC0xMDU4LDcgKzEwNTgsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmln
dXJhdGlvbihjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlcwogICAgICAgICB1cGRh
dGVDb250ZW50c1JlY3RzKCk7CiAgICAgfQogI2VuZGlmCi0jaWYgRU5BQkxFKFdFQkdMKSB8fCBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUoV0VCR1BVKQorI2lmIEVOQUJM
RShXRUJHTCkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQ
VSkgfHwgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgZWxzZSBpZiAocmVuZGVyZXIoKS5p
c0NhbnZhcygpICYmIGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kocmVuZGVyZXIoKSkgPT0gQ2Fu
dmFzQXNMYXllckNvbnRlbnRzKSB7CiAgICAgICAgIGNvbnN0IEhUTUxDYW52YXNFbGVtZW50KiBj
YW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVyZXIoKS5lbGVtZW50KCkp
OwogICAgICAgICBpZiAoYXV0byogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgp
KQpAQCAtMjc3Myw3ICsyNzczLDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRhaW5z
UGFpbnRlZENvbnRlbnQoUGFpbnRlZENvbnRlbnRzSW5mbyYgY29udGVudHNJbmYKICAgICAgICAg
cmV0dXJuIG1fb3duaW5nTGF5ZXIuaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5k
KCkgfHwgKCEoZG93bmNhc3Q8UmVuZGVyVmlkZW8+KHJlbmRlcmVyKCkpLnN1cHBvcnRzQWNjZWxl
cmF0ZWRSZW5kZXJpbmcoKSkgJiYgbV9yZXF1aXJlc093bkJhY2tpbmdTdG9yZSk7CiAjZW5kaWYK
IAotI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyNp
ZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJM
RShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgIGlmIChpczxSZW5kZXJIVE1MQ2FudmFzPihyZW5kZXJl
cigpKSAmJiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0Fz
TGF5ZXJDb250ZW50cykKICAgICAgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXIuaGFzVmlzaWJsZUJv
eERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCk7CiAjZW5kaWYKQEAgLTI4MzgsNyArMjgzOCw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250ZW50Q2hhbmdlZChDb250ZW50Q2hhbmdlVHlw
ZSBjaGFuZ2VUeXBlKQogICAgIGlmICgoY2hhbmdlVHlwZSA9PSBNYXNrSW1hZ2VDaGFuZ2VkKSAm
JiBtX21hc2tMYXllcikKICAgICAgICAgbV9vd25pbmdMYXllci5zZXROZWVkc0NvbXBvc2l0aW5n
Q29uZmlndXJhdGlvblVwZGF0ZSgpOwogCi0jaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUoV0VCR1BVKQorI2lmIEVOQUJMRShXRUJHTCkg
fHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQVSkgfHwgRU5B
QkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgaWYgKChjaGFuZ2VUeXBlID09IENhbnZhc0NoYW5n
ZWQgfHwgY2hhbmdlVHlwZSA9PSBDYW52YXNQaXhlbHNDaGFuZ2VkKSAmJiByZW5kZXJlcigpLmlz
Q2FudmFzKCkgJiYgY2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneShyZW5kZXJlcigpKSA9PSBDYW52
YXNBc0xheWVyQ29udGVudHMpIHsKICAgICAgICAgaWYgKGNoYW5nZVR5cGUgPT0gQ2FudmFzQ2hh
bmdlZCkKICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJV
cGRhdGUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410002</attachid>
            <date>2020-09-29 08:26:11 -0700</date>
            <delta_ts>2020-09-29 08:53:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202798-20200929162609.patch</filename>
            <type>text/plain</type>
            <size>33181</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTZiZDUxNTY5OTMwNGFm
MmM1NzUxYTRmMzAwNzJiOTJmZWU0ZTMzMC4uNjU4ZmEzN2RjNDFjMzcwNDQ1OGNmNmZkOTJlOWRj
MDkxNDJlMzg1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIwLTA5LTA0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYXN5bmNocm9u
b3VzIE9mZnNjcmVlbkNhbnZhcyBwbGFjZWhvbGRlciB1cGRhdGVzIGZvciBUZXh0dXJlTWFwcGVy
R0wtYmFzZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAyNzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgor
CisgICAgICAgIEltcGxlbWVudCBhc3luY2hyb25vdXMgdXBkYXRlcyBmb3IgdXNlcnMgb2YgdGhl
IE5pY29zaWEgY29tcG9zaXRvcgorICAgICAgICAoaS5lLiBHVEssIFdQRSkuIFRoaXMgYWxsb3dz
IE9mZnNjcmVlbkNhbnZhcy1jb250cm9sbGVkIGNhbnZhc2VzIHRvCisgICAgICAgIHVwZGF0ZSB2
aXN1YWxseSB3aGlsZSB0aGUgbWFpbiB0aHJlYWQgaXMgYmxvY2tlZC4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6dHJhbnNmZXJDb250cm9sVG9PZmZzY3JlZW4pOgorICAgICAgICAqIGh0
bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZh
czo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6c2V0UGxhY2Vo
b2xkZXJDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpwdXNoQnVm
ZmVyVG9QbGFjZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNv
bW1pdFRvUGxhY2Vob2xkZXJDYW52YXMpOgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFz
Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6UGxhY2Vo
b2xkZXJSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYWNlaG9sZGVyUmVu
ZGVyaW5nQ29udGV4dDo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52
YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vVGV4
dHVyZU1hcHBlci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
clBpcGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyUGlwZTo6Y3Jl
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlclBpcGUuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZm
ZXJQaXBlLmNwcDogQWRkZWQuCisgICAgICAgIChOaWNvc2lhOjpOaWNvc2lhSW1hZ2VCdWZmZXJQ
aXBlU291cmNlOjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKToKKyAgICAgICAgKE5pY29z
aWE6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2U6OmhhbmRsZSk6CisgICAgICAgIChOaWNv
c2lhOjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpwbGF0Zm9ybUxheWVyIGNvbnN0KToK
KyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2U6OnN3YXBCdWZm
ZXJzSWZOZWVkZWQpOgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZTo6
Tmljb3NpYUltYWdlQnVmZmVyUGlwZSk6CisgICAgICAgIChOaWNvc2lhOjpOaWNvc2lhSW1hZ2VC
dWZmZXJQaXBlOjpzb3VyY2UgY29uc3QpOgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdl
QnVmZmVyUGlwZTo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlclBpcGU6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6YWN0aXZhdGVPbkNvbXBvc2l0aW5nVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6
OnNjaGVkdWxlVXBkYXRlT25Db21wb3NpdG9yVGhyZWFkKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFj
a2luZzo6dXBkYXRlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OmNvbnRhaW5zUGFpbnRlZENvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb250ZW50Q2hhbmdlZCk6CisKIDIwMjAtMDktMjkgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBEYXRh
IFVSTCBpbWFnZSBpcyBub3QgcmVuZGVyZWQgaWYgdGhlcmUgaXMgd2hpdGVzcGFjZSBiZXR3ZWVu
IHRoZSBtaW1lIHR5cGUgYW5kIGFuZCAiYmFzZTY0IiBzdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
ODVjYTA0YTZhODk4YzQ0M2QxNGQ2ODYyNDc3Yjc0OTg2NzYwNGZjOS4uZjFmMTM3NDliNjI1MzAw
MjM3MmU1ZDM0M2Y4YzY2NTVmZjM3ZWU4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4OTQsNiArMTg5
NCw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJQ
aXBlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VGcmFtZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGQzNTA3MTRiNTBjZjQ1Y2FhODYzZjY1MWI1M2FiOTJhMDYxOTJjZWIuLjZhODJhZmE0Yzkz
OGIxZTRmOWYxOTMzMjM4NmU4MTU5NTI4OWY4MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM2NDcsNiArMzY0Nyw3IEBACiAJ
CUIyQTAxNUE5MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTAxNTkzMEFGNkNENTMwMDZC
Q0UwRSAvKiBHcmFwaGljc0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCMkEwMTVBQjBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NU
eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJB
MDE1OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlB
QTQgLyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUIyQTEwRDkxMEIz
ODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlclBpcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTEwQzkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFn
ZUJ1ZmZlclBpcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlCMkExRjJBQjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTFGMkEyMENFRjBB
QkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovOyB9OwogCQlCMkExRjJBRTBDRUYwQUJG
MDA0NDJGNkEgLyogU1ZHR2x5cGhFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMkExRjJBNTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHR2x5cGhF
bGVtZW50LmggKi87IH07CiAJCUIyQTFGMkIxMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdNaXNzaW5n
R2x5cGhFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkExRjJBODBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5o
ICovOyB9OwpAQCAtNzg3NSw2ICs3ODc2LDcgQEAKIAkJNDNDMDkyQjkxMkQ5RTRFRTAwQTk4OUMz
IC8qIFJlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQzQzA5MkJBMTJEOUU0RUUwMEE5ODlDMyAvKiBSZW5kZXJTVkdGb3JlaWdu
T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0ZvcmVp
Z25PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDNEMjU5NzYxM0M4MTZG
NDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDNEMjU5ODYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyUGlwZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlclBpcGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0M0VERDY3QzFCNDg1REJGMDA2NDBFNzUgLyogQ29tYmlu
ZWRGaWx0ZXJzQWxwaGFiZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29tYmluZWRGaWx0ZXJzQWxwaGFiZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0M0VERDY3RDFCNDg1REJGMDA2NDBFNzUgLyogQ29tYmluZWRGaWx0ZXJzQWxwaGFiZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tYmluZWRGaWx0ZXJzQWxwaGFi
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkMwRTFBRThBMDAwQzRB
MkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTMxODUsNiArMTMxODcsNyBAQAogCQlCMkEwMTU5NDBBRjZDRDUzMDA2QkNFMEUg
LyogR3JhcGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gR3JhcGhpY3NUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTAx
NTk1MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQjJBMTBDOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyUGlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJQaXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkExMENFRjBBQkYwMDQ0MkY2QSAv
KiBTVkdGb250RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU1ZHRm9udEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEx
RjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyQTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTI2MTAzLDYgKzI2MTA2LDggQEAKIAkJCQlCMkExMEI5MTBCMzgx
OEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQk3MkJBQzNBNDIzRTE3MzI3MDA4
RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLywKIAkJCQk3MkJBQzNBNTIzRTE3MzI4
MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCisJCQkJNDNEMjU5ODYxM0M4MTZG
NDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyUGlwZS5jcHAgKi8sCisJCQkJQjJBMTBDOTEwQjM4MThC
RDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyUGlwZS5oICovLAogCQkJCUNEMTlGRUE3MUY1NzM5NzIw
MDBDNDJGQiAvKiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJCUNEMTlGRUE2MUY1NzM5NzIwMDBD
NDJGQiAvKiBJbWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2QTU2MjFEODhBNzA4MDBDQ0MwNEMg
LyogSW1hZ2VGcmFtZS5jcHAgKi8sCkBAIC0zMTc1OSw2ICszMTc2NCw3IEBACiAJCQkJNzJCQUMz
QUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTUwNjQwQjAyNDA3NTg3RTAwQUFFMDQ1IC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MjdBN0YzQTI0MDc4Qjg0MDA0RDI5MzEgLyogSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMkExMEQ5MTBCMzgxOEJE
MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJQaXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNFMjFE
RDIxODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25F
bGVtZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEg
LyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggYzMxZmIxOTVmNDhhMGY3NWY3NTNl
NTk4MTQwMjg5M2VmZjM1OWVjMC4uMzY5MTIxMzU2YmY1MTBlY2VlZTRkOGEzMjNkZjFlYzgzMGZh
M2FjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTc3
OSw2ICs3NzksOSBAQCBFeGNlcHRpb25PcjxSZWY8T2Zmc2NyZWVuQ2FudmFzPj4gSFRNTENhbnZh
c0VsZW1lbnQ6OnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuKAogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIG1fY29udGV4dCA9IG1ha2VVbmlx
dWU8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0PigqdGhpcyk7CisgICAgaWYgKG1fY29udGV4
dC0+aXNBY2NlbGVyYXRlZCgpKQorICAgICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBv
c2l0aW9uKCk7CisKICAgICByZXR1cm4gT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGUoY29udGV4dCwg
KnRoaXMpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNj
cmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAK
aW5kZXggYjliODU2NTlkN2UxM2JiNzZhZGRhZDJmYTI3NDVhYjNiY2ZlYmMwZS4uMWUyNjAzM2Yy
MzgwMDgzYTMxNmE1ZDQ2YmIxMWIxZDc0MmE4ZmY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zm
c2NyZWVuQ2FudmFzLmNwcApAQCAtODcsNiArODcsMTIgQEAgUmVmPE9mZnNjcmVlbkNhbnZhcz4g
T2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
c3QKIAogICAgIGNhbGxPbk1haW5UaHJlYWQoW2RldGFjaGVkQ2FudmFzID0gV1RGTW92ZShkZXRh
Y2hlZENhbnZhcyksIG9mZnNjcmVlbkNhbnZhcyA9IG1ha2VSZWYoY2xvbmUuZ2V0KCkpXSAoKSBt
dXRhYmxlIHsKICAgICAgICAgb2Zmc2NyZWVuQ2FudmFzLT5tX3BsYWNlaG9sZGVyQ2FudmFzID0g
ZGV0YWNoZWRDYW52YXMtPnRha2VQbGFjZWhvbGRlckNhbnZhcygpOworICAgICAgICBpZiAob2Zm
c2NyZWVuQ2FudmFzLT5tX3BsYWNlaG9sZGVyQ2FudmFzKSB7CisgICAgICAgICAgICBhdXRvJiBw
bGFjZWhvbGRlckNvbnRleHQgPSBkb3duY2FzdDxQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ+
KCpvZmZzY3JlZW5DYW52YXMtPm1fcGxhY2Vob2xkZXJDYW52YXMtPnJlbmRlcmluZ0NvbnRleHQo
KSk7CisgICAgICAgICAgICBhdXRvJiBpbWFnZUJ1ZmZlclBpcGUgPSBwbGFjZWhvbGRlckNvbnRl
eHQuaW1hZ2VCdWZmZXJQaXBlKCk7CisgICAgICAgICAgICBpZiAoaW1hZ2VCdWZmZXJQaXBlKQor
ICAgICAgICAgICAgICAgIG9mZnNjcmVlbkNhbnZhcy0+bV9idWZmZXJQaXBlU291cmNlID0gaW1h
Z2VCdWZmZXJQaXBlLT5zb3VyY2UoKTsKKyAgICAgICAgfQogICAgICAgICBvZmZzY3JlZW5DYW52
YXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soeyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrOjpDbGVhbnVwVGFzaywKICAgICAgICAgICAgIFtyZWxlYXNlT2Zmc2NyZWVu
Q2FudmFzID0gV1RGTW92ZShvZmZzY3JlZW5DYW52YXMpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYpIHsgfSB9KTsKICAgICB9KTsKQEAgLTM5MywyMSArMzk5LDI0IEBAIHZvaWQgT2Zmc2NyZWVu
Q2FudmFzOjpzZXRQbGFjZWhvbGRlckNhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzKQog
ICAgIEFTU0VSVCghbV9jb250ZXh0KTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IG1fcGxhY2Vob2xkZXJDYW52YXMgPSBtYWtlV2Vha1B0cihjYW52YXMpOworICAgIGF1dG8mIHBs
YWNlaG9sZGVyQ29udGV4dCA9IGRvd25jYXN0PFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dD4o
KmNhbnZhcy5yZW5kZXJpbmdDb250ZXh0KCkpOworICAgIGF1dG8mIGltYWdlQnVmZmVyUGlwZSA9
IHBsYWNlaG9sZGVyQ29udGV4dC5pbWFnZUJ1ZmZlclBpcGUoKTsKKyAgICBpZiAoaW1hZ2VCdWZm
ZXJQaXBlKQorICAgICAgICBtX2J1ZmZlclBpcGVTb3VyY2UgPSBpbWFnZUJ1ZmZlclBpcGUtPnNv
dXJjZSgpOwogfQogCiB2b2lkIE9mZnNjcmVlbkNhbnZhczo6cHVzaEJ1ZmZlclRvUGxhY2Vob2xk
ZXIoKQogewogICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgdGhpc10gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9jb21taXRMb2NrKTsKLQotICAgICAgICBpZiAobV9wbGFjZWhvbGRlckNhbnZhcyAmJiBtX2hh
c1BlbmRpbmdDb21taXREYXRhKSB7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKG1fcGVuZGluZ0Nv
bW1pdERhdGEtPnNpemUoKSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwotICAgICAg
ICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgKm1fcGVuZGluZ0NvbW1pdERhdGEsIEludFJlY3QoSW50UG9pbnQoKSwgbV9wZW5k
aW5nQ29tbWl0RGF0YS0+c2l6ZSgpKSk7Ci0gICAgICAgICAgICBtX3BsYWNlaG9sZGVyQ2FudmFz
LT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShXVEZNb3ZlKGJ1ZmZlcikpOwotICAgICAgICAg
ICAgbV9oYXNQZW5kaW5nQ29tbWl0RGF0YSA9IGZhbHNlOworICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY29tbWl0TG9jayk7CisgICAgICAgICAgICBpZiAo
bV9wbGFjZWhvbGRlckNhbnZhcyAmJiBtX3BlbmRpbmdDb21taXRCdWZmZXIpCisgICAgICAgICAg
ICAgICAgbV9wbGFjZWhvbGRlckNhbnZhcy0+c2V0SW1hZ2VCdWZmZXJBbmRNYXJrRGlydHkoV1RG
TW92ZShtX3BlbmRpbmdDb21taXRCdWZmZXIpKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ0NvbW1p
dEJ1ZmZlciA9IG51bGxwdHI7CiAgICAgICAgIH0KIAotICAgICAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnBvc3RUYXNrKFtyZWxlYXNlVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyld
IChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgeyB9KTsKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5wb3N0VGFzayh7IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s6OkNsZWFu
dXBUYXNrLAorICAgICAgICAgICAgW3JlbGVhc2VUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlz
KV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7IH0gfSk7CiAgICAgfSk7CiB9CiAKQEAgLTQy
MSwyMSArNDMwLDE2IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjb21taXRUb1BsYWNlaG9sZGVy
Q2FudmFzKCkKICAgICBpZiAobV9jb250ZXh0ICYmIChtX2NvbnRleHQtPmlzV2ViR0woKSB8fCBt
X2NvbnRleHQtPmlzQWNjZWxlcmF0ZWQoKSkpCiAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKIAotICAgIGlmIChpc01haW5UaHJlYWQoKSkgewotICAg
ICAgICBpZiAobV9wbGFjZWhvbGRlckNhbnZhcykgewotICAgICAgICAgICAgaWYgKGF1dG8gYnVm
ZmVyQ29weSA9IGltYWdlQnVmZmVyLT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29sb3JTcGFjZTo6U1JHQiwgaW1h
Z2VCdWZmZXItPmNvbnRleHQoKSkpCi0gICAgICAgICAgICAgICAgbV9wbGFjZWhvbGRlckNhbnZh
cy0+c2V0SW1hZ2VCdWZmZXJBbmRNYXJrRGlydHkoV1RGTW92ZShidWZmZXJDb3B5KSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2J1ZmZlclBpcGVTb3VyY2UpIHsKKyAg
ICAgICAgYXV0byBidWZmZXJDb3B5ID0gaW1hZ2VCdWZmZXItPmNvcHlSZWN0VG9CdWZmZXIoRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb2xvclNw
YWNlOjpTUkdCLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKKyAgICAgICAgaWYgKGJ1ZmZlckNv
cHkpCisgICAgICAgICAgICBtX2J1ZmZlclBpcGVTb3VyY2UtPmhhbmRsZShXVEZNb3ZlKGJ1ZmZl
ckNvcHkpKTsKICAgICB9CiAKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY29tbWl0TG9j
ayk7Ci0KLSAgICBib29sIHNob3VsZFB1c2hCdWZmZXIgPSAhbV9oYXNQZW5kaW5nQ29tbWl0RGF0
YTsKLSAgICBtX3BlbmRpbmdDb21taXREYXRhID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCks
IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSk7Ci0gICAgbV9oYXNQZW5kaW5nQ29tbWl0RGF0
YSA9IHRydWU7Ci0KLSAgICBpZiAoc2hvdWxkUHVzaEJ1ZmZlcikKKyAgICBib29sIHNob3VsZFB1
c2hCdWZmZXIgPSAhbV9wZW5kaW5nQ29tbWl0QnVmZmVyOworICAgIG1fcGVuZGluZ0NvbW1pdEJ1
ZmZlciA9IGltYWdlQnVmZmVyLT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29sb3JTcGFjZTo6U1JHQiwgaW1hZ2VC
dWZmZXItPmNvbnRleHQoKSk7CisgICAgaWYgKG1fcGVuZGluZ0NvbW1pdEJ1ZmZlciAmJiBzaG91
bGRQdXNoQnVmZmVyKQogICAgICAgICBwdXNoQnVmZmVyVG9QbGFjZWhvbGRlcigpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAppbmRleCAyMGRkMDNmNTMzMjU0YTcyZWY5
OTMzZDM0MjEyZWZjOTkxMTNlNGVhLi4yNzc0NjUyN2YxYzA3YjkwOWUxY2UwMzQ1ZDhiYjc5OWM1
MTkzOWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgKQEAgLTM0LDYgKzM0
LDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclBpcGUuaCIKICNp
bmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTE4NywxMCArMTg4LDEwIEBAIHByaXZhdGU6CiAKICAgICBi
b29sIG1faGFzU2NoZWR1bGVkQ29tbWl0IHsgZmFsc2UgfTsKICAgICBXZWFrUHRyPEhUTUxDYW52
YXNFbGVtZW50PiBtX3BsYWNlaG9sZGVyQ2FudmFzOworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlclBp
cGU6OlNvdXJjZT4gbV9idWZmZXJQaXBlU291cmNlOwogCiAgICAgbXV0YWJsZSBMb2NrIG1fY29t
bWl0TG9jazsKLSAgICBib29sIG1faGFzUGVuZGluZ0NvbW1pdERhdGEgeyBmYWxzZSB9OwotICAg
IFJlZlB0cjxJbWFnZURhdGE+IG1fcGVuZGluZ0NvbW1pdERhdGE7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBtX3BlbmRpbmdDb21taXRCdWZmZXI7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0LmNwcAppbmRleCAxZWM3YTI0ZWRmNDQ1MjExYmJiYTk5NDJlODE0NmJiMWU3ZjY4NGMw
Li41Nzg2OGIwYTIzYjIyM2JkZGU5MWMwNzhkYmZkODViOTJkZTVhNTcyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29u
dGV4dC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykK
IAogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJQ
aXBlLmgiCiAjaW5jbHVkZSAiT2Zmc2NyZWVuQ2FudmFzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KIApAQCAtMzksNiArNDAsNyBAQCBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KTsKIFBsYWNlaG9sZGVyUmVuZGVyaW5n
Q29udGV4dDo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmIGNhbnZhcykK
ICAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQogeworICAgIG1faW1hZ2VCdWZm
ZXJQaXBlID0gSW1hZ2VCdWZmZXJQaXBlOjpjcmVhdGUoKTsKIH0KIAogSFRNTENhbnZhc0VsZW1l
bnQqIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6Y2FudmFzKCkgY29uc3QKQEAgLTQ5LDYg
KzUxLDE0IEBAIEhUTUxDYW52YXNFbGVtZW50KiBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ6
OmNhbnZhcygpIGNvbnN0CiAgICAgcmV0dXJuICZkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4o
YmFzZSk7CiB9CiAKK1BsYXRmb3JtTGF5ZXIqIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6
cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXJQaXBlKQorICAg
ICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclBpcGUtPnBsYXRmb3JtTGF5ZXIoKTsKKworICAgIHJl
dHVybiBudWxscHRyOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA2NDUw
OTE0NTlkZDAxY2MyYTc5NzdkYzAwM2I0NTI2NWRlNWJhN2Q4Li4zM2ZhOGYyYWRjNzhiNDljYmU0
OTc2MGE2YzY2YTM4MzRkZjk5MTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaApAQCAtMzEsNiArMzEsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdlQnVmZmVyUGlwZTsKIGNsYXNz
IE9mZnNjcmVlbkNhbnZhczsKIAogY2xhc3MgUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0IGZp
bmFsIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewpAQCAtNDAsOCArNDEsMTcgQEAg
cHVibGljOgogCiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcygpIGNvbnN0OwogCisgICAg
Y29uc3QgUmVmUHRyPEltYWdlQnVmZmVyUGlwZT4mIGltYWdlQnVmZmVyUGlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW1hZ2VCdWZmZXJQaXBlOyB9CisKIHByaXZhdGU6CiAgICAgYm9vbCBpc1BsYWNl
aG9sZGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBpc0FjY2VsZXJhdGVk
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gISFtX2ltYWdlQnVmZmVyUGlwZTsgfQorICAgIGJvb2wg
aXNHUFVCYXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICEhbV9pbWFnZUJ1ZmZlclBpcGU7IH0K
KworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlclBpcGU+IG1faW1hZ2VCdWZmZXJQaXBlOwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKaW5kZXggNDk1
MjUzNmFlZDM0ZGYzOWM1ZGY2MGU2MzlkNGY1MTE3YTBkZTM4MC4uNGQ1M2Q5OTllYjU5ZjZkY2Y5
NGU1YmQ5NTUxZGQ2YWZkZGI1ZThlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVGV4dHVyZU1hcHBlci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0
dXJlTWFwcGVyLmNtYWtlCkBAIC03Niw2ICs3Niw3IEBAIGlmIChVU0VfQ09PUkRJTkFURURfR1JB
UEhJQ1MpCiAgICAgKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFCdWZmZXIuY3BwCisgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdlQnVmZmVyUGlwZS5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGFpbnRpbmdDb250ZXh0LmNwcAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2luZS5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGFpbnRpbmdFbmdpbmVC
YXNpYy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyUGlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlclBpcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkZGQ0MGEwZDJmNDc2OTA2MzZiMWZkNmFkNWFm
ZjRlZGVjMGFmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlclBpcGUuY3BwCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyUGlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhVVNFKE5JQ09TSUEp
CisKK1JlZlB0cjxJbWFnZUJ1ZmZlclBpcGU+IEltYWdlQnVmZmVyUGlwZTo6Y3JlYXRlKCkKK3sK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyUGlwZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJQ
aXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMWUxZDQ3MDBiMmU0NTgzMzY5NmU4YWVjYmFkM2JkNTM0OWRlY2Ji
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyUGlwZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSW1hZ2VCdWZmZXI7CisKKy8vIFVzZWQgdG8gcHJvdmlkZSBhIFBsYXRmb3JtTGF5ZXIg
Zm9yIGFuIGV4dGVybmFsbHkgbWFuYWdlZCBJbWFnZUJ1ZmZlcjsgZS5nLiBhbiBJbWFnZUJ1ZmZl
ciBjcmVhdGVkIGFuZCBvd25lZCBieSBhIFdvcmtlciB0aHJlYWQKK2NsYXNzIEltYWdlQnVmZmVy
UGlwZSA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlQnVmZmVyUGlwZT4geworcHVibGljOgorICAg
IGNsYXNzIFNvdXJjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTb3VyY2U+IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgflNvdXJjZSgpID0gZGVmYXVsdDsKKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJikgPSAw
OworICAgIH07CisKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyUGlwZT4gY3JlYXRlKCk7
CisKKyAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlclBpcGUoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0
dWFsIFJlZlB0cjxTb3VyY2U+IHNvdXJjZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRm
b3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL05pY29zaWFJbWFnZUJ1ZmZlclBpcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xOGI0ZjhkZTk3MTcwY2U2NDRlYjY0YmUzZWFiODU3ZjNhNzQzMmY0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1h
Z2VCdWZmZXJQaXBlLmNwcApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KworI2luY2x1ZGUgIkltYWdlQnVmZmVyUGlwZS5oIgorI2luY2x1ZGUgIk5pY29zaWFDb250ZW50
TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgorI2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVy
LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCisKKyNpZiBVU0UoQ0FJUk8p
CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNlbmRpZgorCisjaWYgVVNFKE5JQ09TSUEpCisKK25hbWVz
cGFjZSBOaWNvc2lhIHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIE5pY29z
aWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2UgZmluYWwgOiBwdWJsaWMgSW1hZ2VCdWZmZXJQaXBlOjpT
b3VyY2UsIHB1YmxpYyBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50IHsKK3B1
YmxpYzoKKyAgICBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKCk7CisgICAgdmlydHVhbCB+
Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSgpOworCisgICAgdm9pZCBoYW5kbGUoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmKSBmaW5hbDsKKworICAgIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZO
ZWVkZWQoKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxh
eWVyOworCisgICAgbXV0YWJsZSBMb2NrIG1faW1hZ2VCdWZmZXJMb2NrOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKK307CisKK2NsYXNzIE5pY29zaWFJ
bWFnZUJ1ZmZlclBpcGUgZmluYWwgOiBwdWJsaWMgSW1hZ2VCdWZmZXJQaXBlIHsKK3B1YmxpYzoK
KyAgICBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlKCk7CisgICAgdmlydHVhbCB+Tmljb3NpYUltYWdl
QnVmZmVyUGlwZSgpID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8SW1hZ2VCdWZm
ZXJQaXBlOjpTb3VyY2U+IHNvdXJjZSgpIGNvbnN0IGZpbmFsOworICAgIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBmaW5hbDsKKworICAgIFJlZlB0cjxOaWNvc2lhSW1hZ2VC
dWZmZXJQaXBlU291cmNlPiBtX3NvdXJjZTsKK307CisKK05pY29zaWFJbWFnZUJ1ZmZlclBpcGVT
b3VyY2U6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2UoKQoreworICAgIG1fbmljb3NpYUxh
eWVyID0gTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVy
VGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsKK30KKworTmljb3NpYUlt
YWdlQnVmZmVyUGlwZVNvdXJjZTo6fk5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2UoKQorewor
ICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25p
Y29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7Cit9CisKK3ZvaWQgTmljb3Np
YUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6aGFuZGxlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4mJiBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbWFnZUJ1ZmZlckxvY2spOworCisgICAgaWYgKCFt
X2ltYWdlQnVmZmVyKSB7CisgICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPSBbdGhpc10gKFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgIHJldHVybiBwcm94eS5zY2hlZHVsZVVwZGF0ZU9uQ29tcG9zaXRvclRocmVhZChbdGhpc10g
KCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgYXV0byYgcHJveHkgPSBkb3duY2FzdDxOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwo
KSkucHJveHkoKTsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2Nr
KCkpOworCisgICAgICAgICAgICAgICAgaWYgKCFwcm94eS5pc0FjdGl2ZSgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBhdXRvIHRleHR1cmUgPSBCaXRt
YXBUZXh0dXJlR0w6OmNyZWF0ZShUZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXM6OmdldCgp
KTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX2ltYWdlQnVmZmVyTG9jayk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFtX2ltYWdlQnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6c2lua0ludG9O
YXRpdmVJbWFnZShXVEZNb3ZlKG1faW1hZ2VCdWZmZXIpKTsKKyAgICAgICAgICAgICAgICAgICAg
YXV0byBzaXplID0gbmF0aXZlSW1hZ2VTaXplKG5hdGl2ZUltYWdlKTsKKworICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5yZXNldChzaXplLCBuYXRpdmVJbWFnZUhhc0FscGhhKG5hdGl2ZUlt
YWdlKSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiBCaXRtYXBUZXh0dXJlOjpOb0Zs
YWcpOworI2lmIFVTRShDQUlSTykKKyAgICAgICAgICAgICAgICAgICAgYXV0byogc3VyZmFjZSA9
IG5hdGl2ZUltYWdlLmdldCgpOworICAgICAgICAgICAgICAgICAgICBhdXRvKiBpbWFnZURhdGEg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9k
YXRhKHN1cmZhY2UpKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+dXBkYXRlQ29udGVu
dHMoaW1hZ2VEYXRhLCBJbnRSZWN0KEludFBvaW50KCksIHNpemUpLCBJbnRQb2ludCgpLCBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkpOworI2Vsc2UKKyAgICAgICAgICAg
ICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGF1dG8gbGF5ZXJCdWZmZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihXVEZNb3ZlKHRleHR1cmUpKTsKKyAgICAgICAgICAgICAg
ICBsYXllckJ1ZmZlci0+c2V0RXh0cmFGbGFncyhUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5k
KTsKKyAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGxheWVyQnVm
ZmVyKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKyAgICAgICAgcHJveHlPcGVyYXRp
b24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmlj
b3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworICAgIH0KKworICAgIG1faW1hZ2VCdWZmZXIg
PSBXVEZNb3ZlKGJ1ZmZlcik7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIE5pY29zaWFJbWFnZUJ1ZmZl
clBpcGVTb3VyY2U6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX25pY29z
aWFMYXllci5nZXQoKTsKK30KKwordm9pZCBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpz
d2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKK30KKworTmljb3NpYUltYWdlQnVmZmVyUGlwZTo6Tmlj
b3NpYUltYWdlQnVmZmVyUGlwZSgpCit7CisgICAgbV9zb3VyY2UgPSBhZG9wdFJlZihuZXcgTmlj
b3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSk7Cit9CisKK1JlZlB0cjxJbWFnZUJ1ZmZlclBpcGU6
OlNvdXJjZT4gTmljb3NpYUltYWdlQnVmZmVyUGlwZTo6c291cmNlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zb3VyY2U7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIE5pY29zaWFJbWFnZUJ1ZmZlclBp
cGU6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworICAgIGlmIChtX3NvdXJjZSkKKyAgICAgICAg
cmV0dXJuIG1fc291cmNlLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK30gLy8gbmFtZXNwYWNlIE5pY29zaWEKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQ
dHI8SW1hZ2VCdWZmZXJQaXBlPiBJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSgpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBOaWNvc2lhOjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlKTsKK30KKwor
fQorCisjZW5kaWYgLy8gVVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eS5jcHAKaW5kZXggNTQyYmZhNWJiNGUyMGVhMjJhN2U3ZDFmMWMy
M2QyYWFkNGMxMGM3ZS4uZTI4NzFmNzk1NjJjNWIwNTUwMzJiYTAxYzEzNDc3YjA0YTQzOTUxYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNwcApA
QCAtNjUsMTkgKzY1LDI3IEBAIHZvaWQgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6
YWN0aXZhdGVPbkNvbXBvc2l0aW5nVGhyZWFkKENvbXBvc2l0b3IqIGNvCiAgICAgQVNTRVJUKG1f
Y29tcG9zaXRvclRocmVhZCA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwogICAgIEFTU0VSVChjb21w
b3NpdG9yKTsKICAgICBBU1NFUlQodGFyZ2V0TGF5ZXIpOwotICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgbV9jb21wb3NpdG9yID0gY29tcG9zaXRvcjsKLSAgICBtX3RhcmdldExh
eWVyID0gdGFyZ2V0TGF5ZXI7Ci0gICAgaWYgKG1fdGFyZ2V0TGF5ZXIgJiYgbV9jdXJyZW50QnVm
ZmVyKQotICAgICAgICBtX3RhcmdldExheWVyLT5zZXRDb250ZW50c0xheWVyKG1fY3VycmVudEJ1
ZmZlci5nZXQoKSk7CisgICAgRnVuY3Rpb248dm9pZCgpPiB1cGRhdGVGdW5jdGlvbjsKKyAgICB7
CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIG1fY29tcG9zaXRv
ciA9IGNvbXBvc2l0b3I7CisgICAgICAgIG1fdGFyZ2V0TGF5ZXIgPSB0YXJnZXRMYXllcjsKKyAg
ICAgICAgaWYgKG1fdGFyZ2V0TGF5ZXIgJiYgbV9jdXJyZW50QnVmZmVyKQorICAgICAgICAgICAg
bV90YXJnZXRMYXllci0+c2V0Q29udGVudHNMYXllcihtX2N1cnJlbnRCdWZmZXIuZ2V0KCkpOwog
Ci0gICAgbV9yZWxlYXNlVW51c2VkQnVmZmVyc1RpbWVyID0gbWFrZVVuaXF1ZTxSdW5Mb29wOjpU
aW1lcjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Pj4oUnVuTG9vcDo6Y3VycmVudCgp
LCB0aGlzLCAmVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6cmVsZWFzZVVudXNlZEJ1
ZmZlcnNUaW1lckZpcmVkKTsKLSAgICBtX2NvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lciA9IG1h
a2VVbmlxdWU8UnVuTG9vcDo6VGltZXI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4+
KFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHk6OmNvbXBvc2l0b3JUaHJlYWRVcGRhdGVUaW1lckZpcmVkKTsKKyAgICAgICAgbV9yZWxlYXNl
VW51c2VkQnVmZmVyc1RpbWVyID0gbWFrZVVuaXF1ZTxSdW5Mb29wOjpUaW1lcjxUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5Pj4oUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6cmVsZWFzZVVudXNlZEJ1ZmZlcnNUaW1lckZpcmVk
KTsKKyAgICAgICAgbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXIgPSBtYWtlVW5pcXVlPFJ1
bkxvb3A6OlRpbWVyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+PihSdW5Mb29wOjpj
dXJyZW50KCksIHRoaXMsICZUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Ojpjb21wb3Np
dG9yVGhyZWFkVXBkYXRlVGltZXJGaXJlZCk7CiAKICNpZiBVU0UoR0xJQl9FVkVOVF9MT09QKQot
ICAgIG1fY29tcG9zaXRvclRocmVhZFVwZGF0ZVRpbWVyLT5zZXRQcmlvcml0eShSdW5Mb29wU291
cmNlUHJpb3JpdHk6OkNvbXBvc2l0aW5nVGhyZWFkVXBkYXRlVGltZXIpOwotICAgIG1fcmVsZWFz
ZVVudXNlZEJ1ZmZlcnNUaW1lci0+c2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpS
ZWxlYXNlVW51c2VkUmVzb3VyY2VzVGltZXIpOworICAgICAgICBtX2NvbXBvc2l0b3JUaHJlYWRV
cGRhdGVUaW1lci0+c2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpDb21wb3NpdGlu
Z1RocmVhZFVwZGF0ZVRpbWVyKTsKKyAgICAgICAgbV9yZWxlYXNlVW51c2VkQnVmZmVyc1RpbWVy
LT5zZXRQcmlvcml0eShSdW5Mb29wU291cmNlUHJpb3JpdHk6OlJlbGVhc2VVbnVzZWRSZXNvdXJj
ZXNUaW1lcik7CiAjZW5kaWYKKworICAgICAgICBpZiAoIW1fY29tcG9zaXRvclRocmVhZFVwZGF0
ZUZ1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB1cGRhdGVGdW5jdGlvbiA9
IFdURk1vdmUobV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlRnVuY3Rpb24pOworICAgIH0KKyAgICB1
cGRhdGVGdW5jdGlvbigpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHk6OmludmFsaWRhdGUoKQpAQCAtMjQ5LDEwICsyNTcsMTEgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5Ojpkcm9wQ3VycmVudEJ1ZmZlcldoaWxlUHJlc2VydmluZ1RleHR1
cmUoYm8KIGJvb2wgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTo6c2NoZWR1bGVVcGRh
dGVPbkNvbXBvc2l0b3JUaHJlYWQoRnVuY3Rpb248dm9pZCgpPiYmIHVwZGF0ZUZ1bmN0aW9uKQog
ewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgbV9jb21wb3NpdG9yVGhyZWFk
VXBkYXRlRnVuY3Rpb24gPSBXVEZNb3ZlKHVwZGF0ZUZ1bmN0aW9uKTsKKwogICAgIGlmICghbV9j
b21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IG1fY29tcG9zaXRvclRocmVhZFVwZGF0ZUZ1bmN0aW9uID0gV1RGTW92ZSh1cGRhdGVGdW5jdGlv
bik7CiAgICAgbV9jb21wb3NpdG9yVGhyZWFkVXBkYXRlVGltZXItPnN0YXJ0T25lU2hvdCgwX3Mp
OwogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCAyZjdiNTg5MjMyZmE3MjIzNDZmNzAyYThkNDJkZTEz
M2JkZTdlZWE1Li45Y2EwZjkzYmJiYzFkNTFkOTAwYzlmZjlmODEwNzM2NDk1NWRmZTJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAt
MTA1OCw3ICsxMDU4LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3Vy
YXRpb24oY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXMKICAgICAgICAgdXBkYXRl
Q29udGVudHNSZWN0cygpOwogICAgIH0KICNlbmRpZgotI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQVSkKKyNpZiBFTkFCTEUo
V0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRShXRUJHUFUp
IHx8IEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkuaXND
YW52YXMoKSAmJiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZh
c0FzTGF5ZXJDb250ZW50cykgewogICAgICAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2Fu
dmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsK
ICAgICAgICAgaWYgKGF1dG8qIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSkK
QEAgLTI3NzMsNyArMjc3Myw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250YWluc1Bh
aW50ZWRDb250ZW50KFBhaW50ZWRDb250ZW50c0luZm8mIGNvbnRlbnRzSW5mCiAgICAgICAgIHJl
dHVybiBtX293bmluZ0xheWVyLmhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgp
IHx8ICghKGRvd25jYXN0PFJlbmRlclZpZGVvPihyZW5kZXJlcigpKS5zdXBwb3J0c0FjY2VsZXJh
dGVkUmVuZGVyaW5nKCkpICYmIG1fcmVxdWlyZXNPd25CYWNraW5nU3RvcmUpOwogI2VuZGlmCiAK
LSNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaWYg
RU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUo
T0ZGU0NSRUVOX0NBTlZBUykKICAgICBpZiAoaXM8UmVuZGVySFRNTENhbnZhcz4ocmVuZGVyZXIo
KSkgJiYgY2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneShyZW5kZXJlcigpKSA9PSBDYW52YXNBc0xh
eWVyQ29udGVudHMpCiAgICAgICAgIHJldHVybiBtX293bmluZ0xheWVyLmhhc1Zpc2libGVCb3hE
ZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpOwogI2VuZGlmCkBAIC0yODM4LDcgKzI4MzgsNyBAQCB2
b2lkIFJlbmRlckxheWVyQmFja2luZzo6Y29udGVudENoYW5nZWQoQ29udGVudENoYW5nZVR5cGUg
Y2hhbmdlVHlwZSkKICAgICBpZiAoKGNoYW5nZVR5cGUgPT0gTWFza0ltYWdlQ2hhbmdlZCkgJiYg
bV9tYXNrTGF5ZXIpCiAgICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0Nv
bmZpZ3VyYXRpb25VcGRhdGUoKTsKIAotI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdQVSkKKyNpZiBFTkFCTEUoV0VCR0wpIHx8
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRShXRUJHUFUpIHx8IEVOQUJM
RShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgIGlmICgoY2hhbmdlVHlwZSA9PSBDYW52YXNDaGFuZ2Vk
IHx8IGNoYW5nZVR5cGUgPT0gQ2FudmFzUGl4ZWxzQ2hhbmdlZCkgJiYgcmVuZGVyZXIoKS5pc0Nh
bnZhcygpICYmIGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kocmVuZGVyZXIoKSkgPT0gQ2FudmFz
QXNMYXllckNvbnRlbnRzKSB7CiAgICAgICAgIGlmIChjaGFuZ2VUeXBlID09IENhbnZhc0NoYW5n
ZWQpCiAgICAgICAgICAgICBjb21wb3NpdG9yKCkuc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyVXBk
YXRlKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>