<?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>239743</bug_id>
          
          <creation_ts>2022-04-25 15:39:21 -0700</creation_ts>
          <short_desc>[LBSE] Activate text rendering, by re-using RenderSVGText</short_desc>
          <delta_ts>2022-05-18 01:48:08 -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>SVG</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>239717</dependson>
          <blocked>90738</blocked>
    
    <blocked>239764</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>rbuis</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1864262</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-25 15:39:21 -0700</bug_when>
    <thetext>We can easily bring in text support from legacy -&gt; LBSE. No need to split up RenderSVGText in LegacyRenderSVGText / RenderSVGText (LBSE): the inheritance structure hasn&apos;t changed -- RenderSVGText always already inherited from RenderLayerModelObject in the legacy engine, it just force-disabled layer creation. Change that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864290</commentid>
    <comment_count>1</comment_count>
      <attachid>458312</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-25 16:47:10 -0700</bug_when>
    <thetext>Created attachment 458312
Patch, v1 (depends on bug 239717)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864292</commentid>
    <comment_count>2</comment_count>
      <attachid>458313</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-25 16:48:16 -0700</bug_when>
    <thetext>Created attachment 458313
Patch, v1 (includes patch from bug 239717)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864293</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-25 16:49:19 -0700</bug_when>
    <thetext>Want to get some EWS results overnight... let&apos;s hope I got it right ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864296</commentid>
    <comment_count>4</comment_count>
      <attachid>458315</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-25 16:55:02 -0700</bug_when>
    <thetext>Created attachment 458315
Patch, v2 (includes patch from bug 239717)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864396</commentid>
    <comment_count>5</comment_count>
      <attachid>458345</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-26 02:26:50 -0700</bug_when>
    <thetext>Created attachment 458345
Patch, v3 (depends on bug 239717)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864397</commentid>
    <comment_count>6</comment_count>
      <attachid>458346</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-26 02:27:42 -0700</bug_when>
    <thetext>Created attachment 458346
Patch, v3 (includes patch from bug 239717)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864937</commentid>
    <comment_count>7</comment_count>
      <attachid>458469</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-27 14:22:56 -0700</bug_when>
    <thetext>Created attachment 458469
Patch, v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1865979</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-05-02 15:40:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/92637427&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867137</commentid>
    <comment_count>9</comment_count>
      <attachid>458469</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-05-06 02:15:50 -0700</bug_when>
    <thetext>Comment on attachment 458469
Patch, v4

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

&gt; Source/WebCore/rendering/RenderObject.cpp:527
&gt; +#endif

Why is this needed and why now?

&gt; Source/WebCore/rendering/svg/RenderSVGBlock.cpp:51
&gt; +#endif

Should this have been introduced in an earlier patch? What is the relation to RenderSVGText?

&gt; Source/WebCore/rendering/svg/RenderSVGBlock.cpp:129
&gt; +        if (style().visibility() != Visibility::Visible &amp;&amp; !enclosingLayer()-&gt;hasVisibleContent())

Is the second condition not enough?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867365</commentid>
    <comment_count>10</comment_count>
      <attachid>458469</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-05-06 15:03:03 -0700</bug_when>
    <thetext>Comment on attachment 458469
Patch, v4

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

&gt;&gt; Source/WebCore/rendering/RenderObject.cpp:527
&gt;&gt; +#endif
&gt; 
&gt; Why is this needed and why now?

Now that &lt;text&gt; is enabled the code path is hit for the first time in LBSE. We&apos;ll assert without it in a few tests.
We currently disallow partial layouts, no SVG renderer can be a relayout boundary. A container position/size changes affects its parent, due to the way SVG containers are constructed.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGBlock.cpp:51
&gt;&gt; +#endif
&gt; 
&gt; Should this have been introduced in an earlier patch? What is the relation to RenderSVGText?

No, it&apos;s correct to introduce it here: Every transformable SVG renderer has to take care of updating these flags (in LBSE-only). Therefore renderers such as RenderSVGBlock/Text that become LBSE-aware, now need this logic.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGBlock.cpp:129
&gt;&gt; +        if (style().visibility() != Visibility::Visible &amp;&amp; !enclosingLayer()-&gt;hasVisibleContent())
&gt; 
&gt; Is the second condition not enough?

No, it&apos;s not. The code here was originally based on RenderBox::clippedOverflowRect() ~ last rebased and compared in Oct 2021.

Today, RenderBox::clippedOverflowRect() looks different:

    LayoutRect RenderBox::clippedOverflowRect(const RenderLayerModelObject* repaintContainer, VisibleRectContext context) const
    {
        if (isInsideEntirelyHiddenLayer())
            return { };
         ...

To recap: RenderLayer queries the renderers clippedOverflowRectForRepaint() (== clippedOverflowRect(), with a predefined VisibleRectContext) to determine the repaint rect for the layer, in RenderLayer::computeRepaintRects().

The two checks &quot;style().visibility() != Visibility::Visible&quot; and &quot;!enclosingLayer()-&gt;hasVisibleContent()&quot; were encapsulated in a new &apos;isInsideEntirelyHiddenLayer()&apos; helper recently introduced by Simon (https://bugs.webkit.org/show_bug.cgi?id=235242).

The style().visibility() check only considers the current renderer, whereas the enclosingLayer()-&gt;hasVisibleContent() in principle depends on the visibility status of all children of the enclosing layer.
An example to clarify this:
1) if &apos;visibility&apos; is set to &apos;visible&apos; the two checks are actually equivalent, RenderLayer::computeHasVisibleContent() returns true if &apos;visibility&apos; is set to &apos;visible&apos;.
2) If &apos;visibility&apos; is set to &apos;hidden&apos;, we still might need to return a non-empty &apos;visual overflow rect&apos;, if the layers&apos; renderer has children with &apos;visibility: visible&apos; that themselves have no own layer.

I will adapt the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869188</commentid>
    <comment_count>11</comment_count>
      <attachid>459413</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-05-16 04:11:21 -0700</bug_when>
    <thetext>Created attachment 459413
Patch, v5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869734</commentid>
    <comment_count>12</comment_count>
      <attachid>459413</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-05-17 10:51:42 -0700</bug_when>
    <thetext>Comment on attachment 459413
Patch, v5

Looks good, just the ChangeLog will have to be removed before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869779</commentid>
    <comment_count>13</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-05-17 13:20:31 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/687</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869945</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-05-18 01:48:05 -0700</bug_when>
    <thetext>Committed r294385 (250682@main): &lt;https://commits.webkit.org/250682@main&gt;

Reviewed commits have been landed. Closing PR #687 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458312</attachid>
            <date>2022-04-25 16:47:10 -0700</date>
            <delta_ts>2022-04-26 02:26:41 -0700</delta_ts>
            <desc>Patch, v1 (depends on bug 239717)</desc>
            <filename>bug-239743-20220425164708.patch</filename>
            <type>text/plain</type>
            <size>34522</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzMzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmRiZWQwMTBlNmM3YWIy
NGNmZmRjYTY3NTU2MTY0NDc4ZmU0ZjdiYi4uNzljNjgzZTY3MzAxNmYxZGEzNzBhODhkYmEwODJl
MWMwYTZjZjU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDIyLTA0LTI1ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBBY3RpdmF0ZSB0ZXh0IHJlbmRlcmluZywgYnkgcmUtdXNpbmcgUmVuZGVyU1ZHVGV4dAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5NzQzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRhcHQgUmVuZGVy
U1ZHVGV4dCB0byBiZSB1c2FibGUgYXQgdGhlIHNhbWUgdGltZSBmcm9tIGxlZ2FjeSBTVkcgZW5n
aW5lIChhcworICAgICAgICBpdCBpcyByaWdodCBub3cpIGFuZCBmcm9tIExCU0UuIFRoaXMgcmVx
dWlyZXMgbWluaW1hbCBlZmZvcnQsIHNpbmNlIFJlbmRlclNWR1RleHQKKyAgICAgICAgYWxyZWFk
eSBpbmhlcml0ZWQgZnJvbSBSZW5kZXJMYXllck1vZGVsT2JqZWN0LCBzbyB0aGVyZSdzIG5vIG5l
ZWQgZm9yIHRoZSBjcmVhdGlvbgorICAgICAgICBvZiBMZWdhY3lSZW5kZXJTVkdUZXh0IC8gUmVu
ZGVyU1ZHVGV4dCBhcyBzZXBhcmF0ZWQgbGVnYWN5L0xCU0UgaW1wbGVtZW50YXRpb25zLgorCisg
ICAgICAgIE1vc3QgU1ZHIDEuMSA8dGV4dD4gdGVzdGNhc2VzIGFscmVhZHkgcGFzcyBvdXQgb2Yg
dGhlIGJveCB3aXRoIHRoaXMgY2hhbmdlLgorICAgICAgICBUaGUgbmV4dCBwYXRjaCBhZnRlciB0
ZXh0IHN1cHBvcnQgd2lsbCBhZGQgYSBuZXcgJ21hY29zLXdrMi1sYnNlLXh4eCcgc3BlY2lmaWMK
KyAgICAgICAgcGxhdGZvcm0gYmFzZWxpbmUsIHNvIHRoYXQgd2UgY2FuIHJ1biB0ZXN0cyBMQlNF
IGFnYWludCBpc2VsZiAoZmluYWxseSB3ZSBjYW4KKyAgICAgICAgaW5jbHVkZSB0aGUgcHJvZ3Jl
c3Npb25zIGluIHRoZSBmb3JtIG9mIFRlc3RFeHBlY3RhdGlvbiBmaWxlIGNoYW5nZXMsIG9uY2Ug
YSBjZXJ0YWluCisgICAgICAgIHBhdGNoIGltcGxlbWVudHMgYSBuZXcgZmVhdHVyZSBpbiBMQlNF
LiBUaGlzIG1ha2VzIHNlbnNlIG5vdyBhcyBlbm91Z2ggaXMgdXBzdHJlYW1lZAorICAgICAgICB0
aGF0IGEgY29uc2lkZXJhYmxlIGFtb3VudCBvZiB0aGUgU1ZHIDEuMSB0ZXN0c3VpdGUgYWxyZWFk
eSBwYXNzZXMgcGl4ZWwgcGVyZmVjdC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRl
c3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3VyLiAoSG93ZXZlciB0ZXN0YWJpbGl0eSBmb3IgTEJT
RSBpcyByZWFkeSBzb29uISkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpj
b21wdXRlVmlzaWJsZVJlY3RJblNWR0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvYmplY3RJc1JlbGF5b3V0
Qm91bmRhcnkpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6YWJzb2x1dGVSZWN0cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6YWJzb2x1dGVRdWFkcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdCbG9jazo6Y2xpcHBlZE92ZXJmbG93UmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6Y29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVGbG9hdFZp
c2libGVSZWN0SW5Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
QmxvY2s6OnB1c2hNYXBwaW5nVG9Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHQmxvY2s6Om9mZnNldEZyb21Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHQmxvY2s6Om5vZGVBdFBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OlJlbmRl
clNWR1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6Om5vZGVBdEZsb2F0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHVGV4dDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4
dDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHVGV4dDo6dXBkYXRlUG9zaXRpb25BbmRPdmVyZmxvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVF1YWRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElu
bGluZUJveDo6cmVuZGVyU1ZHVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290
SW5saW5lQm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94Ojps
YXlvdXRSb290Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OnJlbmRl
clNWR1RleHQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUm9vdElubGlu
ZUJveC5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZVNWR0xheWVyQXdhcmVFbGVtZW50U2V0KToKKwogMjAyMi0wNC0yNSAgTmlrb2xhcyBa
aW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbTEJTRV0gRml4
IG9yaWdpbiBvZiB0cmFuc2Zvcm1hdGlvbnMgaW4gU1ZHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5kZXggY2VjMDRmYTNiM2Zj
NTc4ZjFmNDViZGQ0OWQxM2RjMmZjOTk1YTgyNS4uYjZkYzk1MmQ4YTFhZGNlOTM2ZDZjNmI1NjI4
ZDVmZTQ3ODlmYzBiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllck1vZGVsT2JqZWN0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlJlbmRl
ckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdC
bG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogI2luY2x1ZGUgIlNWR0dyYXBoaWNzRWxlbWVudC5oIgpAQCAtMjQ1LDEwICsy
NDYsNyBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnVwZGF0ZUxheWVyVHJhbnNmb3Jt
KCkKICNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKIHN0ZDo6b3B0aW9uYWw8TGF5
b3V0UmVjdD4gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdD
b250YWluZXIoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogY29udGFpbmVyLCBSZW5kZXJPYmplY3Q6OlZpc2libGVSZWN0Q29udGV4dCBjb250ZXh0
KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyU1ZHQmxvY2sg
Y2hhbmdlcwotICAgIC8vIEFTU0VSVChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4odGhpcykgfHwg
aXM8UmVuZGVyU1ZHQmxvY2s+KHRoaXMpKTsKLSAgICBBU1NFUlQoaXM8UmVuZGVyU1ZHTW9kZWxP
YmplY3Q+KHRoaXMpKTsKLQorICAgIEFTU0VSVChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4odGhp
cykgfHwgaXM8UmVuZGVyU1ZHQmxvY2s+KHRoaXMpKTsKICAgICBBU1NFUlQoIXN0eWxlKCkuaGFz
SW5GbG93UG9zaXRpb24oKSk7CiAgICAgQVNTRVJUKCF2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0
Q29udGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggNjE5MTFjOGFjNjYyZmMzYzIzYTkzNTY1
NmQ4ODE4ZWZjYzZjOWQ4Mi4uMDNhZjQ0YjM4OGRlMGFmYWQ1YWU5OTA5NTYxZGEzZjFhZDZiMTYw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTUyMSw2
ICs1MjEsMTEgQEAgc3RhdGljIGlubGluZSBib29sIG9iamVjdElzUmVsYXlvdXRCb3VuZGFyeShj
b25zdCBSZW5kZXJFbGVtZW50KiBvYmplY3QpCiAgICAgaWYgKCFvYmplY3QtPmhhc05vblZpc2li
bGVPdmVyZmxvdygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyNpZiBFTkFCTEUoTEFZRVJf
QkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAob2JqZWN0LT5kb2N1bWVudCgpLnNldHRpbmdzKCku
bGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSAmJiBvYmplY3QtPmlzU1ZHTGF5ZXJBd2FyZVJl
bmRlcmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCiAgICAgaWYgKG9iamVj
dC0+c3R5bGUoKS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgfHwgb2JqZWN0LT5zdHlsZSgp
LmhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkgfHwgb2JqZWN0LT5zdHlsZSgpLmhlaWdodCgp
LmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAKaW5kZXggMmUx
MDU3MjgxYzg4MDRiMGU2MWE3YzhmOWYwNDkyZTRhYzE3MTA0NS4uN2QxZDgxNmU5M2MwNzZhODgy
ZmMyYjU2ODBkZTkyOTdlY2M4NjYwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdCbG9jay5oIgogCisjaW5jbHVkZSAiUmVuZGVyU1ZH
QmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRl
ICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCkBA
IC00Miw2ICs0MywxMyBAQCB2b2lkIFJlbmRlclNWR0Jsb2NrOjp1cGRhdGVGcm9tU3R5bGUoKQog
ewogICAgIFJlbmRlckJsb2NrRmxvdzo6dXBkYXRlRnJvbVN0eWxlKCk7CiAKKyNpZiBFTkFCTEUo
TEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxh
eWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgdXBkYXRlSGFzU1ZHVHJhbnNm
b3JtRmxhZ3MoZ3JhcGhpY3NFbGVtZW50KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisKICAgICAvLyBSZW5kZXJTVkdsb2NrLCB1c2VkIGJ5IFJlbmRlcihTVkdUZXh0fEZvcmVp
Z25PYmplY3QpLCBpcyBub3QgYWxsb3dlZCB0byBjYWxsIHNldEhhc05vblZpc2libGVPdmVyZmxv
dyh0cnVlKS4KICAgICAvLyBSZW5kZXJCbG9jayBhc3N1bWVzIGEgbGF5ZXIgdG8gYmUgcHJlc2Vu
dCB3aGVuIHRoZSBvdmVyZmxvdyBjbGlwIGZ1bmN0aW9uYWxpdHkgaXMgcmVxdWVzdGVkLiBCb3Ro
CiAgICAgLy8gUmVuZGVyKFNWR1RleHR8Rm9yZWlnbk9iamVjdCkgcmV0dXJuICdmYWxzZScgb24g
J3JlcXVpcmVzTGF5ZXInLiBGaW5lIGZvciBSZW5kZXJTVkdUZXh0LgpAQCAtNTcsMTIgKzY1LDI0
IEBAIHZvaWQgUmVuZGVyU1ZHQmxvY2s6OnVwZGF0ZUZyb21TdHlsZSgpCiAgICAgc2V0SGFzTm9u
VmlzaWJsZU92ZXJmbG93KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdCbG9jazo6YWJzb2x1
dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0Cit2b2lk
IFJlbmRlclNWR0Jsb2NrOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3QKIHsKKyNpZiBFTkFCTEUo
TEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxh
eWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgcmVjdHMuYXBwZW5kKHNuYXBw
ZWRJbnRSZWN0KExheW91dFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpLCBzaXpl
KCkpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIFRoaXMgY29k
ZSBwYXRoIHNob3VsZCBuZXZlciBiZSB0YWtlbiBmb3IgU1ZHLCBhcyB3ZSdyZSBhc3N1bWluZyB1
c2VUcmFuc2Zvcm1zPXRydWUgZXZlcnl3aGVyZSwgYWJzb2x1dGVRdWFkcyBzaG91bGQgYmUgdXNl
ZC4KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBSZW5kZXJTVkdCbG9jazo6
YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBj
b25zdAoreworICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKHN0cm9rZUJvdW5k
aW5nQm94KCksIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7Cit9CisKIHZvaWQgUmVuZGVyU1ZH
QmxvY2s6OndpbGxCZURlc3Ryb3llZCgpCiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVu
dERlc3Ryb3llZCgqdGhpcyk7CkBAIC03MSw3ICs5MSwxMSBAQCB2b2lkIFJlbmRlclNWR0Jsb2Nr
Ojp3aWxsQmVEZXN0cm95ZWQoKQogCiB2b2lkIFJlbmRlclNWR0Jsb2NrOjpzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewor
I2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChkaWZmID09IFN0eWxl
RGlmZmVyZW5jZTo6TGF5b3V0ICYmICFkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNW
R0VuZ2luZUVuYWJsZWQoKSkKKyNlbHNlCiAgICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNl
OjpMYXlvdXQpCisjZW5kaWYKICAgICAgICAgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CiAg
ICAgUmVuZGVyQmxvY2tGbG93OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiAgICAg
U1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCgqdGhpcywgZGlmZiwgc3R5bGUo
KSk7CkBAIC04MSw2ICsxMDUsMTEgQEAgdm9pZCBSZW5kZXJTVkdCbG9jazo6Y29tcHV0ZU92ZXJm
bG93KExheW91dFVuaXQgb2xkQ2xpZW50QWZ0ZXJFZGdlLCBib29sIHJlY29tcHUKIHsKICAgICBS
ZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVPdmVyZmxvdyhvbGRDbGllbnRBZnRlckVkZ2UsIHJlY29t
cHV0ZUZsb2F0cyk7CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBp
ZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgY29uc3QgYXV0byogdGV4dFNoYWRvdyA9IHN0
eWxlKCkudGV4dFNoYWRvdygpOwogICAgIGlmICghdGV4dFNoYWRvdykKICAgICAgICAgcmV0dXJu
OwpAQCAtOTAsMTMgKzExOSwyOCBAQCB2b2lkIFJlbmRlclNWR0Jsb2NrOjpjb21wdXRlT3ZlcmZs
b3coTGF5b3V0VW5pdCBvbGRDbGllbnRBZnRlckVkZ2UsIGJvb2wgcmVjb21wdQogICAgIGFkZFZp
c3VhbE92ZXJmbG93KHNuYXBwZWRJbnRSZWN0KGJvcmRlclJlY3QpKTsKIH0KIAotTGF5b3V0UmVj
dCBSZW5kZXJTVkdCbG9jazo6Y2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0CitM
YXlvdXRSZWN0IFJlbmRlclNWR0Jsb2NrOjpjbGlwcGVkT3ZlcmZsb3dSZWN0KGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCBj
b250ZXh0KSBjb25zdAogeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAg
IGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkg
eworICAgICAgICBpZiAoc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVmlzaWJpbGl0eTo6VmlzaWJs
ZSAmJiAhZW5jbG9zaW5nTGF5ZXIoKS0+aGFzVmlzaWJsZUNvbnRlbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisKKyAgICAgICAgQVNTRVJUKCF2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0
Q29udGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7CisgICAgICAgIHJldHVybiBj
b21wdXRlUmVjdCh2aXN1YWxPdmVyZmxvd1JlY3QoKSwgcmVwYWludENvbnRhaW5lciwgY29udGV4
dCk7CisgICAgfQorI2VuZGlmCisKICAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6Y2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoKnRoaXMsIHJlcGFpbnRDb250YWluZXIpOwogfQogCiBz
dGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IFJlbmRlclNWR0Jsb2NrOjpjb21wdXRlVmlzaWJsZVJl
Y3RJbkNvbnRhaW5lcihjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCBjb250ZXh0KSBjb25zdAog
eworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1bWVudCgp
LnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
IGNvbXB1dGVWaXNpYmxlUmVjdEluU1ZHQ29udGFpbmVyKHJlY3QsIGNvbnRhaW5lciwgY29udGV4
dCk7CisjZW5kaWYKKwogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBhZGp1c3RlZFJlY3Qg
PSBjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKHJlY3QsIGNvbnRhaW5lciwgY29u
dGV4dCk7CiAgICAgaWYgKGFkanVzdGVkUmVjdCkKICAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0xh
eW91dFJlY3QoKmFkanVzdGVkUmVjdCk7CkBAIC0xMDUsNiArMTQ5LDkgQEAgc3RkOjpvcHRpb25h
bDxMYXlvdXRSZWN0PiBSZW5kZXJTVkdCbG9jazo6Y29tcHV0ZVZpc2libGVSZWN0SW5Db250YWlu
ZXIoY29uc3QgTGEKIAogc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IFJlbmRlclNWR0Jsb2NrOjpj
b21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRl
eHQgY29udGV4dCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
KyAgICBBU1NFUlQoIWRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5h
YmxlZCgpKTsKKyNlbmRpZgogICAgIHJldHVybiBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlRmxv
YXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKCp0aGlzLCByZWN0LCBjb250YWluZXIsIGNvbnRleHQp
OwogfQogCkBAIC0xMTUsMTMgKzE2MiwyMyBAQCB2b2lkIFJlbmRlclNWR0Jsb2NrOjptYXBMb2Nh
bFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQwogCiBj
b25zdCBSZW5kZXJPYmplY3QqIFJlbmRlclNWR0Jsb2NrOjpwdXNoTWFwcGluZ1RvQ29udGFpbmVy
KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdl
b21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURf
U1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdF
bmdpbmVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBSZW5kZXJCb3g6OnB1c2hNYXBwaW5nVG9D
b250YWluZXIoYW5jZXN0b3JUb1N0b3BBdCwgZ2VvbWV0cnlNYXApOworI2VuZGlmCisKICAgICBy
ZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcigqdGhpcywgYW5j
ZXN0b3JUb1N0b3BBdCwgZ2VvbWV0cnlNYXApOwogfQogCi1ib29sIFJlbmRlclNWR0Jsb2NrOjpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pCisjaWYg
RU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCitMYXlvdXRTaXplIFJlbmRlclNWR0Jsb2Nr
OjpvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlckVsZW1lbnQmIGNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmLCBib29sKikgY29uc3QKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUX1VOVVNFRChjb250YWluZXIsICZjb250YWluZXIg
PT0gdGhpcy0+Y29udGFpbmVyKCkpOworICAgIEFTU0VSVCghaXNJbkZsb3dQb3NpdGlvbmVkKCkp
OworICAgIEFTU0VSVCghaXNBYnNvbHV0ZWx5UG9zaXRpb25lZCgpKTsKKyAgICBBU1NFUlQoIWlz
SW5saW5lKCkpOworICAgIHJldHVybiBMYXlvdXRTaXplKCk7CiB9CisjZW5kaWYKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oCmluZGV4IGMxNDZk
ZGFlZjIwYjUzYzRkNDFhNTk0ODRhOTc0Y2FkZmNkNmYzNTYuLjhlMWQ3YzgxMmU4NGMyNWY5YTRl
YjYwYmVjNTIyZDViYTlhY2NmMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0Jsb2NrLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlz
UmVuZGVyU1ZHQmxvY2soKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2b2lk
IGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKLQorICAgIHZvaWQgYWJzb2x1dGVRdWFkcyhW
ZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBvdmVycmlkZTsKICAgICB2
b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKSBmaW5hbDsKIAogI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQpAQCAt
NTksOCArNTksOSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKGNv
bnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFuc2Zvcm1T
dGF0ZSYsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29sKiB3YXNGaXhlZCkgY29u
c3QgZmluYWw7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVy
KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdl
b21ldHJ5TWFwJikgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9j
YXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QWN0aW9uKSBmaW5hbDsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
KyAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Db250YWluZXIoUmVuZGVyRWxlbWVudCYsIGNvbnN0
IExheW91dFBvaW50JiwgYm9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQgPSBudWxscHRyKSBjb25z
dCBvdmVycmlkZTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKaW5kZXggNTg4YWYx
YTFmNzc3Mjk1MzEyOTdlY2Q5MGJjNjBiNjUzMjdmMWVhYi4uOGNiM2NiZWI2NGE0MWIxYTlhMTVh
NjhhMGUwZjM5ODY0YzE5MzM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZH
SW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUg
IlNWR0VsZW1lbnRUeXBlSGVscGVycy5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKICNp
bmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgpAQCAtNTcsMTAgKzU4LDYgQEAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlclNWR1RleHQpOwogCiBSZW5kZXJTVkdUZXh0OjpSZW5k
ZXJTVkdUZXh0KFNWR1RleHRFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQog
ICAgIDogUmVuZGVyU1ZHQmxvY2soZWxlbWVudCwgV1RGTW92ZShzdHlsZSkpCi0gICAgLCBtX25l
ZWRzUmVvcmRlcmluZyhmYWxzZSkKLSAgICAsIG1fbmVlZHNQb3NpdGlvbmluZ1ZhbHVlc1VwZGF0
ZShmYWxzZSkKLSAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkKLSAgICAsIG1fbmVl
ZHNUZXh0TWV0cmljc1VwZGF0ZShmYWxzZSkKIHsKIH0KIApAQCAtMzExLDE1ICszMDgsMjcgQEAg
c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZUZvbnRJbkFsbERlc2NlbmRhbnRzKFJlbmRlck9iamVj
dCogc3RhcnQsIFNWR1RleHRMYXlvdXQKIAogdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQog
eworICAgIGF1dG8gaXNMYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCA9IFsmXSgpIHsKKyNpZiBF
TkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50KCku
c2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpOworI2VuZGlmCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9OworCiAgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2lu
dCBsYXlvdXRDaGVja1BvaW50OwogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBMYXlv
dXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBTVkdSZW5kZXJTdXBwb3J0OjpjaGVja0ZvclNW
R1JlcGFpbnREdXJpbmdMYXlvdXQoKnRoaXMpKTsKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWlu
dGVyKCp0aGlzLCBpc0xheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkgPyBjaGVja0ZvclJlcGFp
bnREdXJpbmdMYXlvdXQoKSA6IFNWR1JlbmRlclN1cHBvcnQ6OmNoZWNrRm9yU1ZHUmVwYWludER1
cmluZ0xheW91dCgqdGhpcykpOworCisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdM
ZW5ndGhDb250ZXh0IGNoYW5nZXMKKyAgICAvLyB0ZXh0RWxlbWVudCgpLnVwZGF0ZUxlbmd0aENv
bnRleHQoKTsKIAogICAgIGJvb2wgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZh
bHNlOwotICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7Ci0gICAgICAgIG1fbG9jYWxU
cmFuc2Zvcm0gPSB0ZXh0RWxlbWVudCgpLmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKLSAgICAg
ICAgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOwotICAgICAgICB1cGRhdGVDYWNoZWRC
b3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKKyAgICBpZiAoIWlzTGF5ZXJCYXNlZFNWR0VuZ2lu
ZUVuYWJsZWQoKSkgeworICAgICAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgeworICAg
ICAgICAgICAgbV9sb2NhbFRyYW5zZm9ybSA9IHRleHRFbGVtZW50KCkuYW5pbWF0ZWRMb2NhbFRy
YW5zZm9ybSgpOworICAgICAgICAgICAgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOwor
ICAgICAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBpZiAoIWV2ZXJIYWRMYXlvdXQoKSkgewpAQCAtMzQ3LDggKzM1
NiwxNSBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiAgICAgICAgIG1fbmVlZHNQb3Np
dGlvbmluZ1ZhbHVlc1VwZGF0ZSA9IGZhbHNlOwogICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFy
aWVzSW5QYXJlbnRzID0gdHJ1ZTsKICAgICB9IGVsc2UgewotICAgICAgICBMZWdhY3lSZW5kZXJT
VkdSb290KiByb290T2JqID0gU1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KCp0
aGlzKTsKLSAgICAgICAgaWYgKG1fbmVlZHNUZXh0TWV0cmljc1VwZGF0ZSB8fCAocm9vdE9iaiAm
JiByb290T2JqLT5pc0xheW91dFNpemVDaGFuZ2VkKCkpKSB7CisgICAgICAgIGJvb2wgaXNMYXlv
dXRTaXplQ2hhbmdlZCA9IGZhbHNlOworICAgICAgICBpZiAoYXV0byogbGVnYWN5Um9vdE9iamVj
dCA9IGxpbmVhZ2VPZlR5cGU8TGVnYWN5UmVuZGVyU1ZHUm9vdD4oKnRoaXMpLmZpcnN0KCkpCisg
ICAgICAgICAgICBpc0xheW91dFNpemVDaGFuZ2VkID0gbGVnYWN5Um9vdE9iamVjdC0+aXNMYXlv
dXRTaXplQ2hhbmdlZCgpOworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAg
ICAgICBlbHNlIGlmIChhdXRvKiByb290T2JqZWN0ID0gbGluZWFnZU9mVHlwZTxSZW5kZXJTVkdS
b290PigqdGhpcykuZmlyc3QoKSkKKyAgICAgICAgICAgIGlzTGF5b3V0U2l6ZUNoYW5nZWQgPSBy
b290T2JqZWN0LT5pc0xheW91dFNpemVDaGFuZ2VkKCk7CisjZW5kaWYKKworICAgICAgICBpZiAo
bV9uZWVkc1RleHRNZXRyaWNzVXBkYXRlIHx8IGlzTGF5b3V0U2l6ZUNoYW5nZWQpIHsKICAgICAg
ICAgICAgIC8vIElmIHRoZSByb290IGxheW91dCBzaXplIGNoYW5nZWQgKGVnLiB3aW5kb3cgc2l6
ZSBjaGFuZ2VzKSBvciB0aGUgdHJhbnNmb3JtIHRvIHRoZSByb290CiAgICAgICAgICAgICAvLyBj
b250ZXh0IGhhcyBjaGFuZ2VkIHRoZW4gcmVjb21wdXRlIHRoZSBvbi1zY3JlZW4gZm9udCBzaXpl
LgogICAgICAgICAgICAgdXBkYXRlRm9udEluQWxsRGVzY2VuZGFudHModGhpcywgJm1fbGF5b3V0
QXR0cmlidXRlc0J1aWxkZXIpOwpAQCAtMzY1LDMzICszODEsNDAgQEAgdm9pZCBSZW5kZXJTVkdU
ZXh0OjpsYXlvdXQoKQogICAgIC8vIFJlZHVjZWQgdmVyc2lvbiBvZiBSZW5kZXJCbG9jazo6bGF5
b3V0QmxvY2soKSwgd2hpY2ggb25seSB0YWtlcyBjYXJlIG9mIFNWRyB0ZXh0LgogICAgIC8vIEFs
bCBpZiBicmFuY2hlcyB0aGF0IGNvdWxkIGNhdXNlIGVhcmx5IGV4aXQgaW4gUmVuZGVyQmxvY2tz
IGxheW91dEJsb2NrKCkgbWV0aG9kIGFyZSB0dXJuZWQgaW50byBhc3NlcnRpb25zLgogICAgIEFT
U0VSVCghaXNJbmxpbmUoKSk7Ci0gICAgQVNTRVJUKCFzaW1wbGlmaWVkTGF5b3V0KCkpOwogICAg
IEFTU0VSVCghc2Nyb2xsc092ZXJmbG93KCkpOwogICAgIEFTU0VSVCghaGFzQ29udHJvbENsaXAo
KSk7CiAgICAgQVNTRVJUKCFtdWx0aUNvbHVtbkZsb3coKSk7CiAgICAgQVNTRVJUKCFwb3NpdGlv
bmVkT2JqZWN0cygpKTsKLSAgICBBU1NFUlQoIW1fb3ZlcmZsb3cpOwogICAgIEFTU0VSVCghaXNB
bm9ueW1vdXNCbG9jaygpKTsKKyAgICBpZiAoIWlzTGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQo
KSkgeworICAgICAgICBBU1NFUlQoIXNpbXBsaWZpZWRMYXlvdXQoKSk7CisgICAgICAgIEFTU0VS
VCghbV9vdmVyZmxvdyk7CisgICAgfQogCiAgICAgaWYgKCFmaXJzdENoaWxkKCkpCiAgICAgICAg
IHNldENoaWxkcmVuSW5saW5lKHRydWUpOwogCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZmlu
ZCBhIHdheSB0byBvbmx5IGxheW91dCB0aGUgY2hpbGQgYm94ZXMsIGlmIG5lZWRlZC4KICAgICBG
bG9hdFJlY3Qgb2xkQm91bmRhcmllcyA9IG9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgYm9vbCBs
YXlvdXRDaGFuZ2VkID0gZXZlckhhZExheW91dCgpICYmIHNlbGZOZWVkc0xheW91dCgpOwogICAg
IEFTU0VSVChjaGlsZHJlbklubGluZSgpKTsKICAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2Fs
VG9wOwogICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxCb3R0b207CiAgICAgcmVidWlsZEZs
b2F0aW5nT2JqZWN0U2V0RnJvbUludHJ1ZGluZ0Zsb2F0cygpOwogICAgIGxheW91dElubGluZUNo
aWxkcmVuKHRydWUsIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7CiAK
KyAgICAvLyB1cGRhdGVQb3NpdGlvbkFuZE92ZXJmbG93KCkgaXMgY2FsbGVkIGJ5IFNWR1Jvb3RJ
bmxpbmVCb3gsIGFmdGVyIGZvcmNlTGF5b3V0SW5saW5lQ2hpbGRyZW4oKSByYW4sIGJlZm9yZSB0
aGlzIHBvaW50IGlzIHJlYWNoZWQuCiAgICAgaWYgKG1fbmVlZHNSZW9yZGVyaW5nKQogICAgICAg
ICBtX25lZWRzUmVvcmRlcmluZyA9IGZhbHNlOwogCi0gICAgaWYgKCF1cGRhdGVDYWNoZWRCb3Vu
ZGFyaWVzSW5QYXJlbnRzKQorICAgIGlmIChpc0xheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkp
IHsKKyAgICAgICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKTsKKyAgICAgICAgdXBkYXRlQ2FjaGVk
Qm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOyAvLyBObyBsb25nZXIgbmVlZGVkIGZvciBMQlNF
LgorICAgIH0gZWxzZSBpZiAoIXVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCiAgICAg
ICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSBvbGRCb3VuZGFyaWVzICE9IG9i
amVjdEJvdW5kaW5nQm94KCk7CiAKICAgICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2Yg
dGhpcyBjbGllbnQgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgotICAgIGlmIChldmVySGFkTGF5b3V0
KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpCisgICAgaWYgKGxheW91dENoYW5nZWQpCiAgICAgICAg
IFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKCp0aGlzKTsKIAogICAgIC8v
IElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgpAQCAtNDA0LDYgKzQy
Nyw5IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKIAogYm9vbCBSZW5kZXJTVkdUZXh0
Ojpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RB
Y3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lO
RSkKKyAgICBBU1NFUlQoIWRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5l
RW5hYmxlZCgpKTsKKyNlbmRpZgogICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQ
b2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19URVhUX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxl
KCkuZWZmZWN0aXZlUG9pbnRlckV2ZW50cygpKTsKICAgICBib29sIGlzVmlzaWJsZSA9IChzdHls
ZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlKTsKICAgICBpZiAoaXNWaXNp
YmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgewpAQCAtNDEyLDcgKzQzOCw3IEBAIGJv
b2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQg
PSB2YWx1ZU9yRGVmYXVsdChsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpKS5tYXBQ
b2ludChwb2ludEluUGFyZW50KTsKIAogICAgICAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0
Ojpwb2ludEluQ2xpcHBpbmdBcmVhKCp0aGlzLCBsb2NhbFBvaW50KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7ICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICAgICAgU1ZHSGl0VGVzdEN5Y2xlRGV0ZWN0aW9uU2NvcGUgaGl0VGVzdFNjb3BlKCp0
aGlzKTsKIApAQCAtNDI0LDYgKzQ1MCwzMyBAQCBib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdEZs
b2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQor
Ym9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0
aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAgIEFTU0VSVChkb2N1bWVudCgpLnNldHRp
bmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSk7CisgICAgYXV0byBhZGp1c3RlZExv
Y2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOworCisgICAgUG9pbnRlckV2
ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1RFWFRfSElU
VEVTVElORywgcmVxdWVzdCwgc3R5bGUoKS5wb2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNW
aXNpYmxlID0gKHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUpOwor
ICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7CisgICAgICAg
IGlmICgoaGl0UnVsZXMuY2FuSGl0U3Ryb2tlICYmIChzdHlsZSgpLnN2Z1N0eWxlKCkuaGFzU3Ry
b2tlKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpKQorICAgICAgICB8fCAoaGl0UnVsZXMu
Y2FuSGl0RmlsbCAmJiAoc3R5bGUoKS5zdmdTdHlsZSgpLmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMu
cmVxdWlyZUZpbGwpKSkgeworICAgICAgICAgICAgYXV0byBsb2NhbFBvaW50ID0gbG9jYXRpb25J
bkNvbnRhaW5lci5wb2ludCgpOworICAgICAgICAgICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3Jp
Z2luVHJhbnNsYXRpb24gPSBub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKSAtIGFkanVzdGVkTG9j
YXRpb247CisgICAgICAgICAgICBsb2NhbFBvaW50Lm1vdmUoY29vcmRpbmF0ZVN5c3RlbU9yaWdp
blRyYW5zbGF0aW9uKTsKKworICAgICAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2lu
dEluQ2xpcHBpbmdBcmVhKCp0aGlzLCBsb2NhbFBvaW50KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgIFNWR0hpdFRlc3RDeWNsZURldGVjdGlvblNjb3BlIGhp
dFRlc3RTY29wZSgqdGhpcyk7CisgICAgICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVB
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRP
ZmZzZXQsIGhpdFRlc3RBY3Rpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorI2VuZGlmCisKIFZpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdUZXh0Ojpwb3NpdGlv
bkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGVudHMsIGNvbnN0IFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCkKIHsKICAgICBMZWdhY3lSb290SW5saW5lQm94
KiByb290Qm94ID0gZmlyc3RSb290Qm94KCk7CkBAIC00NDAsMTggKzQ5Myw1MyBAQCBWaXNpYmxl
UG9zaXRpb24gUmVuZGVyU1ZHVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2lu
dCYgcG9pbnRJbkNvbnRlbgogICAgIHJldHVybiBjbG9zZXN0Qm94LT5yZW5kZXJlcigpLnBvc2l0
aW9uRm9yUG9pbnQoeyBwb2ludEluQ29udGVudHMueCgpLCBMYXlvdXRVbml0KGNsb3Nlc3RCb3gt
PnkoKSkgfSwgZnJhZ21lbnQpOwogfQogCi12b2lkIFJlbmRlclNWR1RleHQ6OmFic29sdXRlUXVh
ZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKLXsKLSAg
ICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3VuZGluZ0JveCgpLCBV
c2VUcmFuc2Zvcm1zLCB3YXNGaXhlZCkpOwotfQotCi12b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYpCit2b2lkIFJlbmRlclNW
R1RleHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQpCiB7CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50
UGhhc2U6OkZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGVj
dGlvbikKLSAgICAgICAgIHJldHVybjsKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50
UGhhc2U6OkNsaXBwaW5nTWFzayAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6TWFz
ayAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCAmJiBwYWludElu
Zm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6T3V0bGluZSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFp
bnRQaGFzZTo6U2VsZk91dGxpbmUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcGFpbnRJ
bmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykpCisgICAgICAgIHJldHVybjsKKworI2lm
IEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1bWVudCgpLnNldHRp
bmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAgICBpZiAoc3R5bGUo
KS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6SGlkZGVuIHx8IHN0eWxlKCkuZGlzcGxheSgp
ID09IERpc3BsYXlUeXBlOjpOb25lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8v
IEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgICAg
IC8vIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6c2hvdWxkUGFpbnRIaWRkZW5SZW5kZXJlcigqdGhp
cykpCisgICAgICAgIC8vICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlOjpDbGlwcGluZ01hc2spIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBb
TEJTRV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgICAgICAgICAvLyBT
VkdSZW5kZXJTdXBwb3J0OjpwYWludFNWR0NsaXBwaW5nTWFzaygqdGhpcywgcGFpbnRJbmZvKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gYWRqdXN0ZWRQ
YWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAgICAgICAgaWYgKHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpNYXNrKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcworICAgICAgICAgICAgLy8g
U1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRTVkdNYXNrKCp0aGlzLCBwYWludEluZm8sIGFkanVzdGVk
UGFpbnRPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpPdXRsaW5lIHx8IHBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlOjpTZWxmT3V0bGluZSkgeworICAgICAgICAgICAgUmVuZGVyQmxv
Y2s6OnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KHBhaW50SW5mby5jb250ZXh0KCkpOworCisgICAgICAgIGF1dG8gY29vcmRpbmF0ZVN5c3RlbU9y
aWdpblRyYW5zbGF0aW9uID0gYWRqdXN0ZWRQYWludE9mZnNldCAtIG5vbWluYWxTVkdMYXlvdXRM
b2NhdGlvbigpOworICAgICAgICBwYWludEluZm8uY29udGV4dCgpLnRyYW5zbGF0ZShjb29yZGlu
YXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24ud2lkdGgoKSwgY29vcmRpbmF0ZVN5c3RlbU9yaWdp
blRyYW5zbGF0aW9uLmhlaWdodCgpKTsKKworICAgICAgICBSZW5kZXJCbG9jazo6cGFpbnQocGFp
bnRJbmZvLCBwYWludE9mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKIAog
ICAgIFBhaW50SW5mbyBibG9ja0luZm8ocGFpbnRJbmZvKTsKICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoYmxvY2tJbmZvLmNvbnRleHQoKSk7CkBAIC00NzksNiArNTY3
LDExIEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0
CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpIGNvbnN0CiB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYg
KGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKQorICAg
ICAgICByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVJlcGFpbnRCb3Vu
ZGluZ0JveCgqdGhpcyk7CisjZW5kaWYKKwogICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IHN0
cm9rZUJvdW5kaW5nQm94KCk7CiAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWlu
dFJlY3RXaXRoUmVzb3VyY2VzKCp0aGlzLCByZXBhaW50UmVjdCk7CiAKQEAgLTQ4OCw0ICs1ODEs
MzIgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1RleHQ6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkgY29uc3QKICAgICByZXR1cm4gcmVwYWludFJlY3Q7CiB9CiAKK3ZvaWQgUmVuZGVyU1ZH
VGV4dDo6dXBkYXRlUG9zaXRpb25BbmRPdmVyZmxvdyhjb25zdCBGbG9hdFJlY3QmIGJvdW5kYXJp
ZXMpCit7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGRvY3Vt
ZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKSB7CisgICAgICAg
IGNsZWFyT3ZlcmZsb3coKTsKKworICAgICAgICBtX29iamVjdEJvdW5kaW5nQm94ID0gYm91bmRh
cmllczsKKworICAgICAgICBhdXRvIGJvdW5kaW5nUmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3Qo
bV9vYmplY3RCb3VuZGluZ0JveCk7CisgICAgICAgIHNldExvY2F0aW9uKGJvdW5kaW5nUmVjdC5s
b2NhdGlvbigpKTsKKyAgICAgICAgc2V0U2l6ZShib3VuZGluZ1JlY3Quc2l6ZSgpKTsKKworICAg
ICAgICBhdXRvIG92ZXJmbG93UmVjdCA9IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKTsK
KyAgICAgICAgaWYgKGNvbnN0IGF1dG8qIHRleHRTaGFkb3cgPSBzdHlsZSgpLnRleHRTaGFkb3co
KSkKKyAgICAgICAgICAgIHRleHRTaGFkb3ctPmFkanVzdFJlY3RGb3JTaGFkb3cob3ZlcmZsb3dS
ZWN0KTsKKworICAgICAgICBhZGRWaXN1YWxPdmVyZmxvdyhvdmVyZmxvd1JlY3QpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBhdXRvIGJvdW5kaW5nUmVjdCA9IGVuY2xv
c2luZ0xheW91dFJlY3QoYm91bmRhcmllcyk7CisgICAgc2V0TG9jYXRpb24oYm91bmRpbmdSZWN0
LmxvY2F0aW9uKCkpOworICAgIHNldFNpemUoYm91bmRpbmdSZWN0LnNpemUoKSk7CisgICAgbV9v
YmplY3RCb3VuZGluZ0JveCA9IGJvdW5kaW5nUmVjdDsKKyAgICBBU1NFUlQobV9vYmplY3RCb3Vu
ZGluZ0JveCA9PSBmcmFtZVJlY3QoKSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKaW5kZXggNDQxMjY5ODg1NzkxMzAyNDI4MmZmZjBhOGU2
NjUxYjZiN2YxY2RjNi4uNjU3NDAxNGM2OGU3OTNhZmFiY2NhNDBhZDk2MDE5YWIwNmY3YzI0MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKQEAgLTIz
LDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR0Jsb2NrLmgiCisjaW5jbHVkZSAiU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oIgog
I2luY2x1ZGUgIlNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00Miw5ICs0MywxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0NoaWxkQWxs
b3dlZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgdm9pZCBzZXROZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlKCkgeyBtX25l
ZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUgPSB0cnVlOyB9Ci0gICAgdm9pZCBzZXROZWVkc1Ry
YW5zZm9ybVVwZGF0ZSgpIG92ZXJyaWRlIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7
IH0KICAgICB2b2lkIHNldE5lZWRzVGV4dE1ldHJpY3NVcGRhdGUoKSB7IG1fbmVlZHNUZXh0TWV0
cmljc1VwZGF0ZSA9IHRydWU7IH0KLSAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIEZJWE1FOiBbTEJTRV0gT25seSBu
ZWVkZWQgZm9yIGxlZ2FjeSBTVkcgZW5naW5lLgorICAgIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1V
cGRhdGUoKSBvdmVycmlkZSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CiAKICAg
ICBzdGF0aWMgUmVuZGVyU1ZHVGV4dCogbG9jYXRlUmVuZGVyU1ZHVGV4dEFuY2VzdG9yKFJlbmRl
ck9iamVjdCYpOwogICAgIHN0YXRpYyBjb25zdCBSZW5kZXJTVkdUZXh0KiBsb2NhdGVSZW5kZXJT
VkdUZXh0QW5jZXN0b3IoY29uc3QgUmVuZGVyT2JqZWN0Jik7CkBAIC01OCw4ICs2MCwxNCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzdWJ0cmVlU3R5bGVEaWRDaGFuZ2UoUmVuZGVyU1ZHSW5saW5lVGV4
dCopOwogICAgIHZvaWQgc3VidHJlZVRleHREaWRDaGFuZ2UoUmVuZGVyU1ZHSW5saW5lVGV4dCop
OwogCi0gICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZnJhbWVSZWN0KCk7IH0KLSAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBj
b25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9CisgICAgRmxvYXRSZWN0IHN0cm9r
ZUJvdW5kaW5nQm94KCkgY29uc3QgZmluYWw7CisgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCkgY29uc3QgZmluYWw7CisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURf
U1ZHX0VOR0lORSkKKyAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQo
KSBjb25zdCB7IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlzdWFs
T3ZlcmZsb3dSZWN0KCp0aGlzKTsgfQorI2VuZGlmCisgICAgdm9pZCB1cGRhdGVQb3NpdGlvbkFu
ZE92ZXJmbG93KGNvbnN0IEZsb2F0UmVjdCYpOwogCiBwcml2YXRlOgogICAgIHZvaWQgZ3JhcGhp
Y3NFbGVtZW50KCkgY29uc3QgPSBkZWxldGU7CkBAIC02OCwyOCArNzYsMzggQEAgcHJpdmF0ZToK
ICAgICBib29sIGlzU1ZHVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAog
ICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBvdmVycmlkZTsK
LSAgICBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbikg
b3ZlcnJpZGU7CisgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgb3Zl
cnJpZGU7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0
UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopIG92ZXJyaWRlOwogCi0gICAg
Ym9vbCByZXF1aXJlc0xheWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2b2lkIGxheW91dCgpIG92ZXJyaWRlOworICAgIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0
IG92ZXJyaWRlCisgICAgeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAg
ICAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVk
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQogCi0gICAgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jiwg
Ym9vbCogd2FzRml4ZWQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgbGF5b3V0KCkgb3ZlcnJp
ZGU7CiAKICAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIG92ZXJyaWRlOwogCisgICAgLy8gRklY
TUU6IFtMQlNFXSBCZWdpbiBjb2RlIG9ubHkgbmVlZGVkIGZvciBsZWdhY3kgU1ZHIGVuZ2luZS4K
KyAgICBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbikg
b3ZlcnJpZGU7CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNm
b3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQogICAgIEFm
ZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
bG9jYWxUcmFuc2Zvcm07IH0KKyAgICAvLyBGSVhNRTogW0xCU0VdIEVuZCBjb2RlIG9ubHkgbmVl
ZGVkIGZvciBsZWdhY3kgU1ZHIGVuZ2luZS4KIAogICAgIGJvb2wgc2hvdWxkSGFuZGxlU3VidHJl
ZU11dGF0aW9ucygpIGNvbnN0OwogCi0gICAgYm9vbCBtX25lZWRzUmVvcmRlcmluZyA6IDE7Ci0g
ICAgYm9vbCBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUgOiAxOwotICAgIGJvb2wgbV9u
ZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzVGV4dE1ldHJpY3NVcGRh
dGUgOiAxOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOworICAgIGJvb2wg
bV9uZWVkc1Jlb3JkZXJpbmcgOiAxIHsgZmFsc2UgfTsKKyAgICBib29sIG1fbmVlZHNQb3NpdGlv
bmluZ1ZhbHVlc1VwZGF0ZSA6IDEgeyBmYWxzZSB9OworICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9y
bVVwZGF0ZSA6IDEgeyB0cnVlIH07IC8vIEZJWE1FOiBbTEJTRV0gT25seSBuZWVkZWQgZm9yIGxl
Z2FjeSBTVkcgZW5naW5lLgorICAgIGJvb2wgbV9uZWVkc1RleHRNZXRyaWNzVXBkYXRlIDogMSB7
IGZhbHNlIH07CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07IC8vIEZJWE1F
OiBbTEJTRV0gT25seSBuZWVkZWQgZm9yIGxlZ2FjeSBTVkcgZW5naW5lLgogICAgIFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzQnVpbGRlciBtX2xheW91dEF0dHJpYnV0ZXNCdWlsZGVyOwogICAgIFZl
Y3RvcjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyo+IG1fbGF5b3V0QXR0cmlidXRlczsKKyAgICBG
bG9hdFJlY3QgbV9vYmplY3RCb3VuZGluZ0JveDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGlu
ZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3gu
Y3BwCmluZGV4IDljNmMwOTgwMTM3NmJjZDM3ZGRmZjlhMzkwYTNlYjAzNjY5NDM5ZjMuLmY4MjMx
NWQ1ZjY2ZGFkODc2ZTdkMTJlNzk3NTA2NThiMjQwMmE0ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcApAQCAtNDYsMjEgKzQ2LDM0
IEBAIFNWR1Jvb3RJbmxpbmVCb3g6OlNWR1Jvb3RJbmxpbmVCb3goUmVuZGVyU1ZHVGV4dCYgcmVu
ZGVyU1ZHVGV4dCkKIHsKIH0KIAotUmVuZGVyU1ZHVGV4dCYgU1ZHUm9vdElubGluZUJveDo6cmVu
ZGVyU1ZHVGV4dCgpCitSZW5kZXJTVkdUZXh0JiBTVkdSb290SW5saW5lQm94OjpyZW5kZXJTVkdU
ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHVGV4dD4oYmxvY2tG
bG93KCkpOwogfQogCi12b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQsIExheW91
dFVuaXQpCit2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5
b3V0VW5pdCBsaW5lQm90dG9tKQogewogICAgIEFTU0VSVChwYWludEluZm8ucGhhc2UgPT0gUGFp
bnRQaGFzZTo6Rm9yZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6U2Vs
ZWN0aW9uKTsKICAgICBBU1NFUlQoIXBhaW50SW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxl
ZCgpKTsKIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChyZW5k
ZXJlcigpLmRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgp
KSB7CisgICAgICAgIGF1dG8gb3ZlcmZsb3dSZWN0KHZpc3VhbE92ZXJmbG93UmVjdChsaW5lVG9w
LCBsaW5lQm90dG9tKSk7CisgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3Qp
OworICAgICAgICBvdmVyZmxvd1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKKworICAgICAgICBp
ZiAoIXBhaW50SW5mby5yZWN0LmludGVyc2VjdHMob3ZlcmZsb3dSZWN0KSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYKKwogICAgIGJvb2wgaXNQcmludGluZyA9IHJlbmRlclNW
R1RleHQoKS5kb2N1bWVudCgpLnByaW50aW5nKCk7CiAgICAgYm9vbCBoYXNTZWxlY3Rpb24gPSAh
aXNQcmludGluZyAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
U3RhdGU6Ok5vbmU7CiAgICAgYm9vbCBzaG91bGRQYWludFNlbGVjdGlvbkhpZ2hsaWdodCA9ICEo
cGFpbnRJbmZvLnBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6U2tpcFNlbGVj
dGlvbkhpZ2hsaWdodCkpOwogCiAgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5m
byk7CisgICAgY2hpbGRQYWludEluZm8udXBkYXRlU3VidHJlZVBhaW50Um9vdEZvckNoaWxkcmVu
KCZyZW5kZXJlcigpKTsKKwogICAgIGlmIChoYXNTZWxlY3Rpb24gJiYgc2hvdWxkUGFpbnRTZWxl
Y3Rpb25IaWdobGlnaHQpIHsKICAgICAgICAgZm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewogICAgICAgICAgICAgaWYg
KGlzPFNWR0lubGluZVRleHRCb3g+KCpjaGlsZCkpCkBAIC03MCw2ICs4MywxNyBAQCB2b2lkIFNW
R1Jvb3RJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQ
b2ludCYgcGFpbnRPZmZzZQogICAgICAgICB9CiAgICAgfQogCisjaWYgRU5BQkxFKExBWUVSX0JB
U0VEX1NWR19FTkdJTkUpCisgICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5zZXR0aW5ncygp
LmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgZm9yIChhdXRvKiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewor
ICAgICAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpLmlzVGV4dCgpIHx8ICFjaGlsZC0+Ym94
TW9kZWxPYmplY3QoKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICBj
aGlsZC0+cGFpbnQoY2hpbGRQYWludEluZm8sIHBhaW50T2Zmc2V0LCBsaW5lVG9wLCBsaW5lQm90
dG9tKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKwogICAg
IFNWR1JlbmRlcmluZ0NvbnRleHQgcmVuZGVyaW5nQ29udGV4dChyZW5kZXJTVkdUZXh0KCksIHBh
aW50SW5mbywgU1ZHUmVuZGVyaW5nQ29udGV4dDo6U2F2ZUdyYXBoaWNzQ29udGV4dCk7CiAgICAg
aWYgKHJlbmRlcmluZ0NvbnRleHQuaXNSZW5kZXJpbmdQcmVwYXJlZCgpKSB7CiAgICAgICAgIGZv
ciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
T25MaW5lKCkpCkBAIC0xNzAsOSArMTk0LDcgQEAgdm9pZCBTVkdSb290SW5saW5lQm94OjpsYXlv
dXRSb290Qm94KGNvbnN0IEZsb2F0UmVjdCYgY2hpbGRSZWN0KQogICAgIFJlbmRlclNWR1RleHQm
IHBhcmVudEJsb2NrID0gcmVuZGVyU1ZHVGV4dCgpOwogCiAgICAgLy8gRmluYWxseSwgYXNzaWdu
IHRoZSByb290IGJsb2NrIHBvc2l0aW9uLCBub3cgdGhhdCBhbGwgY29udGVudCBpcyBsYWlkIG91
dC4KLSAgICBMYXlvdXRSZWN0IGJvdW5kaW5nUmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QoY2hp
bGRSZWN0KTsKLSAgICBwYXJlbnRCbG9jay5zZXRMb2NhdGlvbihib3VuZGluZ1JlY3QubG9jYXRp
b24oKSk7Ci0gICAgcGFyZW50QmxvY2suc2V0U2l6ZShib3VuZGluZ1JlY3Quc2l6ZSgpKTsKKyAg
ICBwYXJlbnRCbG9jay51cGRhdGVQb3NpdGlvbkFuZE92ZXJmbG93KGNoaWxkUmVjdCk7CiAKICAg
ICAvLyBQb3NpdGlvbiBhbGwgY2hpbGRyZW4gcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBibG9jay4K
ICAgICBmb3IgKGF1dG8qIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dE9uTGluZSgpKSB7CkBAIC0xODcsNiArMjA5LDggQEAgdm9pZCBTVkdSb290SW5saW5l
Qm94OjpsYXlvdXRSb290Qm94KGNvbnN0IEZsb2F0UmVjdCYgY2hpbGRSZWN0KQogICAgIHNldFko
MCk7CiAgICAgc2V0TG9naWNhbFdpZHRoKGNoaWxkUmVjdC53aWR0aCgpKTsKICAgICBzZXRMb2dp
Y2FsSGVpZ2h0KGNoaWxkUmVjdC5oZWlnaHQoKSk7CisKKyAgICBhdXRvIGJvdW5kaW5nUmVjdCA9
IGVuY2xvc2luZ0xheW91dFJlY3QoY2hpbGRSZWN0KTsKICAgICBzZXRMaW5lVG9wQm90dG9tUG9z
aXRpb25zKDAsIGJvdW5kaW5nUmVjdC5oZWlnaHQoKSwgMCwgYm91bmRpbmdSZWN0LmhlaWdodCgp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290
SW5saW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVC
b3guaAppbmRleCAwZDE2MjY5ZWI1YzE3MzdhMGYzMTJjN2RlYWE0OTI5ODcxYTQ2MWQ2Li5hZjFi
MTNlYWQ1ZGFiMTE0ZjEwZjA2ZmJhNmVlMmU3YTdkNTljNDZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaApAQCAtMzUsOCArMzUsNiBAQCBj
bGFzcyBTVkdSb290SW5saW5lQm94IGZpbmFsIDogcHVibGljIExlZ2FjeVJvb3RJbmxpbmVCb3gg
ewogcHVibGljOgogICAgIGV4cGxpY2l0IFNWR1Jvb3RJbmxpbmVCb3goUmVuZGVyU1ZHVGV4dCYp
OwogCi0gICAgUmVuZGVyU1ZHVGV4dCYgcmVuZGVyU1ZHVGV4dCgpOwotCiAgICAgZmxvYXQgdmly
dHVhbExvZ2ljYWxIZWlnaHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvZ2ljYWxIZWln
aHQ7IH0KICAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHQoZmxvYXQgaGVpZ2h0KSB7IG1fbG9naWNh
bEhlaWdodCA9IGhlaWdodDsgfQogCkBAIC00OSw2ICs0Nyw4IEBAIHB1YmxpYzoKICAgICBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJv
dHRvbSwgSGl0VGVzdEFjdGlvbikgZmluYWw7CiAKIHByaXZhdGU6CisgICAgUmVuZGVyU1ZHVGV4
dCYgcmVuZGVyU1ZHVGV4dCgpIGNvbnN0OworCiAgICAgYm9vbCBpc1NWR1Jvb3RJbmxpbmVCb3go
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdm9pZCByZW9yZGVyVmFsdWVM
aXN0c1RvTG9naWNhbE9yZGVyKFZlY3RvcjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyo+Jik7CiAg
ICAgdm9pZCBsYXlvdXRDaGFyYWN0ZXJzSW5UZXh0Qm94ZXMoTGVnYWN5SW5saW5lRmxvd0JveCos
IFNWR1RleHRMYXlvdXRFbmdpbmUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAppbmRleCA0
MTQ4MTUwODVkYmNhYTM5NGRjMTFmOTA1MGVkMzhjNzBiODE0YjUzLi4yODYyZDM2MDg5MTAzMDJm
MWRkZWVlN2ZlMWIyYzhhZGQ5N2Q0ZDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCkBA
IC01MzEsNyArNTMxLDcgQEAgc3RhdGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxBdG9tU3RyaW5nPiBjcmVhdGVTVkdMYXllckF3YXJlRWwKICAgICAvLyBMaXN0IG9m
IGFsbCBTVkcgZWxlbWVudHMgd2hvc2UgcmVuZGVyZXJzIHN1cHBvcnQgdGhlIGxheWVyIGF3YXJl
IGxheW91dCAvIHBhaW50aW5nIC8gaGl0LXRlc3RpbmcgbW9kZSAoJ0xCU0UtbW9kZScpLgogICAg
IHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OwotICAgIGZvciAoYXV0byYgdGFnIDogeyBn
VGFnLmdldCgpLCByZWN0VGFnLmdldCgpIH0pCisgICAgZm9yIChhdXRvJiB0YWcgOiB7IGdUYWcu
Z2V0KCksIHJlY3RUYWcuZ2V0KCksIHRleHRUYWcuZ2V0KCkgfSkKICAgICAgICAgc2V0LmFkZCh0
YWcubG9jYWxOYW1lKCkpOwogICAgIHJldHVybiBzZXQ7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458313</attachid>
            <date>2022-04-25 16:48:16 -0700</date>
            <delta_ts>2022-04-25 17:09:22 -0700</delta_ts>
            <desc>Patch, v1 (includes patch from bug 239717)</desc>
            <filename>bug-239743-20220425164815.patch</filename>
            <type>text/plain</type>
            <size>82638</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzMzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMyOTgxNjY4ZTIxMjRh
ZTIxNGJhNzE2NjllZTg2ZWEyOTUxYjA5Ni4uNzljNjgzZTY3MzAxNmYxZGEzNzBhODhkYmEwODJl
MWMwYTZjZjU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OCBAQAorMjAyMi0wNC0yNSAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQWN0aXZhdGUgdGV4dCByZW5kZXJpbmcsIGJ5IHJlLXVzaW5nIFJlbmRlclNWR1RleHQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTc0MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkYXB0IFJlbmRl
clNWR1RleHQgdG8gYmUgdXNhYmxlIGF0IHRoZSBzYW1lIHRpbWUgZnJvbSBsZWdhY3kgU1ZHIGVu
Z2luZSAoYXMKKyAgICAgICAgaXQgaXMgcmlnaHQgbm93KSBhbmQgZnJvbSBMQlNFLiBUaGlzIHJl
cXVpcmVzIG1pbmltYWwgZWZmb3J0LCBzaW5jZSBSZW5kZXJTVkdUZXh0CisgICAgICAgIGFscmVh
ZHkgaW5oZXJpdGVkIGZyb20gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCwgc28gdGhlcmUncyBubyBu
ZWVkIGZvciB0aGUgY3JlYXRpb24KKyAgICAgICAgb2YgTGVnYWN5UmVuZGVyU1ZHVGV4dCAvIFJl
bmRlclNWR1RleHQgYXMgc2VwYXJhdGVkIGxlZ2FjeS9MQlNFIGltcGxlbWVudGF0aW9ucy4KKwor
ICAgICAgICBNb3N0IFNWRyAxLjEgPHRleHQ+IHRlc3RjYXNlcyBhbHJlYWR5IHBhc3Mgb3V0IG9m
IHRoZSBib3ggd2l0aCB0aGlzIGNoYW5nZS4KKyAgICAgICAgVGhlIG5leHQgcGF0Y2ggYWZ0ZXIg
dGV4dCBzdXBwb3J0IHdpbGwgYWRkIGEgbmV3ICdtYWNvcy13azItbGJzZS14eHgnIHNwZWNpZmlj
CisgICAgICAgIHBsYXRmb3JtIGJhc2VsaW5lLCBzbyB0aGF0IHdlIGNhbiBydW4gdGVzdHMgTEJT
RSBhZ2FpbnQgaXNlbGYgKGZpbmFsbHkgd2UgY2FuCisgICAgICAgIGluY2x1ZGUgdGhlIHByb2dy
ZXNzaW9ucyBpbiB0aGUgZm9ybSBvZiBUZXN0RXhwZWN0YXRpb24gZmlsZSBjaGFuZ2VzLCBvbmNl
IGEgY2VydGFpbgorICAgICAgICBwYXRjaCBpbXBsZW1lbnRzIGEgbmV3IGZlYXR1cmUgaW4gTEJT
RS4gVGhpcyBtYWtlcyBzZW5zZSBub3cgYXMgZW5vdWdoIGlzIHVwc3RyZWFtZWQKKyAgICAgICAg
dGhhdCBhIGNvbnNpZGVyYWJsZSBhbW91bnQgb2YgdGhlIFNWRyAxLjEgdGVzdHN1aXRlIGFscmVh
ZHkgcGFzc2VzIHBpeGVsIHBlcmZlY3QuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0
ZXN0cywgbm8gY2hhbmdlIGluIGJlaGF2aW91ci4gKEhvd2V2ZXIgdGVzdGFiaWxpdHkgZm9yIExC
U0UgaXMgcmVhZHkgc29vbiEpLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9k
ZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6
Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdDb250YWluZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0SXNSZWxheW91
dEJvdW5kYXJ5KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jsb2NrOjp1cGRhdGVGcm9tU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmFic29sdXRlUXVhZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0Jsb2NrOjpjb21wdXRlT3ZlcmZsb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHQmxvY2s6OmNsaXBwZWRPdmVyZmxvd1JlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jsb2NrOjpjb21wdXRlRmxvYXRW
aXNpYmxlUmVjdEluQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R0Jsb2NrOjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR0Jsb2NrOjpvZmZzZXRGcm9tQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR0Jsb2NrOjpub2RlQXRQb2ludCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpSZW5k
ZXJTVkdUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmxheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1RleHQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Rl
eHQ6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1RleHQ6OnVwZGF0ZVBvc2l0aW9uQW5kT3ZlcmZsb3cpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVRdWFkcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJ
bmxpbmVCb3g6OnJlbmRlclNWR1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9v
dElubGluZUJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6
bGF5b3V0Um9vdEJveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpyZW5k
ZXJTVkdUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxp
bmVCb3guaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVTVkdMYXllckF3YXJlRWxlbWVudFNldCk6CisKKzIwMjItMDQtMjUgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0xCU0VdIEZp
eCBvcmlnaW4gb2YgdHJhbnNmb3JtYXRpb25zIGluIFNWRworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IHRoZSBtYWpvcml0eSBvZiBTVkcgdHJhbnNm
b3JtIGlzc3VlcyBpbiBMQlNFLiB3ZWJraXQub3JnL2IvMjM3NzExIGxhaWQgdGhlIGdyb3VuZHdv
cmsgZm9yIFNWRworICAgICAgICB0cmFuc2Zvcm1zIGluIExCU0UsIGhvd2V2ZXIgdGhlcmUgYXJl
IHN0aWxsIGlzc3VlczoKKworICAgICAgICAtIFNWRyB0cmFuc2Zvcm1zIHNwZWNpZmllZCBhbG9u
ZSBvbiBTVkcgZWxlbWVudHMsIHcvbyBhbnkgYWRkaXRpb25hbCBzdHlsZS9wZXJzcGVjdGl2ZSBy
ZWxhdGVkIHByb3BlcnR5CisgICAgICAgICAgc3VjaCBhcyB0cmFuc2Zvcm0tYm94IC8gdHJhbnNm
b3JtLW9yaWdpbiAvIC4uLiBkbyBub3QgdHJpZ2dlciBsYXllciBjcmVhdGlvbiwgZml4IGJ5IGFk
YXB0aW5nIFN0eWxlQWRqdXN0ZXIuCisKKyAgICAgICAgLSBTd2l0Y2hpbmcgb24vb2ZmIHRyYW5z
Zm9ybXMgZm9yIGEgU1ZHIGVsZW1lbnQsIHdhcyBub3QgdHJhY2tpbmcgdXBkYXRlcyB0byBib3Ro
ICdIYXNTVkdUcmFuc2Zvcm0nIGFuZAorICAgICAgICAgICdIYXNUcmFuc2Zvcm1SZWxhdGVkUHJv
cGVydHknIGZsYWdzIGNvcnJlY3RseSwgZml4IHRoYXQgYnkgaW50cm9kdWNpbmcgYW4gJ3VwZGF0
ZUhhc1NWR1RyYW5zZm9ybUZsYWdzJyBoZWxwZXIuCisKKyAgICAgICAgLSBNb2RpZnkgU1ZHQ29u
dGFpbmVyTGF5b3V0IHRvIGF2b2lkIGEgZGVwZW5kZW5jeSBvbiB0aGUgY2hpbGRyZW4gdHJhbnNm
b3JtYXRpb25zIHdoZW4gY29tcHV0aW5nIGNvbnRhaW5lcgorICAgICAgICAgIGJvdW5kYXJpZXMu
IEluIHRoZSBsZWdhY3kgZW5naW5lLCB3ZSBhbHdheXMgaGF2ZSB0byBtYXJrIHRoZSB3aG9sZSBh
bmNlc3RvciBjaGFpbiBhcyAnbmVlZCB0byByZWNvbXB1dGUgYm91bmRhcmllcycKKyAgICAgICAg
ICBhbmQgaW52b2tpbmcgYSByZS1sYXlvdXQsIHRvIHBlcmZvcm0gdGhlIHJlY29tcHV0YXRpb24u
IFRoaXMgY2hhbmdlIGF2b2lkcyB0aGUgaW52YWxpZGF0aW9uIG9mIHRoZSB3aG9sZSBhbmNlc3Rv
cgorICAgICAgICAgIGNoYWluLCB3aGVuIGFuIGVsZW1lbnRzIHRyYW5zZm9ybSBjaGFuZ2VzIGlu
IGEgbm9uLWFjY2VsZXJhdGVkIHdheSAoZS5nLiBTVkdUcmFuc2Zvcm1MaXN0IG1hbmlwdWxhdGlv
biwgU01JTAorICAgICAgICAgIDxhbmltYXRlVHJhbnNmb3JtPiAvIDxhbmltYXRlPiAvIDxzZXQ+
KS4gSW4gQ1NTIHRyYW5zZm9ybWF0aW9ucyBkbyBub3QgYWZmZWN0IGxheW91dCwgb25seSBoaXQt
dGVzdGluZyBhbmQgcGFpbnRpbmcuCisKKyAgICAgICAgICAtPiBTVkcvQ1NTIHRyYW5zZm9ybXMg
YXBwbGllZCBvbiBTVkcgZWxlbWVudHMgaXMgY29uY2VwdHVhbGx5IGVxdWl2YWxlbnQgdG8gQ1NT
IHRyYW5zZm9ybWF0aW9ucyBvbiBDU1MgYm94ZXMgbm93LgorICAgICAgICAgICAgIFRyYW5zZm9y
bWF0aW9uIGNoYW5nZXMgbm8gbG9uZ2VyIGFmZmVjdCB0aGUgJ2ludGVybmFsIGdlb21ldHJ5JyAo
b2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zKCkpLgorICAgICAgICAgICAg
IGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpIC8gbm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkg
YXJlIGNvbXB1dGVkIHVzaW5nIHRoZSAnaW50ZXJuYWwgZ2VvbWV0cnknIGFuZCB1c2VkCisgICAg
ICAgICAgICAgdGhyb3VnaG91dCBsYXlvdXQuCisKKyAgICAgICAgICBUaGlzIGF2b2lkcyBtb3N0
IG9mIHRoZSBSZW5kZXJMYXllciAvIFJlbmRlckxheWVyQmFja2luZyBzcGVjaWZpYyBjaGFuZ2Vz
IHRoYXQgd2VyZSBwcmVzZW50IGluIHRoZSBkb3duc3RyZWFtCisgICAgICAgICAgTEJTRSBpbXBs
ZW1lbnRhdGlvbiwgd2hpbGUgYWxzbyBzb2x2aW5nIGFuIGltcG9ydGFudCBkZXNpZ24gaXNzdWU6
IG5vIGJhY2stc3BsYXNoIGZyb20gY2hpbGRyZW4gdG8gcGFyZW50cy4KKyAgICAgICAgICBMYXJn
ZSwgZGVlcCBuZXN0ZWQgZG9jdW1lbnRzIC0tIGFzIHNlZW4gaW4gdGhlIHdpbGQgLS0gd2lsbCBi
ZW5lZml0IHRoZSBtb3N0LCBhdm9pZGluZyB0aGUgZnJlcXVlbnQgYW5jZXN0b3IKKyAgICAgICAg
ICB3YWxrcyB0byBtYXJrIHRoZSBjb250YWluaW5nIGJsb2NrIC8gcGFyZW50IGhpZXJhY2h5IGZv
ciByZS1sYXlvdXQuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cywgbm8gY2hh
bmdlIGluIGJlaGF2aW91ci4gKEhvd2V2ZXIgdGVzdGFiaWxpdHkgZm9yIExCU0UgaXMgcmVhZHkg
c29vbiEpLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVmZXJlbmNlQm94UmVjdCBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpSZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpjYW5DcmVhdGVTdGFja2lu
Z0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFw
cGx5aW5nVHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZW5kZXJlckxvY2F0aW9uIGNvbnN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJblNW
R0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0Ojp1cGRhdGVIYXNTVkdUcmFuc2Zvcm1GbGFncyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9k
ZWxPYmplY3Q6Om5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2V0Q3VycmVu
dFNWR0xheW91dExvY2F0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om9iamVjdEJvdW5kaW5nQm94V2l0aG91
dFRyYW5zZm9ybWF0aW9ucyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0Q2hpbGRyZW4p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVs
T2JqZWN0Ojp1cGRhdGVGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVs
T2JqZWN0OjpjdXJyZW50U1ZHTGF5b3V0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0Q3VycmVudFNWR0xheW91dFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmZyYW1lUmVjdEVxdWl2YWxlbnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFwcGx5VG9wTGVmdExv
Y2F0aW9uT2Zmc2V0RXF1aXZhbGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdNb2RlbE9iamVjdDo6bGF5b3V0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TGF5b3V0UmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TGF5b3V0TG9jYXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnBhaW50aW5n
TG9jYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmxheW91dExvY2F0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRMb2NhdGlvbk9mZnNldCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bGF5b3V0U2l6
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojp1cGRhdGVGcm9tU3R5bGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmxheW91
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6dXBkYXRlRnJvbVN0eWxlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6aGFuZGxlUm9vdE9y
Q29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0JvdW5kaW5nQm94Q29tcHV0YXRp
b246OmNvbXB1dGVWaXN1YWxPdmVyZmxvd1JlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
U1ZHQ29udGFpbmVyTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NvbnRhaW5lckxh
eW91dDo6cG9zaXRpb25DaGlsZHJlblJlbGF0aXZlVG9Db250YWluZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQ29udGFpbmVyTGF5b3V0Ojp2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5
KToKKyAgICAgICAgKFdlYkNvcmU6OmxheW91dExvY2F0aW9uRnJvbVJlbmRlcmVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldExheW91dExvY2F0aW9uRm9yUmVuZGVyZXIpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0Lmg6CisgICAg
ICAgICogc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
QWRqdXN0ZXI6OmFkanVzdCBjb25zdCk6CisKIDIwMjItMDQtMjUgIERldmluIFJvdXNzbyAgPGRy
b3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlcXVlc3QgaW50ZXJj
ZXB0aW9uIHNob3VsZCBub3QgYmUgZ3VhcmRlZCBiYXNlZCBvbiBzZXJ2aWNlIHdvcmtlcnMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRleCBiNzZlMTgxZTZh
MjAwZDcwOGNmODQ2NGY1MGQ4MGU1MGIwM2UxYWNhLi42ODBjZTVjNzZjYTZhZDZhMzdjYWE3M2Iw
YTliNWNhMGEwYmViMmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwCkBAIC0yNDE4LDIxICsyNDE4LDQzIEBAIEZsb2F0UmVjdCBSZW5kZXJFbGVtZW50Ojpy
ZWZlcmVuY2VCb3hSZWN0KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKICAgICBpZiAoIWlzPFNW
R0VsZW1lbnQ+KGVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiB7IH07CiAKKyAgICBhdXRvIGFs
aWduUmVmZXJlbmNlQm94ID0gWyZdKEZsb2F0UmVjdCByZWZlcmVuY2VCb3gpIHsKKyAgICAgICAg
Ly8gVGhlIENTUyBib3JkZXJCb3hSZWN0KCkgaXMgZGVmaW5lZCB0byBzdGFydCBhdCBhbiBvcmln
aW4gb2YgKDAsIDApLgorICAgICAgICAvLyBBIHBvc3NpYmxlIHNoaWZ0IG9mIGEgQ1NTIGJveCAo
ZS5nLiBkdWUgdG8gbm9uLXN0YXRpYyBwb3NpdGlvbiArIHRvcC9sZWZ0IHByb3BlcnRpZXMpCisg
ICAgICAgIC8vIGRvZXMgbm90IGVmZmVjdCB0aGUgYm9yZGVyQm94UmVjdCgpIGxvY2F0aW9uLiBU
aGUgbG9jYXRpb24gaW5mb3JtYXRpb24KKyAgICAgICAgLy8gaXMgcHJvcGFnYXRlZCB1cG9uIHBh
aW50IHRpbWUsIGUuZy4gdmlhICdwYWludE9mZnNldCcgd2hlbiBjYWxsaW5nIFJlbmRlck9iamVj
dDo6cGFpbnQoKSwKKyAgICAgICAgLy8gb3IgYnkgYWx0ZXJpbmcgdGhlIFJlbmRlckxheWVyIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRvIGluY2x1ZGUgdGhlICdvZmZzZXRGcm9tQW5jZXN0b3InCisg
ICAgICAgIC8vIHJpZ2h0IGluIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIHdoZW4gQ1NTIHRy
YW5zZm9ybWF0aW9ucyBhcmUgcHJlc2VudCAoc2VlIFJlbmRlckxheWVyCisgICAgICAgIC8vIHBh
aW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKCkgZm9yIGRldGFpbHMpLgorICAgICAgICAvLwor
ICAgICAgICAvLyBUbyBtaW1pYyB0aGUgZXhwZWN0YXRpb24gZm9yIFNWRywgJ2ZpbGwtYm94JyBt
dXN0IGJlaGF2ZSB0aGUgc2FtZTogaWYgd2UnZCBpbmNsdWRlCisgICAgICAgIC8vIHRoZSAncmVm
ZXJlbmNlQm94JyBsb2NhdGlvbiBpbiB0aGUgcmV0dXJuZWQgcmVjdCwgd2UnZCBhcHBseSB0aGUg
KHgsIHkpIGxvY2F0aW9uCisgICAgICAgIC8vIGluZm9ybWF0aW9uIGZvciB0aGUgU1ZHIHJlbmRl
cmVyIHR3aWNlLiBXZSB3b3VsZCBzaGlmdCB0aGUgJ3RyYW5zZm9ybS1vcmlnaW4nIGJ5ICh4LCB5
KQorICAgICAgICAvLyBhbmQgYXQgdGhlIHNhbWUgdGltZSBhbHRlciB0aGUgQ1RNIGluIFJlbmRl
ckxheWVyOjpwYWludExheWVyQnlBcHBseWluZ1RyYW5zZm9ybSgpIGJ5CisgICAgICAgIC8vIGlu
Y2x1ZGluZyBhIHRyYW5zbGF0aW9uIHRvIHRoZSBlbmNsb3NpbmcgdHJhbnNmb3JtZWQgYW5jZXN0
b3IgKCdvZmZzZXRGcm9tQW5jZXN0b3InKS4KKyAgICAgICAgLy8gQXZvaWQgdGhhdCwgYW5kIG1v
dmUgYnkgLW5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpLgorI2lmIEVOQUJMRShMQVlFUl9CQVNF
RF9TVkdfRU5HSU5FKQorICAgICAgICBpZiAoaXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSAmJiAh
aXNTVkdSb290KCkgJiYgZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVF
bmFibGVkKCkpCisgICAgICAgICAgICByZWZlcmVuY2VCb3gubW92ZUJ5KC1kb3duY2FzdDxSZW5k
ZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkpOwor
I2VuZGlmCisgICAgICAgIHJldHVybiByZWZlcmVuY2VCb3g7CisgICAgfTsKKwogICAgIHN3aXRj
aCAoYm94VHlwZSkgewogICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm94TWlzc2luZzoKICAgICBjYXNl
IENTU0JveFR5cGU6OkNvbnRlbnRCb3g6CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpQYWRkaW5nQm94
OgogICAgIGNhc2UgQ1NTQm94VHlwZTo6RmlsbEJveDoKLSAgICAgICAgcmV0dXJuIG9iamVjdEJv
dW5kaW5nQm94KCk7CisgICAgICAgIHJldHVybiBhbGlnblJlZmVyZW5jZUJveChvYmplY3RCb3Vu
ZGluZ0JveCgpKTsKICAgICBjYXNlIENTU0JveFR5cGU6OkJvcmRlckJveDoKICAgICBjYXNlIENT
U0JveFR5cGU6Ok1hcmdpbkJveDoKICAgICBjYXNlIENTU0JveFR5cGU6OlN0cm9rZUJveDoKLSAg
ICAgICAgcmV0dXJuIHN0cm9rZUJvdW5kaW5nQm94KCk7CisgICAgICAgIHJldHVybiBhbGlnblJl
ZmVyZW5jZUJveChzdHJva2VCb3VuZGluZ0JveCgpKTsKICAgICBjYXNlIENTU0JveFR5cGU6OlZp
ZXdCb3g6CiAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW06IENhY2hlIHRoZSBpbW11
dGFibGUgU1ZHTGVuZ3RoQ29udGV4dCBwZXIgU1ZHRWxlbWVudCwgdG8gYXZvaWQgdGhlIHJlcGVh
dGVkIFJlbmRlclNWR1Jvb3Qgc2l6ZSBxdWVyaWVzIGluIGRldGVybWluZVZpZXdwb3J0KCkuCiAg
ICAgICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemU7CiAgICAgICAgIFNWR0xlbmd0aENvbnRleHQo
ZG93bmNhc3Q8U1ZHRWxlbWVudD4oZWxlbWVudCgpKSkuZGV0ZXJtaW5lVmlld3BvcnQodmlld3Bv
cnRTaXplKTsKLSAgICAgICAgcmV0dXJuIHsgeyB9LCB2aWV3cG9ydFNpemUgfTsKKyAgICAgICAg
cmV0dXJuIGFsaWduUmVmZXJlbmNlQm94KHsgeyB9LCB2aWV3cG9ydFNpemUgfSk7CiAgICAgfQog
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAppbmRleCBjMmRlMGI2ZDVmZDZmZDgyMTAyZjcwYmNjYzE5YmE3NjkzZGFlYzY3
Li45MDM5ZDExMjRhZTllMzVlOTJhZjU0ZDdjYTMwZmE5ZmE5M2RiNjkwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTMwMiw5ICszMDIsOSBAQCBzdGF0aWMg
U2Nyb2xsaW5nU2NvcGUgbmV4dFNjcm9sbGluZ1Njb3BlKCkKIAogREVGSU5FX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7CiAKLVJlbmRlckxheWVyOjpSZW5kZXJM
YXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCi0g
ICAgOiBtX2lzUmVuZGVyVmlld0xheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRl
clZpZXcoKSkKLSAgICAsIG1fZm9yY2VkU3RhY2tpbmdDb250ZXh0KHJlbmRlcmVyTGF5ZXJNb2Rl
bE9iamVjdC5pc01lZGlhKCkpCitSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCYgcmVuZGVyZXIpCisgICAgOiBtX2lzUmVuZGVyVmlld0xheWVyKHJlbmRlcmVy
LmlzUmVuZGVyVmlldygpKQorICAgICwgbV9mb3JjZWRTdGFja2luZ0NvbnRleHQocmVuZGVyZXIu
aXNNZWRpYSgpKQogICAgICwgbV9pc05vcm1hbEZsb3dPbmx5KGZhbHNlKQogICAgICwgbV9pc0NT
U1N0YWNraW5nQ29udGV4dChmYWxzZSkKICAgICAsIG1faXNPcHBvcnR1bmlzdGljU3RhY2tpbmdD
b250ZXh0KGZhbHNlKQpAQCAtMzQzLDcgKzM0Myw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXll
cihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAg
LCBtX2hhc05vdElzb2xhdGVkQmxlbmRpbmdEZXNjZW5kYW50c1N0YXR1c0RpcnR5KGZhbHNlKQog
I2VuZGlmCiAgICAgLCBtX3JlcGFpbnRSZWN0c1ZhbGlkKGZhbHNlKQotICAgICwgbV9yZW5kZXJl
cihyZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCisgICAgLCBtX3JlbmRlcmVyKHJlbmRlcmVyKQog
ewogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKICAg
ICBzZXRJc0NTU1N0YWNraW5nQ29udGV4dChzaG91bGRCZUNTU1N0YWNraW5nQ29udGV4dCgpKTsK
QEAgLTM1Myw5ICszNTMsOSBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgIGlmIChpc1JlbmRlclZp
ZXdMYXllcigpKQogICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gbV9jb250ZW50c1Njcm9s
bGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CiAKLSAgICBpZiAoIXJlbmRlcmVyKCku
Zmlyc3RDaGlsZCgpKSB7CisgICAgaWYgKCFyZW5kZXJlci5maXJzdENoaWxkKCkpIHsKICAgICAg
ICAgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5ID0gZmFsc2U7Ci0gICAgICAgIG1faGFzVmlz
aWJsZUNvbnRlbnQgPSByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxp
dHk6OlZpc2libGU7CisgICAgICAgIG1faGFzVmlzaWJsZUNvbnRlbnQgPSByZW5kZXJlci5zdHls
ZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0KIH0KIApAQCAt
NTUyLDkgKzU1Miw2IEBAIHN0YXRpYyBib29sIGNhbkNyZWF0ZVN0YWNraW5nQ29udGV4dChjb25z
dCBSZW5kZXJMYXllciYgbGF5ZXIpCiB7CiAgICAgYXV0byYgcmVuZGVyZXIgPSBsYXllci5yZW5k
ZXJlcigpOwogICAgIHJldHVybiByZW5kZXJlci5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHko
KQotI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQotICAgICAgICB8fCByZW5kZXJl
ci5oYXNTVkdUcmFuc2Zvcm0oKQotI2VuZGlmCiAgICAgICAgIHx8IHJlbmRlcmVyLmhhc0NsaXBQ
YXRoKCkKICAgICAgICAgfHwgcmVuZGVyZXIuaGFzRmlsdGVyKCkKICAgICAgICAgfHwgcmVuZGVy
ZXIuaGFzTWFzaygpCkBAIC0zNTQ1LDE5ICszNTQyLDI3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBh
aW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFp
bnRpCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5n
SW5mbywgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBjb25zdCBMYXlvdXRT
aXplJiB0cmFuc2xhdGlvbk9mZnNldCkKIHsKKyAgICBhdXRvIHVzZXNTVkdTdWJ0cmVlVHJhbnNm
b3JtUnVsZXMgPSBbXShjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikgewor
I2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgICAgICByZXR1cm4gcmVuZGVy
ZXIuZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkgJiYg
cmVuZGVyZXIuaXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSAmJiAhcmVuZGVyZXIuaXNTVkdSb290
KCk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKICAgICAvLyBUaGlz
IGludm9sdmVzIHN1YnRyYWN0aW5nIG91dCB0aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyIGluIG91
ciBjdXJyZW50IGNvb3JkaW5hdGUgc3BhY2UsIGJ1dCBwcmVzZXJ2aW5nCiAgICAgLy8gdGhlIGFj
Y3VtdWxhdGVkIGVycm9yIGZvciBzdWItcGl4ZWwgbGF5b3V0LgorICAgIC8vIE5vdGU6IFRoZSBw
aXhlbC1zbmFwcGluZyBsb2dpYyBpcyBkaXNhYmxlZCBmb3IgdGhlIHdob2xlIFNWRyByZW5kZXIg
dHJlZSwgZXhjZXB0IHRoZSBvdXRlcm1vc3QgPHN2Zz4uCiAgICAgZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IgPSByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICBM
YXlvdXRTaXplIG9mZnNldEZyb21QYXJlbnQgPSBvZmZzZXRGcm9tQW5jZXN0b3IocGFpbnRpbmdJ
bmZvLnJvb3RMYXllcik7CiAgICAgb2Zmc2V0RnJvbVBhcmVudCArPSB0cmFuc2xhdGlvbk9mZnNl
dDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0ocmVuZGVyYWJsZVRyYW5zZm9y
bShwYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcikpOwogICAgIC8vIEFkZCB0aGUgc3VicGl4ZWwg
YWNjdW11bGF0aW9uIHRvIHRoZSBjdXJyZW50IGxheWVyJ3Mgb2Zmc2V0IHNvIHRoYXQgd2UgY2Fu
IGFsd2F5cyBzbmFwIHRoZSB0cmFuc2xhdGVSaWdodCB2YWx1ZSB0byB3aGVyZSB0aGUgcmVuZGVy
ZXIoKSBpcyBzdXBwb3NlZCB0byBiZSBwYWludGluZy4KICAgICBMYXlvdXRTaXplIG9mZnNldEZv
clRoaXNMYXllciA9IG9mZnNldEZyb21QYXJlbnQgKyBwYWludGluZ0luZm8uc3VicGl4ZWxPZmZz
ZXQ7Ci0gICAgRmxvYXRTaXplIGRldmljZVBpeGVsU25hcHBlZE9mZnNldEZvclRoaXNMYXllciA9
IHRvRmxvYXRTaXplKHJvdW5kUG9pbnRUb0RldmljZVBpeGVscyh0b0xheW91dFBvaW50KG9mZnNl
dEZvclRoaXNMYXllciksIGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgRmxvYXRTaXplIGFsaWdu
ZWRPZmZzZXRGb3JUaGlzTGF5ZXIgPSB1c2VzU1ZHU3VidHJlZVRyYW5zZm9ybVJ1bGVzKHJlbmRl
cmVyKCkpID8gb2Zmc2V0Rm9yVGhpc0xheWVyIDogdG9GbG9hdFNpemUocm91bmRQb2ludFRvRGV2
aWNlUGl4ZWxzKHRvTGF5b3V0UG9pbnQob2Zmc2V0Rm9yVGhpc0xheWVyKSwgZGV2aWNlU2NhbGVG
YWN0b3IpKTsKICAgICAvLyBXZSBoYW5kbGUgYWNjdW11bGF0ZWQgc3VicGl4ZWxzIHRocm91Z2gg
bmVzdGVkIGxheWVycyBoZXJlLiBTaW5jZSB0aGUgY29udGV4dCBnZXRzIHRyYW5zbGF0ZWQgdG8g
ZGV2aWNlIHBpeGVscywKICAgICAvLyBhbGwgd2UgbmVlZCB0byBkbyBpcyBhZGQgdGhlIGRlbHRh
IHRvIHRoZSBhY2N1bXVsYXRlZCBwaXhlbHMgY29taW5nIGZyb20gYW5jZXN0b3IgbGF5ZXJzLgog
ICAgIC8vIFRyYW5zbGF0ZSB0aGUgZ3JhcGhpY3MgY29udGV4dCB0byB0aGUgc25hcHBpbmcgcG9z
aXRpb24gdG8gYXZvaWQgb2ZmLWRldmljZS1waXhlbCBwb3NpdGluZy4KLSAgICB0cmFuc2Zvcm0u
dHJhbnNsYXRlUmlnaHQoZGV2aWNlUGl4ZWxTbmFwcGVkT2Zmc2V0Rm9yVGhpc0xheWVyLndpZHRo
KCksIGRldmljZVBpeGVsU25hcHBlZE9mZnNldEZvclRoaXNMYXllci5oZWlnaHQoKSk7CisgICAg
dHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KGFsaWduZWRPZmZzZXRGb3JUaGlzTGF5ZXIud2lkdGgo
KSwgYWxpZ25lZE9mZnNldEZvclRoaXNMYXllci5oZWlnaHQoKSk7CiAgICAgLy8gQXBwbHkgdGhl
IHRyYW5zZm9ybS4KICAgICBhdXRvIG9sZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKCk7CiAg
ICAgYXV0byBhZmZpbmVUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKTsK
QEAgLTM1NjcsNyArMzU3MiwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQnlBcHBs
eWluZ1RyYW5zZm9ybShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0CiAgICAgICAgIHBh
aW50aW5nSW5mby5ldmVudFJlZ2lvbkNvbnRleHQtPnB1c2hUcmFuc2Zvcm0oYWZmaW5lVHJhbnNm
b3JtKTsKIAogICAgIC8vIE5vdyBkbyBhIHBhaW50IHdpdGggdGhlIHJvb3QgbGF5ZXIgc2hpZnRl
ZCB0byBiZSB1cy4KLSAgICBMYXlvdXRTaXplIGFkanVzdGVkU3VicGl4ZWxPZmZzZXQgPSBvZmZz
ZXRGb3JUaGlzTGF5ZXIgLSBMYXlvdXRTaXplKGRldmljZVBpeGVsU25hcHBlZE9mZnNldEZvclRo
aXNMYXllcik7CisgICAgTGF5b3V0U2l6ZSBhZGp1c3RlZFN1YnBpeGVsT2Zmc2V0OworICAgIGlm
ICghdXNlc1NWR1N1YnRyZWVUcmFuc2Zvcm1SdWxlcyhyZW5kZXJlcigpKSAmJiAhcmVuZGVyZXIo
KS5pc1NWR1Jvb3QoKSkKKyAgICAgICAgYWRqdXN0ZWRTdWJwaXhlbE9mZnNldCA9IG9mZnNldEZv
clRoaXNMYXllciAtIExheW91dFNpemUoYWxpZ25lZE9mZnNldEZvclRoaXNMYXllcik7CisKICAg
ICBMYXllclBhaW50aW5nSW5mbyB0cmFuc2Zvcm1lZFBhaW50aW5nSW5mbyhwYWludGluZ0luZm8p
OwogICAgIHRyYW5zZm9ybWVkUGFpbnRpbmdJbmZvLnJvb3RMYXllciA9IHRoaXM7CiAgICAgdHJh
bnNmb3JtZWRQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QgPSBMYXlvdXRSZWN0KGVuY2xvc2VS
ZWN0VG9EZXZpY2VQaXhlbHModmFsdWVPckRlZmF1bHQodHJhbnNmb3JtLmludmVyc2UoKSkubWFw
UmVjdChwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpLCBkZXZpY2VTY2FsZUZhY3RvcikpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCA3ZDNjYjE1N2QwZmJmMjAy
ZWE3ZDhhNjQ5MjNmODA0ZGYzMDkxYzcyLi44MDQ3NjFhOGY5MjAwMDRlOGZkZDQyN2UxOGQ0YTc5
ODQ1MTMxYjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtOTg0
LDcgKzk4NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlcigpKS5sb2NhdGlvbigpOwogI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdf
RU5HSU5FKQogICAgICAgICBpZiAoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKCkp
KQotICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclNWR01vZGVsT2JqZWN0PihyZW5k
ZXJlcigpKS5sYXlvdXRMb2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJl
bmRlclNWR01vZGVsT2JqZWN0PihyZW5kZXJlcigpKS5jdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24o
KTsKICNlbmRpZgogCiAgICAgICAgIHJldHVybiBMYXlvdXRQb2ludCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCmluZGV4IDAx
Yjk4YWY0ODFlZWZmMjdiNDYwYWE0NmJhZGFjMGVhZGY3ZDEyZTAuLmI2ZGM5NTJkOGExYWRjZTkz
NmQ2YzZiNTYyOGQ1ZmU0Nzg5ZmMwYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0
b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSAi
UmVuZGVyU1ZHQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKQEAg
LTEyOSw2ICsxMzAsOSBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hh
bmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdAogICAgICAgICAgICAgbGF5
ZXIoKS0+d2lsbFJlbW92ZUNoaWxkV2l0aEJsZW5kTW9kZSgpOwogI2VuZGlmCiAgICAgICAgIHNl
dEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eShmYWxzZSk7IC8vIEFsbCB0cmFuc2Zvcm0tcmVs
YXRlZCBwcm9wZXJ0aWVzIGZvcmNlIGxheWVycywgc28gd2Uga25vdyB3ZSBkb24ndCBoYXZlIG9u
ZSBvciB0aGUgb2JqZWN0IGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLgorI2lmIEVOQUJMRShMQVlFUl9C
QVNFRF9TVkdfRU5HSU5FKQorICAgICAgICBzZXRIYXNTVkdUcmFuc2Zvcm0oZmFsc2UpOyAvLyBT
YW1lIHJlYXNvbiBhcyBmb3Igc2V0SGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkuCisjZW5k
aWYKICAgICAgICAgc2V0SGFzUmVmbGVjdGlvbihmYWxzZSk7CiAKICAgICAgICAgLy8gUmVwYWlu
dCB0aGUgYWJvdXQgdG8gYmUgZGVzdHJveWVkIHNlbGYtcGFpbnRpbmcgbGF5ZXIgd2hlbiBzdHls
ZSBjaGFuZ2UgYWxzbyB0cmlnZ2VycyByZXBhaW50LgpAQCAtMjQyLDEwICsyNDYsNyBAQCB2b2lk
IFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnVwZGF0ZUxheWVyVHJhbnNmb3JtKCkKICNpZiBFTkFC
TEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKIHN0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdDb250YWluZXIoY29u
c3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFp
bmVyLCBSZW5kZXJPYmplY3Q6OlZpc2libGVSZWN0Q29udGV4dCBjb250ZXh0KSBjb25zdAogewot
ICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyU1ZHQmxvY2sgY2hhbmdlcwotICAg
IC8vIEFTU0VSVChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4odGhpcykgfHwgaXM8UmVuZGVyU1ZH
QmxvY2s+KHRoaXMpKTsKLSAgICBBU1NFUlQoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHRoaXMp
KTsKLQorICAgIEFTU0VSVChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4odGhpcykgfHwgaXM8UmVu
ZGVyU1ZHQmxvY2s+KHRoaXMpKTsKICAgICBBU1NFUlQoIXN0eWxlKCkuaGFzSW5GbG93UG9zaXRp
b24oKSk7CiAgICAgQVNTRVJUKCF2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlz
UGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7CiAKQEAgLTI3NSw3ICsyNzYsNyBAQCBzdGQ6Om9w
dGlvbmFsPExheW91dFJlY3Q+IFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmNvbXB1dGVWaXNpYmxl
UmVjdEluU1ZHQ29udGFpbgogICAgICovCiAKICAgICBpZiAobW92ZVRvT3JpZ2luKQotICAgICAg
ICBhZGp1c3RlZFJlY3QubW92ZUJ5KGZsb29yZWRMYXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0Jv
eCgpLm1pblhNaW5ZQ29ybmVyKCkpKTsKKyAgICAgICAgYWRqdXN0ZWRSZWN0Lm1vdmVCeShub21p
bmFsU1ZHTGF5b3V0TG9jYXRpb24oKSk7CiAKICAgICBpZiAoYXV0byogdHJhbnNmb3JtID0gbGF5
ZXIoKS0+dHJhbnNmb3JtKCkpCiAgICAgICAgIGFkanVzdGVkUmVjdCA9IHRyYW5zZm9ybS0+bWFw
UmVjdChhZGp1c3RlZFJlY3QpOwpAQCAtMzU2LDYgKzM1NywxMyBAQCB2b2lkIFJlbmRlckxheWVy
TW9kZWxPYmplY3Q6OmFwcGx5U1ZHVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0sCiAKICAgICBzdHlsZS51bmFwcGx5VHJhbnNmb3JtT3JpZ2luKHRyYW5zZm9ybSwgb3Jp
Z2luVHJhbnNsYXRlKTsKIH0KKwordm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp1cGRhdGVI
YXNTVkdUcmFuc2Zvcm1GbGFncyhjb25zdCBTVkdHcmFwaGljc0VsZW1lbnQmIGdyYXBoaWNzRWxl
bWVudCkKK3sKKyAgICBib29sIGhhc1NWR1RyYW5zZm9ybSA9ICFncmFwaGljc0VsZW1lbnQuYW5p
bWF0ZWRMb2NhbFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKTsKKyAgICBzZXRIYXNUcmFuc2Zvcm1S
ZWxhdGVkUHJvcGVydHkoc3R5bGUoKS5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSB8fCBo
YXNTVkdUcmFuc2Zvcm0pOworICAgIHNldEhhc1NWR1RyYW5zZm9ybShoYXNTVkdUcmFuc2Zvcm0p
OworfQogI2VuZGlmCiAKIGJvb2wgcmVuZGVyZXJOZWVkc1BpeGVsU25hcHBpbmcoY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAppbmRleCAwNmFjNzhjM2ZlM2NlYzUwMmZk
NzAzZDQ3YWFjMzc1NjA0ZTA3YTI0Li5jOGI3MGVkODkzZjBmZDdmMDFlMDZiNWVlZTE5ODEyNTEw
NjgwMGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmgKQEAgLTc4LDYgKzc4LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcExvY2Fs
VG9TVkdDb250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JDb250
YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9kZT4sIGJv
b2wqIHdhc0ZpeGVkKSBjb25zdDsKIAogICAgIHZvaWQgYXBwbHlTVkdUcmFuc2Zvcm0oVHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBTVkdHcmFwaGljc0VsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYs
IGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIE9wdGlvblNldDxSZW5kZXJTdHlsZTo6VHJh
bnNmb3JtT3BlcmF0aW9uT3B0aW9uPikgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVIYXNTVkdUcmFu
c2Zvcm1GbGFncyhjb25zdCBTVkdHcmFwaGljc0VsZW1lbnQmKTsKKworICAgIExheW91dFBvaW50
IG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZsb29yZWRMYXlvdXRQ
b2ludChvYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnMoKS5taW5YTWluWUNv
cm5lcigpKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY3VycmVudFNWR0xheW91dExvY2F0
aW9uKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIHsgfTsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZXRDdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQm
KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAjZW5kaWYKIAogICAgIHZvaWQgdXBkYXRlTGF5
ZXJUcmFuc2Zvcm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
aW5kZXggNjE5MTFjOGFjNjYyZmMzYzIzYTkzNTY1NmQ4ODE4ZWZjYzZjOWQ4Mi4uMDNhZjQ0YjM4
OGRlMGFmYWQ1YWU5OTA5NTYxZGEzZjFhZDZiMTYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTUyMSw2ICs1MjEsMTEgQEAgc3RhdGljIGlubGluZSBi
b29sIG9iamVjdElzUmVsYXlvdXRCb3VuZGFyeShjb25zdCBSZW5kZXJFbGVtZW50KiBvYmplY3Qp
CiAgICAgaWYgKCFvYmplY3QtPmhhc05vblZpc2libGVPdmVyZmxvdygpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAo
b2JqZWN0LT5kb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQo
KSAmJiBvYmplY3QtPmlzU1ZHTGF5ZXJBd2FyZVJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZgorCiAgICAgaWYgKG9iamVjdC0+c3R5bGUoKS53aWR0aCgpLmlzSW50cmlu
c2ljT3JBdXRvKCkgfHwgb2JqZWN0LT5zdHlsZSgpLmhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRv
KCkgfHwgb2JqZWN0LT5zdHlsZSgpLmhlaWdodCgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAppbmRleCAzNjhjM2QxN2IzYjYwYjc1MjI5ZDZkM2FjNDc4YzBjZWFiZGRiM2RjLi5lOTBl
OTA0OGFlODU0ZTFjMzE3ZmYyMzRiZmFkMjY0ZjZlZTU5NWMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0zNjcsNiArMzY3LDE5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CiAKKyNpZiBFTkFCTEUoTEFZRVJf
QkFTRURfU1ZHX0VOR0lORSkKKyAgICAvLyBUaGUgb2JqZWN0Qm91bmRpbmdCb3ggb2YgYSBTVkcg
Y29udGFpbmVyIGlzIGFmZmVjdGVkIGJ5IHRoZSB0cmFuc2Zvcm1hdGlvbnMgYXBwbGllZCBvbiBp
dHMgY2hpbGRyZW4gLS0gdGhlIGNvbnRhaW5lcgorICAgIC8vIGJvdW5kaW5nIGJveCBpcyBhIHVu
aW9uIG9mIGFsbCBjaGlsZCBib3VuZGluZyBib3hlcywgbWFwcGVkIHRocm91Z2ggdGhlaXIgdHJh
bnNmb3JtYXRpb24gbWF0cmljZXMuCisgICAgLy8KKyAgICAvLyBUaGlzIG1ldGhvZCBpZ25vcmVz
IGFsbCB0cmFuc2Zvcm1hdGlvbnMgYW5kIGNvbXB1dGVzIHRoZSBvYmplY3RCb3VuZGluZ0JveCwg
d2l0aG91dCBtYXBwaW5nIHRocm91Z2ggdGhlIGNoaWxkCisgICAgLy8gdHJhbnNmb3JtYXRpb24g
bWF0cmljZXMuIFRoZSBTVkcgcmVuZGVyIHRyZWUgaXMgY29uc3RydWN0ZWQgaW4gc3VjaCBhIHdh
eSwgdGhhdCBpdCBjYW4gYmUgbWFwcGVkIHRvIENTUyBlcXVpdmFsZW50czoKKyAgICAvLyBUaGUg
U1ZHIHJlbmRlciB0cmVlIHVuZGVybmVhdGggdGhlIG91dGVybW9zdCA8c3ZnPiBiZWhhdmVzIGFz
IGEgc2V0IG9mIGFic29sdXRlbHkgcG9zaXRpb25lZCwgcG9zc2libHkgbmVzdGVkLCBib3hlcy4K
KyAgICAvLyBUaGVpciBsYWlkIG91dCBpbiBzdWNoIGEgd2F5IHRoYXQgdHJhbnNmb3JtYXRpb25z
IGRvIE5PVCBhZmZlY3QgbGF5b3V0LCBhcyBpbiBIVE1ML0NTUyB3b3JsZCwgYnV0IHRha2UgYWZm
ZWN0IGR1cmluZworICAgIC8vIHBhaW50aW5nLCBoaXQtdGVzdGluZyBldGMuIFRoaXMgYWxsb3dz
IHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgcmUtbGF5b3V0cyB3aGVuIGFuaW1hdGluZyB0cmFu
c2Zvcm1hdGlvbnMgaW4gU1ZHCisgICAgLy8gKG5vdCB1c2luZyBDU1MgQW5pbWF0aW9ucy9UcmFu
c2l0aW9ucyAvIFdlYiBBbmltYXRpb25zLCBidXQgZS5nLiBTTUlMLCA8YW5pbWF0ZVRyYW5zZm9y
bT4sIEpTLCAuLi4pLgorICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94V2l0
aG91dFRyYW5zZm9ybWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG9iamVjdEJvdW5kaW5nQm94KCk7
IH0KKyNlbmRpZgorCiAgICAgLy8gUmV0dXJucyB0aGUgc21hbGxlc3QgcmVjdGFuZ2xlIGVuY2xv
c2luZyBhbGwgb2YgdGhlIHBhaW50ZWQgY29udGVudAogICAgIC8vIHJlc3BlY3RpbmcgY2xpcHBp
bmcsIG1hc2tpbmcsIGZpbHRlcnMsIG9wYWNpdHksIHN0cm9rZS13aWR0aCBhbmQgbWFya2Vycwog
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Js
b2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3Bw
CmluZGV4IDJlMTA1NzI4MWM4ODA0YjBlNjFhN2M4ZjlmMDQ5MmU0YWMxNzEwNDUuLjdkMWQ4MTZl
OTNjMDc2YTg4MmZjMmI1NjgwZGU5Mjk3ZWNjODY2MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQmxvY2suaCIKIAorI2luY2x1ZGUg
IlJlbmRlclNWR0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgi
CiAjaW5jbHVkZSAiU1ZHR3JhcGhpY3NFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3Vw
cG9ydC5oIgpAQCAtNDIsNiArNDMsMTMgQEAgdm9pZCBSZW5kZXJTVkdCbG9jazo6dXBkYXRlRnJv
bVN0eWxlKCkKIHsKICAgICBSZW5kZXJCbG9ja0Zsb3c6OnVwZGF0ZUZyb21TdHlsZSgpOwogCisj
aWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0
dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKSB7CisgICAgICAgIHVwZGF0ZUhh
c1NWR1RyYW5zZm9ybUZsYWdzKGdyYXBoaWNzRWxlbWVudCgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorCiAgICAgLy8gUmVuZGVyU1ZHbG9jaywgdXNlZCBieSBSZW5kZXIoU1ZH
VGV4dHxGb3JlaWduT2JqZWN0KSwgaXMgbm90IGFsbG93ZWQgdG8gY2FsbCBzZXRIYXNOb25WaXNp
YmxlT3ZlcmZsb3codHJ1ZSkuCiAgICAgLy8gUmVuZGVyQmxvY2sgYXNzdW1lcyBhIGxheWVyIHRv
IGJlIHByZXNlbnQgd2hlbiB0aGUgb3ZlcmZsb3cgY2xpcCBmdW5jdGlvbmFsaXR5IGlzIHJlcXVl
c3RlZC4gQm90aAogICAgIC8vIFJlbmRlcihTVkdUZXh0fEZvcmVpZ25PYmplY3QpIHJldHVybiAn
ZmFsc2UnIG9uICdyZXF1aXJlc0xheWVyJy4gRmluZSBmb3IgUmVuZGVyU1ZHVGV4dC4KQEAgLTU3
LDEyICs2NSwyNCBAQCB2b2lkIFJlbmRlclNWR0Jsb2NrOjp1cGRhdGVGcm9tU3R5bGUoKQogICAg
IHNldEhhc05vblZpc2libGVPdmVyZmxvdyhmYWxzZSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHQmxv
Y2s6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKSBj
b25zdAordm9pZCBSZW5kZXJTVkdCbG9jazo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4m
IHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CiB7Cisj
aWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0
dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKSB7CisgICAgICAgIHJlY3RzLmFw
cGVuZChzbmFwcGVkSW50UmVjdChMYXlvdXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRp
b24oKSwgc2l6ZSgpKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKICAgICAv
LyBUaGlzIGNvZGUgcGF0aCBzaG91bGQgbmV2ZXIgYmUgdGFrZW4gZm9yIFNWRywgYXMgd2UncmUg
YXNzdW1pbmcgdXNlVHJhbnNmb3Jtcz10cnVlIGV2ZXJ5d2hlcmUsIGFic29sdXRlUXVhZHMgc2hv
dWxkIGJlIHVzZWQuCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgUmVuZGVy
U1ZHQmxvY2s6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3
YXNGaXhlZCkgY29uc3QKK3sKKyAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChz
dHJva2VCb3VuZGluZ0JveCgpLCBVc2VUcmFuc2Zvcm1zLCB3YXNGaXhlZCkpOworfQorCiB2b2lk
IFJlbmRlclNWR0Jsb2NrOjp3aWxsQmVEZXN0cm95ZWQoKQogewogICAgIFNWR1Jlc291cmNlc0Nh
Y2hlOjpjbGllbnREZXN0cm95ZWQoKnRoaXMpOwpAQCAtNzEsNyArOTEsMTEgQEAgdm9pZCBSZW5k
ZXJTVkdCbG9jazo6d2lsbEJlRGVzdHJveWVkKCkKIAogdm9pZCBSZW5kZXJTVkdCbG9jazo6c3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSkKIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZGlm
ZiA9PSBTdHlsZURpZmZlcmVuY2U6OkxheW91dCAmJiAhZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxh
eWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpCisjZWxzZQogICAgIGlmIChkaWZmID09IFN0eWxl
RGlmZmVyZW5jZTo6TGF5b3V0KQorI2VuZGlmCiAgICAgICAgIHNldE5lZWRzQm91bmRhcmllc1Vw
ZGF0ZSgpOwogICAgIFJlbmRlckJsb2NrRmxvdzo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5
bGUpOwogICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nZWQoKnRoaXMsIGRp
ZmYsIHN0eWxlKCkpOwpAQCAtODEsNiArMTA1LDExIEBAIHZvaWQgUmVuZGVyU1ZHQmxvY2s6OmNv
bXB1dGVPdmVyZmxvdyhMYXlvdXRVbml0IG9sZENsaWVudEFmdGVyRWRnZSwgYm9vbCByZWNvbXB1
CiB7CiAgICAgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlT3ZlcmZsb3cob2xkQ2xpZW50QWZ0ZXJF
ZGdlLCByZWNvbXB1dGVGbG9hdHMpOwogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJ
TkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5h
YmxlZCgpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIGNvbnN0IGF1dG8qIHRleHRT
aGFkb3cgPSBzdHlsZSgpLnRleHRTaGFkb3coKTsKICAgICBpZiAoIXRleHRTaGFkb3cpCiAgICAg
ICAgIHJldHVybjsKQEAgLTkwLDEzICsxMTksMjggQEAgdm9pZCBSZW5kZXJTVkdCbG9jazo6Y29t
cHV0ZU92ZXJmbG93KExheW91dFVuaXQgb2xkQ2xpZW50QWZ0ZXJFZGdlLCBib29sIHJlY29tcHUK
ICAgICBhZGRWaXN1YWxPdmVyZmxvdyhzbmFwcGVkSW50UmVjdChib3JkZXJSZWN0KSk7CiB9CiAK
LUxheW91dFJlY3QgUmVuZGVyU1ZHQmxvY2s6OmNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0
KSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJTVkdCbG9jazo6Y2xpcHBlZE92ZXJmbG93UmVjdChj
b25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVj
dENvbnRleHQgY29udGV4dCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VO
R0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVF
bmFibGVkKCkpIHsKKyAgICAgICAgaWYgKHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxp
dHk6OlZpc2libGUgJiYgIWVuY2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkpCisg
ICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmll
dygpLmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkpOworICAgICAg
ICByZXR1cm4gY29tcHV0ZVJlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KCksIHJlcGFpbnRDb250YWlu
ZXIsIGNvbnRleHQpOworICAgIH0KKyNlbmRpZgorCiAgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBv
cnQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KCp0aGlzLCByZXBhaW50Q29udGFpbmVy
KTsKIH0KIAogc3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJTVkdCbG9jazo6Y29tcHV0
ZVZpc2libGVSZWN0SW5Db250YWluZXIoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQgY29udGV4
dCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAo
ZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpCisgICAg
ICAgIHJldHVybiBjb21wdXRlVmlzaWJsZVJlY3RJblNWR0NvbnRhaW5lcihyZWN0LCBjb250YWlu
ZXIsIGNvbnRleHQpOworI2VuZGlmCisKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gYWRq
dXN0ZWRSZWN0ID0gY29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihyZWN0LCBjb250
YWluZXIsIGNvbnRleHQpOwogICAgIGlmIChhZGp1c3RlZFJlY3QpCiAgICAgICAgIHJldHVybiBl
bmNsb3NpbmdMYXlvdXRSZWN0KCphZGp1c3RlZFJlY3QpOwpAQCAtMTA1LDYgKzE0OSw5IEBAIHN0
ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gUmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVWaXNpYmxlUmVj
dEluQ29udGFpbmVyKGNvbnN0IExhCiAKIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBSZW5kZXJT
VkdCbG9jazo6Y29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5lciwgVmlzaWJs
ZVJlY3RDb250ZXh0IGNvbnRleHQpIGNvbnN0CiB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NW
R19FTkdJTkUpCisgICAgQVNTRVJUKCFkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNW
R0VuZ2luZUVuYWJsZWQoKSk7CisjZW5kaWYKICAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6
Y29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcigqdGhpcywgcmVjdCwgY29udGFpbmVy
LCBjb250ZXh0KTsKIH0KIApAQCAtMTE1LDEzICsxNjIsMjMgQEAgdm9pZCBSZW5kZXJTVkdCbG9j
azo6bWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNl
c3RvckMKIAogY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJTVkdCbG9jazo6cHVzaE1hcHBpbmdU
b0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0
LCBSZW5kZXJHZW9tZXRyeU1hcCYgZ2VvbWV0cnlNYXApIGNvbnN0CiB7CisjaWYgRU5BQkxFKExB
WUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXll
ckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gUmVuZGVyQm94OjpwdXNo
TWFwcGluZ1RvQ29udGFpbmVyKGFuY2VzdG9yVG9TdG9wQXQsIGdlb21ldHJ5TWFwKTsKKyNlbmRp
ZgorCiAgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OnB1c2hNYXBwaW5nVG9Db250YWluZXIo
KnRoaXMsIGFuY2VzdG9yVG9TdG9wQXQsIGdlb21ldHJ5TWFwKTsKIH0KIAotYm9vbCBSZW5kZXJT
VkdCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0
aW9uKQorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorTGF5b3V0U2l6ZSBSZW5k
ZXJTVkdCbG9jazo6b2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJFbGVtZW50JiBjb250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiwgYm9vbCopIGNvbnN0CiB7Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVF9VTlVTRUQoY29udGFpbmVyLCAm
Y29udGFpbmVyID09IHRoaXMtPmNvbnRhaW5lcigpKTsKKyAgICBBU1NFUlQoIWlzSW5GbG93UG9z
aXRpb25lZCgpKTsKKyAgICBBU1NFUlQoIWlzQWJzb2x1dGVseVBvc2l0aW9uZWQoKSk7CisgICAg
QVNTRVJUKCFpc0lubGluZSgpKTsKKyAgICByZXR1cm4gTGF5b3V0U2l6ZSgpOwogfQorI2VuZGlm
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
QmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suaApp
bmRleCA5ZTk5YWUwNjQ2MGY5ODljOGFhMTc2OGJmZTU5YjViOTc5Yzk5NWE0Li44ZTFkN2M4MTJl
ODRjMjVmOWE0ZWI2MGJlYzUyMmQ1YmE5YWNjZjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oCkBAIC00NSwxNyArNDUsMjMgQEAgcHJpdmF0ZToK
ICAgICBib29sIGlzUmVuZGVyU1ZHQmxvY2soKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
CiAKICAgICB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKLQorICAgIHZvaWQgYWJz
b2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKSBmaW5hbDsKIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdf
RU5HSU5FKQorICAgIExheW91dFBvaW50IGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGxvY2F0aW9uKCk7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRTVkdMYXlv
dXRMb2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24pIGZpbmFsIHsgc2V0TG9jYXRp
b24obG9jYXRpb24pOyB9CisjZW5kaWYKKwogICAgIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93
UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBWaXNp
YmxlUmVjdENvbnRleHQpIGNvbnN0IGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0
KSBjb25zdCBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IGNvbXB1dGVWaXNp
YmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCkgY29uc3QgZmluYWw7CiAK
ICAgICB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogYW5jZXN0b3JDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgT3B0aW9uU2V0PE1hcENvb3Jk
aW5hdGVzTW9kZT4sIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBmaW5hbDsKICAgICBjb25zdCBSZW5k
ZXJPYmplY3QqIHB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmKSBjb25zdCBmaW5hbDsK
LQotICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIGZpbmFsOworI2lm
IEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIExheW91dFNpemUgb2Zmc2V0RnJv
bUNvbnRhaW5lcihSZW5kZXJFbGVtZW50JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBib29sKiBvZmZz
ZXREZXBlbmRzT25Qb2ludCA9IG51bGxwdHIpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKaW5kZXggMzQ1ZDYzNjEzNGQ1ZmRiY2Y5MjY3
YmZjZGFjYzRjZjYyY2IzYzZjNy4uMjEzODA5Mzk2M2M3MmRkYzQzZGFkNDMyY2M5MzRiOTI5ZDYx
ZmEyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcApAQCAtMTE5LDE5ICsxMTksMTQgQEAgdm9pZCBSZW5kZXJTVkdDb250YWlu
ZXI6OmxheW91dENoaWxkcmVuKCkKIAogICAgIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24gYm91
bmRpbmdCb3hDb21wdXRhdGlvbigqdGhpcyk7CiAgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IGJv
dW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb246Om9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbiwgJm1fb2JqZWN0
Qm91bmRpbmdCb3hWYWxpZCk7Ci0gICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IGJvdW5kaW5nQm94
Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5kaW5nQm94Q29t
cHV0YXRpb246OnN0cm9rZUJvdW5kaW5nQm94RGVjb3JhdGlvbik7Ci0gICAgc2V0TGF5b3V0UmVj
dChlbmNsb3NpbmdMYXlvdXRSZWN0KG1fb2JqZWN0Qm91bmRpbmdCb3gpKTsKIAotICAgIGNvbnRh
aW5lckxheW91dC5wb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcigpOwotfQorICAg
IGNvbnN0ZXhwciBhdXRvIG9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbldpdGhvdXRUcmFuc2Zv
cm1hdGlvbnMgPSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpvYmplY3RCb3VuZGluZ0JveERl
Y29yYXRpb24gfCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpEZWNvcmF0aW9uT3B0aW9uOjpJ
Z25vcmVUcmFuc2Zvcm1hdGlvbnM7CisgICAgbV9vYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFu
c2Zvcm1hdGlvbnMgPSBib3VuZGluZ0JveENvbXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3Vu
ZGluZ0JveChvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb25XaXRob3V0VHJhbnNmb3JtYXRpb25z
KTsKIAotdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgUmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBtX3N0cm9r
ZUJvdW5kaW5nQm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91
bmRpbmdCb3goU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6c3Ryb2tlQm91bmRpbmdCb3hEZWNv
cmF0aW9uKTsKKyAgICBzZXRDdXJyZW50U1ZHTGF5b3V0UmVjdChlbmNsb3NpbmdMYXlvdXRSZWN0
KG1fb2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zKSk7CiAKLSAgICAvLyBG
SVhNRTogW0xCU0VdIFVwc3RyZWFtIFJlbmRlckxheWVyIGNoYW5nZXMKLSAgICAvLyBpZiAoaGFz
TGF5ZXIoKSkKLSAgICAvLyAgICAgbGF5ZXIoKS0+c2V0SXNPcHBvcnR1bmlzdGljU3RhY2tpbmdD
b250ZXh0KHRydWUpOworICAgIGNvbnRhaW5lckxheW91dC5wb3NpdGlvbkNoaWxkcmVuUmVsYXRp
dmVUb0NvbnRhaW5lcigpOwogfQogCiBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6c2VsZldpbGxQ
YWludCgpCkBAIC0xNjUsNyArMTYwLDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50
T2Zmc2V0ICsgbGF5b3V0TG9jYXRpb24oKTsKKyAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQg
PSBwYWludE9mZnNldCArIGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6TWFzaykgewogICAgICAgICAvLyBGSVhNRTogW0xC
U0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcwogICAgICAgICAvLyBTVkdSZW5k
ZXJTdXBwb3J0OjpwYWludFNWR01hc2soKnRoaXMsIHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9m
ZnNldCk7CkBAIC0xODUsNyArMTgwLDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKIAogYm9v
bCBSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9j
YXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgYXV0byBhZGp1c3RlZExvY2F0aW9u
ID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsYXlvdXRMb2NhdGlvbigpOworICAgIGF1dG8gYWRqdXN0
ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgY3VycmVudFNWR0xheW91dExvY2F0aW9u
KCk7CiAKICAgICBhdXRvIHZpc3VhbE92ZXJmbG93UmVjdCA9IHZpc3VhbE92ZXJmbG93UmVjdEVx
dWl2YWxlbnQoKTsKICAgICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5KGFkanVzdGVkTG9jYXRp
b24pOwpAQCAtMTkzLDggKzE4OCw3IEBAIGJvb2wgUmVuZGVyU1ZHQ29udGFpbmVyOjpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8gbG9jYWxQb2ludCA9IGxvY2F0aW9uSW5Db250YWlu
ZXIucG9pbnQoKTsKLSAgICBhdXRvIGJvdW5kaW5nQm94VG9wTGVmdENvcm5lciA9IGZsb29yZWRM
YXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveCgpLm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIGF1
dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gYm91bmRpbmdCb3hUb3BMZWZ0
Q29ybmVyIC0gYWRqdXN0ZWRMb2NhdGlvbjsKKyAgICBhdXRvIGNvb3JkaW5hdGVTeXN0ZW1Pcmln
aW5UcmFuc2xhdGlvbiA9IG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpIC0gYWRqdXN0ZWRMb2Nh
dGlvbjsKICAgICBsb2NhbFBvaW50Lm1vdmUoY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0
aW9uKTsKIAogICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYSgq
dGhpcywgbG9jYWxQb2ludCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdDb250YWluZXIuaAppbmRleCBlMzQ4MmFiOWYwM2ExNWY5MzFhMjk5NjlkMWY2NTQw
NjYwNWY1N2JiLi5mZDQyNWEzMGM0OGVkZDIyMTc3ODY1NTdhYWU1ZmIwYjI2MmU3N2M4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgK
QEAgLTQwLDYgKzQwLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNPYmplY3RCb3VuZGluZ0JveFZh
bGlkKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveFZhbGlkOyB9CiAKICAgICBG
bG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX29iamVj
dEJvdW5kaW5nQm94OyB9CisgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94V2l0aG91dFRy
YW5zZm9ybWF0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3hX
aXRob3V0VHJhbnNmb3JtYXRpb25zOyB9CiAgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQogICAgIEZsb2F0
UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVSZXBhaW50Qm91bmRpbmdCb3goKnRo
aXMpOyB9CiAKQEAgLTQ5LDggKzUwLDYgQEAgcHJvdGVjdGVkOgogICAgIEFTQ0lJTGl0ZXJhbCBy
ZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlclNWR0NvbnRhaW5lciJf
czsgfQogICAgIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQogCi0gICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7Ci0KICAgICB2b2lkIGxheW91dCgpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRDaGlsZHJlbigpOwogICAgIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwpAQCAtNjIsNiArNjEsNyBAQCBw
cm90ZWN0ZWQ6CiAKICAgICBib29sIG1fb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCB7IGZhbHNlIH07
CiAgICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1fb2Jq
ZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zOwogICAgIEZsb2F0UmVjdCBtX3N0
cm9rZUJvdW5kaW5nQm94OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lLmgKaW5kZXggMjAwMDE0Nzc1Y2VlODI1ZDFkYWZiYTRkOTQw
ZTJiOGQwMjMyNzU0Mi4uNTRhNWExN2U4ZTBhZjZjZTEzNzBiZWY3OWFiZmY1YmU5OWExYzI0MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oCkBA
IC01MSw2ICs1MSwxMSBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0Jv
eCgpIGNvbnN0IGZpbmFsOwogICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpIGNvbnN0IGZpbmFsOwogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUp
CisgICAgTGF5b3V0UG9pbnQgY3VycmVudFNWR0xheW91dExvY2F0aW9uKCkgY29uc3QgZmluYWwg
eyByZXR1cm4geyB9OyB9CisgICAgdm9pZCBzZXRDdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oY29u
c3QgTGF5b3V0UG9pbnQmKSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisjZW5kaWYK
KwogICAgIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IGZp
bmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBjb21wdXRlRmxvYXRWaXNpYmxlUmVj
dEluQ29udGFpbmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QqIGNvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBmaW5hbDsKICAgICB2b2lk
IG1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0
b3JDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9k
ZT4sIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKaW5kZXggYzk2OTVlNmI2
YTQzZjljZjRmZjAzOTVhYzM2MWE0MzI2MWRiOGUyMy4uNmZmZWU5OTcxODJlOWVlNzIwNTJhOWFm
MDc5NjkyMTg5MGMzYzMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKQEAgLTYxLDEyICs2MSw4IEBAIHZvaWQgUmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHlsZSgpCiB7CiAgICAgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdDo6dXBkYXRlRnJvbVN0eWxlKCk7CiAKLSAgICBib29sIGhhc1NWR1RyYW5zZm9y
bSA9IGZhbHNlOwogICAgIGlmIChpczxTVkdHcmFwaGljc0VsZW1lbnQ+KGVsZW1lbnQoKSkpCi0g
ICAgICAgIGhhc1NWR1RyYW5zZm9ybSA9ICFkb3duY2FzdDxTVkdHcmFwaGljc0VsZW1lbnQ+KGVs
ZW1lbnQoKSkuYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKTsKLQotICAgIHNl
dEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eShzdHlsZSgpLmhhc1RyYW5zZm9ybVJlbGF0ZWRQ
cm9wZXJ0eSgpIHx8IGhhc1NWR1RyYW5zZm9ybSk7Ci0gICAgc2V0SGFzU1ZHVHJhbnNmb3JtKGhh
c1NWR1RyYW5zZm9ybSk7CisgICAgICAgIHVwZGF0ZUhhc1NWR1RyYW5zZm9ybUZsYWdzKGRvd25j
YXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oZWxlbWVudCgpKSk7CiB9CiAKIEZsb2F0UmVjdCBSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6Ym9yZGVyQm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50KFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyKiwgUmVuZGVyQm94OjpSZW5kZXJCb3hGcmFnbWVudEluZm9GbGFn
cykgY29uc3QKQEAgLTE0MSw3ICsxMzcsNyBAQCBMYXlvdXRSZWN0IFJlbmRlclNWR01vZGVsT2Jq
ZWN0OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsTwogCiB2
b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYg
cmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3QKIHsKLSAg
ICByZWN0cy5hcHBlbmQoc25hcHBlZEludFJlY3QoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNl
dCArIGxheW91dExvY2F0aW9uKCksIGxheW91dFNpemUoKSkpKTsKKyAgICByZWN0cy5hcHBlbmQo
c25hcHBlZEludFJlY3QoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCArIG1fbGF5b3V0UmVj
dC5sb2NhdGlvbigpLCBtX2xheW91dFJlY3Quc2l6ZSgpKSkpOwogfQogCiB2b2lkIFJlbmRlclNW
R01vZGVsT2JqZWN0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9v
bCogd2FzRml4ZWQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR01vZGVsT2JqZWN0LmgKaW5kZXggYmMxMTI0NTA0M2M5ZDFlNTRlYjBjYzRjYzJj
MTQ4YzlhOWIyMzhjMy4uYWU4OWI4ZGVhYzk4YjJkZTViYzk5MTc2YTI5OGE0MzMyODQ0N2RjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9i
amVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxP
YmplY3QuaApAQCAtNTgsMjYgKzU4LDIxIEBAIHB1YmxpYzoKIAogICAgIGlubGluZSBTVkdFbGVt
ZW50JiBlbGVtZW50KCkgY29uc3Q7CiAKKyAgICBMYXlvdXRSZWN0IGN1cnJlbnRTVkdMYXlvdXRS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9CisgICAgdm9pZCBzZXRDdXJyZW50
U1ZHTGF5b3V0UmVjdChjb25zdCBMYXlvdXRSZWN0JiBsYXlvdXRSZWN0KSB7IG1fbGF5b3V0UmVj
dCA9IGxheW91dFJlY3Q7IH0KKworICAgIExheW91dFBvaW50IGN1cnJlbnRTVkdMYXlvdXRMb2Nh
dGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbGF5b3V0UmVjdC5sb2NhdGlvbigpOyB9Cisg
ICAgdm9pZCBzZXRDdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxv
Y2F0aW9uKSBmaW5hbCB7IG1fbGF5b3V0UmVjdC5zZXRMb2NhdGlvbihsb2NhdGlvbik7IH0KKwog
ICAgIC8vIE1pbWljIHRoZSBSZW5kZXJCb3ggYWNjZXNzb3JzIC0gYnkgc2hhcmluZyB0aGUgc2Ft
ZSB0ZXJtaW5vbG9neSB0aGUgcGFpbnRpbmcgLyBoaXQgdGVzdGluZyAvIGxheW91dCBsb2dpYyBp
cwogICAgIC8vIHNpbWlsYXIgdG8gcmVhZCBjb21wYXJlZCB0byBub24tU1ZHIHJlbmRlcmVycyBz
dWNoIGFzIFJlbmRlckJveCAmIGZyaWVuZHMuCiAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0
RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIHsgTGF5b3V0UG9pbnQoKSwgbV9sYXlvdXRSZWN0
LnNpemUoKSB9OyB9CiAgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94UmVjdEVxdWl2YWxlbnQoKSBj
b25zdCB7IHJldHVybiBib3JkZXJCb3hSZWN0RXF1aXZhbGVudCgpOyB9CiAgICAgTGF5b3V0UmVj
dCBmcmFtZVJlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9Ci0K
ICAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJl
dHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0
KCp0aGlzKTsgfQogCi0gICAgdm9pZCBhcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxl
bnQoTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdCB7IHBvaW50Lm1vdmVCeShsYXlvdXRMb2NhdGlv
bigpKTsgfQotCi0gICAgTGF5b3V0UmVjdCBsYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9s
YXlvdXRSZWN0OyB9Ci0gICAgdm9pZCBzZXRMYXlvdXRSZWN0KGNvbnN0IExheW91dFJlY3QmIGxh
eW91dFJlY3QpIHsgbV9sYXlvdXRSZWN0ID0gbGF5b3V0UmVjdDsgfQotICAgIHZvaWQgc2V0TGF5
b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxheW91dExvY2F0aW9uKSB7IG1fbGF5b3V0
UmVjdC5zZXRMb2NhdGlvbihsYXlvdXRMb2NhdGlvbik7IH0KLQotICAgIExheW91dFBvaW50IHBh
aW50aW5nTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiB0b0xheW91dFBvaW50KGxheW91dExvY2F0
aW9uKCkgLSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNv
cm5lcigpKSk7IH0KLSAgICBMYXlvdXRQb2ludCBsYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5b3V0UmVjdC5sb2NhdGlvbigpOyB9Ci0gICAgTGF5b3V0U2l6ZSBsYXlvdXRMb2Nh
dGlvbk9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHRvTGF5b3V0U2l6ZShtX2xheW91dFJlY3QubG9j
YXRpb24oKSk7IH0KLSAgICBMYXlvdXRTaXplIGxheW91dFNpemUoKSBjb25zdCB7IHJldHVybiBt
X2xheW91dFJlY3Quc2l6ZSgpOyB9Ci0KICAgICAvLyBGb3IgUmVuZGVyTGF5ZXIgb25seQorICAg
IHZvaWQgYXBwbHlUb3BMZWZ0TG9jYXRpb25PZmZzZXRFcXVpdmFsZW50KExheW91dFBvaW50JiBw
b2ludCkgY29uc3QgeyBwb2ludC5tb3ZlQnkoY3VycmVudFNWR0xheW91dExvY2F0aW9uKCkpOyB9
CiAgICAgRmxvYXRSZWN0IGJvcmRlckJveFJlY3RJbkZyYWdtZW50RXF1aXZhbGVudChSZW5kZXJG
cmFnbWVudENvbnRhaW5lciosIFJlbmRlckJveDo6UmVuZGVyQm94RnJhZ21lbnRJbmZvRmxhZ3Mg
PSBSZW5kZXJCb3g6OkNhY2hlUmVuZGVyQm94RnJhZ21lbnRJbmZvKSBjb25zdDsKICAgICB2aXJ0
dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRp
b24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiA9IG51bGxwdHIsIE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFBhaW50UGhhc2UgPSBQ
YWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQpIGNvbnN0OwogICAgIExheW91dFJlY3Qgb3ZlcmZs
b3dDbGlwUmVjdEZvckNoaWxkTGF5ZXJzKGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50LCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSByZWxldmFuY3kpIHsgcmV0dXJuIG92ZXJmbG93Q2xpcFJlY3QobG9jYXRpb24sIGZyYWdt
ZW50LCByZWxldmFuY3kpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290LmNwcAppbmRleCBhOWI5MzMyMmIwYThmMjQ2ZTAyYzU2MDM2MjVkZjMzNDZkM2Rm
YmNjLi4yMmEwMGNmNDQ5M2NiNGJkMTkzMjYwYjExOTdkNDMyY2NjN2Y3MzdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKQEAgLTE5Niw2ICsx
OTYsMTAgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQogCiAgICAgICAgIFNWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb24gYm91bmRpbmdCb3hDb21wdXRhdGlvbigqdGhpcyk7CiAgICAgICAg
IG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBib3VuZGluZ0JveENvbXB1dGF0aW9uLmNvbXB1dGVEZWNv
cmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpvYmplY3RCb3VuZGlu
Z0JveERlY29yYXRpb24pOworCisgICAgICAgIGNvbnN0ZXhwciBhdXRvIG9iamVjdEJvdW5kaW5n
Qm94RGVjb3JhdGlvbldpdGhvdXRUcmFuc2Zvcm1hdGlvbnMgPSBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uOjpvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb24gfCBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uOjpEZWNvcmF0aW9uT3B0aW9uOjpJZ25vcmVUcmFuc2Zvcm1hdGlvbnM7CisgICAgICAg
IG1fb2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zID0gYm91bmRpbmdCb3hD
b21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3gob2JqZWN0Qm91bmRpbmdCb3hE
ZWNvcmF0aW9uV2l0aG91dFRyYW5zZm9ybWF0aW9ucyk7CisKICAgICAgICAgbV9zdHJva2VCb3Vu
ZGluZ0JveCA9IGJvdW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5n
Qm94KFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OnN0cm9rZUJvdW5kaW5nQm94RGVjb3JhdGlv
bik7CiAgICAgfQogCkBAIC0zOTcsNiArNDAxLDcgQEAgdm9pZCBSZW5kZXJTVkdSb290Ojp1cGRh
dGVGcm9tU3R5bGUoKQogICAgIFJlbmRlclJlcGxhY2VkOjp1cGRhdGVGcm9tU3R5bGUoKTsKIAog
ICAgIHNldEhhc1NWR1RyYW5zZm9ybSgpOworICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9w
ZXJ0eSgpOwogCiAgICAgaWYgKHNob3VsZEFwcGx5Vmlld3BvcnRDbGlwKCkpCiAgICAgICAgIHNl
dEhhc05vblZpc2libGVPdmVyZmxvdygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jvb3QuaAppbmRleCBlN2Y3MTU1MzI2N2ViMjM5ODAwNThkMTdlZDA4ZGM4MjAx
ODAwMDhmLi5jMGQxY2NkZGEzODY4OWY3MmRjZmIzZWExNDAzMjNmYjcxMmE1MDI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaApAQCAtNjcsNiArNjcs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpIGNvbnN0Owog
CiAgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9vYmplY3RCb3VuZGluZ0JveDsgfQorICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveFdp
dGhvdXRUcmFuc2Zvcm1hdGlvbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX29iamVjdEJvdW5k
aW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9uczsgfQogICAgIEZsb2F0UmVjdCBzdHJva2VCb3Vu
ZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KICAg
ICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5n
Qm94KCp0aGlzKTsgfQogCkBAIC0xMjMsNiArMTI0LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFNp
emUgbV9jb250YWluZXJTaXplOwogICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94Owor
ICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9uczsK
ICAgICBGbG9hdFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsKICAgICBBZmZpbmVUcmFuc2Zvcm0g
bV92aWV3Qm94VHJhbnNmb3JtOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX3N1cHBsZW1lbnRhbExv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuY3BwCmluZGV4IGNhYWY2YjM1YjBlMDUyMDAzZGY5MjAxZWVjMDAwNGQ1
NDM1MWY0MDYuLjk5YjI4ODRkNzI0NTk5ZjM2OTk0YWEzMDcwZjg3NDNiYWYyOWU4MjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCkBAIC0x
NTEsNyArMTUxLDcgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6bGF5b3V0KCkKICAgICAgICAgdXBk
YXRlU2hhcGVGcm9tRWxlbWVudCgpOwogCiAgICAgICAgIG1fbmVlZHNTaGFwZVVwZGF0ZSA9IGZh
bHNlOwotICAgICAgICBzZXRMYXlvdXRSZWN0KGVuY2xvc2luZ0xheW91dFJlY3QobV9maWxsQm91
bmRpbmdCb3gpKTsKKyAgICAgICAgc2V0Q3VycmVudFNWR0xheW91dFJlY3QoZW5jbG9zaW5nTGF5
b3V0UmVjdChtX2ZpbGxCb3VuZGluZ0JveCkpOwogICAgIH0KIAogICAgIHVwZGF0ZUxheWVyVHJh
bnNmb3JtKCk7CkBAIC0yODgsNyArMjg4LDcgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gYWRqdXN0ZWRQYWludE9mZnNldCA9IHBh
aW50T2Zmc2V0ICsgbGF5b3V0TG9jYXRpb24oKTsKKyAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZz
ZXQgPSBwYWludE9mZnNldCArIGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogICAgIGlmIChw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6TWFzaykgewogICAgICAgICAvLyBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcwogICAgICAgICAvLyBTVkdS
ZW5kZXJTdXBwb3J0OjpwYWludFNWR01hc2soKnRoaXMsIHBhaW50SW5mbywgYWRqdXN0ZWRQYWlu
dE9mZnNldCk7CkBAIC0zMDgsNyArMzA4LDcgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIAog
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwYWludEluZm8uY29udGV4
dCgpKTsKIAotICAgIGF1dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gYWRq
dXN0ZWRQYWludE9mZnNldCAtIGZsb29yZWRMYXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveCgp
LmxvY2F0aW9uKCkpOworICAgIGF1dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9u
ID0gYWRqdXN0ZWRQYWludE9mZnNldCAtIG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpOwogICAg
IHBhaW50SW5mby5jb250ZXh0KCkudHJhbnNsYXRlKGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFu
c2xhdGlvbi53aWR0aCgpLCBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24uaGVpZ2h0
KCkpOwogCiAgICAgaWYgKHN0eWxlKCkuc3ZnU3R5bGUoKS5zaGFwZVJlbmRlcmluZygpID09IFNo
YXBlUmVuZGVyaW5nOjpDcmlzcEVkZ2VzKQpAQCAtMzQ1LDExICszNDUsMTAgQEAgYm9vbCBSZW5k
ZXJTVkdTaGFwZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHIKICAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3Vu
ZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBhZGp1c3RlZExvY2F0aW9uID0g
YWNjdW11bGF0ZWRPZmZzZXQgKyBsYXlvdXRMb2NhdGlvbigpOworICAgIGF1dG8gYWRqdXN0ZWRM
b2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgY3VycmVudFNWR0xheW91dExvY2F0aW9uKCk7
CiAKICAgICBhdXRvIGxvY2FsUG9pbnQgPSBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCk7Ci0g
ICAgYXV0byBib3VuZGluZ0JveFRvcExlZnRDb3JuZXIgPSBmbG9vcmVkTGF5b3V0UG9pbnQob2Jq
ZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKTsKLSAgICBhdXRvIGNvb3JkaW5hdGVT
eXN0ZW1PcmlnaW5UcmFuc2xhdGlvbiA9IGJvdW5kaW5nQm94VG9wTGVmdENvcm5lciAtIGFkanVz
dGVkTG9jYXRpb247CisgICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24g
PSBub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKSAtIGFkanVzdGVkTG9jYXRpb247CiAgICAgbG9j
YWxQb2ludC5tb3ZlKGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbik7CiAKICAgICBp
ZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEoKnRoaXMsIGxvY2FsUG9p
bnQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdU
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAK
aW5kZXggNTg4YWYxYTFmNzc3Mjk1MzEyOTdlY2Q5MGJjNjBiNjUzMjdmMWVhYi4uOGNiM2NiZWI2
NGE0MWIxYTlhMTVhNjhhMGUwZjM5ODY0YzE5MzM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHSW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5o
IgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVscGVycy5oIgogI2luY2x1ZGUgIlNWR0xlbmd0
aExpc3QuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgpAQCAtNTcsMTAgKzU4LDYg
QEAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlclNWR1RleHQpOwogCiBSZW5kZXJT
VkdUZXh0OjpSZW5kZXJTVkdUZXh0KFNWR1RleHRFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHls
ZSYmIHN0eWxlKQogICAgIDogUmVuZGVyU1ZHQmxvY2soZWxlbWVudCwgV1RGTW92ZShzdHlsZSkp
Ci0gICAgLCBtX25lZWRzUmVvcmRlcmluZyhmYWxzZSkKLSAgICAsIG1fbmVlZHNQb3NpdGlvbmlu
Z1ZhbHVlc1VwZGF0ZShmYWxzZSkKLSAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkK
LSAgICAsIG1fbmVlZHNUZXh0TWV0cmljc1VwZGF0ZShmYWxzZSkKIHsKIH0KIApAQCAtMzExLDE1
ICszMDgsMjcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZUZvbnRJbkFsbERlc2NlbmRhbnRz
KFJlbmRlck9iamVjdCogc3RhcnQsIFNWR1RleHRMYXlvdXQKIAogdm9pZCBSZW5kZXJTVkdUZXh0
OjpsYXlvdXQoKQogeworICAgIGF1dG8gaXNMYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCA9IFsm
XSgpIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICAgICAgcmV0dXJu
IGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpOworI2Vu
ZGlmCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCiAgICAgU3RhY2tTdGF0czo6TGF5
b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50OwogICAgIEFTU0VSVChuZWVkc0xheW91dCgp
KTsKLSAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBTVkdSZW5kZXJTdXBwb3J0
OjpjaGVja0ZvclNWR1JlcGFpbnREdXJpbmdMYXlvdXQoKnRoaXMpKTsKKyAgICBMYXlvdXRSZXBh
aW50ZXIgcmVwYWludGVyKCp0aGlzLCBpc0xheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkgPyBj
aGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSA6IFNWR1JlbmRlclN1cHBvcnQ6OmNoZWNrRm9y
U1ZHUmVwYWludER1cmluZ0xheW91dCgqdGhpcykpOworCisgICAgLy8gRklYTUU6IFtMQlNFXSBV
cHN0cmVhbSBTVkdMZW5ndGhDb250ZXh0IGNoYW5nZXMKKyAgICAvLyB0ZXh0RWxlbWVudCgpLnVw
ZGF0ZUxlbmd0aENvbnRleHQoKTsKIAogICAgIGJvb2wgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0lu
UGFyZW50cyA9IGZhbHNlOwotICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7Ci0gICAg
ICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSB0ZXh0RWxlbWVudCgpLmFuaW1hdGVkTG9jYWxUcmFuc2Zv
cm0oKTsKLSAgICAgICAgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOwotICAgICAgICB1
cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKKyAgICBpZiAoIWlzTGF5ZXJC
YXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVw
ZGF0ZSkgeworICAgICAgICAgICAgbV9sb2NhbFRyYW5zZm9ybSA9IHRleHRFbGVtZW50KCkuYW5p
bWF0ZWRMb2NhbFRyYW5zZm9ybSgpOworICAgICAgICAgICAgbV9uZWVkc1RyYW5zZm9ybVVwZGF0
ZSA9IGZhbHNlOworICAgICAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9
IHRydWU7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIWV2ZXJIYWRMYXlvdXQoKSkgewpA
QCAtMzQ3LDggKzM1NiwxNSBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiAgICAgICAg
IG1fbmVlZHNQb3NpdGlvbmluZ1ZhbHVlc1VwZGF0ZSA9IGZhbHNlOwogICAgICAgICB1cGRhdGVD
YWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKICAgICB9IGVsc2UgewotICAgICAgICBM
ZWdhY3lSZW5kZXJTVkdSb290KiByb290T2JqID0gU1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVS
b290T2JqZWN0KCp0aGlzKTsKLSAgICAgICAgaWYgKG1fbmVlZHNUZXh0TWV0cmljc1VwZGF0ZSB8
fCAocm9vdE9iaiAmJiByb290T2JqLT5pc0xheW91dFNpemVDaGFuZ2VkKCkpKSB7CisgICAgICAg
IGJvb2wgaXNMYXlvdXRTaXplQ2hhbmdlZCA9IGZhbHNlOworICAgICAgICBpZiAoYXV0byogbGVn
YWN5Um9vdE9iamVjdCA9IGxpbmVhZ2VPZlR5cGU8TGVnYWN5UmVuZGVyU1ZHUm9vdD4oKnRoaXMp
LmZpcnN0KCkpCisgICAgICAgICAgICBpc0xheW91dFNpemVDaGFuZ2VkID0gbGVnYWN5Um9vdE9i
amVjdC0+aXNMYXlvdXRTaXplQ2hhbmdlZCgpOworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdf
RU5HSU5FKQorICAgICAgICBlbHNlIGlmIChhdXRvKiByb290T2JqZWN0ID0gbGluZWFnZU9mVHlw
ZTxSZW5kZXJTVkdSb290PigqdGhpcykuZmlyc3QoKSkKKyAgICAgICAgICAgIGlzTGF5b3V0U2l6
ZUNoYW5nZWQgPSByb290T2JqZWN0LT5pc0xheW91dFNpemVDaGFuZ2VkKCk7CisjZW5kaWYKKwor
ICAgICAgICBpZiAobV9uZWVkc1RleHRNZXRyaWNzVXBkYXRlIHx8IGlzTGF5b3V0U2l6ZUNoYW5n
ZWQpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSByb290IGxheW91dCBzaXplIGNoYW5nZWQgKGVn
LiB3aW5kb3cgc2l6ZSBjaGFuZ2VzKSBvciB0aGUgdHJhbnNmb3JtIHRvIHRoZSByb290CiAgICAg
ICAgICAgICAvLyBjb250ZXh0IGhhcyBjaGFuZ2VkIHRoZW4gcmVjb21wdXRlIHRoZSBvbi1zY3Jl
ZW4gZm9udCBzaXplLgogICAgICAgICAgICAgdXBkYXRlRm9udEluQWxsRGVzY2VuZGFudHModGhp
cywgJm1fbGF5b3V0QXR0cmlidXRlc0J1aWxkZXIpOwpAQCAtMzY1LDMzICszODEsNDAgQEAgdm9p
ZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQogICAgIC8vIFJlZHVjZWQgdmVyc2lvbiBvZiBSZW5k
ZXJCbG9jazo6bGF5b3V0QmxvY2soKSwgd2hpY2ggb25seSB0YWtlcyBjYXJlIG9mIFNWRyB0ZXh0
LgogICAgIC8vIEFsbCBpZiBicmFuY2hlcyB0aGF0IGNvdWxkIGNhdXNlIGVhcmx5IGV4aXQgaW4g
UmVuZGVyQmxvY2tzIGxheW91dEJsb2NrKCkgbWV0aG9kIGFyZSB0dXJuZWQgaW50byBhc3NlcnRp
b25zLgogICAgIEFTU0VSVCghaXNJbmxpbmUoKSk7Ci0gICAgQVNTRVJUKCFzaW1wbGlmaWVkTGF5
b3V0KCkpOwogICAgIEFTU0VSVCghc2Nyb2xsc092ZXJmbG93KCkpOwogICAgIEFTU0VSVCghaGFz
Q29udHJvbENsaXAoKSk7CiAgICAgQVNTRVJUKCFtdWx0aUNvbHVtbkZsb3coKSk7CiAgICAgQVNT
RVJUKCFwb3NpdGlvbmVkT2JqZWN0cygpKTsKLSAgICBBU1NFUlQoIW1fb3ZlcmZsb3cpOwogICAg
IEFTU0VSVCghaXNBbm9ueW1vdXNCbG9jaygpKTsKKyAgICBpZiAoIWlzTGF5ZXJCYXNlZFNWR0Vu
Z2luZUVuYWJsZWQoKSkgeworICAgICAgICBBU1NFUlQoIXNpbXBsaWZpZWRMYXlvdXQoKSk7Cisg
ICAgICAgIEFTU0VSVCghbV9vdmVyZmxvdyk7CisgICAgfQogCiAgICAgaWYgKCFmaXJzdENoaWxk
KCkpCiAgICAgICAgIHNldENoaWxkcmVuSW5saW5lKHRydWUpOwogCiAgICAgLy8gRklYTUU6IFdl
IG5lZWQgdG8gZmluZCBhIHdheSB0byBvbmx5IGxheW91dCB0aGUgY2hpbGQgYm94ZXMsIGlmIG5l
ZWRlZC4KICAgICBGbG9hdFJlY3Qgb2xkQm91bmRhcmllcyA9IG9iamVjdEJvdW5kaW5nQm94KCk7
CisgICAgYm9vbCBsYXlvdXRDaGFuZ2VkID0gZXZlckhhZExheW91dCgpICYmIHNlbGZOZWVkc0xh
eW91dCgpOwogICAgIEFTU0VSVChjaGlsZHJlbklubGluZSgpKTsKICAgICBMYXlvdXRVbml0IHJl
cGFpbnRMb2dpY2FsVG9wOwogICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxCb3R0b207CiAg
ICAgcmVidWlsZEZsb2F0aW5nT2JqZWN0U2V0RnJvbUludHJ1ZGluZ0Zsb2F0cygpOwogICAgIGxh
eW91dElubGluZUNoaWxkcmVuKHRydWUsIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNh
bEJvdHRvbSk7CiAKKyAgICAvLyB1cGRhdGVQb3NpdGlvbkFuZE92ZXJmbG93KCkgaXMgY2FsbGVk
IGJ5IFNWR1Jvb3RJbmxpbmVCb3gsIGFmdGVyIGZvcmNlTGF5b3V0SW5saW5lQ2hpbGRyZW4oKSBy
YW4sIGJlZm9yZSB0aGlzIHBvaW50IGlzIHJlYWNoZWQuCiAgICAgaWYgKG1fbmVlZHNSZW9yZGVy
aW5nKQogICAgICAgICBtX25lZWRzUmVvcmRlcmluZyA9IGZhbHNlOwogCi0gICAgaWYgKCF1cGRh
dGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQorICAgIGlmIChpc0xheWVyQmFzZWRTVkdFbmdp
bmVFbmFibGVkKCkpIHsKKyAgICAgICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKTsKKyAgICAgICAg
dXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOyAvLyBObyBsb25nZXIgbmVl
ZGVkIGZvciBMQlNFLgorICAgIH0gZWxzZSBpZiAoIXVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBh
cmVudHMpCiAgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSBvbGRCb3Vu
ZGFyaWVzICE9IG9iamVjdEJvdW5kaW5nQm94KCk7CiAKICAgICAvLyBJbnZhbGlkYXRlIGFsbCBy
ZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgotICAgIGlmIChl
dmVySGFkTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpCisgICAgaWYgKGxheW91dENoYW5n
ZWQpCiAgICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKCp0aGlz
KTsKIAogICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgpA
QCAtNDA0LDYgKzQyNyw5IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKIAogYm9vbCBS
ZW5kZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJl
bnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFT
RURfU1ZHX0VOR0lORSkKKyAgICBBU1NFUlQoIWRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJh
c2VkU1ZHRW5naW5lRW5hYmxlZCgpKTsKKyNlbmRpZgogICAgIFBvaW50ZXJFdmVudHNIaXRSdWxl
cyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19URVhUX0hJVFRFU1RJTkcsIHJl
cXVlc3QsIHN0eWxlKCkuZWZmZWN0aXZlUG9pbnRlckV2ZW50cygpKTsKICAgICBib29sIGlzVmlz
aWJsZSA9IChzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlKTsKICAg
ICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgewpAQCAtNDEyLDcg
KzQzOCw3IEBAIGJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAgICAgICAgICBGbG9hdFBvaW50
IGxvY2FsUG9pbnQgPSB2YWx1ZU9yRGVmYXVsdChsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkuaW52
ZXJzZSgpKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKIAogICAgICAgICAgICAgaWYgKCFTVkdS
ZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKCp0aGlzLCBsb2NhbFBvaW50KSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICAgICAgU1ZHSGl0VGVzdEN5Y2xlRGV0ZWN0aW9uU2NvcGUgaGl0
VGVzdFNjb3BlKCp0aGlzKTsKIApAQCAtNDI0LDYgKzQ1MCwzMyBAQCBib29sIFJlbmRlclNWR1Rl
eHQ6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9T
VkdfRU5HSU5FKQorYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAgIEFTU0VSVChkb2N1
bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSk7CisgICAgYXV0
byBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOworCisg
ICAgUG9pbnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6
U1ZHX1RFWFRfSElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUoKS5wb2ludGVyRXZlbnRzKCkpOwor
ICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6
OlZpc2libGUpOworICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxl
KSB7CisgICAgICAgIGlmICgoaGl0UnVsZXMuY2FuSGl0U3Ryb2tlICYmIChzdHlsZSgpLnN2Z1N0
eWxlKCkuaGFzU3Ryb2tlKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpKQorICAgICAgICB8
fCAoaGl0UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3R5bGUoKS5zdmdTdHlsZSgpLmhhc0ZpbGwoKSB8
fCAhaGl0UnVsZXMucmVxdWlyZUZpbGwpKSkgeworICAgICAgICAgICAgYXV0byBsb2NhbFBvaW50
ID0gbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpOworICAgICAgICAgICAgYXV0byBjb29yZGlu
YXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24gPSBub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKSAt
IGFkanVzdGVkTG9jYXRpb247CisgICAgICAgICAgICBsb2NhbFBvaW50Lm1vdmUoY29vcmRpbmF0
ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uKTsKKworICAgICAgICAgICAgaWYgKCFTVkdSZW5kZXJT
dXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKCp0aGlzLCBsb2NhbFBvaW50KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIFNWR0hpdFRlc3RDeWNsZURldGVj
dGlvblNjb3BlIGhpdFRlc3RTY29wZSgqdGhpcyk7CisgICAgICAgICAgICByZXR1cm4gUmVuZGVy
QmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwg
YWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIFZpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdU
ZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGVudHMs
IGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCkKIHsKICAgICBMZWdhY3lS
b290SW5saW5lQm94KiByb290Qm94ID0gZmlyc3RSb290Qm94KCk7CkBAIC00NDAsMTggKzQ5Myw1
MyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRlbgogICAgIHJldHVybiBjbG9zZXN0Qm94LT5yZW5k
ZXJlcigpLnBvc2l0aW9uRm9yUG9pbnQoeyBwb2ludEluQ29udGVudHMueCgpLCBMYXlvdXRVbml0
KGNsb3Nlc3RCb3gtPnkoKSkgfSwgZnJhZ21lbnQpOwogfQogCi12b2lkIFJlbmRlclNWR1RleHQ6
OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkg
Y29uc3QKLXsKLSAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3Vu
ZGluZ0JveCgpLCBVc2VUcmFuc2Zvcm1zLCB3YXNGaXhlZCkpOwotfQotCi12b2lkIFJlbmRlclNW
R1RleHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYpCit2
b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0KCkucGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGFpbnRJbmZvLnBo
YXNlICE9IFBhaW50UGhhc2U6OkZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50
UGhhc2U6OlNlbGVjdGlvbikKLSAgICAgICAgIHJldHVybjsKKyAgICBpZiAocGFpbnRJbmZvLnBo
YXNlICE9IFBhaW50UGhhc2U6OkNsaXBwaW5nTWFzayAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFp
bnRQaGFzZTo6TWFzayAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3Vu
ZCAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6T3V0bGluZSAmJiBwYWludEluZm8u
cGhhc2UgIT0gUGFpbnRQaGFzZTo6U2VsZk91dGxpbmUpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykpCisgICAgICAgIHJl
dHVybjsKKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1
bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAg
ICBpZiAoc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6SGlkZGVuIHx8IHN0eWxl
KCkuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpOb25lKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFu
Z2VzCisgICAgICAgIC8vIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6c2hvdWxkUGFpbnRIaWRkZW5S
ZW5kZXJlcigqdGhpcykpCisgICAgICAgIC8vICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHBh
aW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpDbGlwcGluZ01hc2spIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAg
ICAgICAgICAvLyBTVkdSZW5kZXJTdXBwb3J0OjpwYWludFNWR0NsaXBwaW5nTWFzaygqdGhpcywg
cGFpbnRJbmZvKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1
dG8gYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAgICAg
ICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpNYXNrKSB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcworICAg
ICAgICAgICAgLy8gU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRTVkdNYXNrKCp0aGlzLCBwYWludElu
Zm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpPdXRsaW5lIHx8
IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpTZWxmT3V0bGluZSkgeworICAgICAgICAg
ICAgUmVuZGVyQmxvY2s6OnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKHBhaW50SW5mby5jb250ZXh0KCkpOworCisgICAgICAgIGF1dG8gY29vcmRp
bmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gYWRqdXN0ZWRQYWludE9mZnNldCAtIG5vbWlu
YWxTVkdMYXlvdXRMb2NhdGlvbigpOworICAgICAgICBwYWludEluZm8uY29udGV4dCgpLnRyYW5z
bGF0ZShjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24ud2lkdGgoKSwgY29vcmRpbmF0
ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uLmhlaWdodCgpKTsKKworICAgICAgICBSZW5kZXJCbG9j
azo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYKIAogICAgIFBhaW50SW5mbyBibG9ja0luZm8ocGFpbnRJbmZvKTsKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoYmxvY2tJbmZvLmNvbnRleHQoKSk7CkBA
IC00NzksNiArNTY3LDExIEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpzdHJva2VCb3VuZGlu
Z0JveCgpIGNvbnN0CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpyZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpIGNvbnN0CiB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJ
TkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5h
YmxlZCgpKQorICAgICAgICByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0
ZVJlcGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7CisjZW5kaWYKKwogICAgIEZsb2F0UmVjdCByZXBh
aW50UmVjdCA9IHN0cm9rZUJvdW5kaW5nQm94KCk7CiAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50
ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKCp0aGlzLCByZXBhaW50UmVjdCk7CiAKQEAg
LTQ4OCw0ICs1ODEsMzIgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1RleHQ6OnJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCkgY29uc3QKICAgICByZXR1cm4gcmVwYWludFJlY3Q7CiB9CiAKK3Zv
aWQgUmVuZGVyU1ZHVGV4dDo6dXBkYXRlUG9zaXRpb25BbmRPdmVyZmxvdyhjb25zdCBGbG9hdFJl
Y3QmIGJvdW5kYXJpZXMpCit7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisg
ICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgp
KSB7CisgICAgICAgIGNsZWFyT3ZlcmZsb3coKTsKKworICAgICAgICBtX29iamVjdEJvdW5kaW5n
Qm94ID0gYm91bmRhcmllczsKKworICAgICAgICBhdXRvIGJvdW5kaW5nUmVjdCA9IGVuY2xvc2lu
Z0xheW91dFJlY3QobV9vYmplY3RCb3VuZGluZ0JveCk7CisgICAgICAgIHNldExvY2F0aW9uKGJv
dW5kaW5nUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgc2V0U2l6ZShib3VuZGluZ1JlY3Quc2l6
ZSgpKTsKKworICAgICAgICBhdXRvIG92ZXJmbG93UmVjdCA9IHZpc3VhbE92ZXJmbG93UmVjdEVx
dWl2YWxlbnQoKTsKKyAgICAgICAgaWYgKGNvbnN0IGF1dG8qIHRleHRTaGFkb3cgPSBzdHlsZSgp
LnRleHRTaGFkb3coKSkKKyAgICAgICAgICAgIHRleHRTaGFkb3ctPmFkanVzdFJlY3RGb3JTaGFk
b3cob3ZlcmZsb3dSZWN0KTsKKworICAgICAgICBhZGRWaXN1YWxPdmVyZmxvdyhvdmVyZmxvd1Jl
Y3QpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBhdXRvIGJvdW5kaW5n
UmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QoYm91bmRhcmllcyk7CisgICAgc2V0TG9jYXRpb24o
Ym91bmRpbmdSZWN0LmxvY2F0aW9uKCkpOworICAgIHNldFNpemUoYm91bmRpbmdSZWN0LnNpemUo
KSk7CisgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IGJvdW5kaW5nUmVjdDsKKyAgICBBU1NFUlQo
bV9vYmplY3RCb3VuZGluZ0JveCA9PSBmcmFtZVJlY3QoKSk7Cit9CisKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKaW5kZXggNDQxMjY5ODg1NzkxMzAy
NDI4MmZmZjBhOGU2NjUxYjZiN2YxY2RjNi4uNjU3NDAxNGM2OGU3OTNhZmFiY2NhNDBhZDk2MDE5
YWIwNmY3YzI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdU
ZXh0LmgKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR0Jsb2NrLmgiCisjaW5jbHVkZSAiU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbi5oIgogI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Miw5ICs0MywxMCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0NoaWxkQWxsb3dlZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJTdHlsZSYp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXROZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBk
YXRlKCkgeyBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUgPSB0cnVlOyB9Ci0gICAgdm9p
ZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIG92ZXJyaWRlIHsgbV9uZWVkc1RyYW5zZm9ybVVw
ZGF0ZSA9IHRydWU7IH0KICAgICB2b2lkIHNldE5lZWRzVGV4dE1ldHJpY3NVcGRhdGUoKSB7IG1f
bmVlZHNUZXh0TWV0cmljc1VwZGF0ZSA9IHRydWU7IH0KLSAgICBGbG9hdFJlY3QgcmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIEZJWE1FOiBb
TEJTRV0gT25seSBuZWVkZWQgZm9yIGxlZ2FjeSBTVkcgZW5naW5lLgorICAgIHZvaWQgc2V0TmVl
ZHNUcmFuc2Zvcm1VcGRhdGUoKSBvdmVycmlkZSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0
cnVlOyB9CiAKICAgICBzdGF0aWMgUmVuZGVyU1ZHVGV4dCogbG9jYXRlUmVuZGVyU1ZHVGV4dEFu
Y2VzdG9yKFJlbmRlck9iamVjdCYpOwogICAgIHN0YXRpYyBjb25zdCBSZW5kZXJTVkdUZXh0KiBs
b2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoY29uc3QgUmVuZGVyT2JqZWN0Jik7CkBAIC01OCw4
ICs2MCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdWJ0cmVlU3R5bGVEaWRDaGFuZ2UoUmVuZGVy
U1ZHSW5saW5lVGV4dCopOwogICAgIHZvaWQgc3VidHJlZVRleHREaWRDaGFuZ2UoUmVuZGVyU1ZH
SW5saW5lVGV4dCopOwogCi0gICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZnJhbWVSZWN0KCk7IH0KLSAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91
bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdC
b3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9CisgICAgRmxv
YXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgZmluYWw7CisgICAgRmxvYXRSZWN0IHJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgZmluYWw7CisKKyNpZiBFTkFCTEUo
TEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVj
dEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpj
b21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0KCp0aGlzKTsgfQorI2VuZGlmCisgICAgdm9pZCB1cGRh
dGVQb3NpdGlvbkFuZE92ZXJmbG93KGNvbnN0IEZsb2F0UmVjdCYpOwogCiBwcml2YXRlOgogICAg
IHZvaWQgZ3JhcGhpY3NFbGVtZW50KCkgY29uc3QgPSBkZWxldGU7CkBAIC02OCwyOCArNzYsMzgg
QEAgcHJpdmF0ZToKICAgICBib29sIGlzU1ZHVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KIAogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQm
KSBvdmVycmlkZTsKLSAgICBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0
VGVzdEFjdGlvbikgb3ZlcnJpZGU7CisgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9u
SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVz
dEFjdGlvbikgb3ZlcnJpZGU7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQo
Y29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopIG92ZXJy
aWRlOwogCi0gICAgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2b2lkIGxheW91dCgpIG92ZXJyaWRlOworICAgIGJvb2wgcmVxdWlyZXNM
YXllcigpIGNvbnN0IG92ZXJyaWRlCisgICAgeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdf
RU5HSU5FKQorICAgICAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdF
bmdpbmVFbmFibGVkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxG
bG9hdFF1YWQ+JiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgbGF5
b3V0KCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIG92ZXJyaWRlOwog
CisgICAgLy8gRklYTUU6IFtMQlNFXSBCZWdpbiBjb2RlIG9ubHkgbmVlZGVkIGZvciBsZWdhY3kg
U1ZHIGVuZ2luZS4KKyAgICBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0
VGVzdEFjdGlvbikgb3ZlcnJpZGU7CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRv
UGFyZW50VHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9y
bTsgfQogICAgIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKyAgICAvLyBGSVhNRTogW0xCU0VdIEVuZCBj
b2RlIG9ubHkgbmVlZGVkIGZvciBsZWdhY3kgU1ZHIGVuZ2luZS4KIAogICAgIGJvb2wgc2hvdWxk
SGFuZGxlU3VidHJlZU11dGF0aW9ucygpIGNvbnN0OwogCi0gICAgYm9vbCBtX25lZWRzUmVvcmRl
cmluZyA6IDE7Ci0gICAgYm9vbCBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUgOiAxOwot
ICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzVGV4
dE1ldHJpY3NVcGRhdGUgOiAxOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3Jt
OworICAgIGJvb2wgbV9uZWVkc1Jlb3JkZXJpbmcgOiAxIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
bmVlZHNQb3NpdGlvbmluZ1ZhbHVlc1VwZGF0ZSA6IDEgeyBmYWxzZSB9OworICAgIGJvb2wgbV9u
ZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDEgeyB0cnVlIH07IC8vIEZJWE1FOiBbTEJTRV0gT25seSBu
ZWVkZWQgZm9yIGxlZ2FjeSBTVkcgZW5naW5lLgorICAgIGJvb2wgbV9uZWVkc1RleHRNZXRyaWNz
VXBkYXRlIDogMSB7IGZhbHNlIH07CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zv
cm07IC8vIEZJWE1FOiBbTEJTRV0gT25seSBuZWVkZWQgZm9yIGxlZ2FjeSBTVkcgZW5naW5lLgog
ICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlciBtX2xheW91dEF0dHJpYnV0ZXNCdWls
ZGVyOwogICAgIFZlY3RvcjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyo+IG1fbGF5b3V0QXR0cmli
dXRlczsKKyAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGluZ0JveDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCmluZGV4IGIwMGZi
NTBhYTllMDAwMTc5N2ZjOTU1MDg1ODZhNmIyMTQwNzdmNzkuLjBkZWIwZTM3YmJjM2RmZWVlMDk5
MjAwYmZkNWM1YjAwNDhjOWNjMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcApA
QCAtOTcsOCArOTcsMTAgQEAgdm9pZCBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjp1
cGRhdGVGcm9tU3R5bGUoKQogewogICAgIFJlbmRlclNWR0NvbnRhaW5lcjo6dXBkYXRlRnJvbVN0
eWxlKCk7CiAKLSAgICBpZiAoYXNzb2NpYXRlZFVzZUVsZW1lbnQoZ3JhcGhpY3NFbGVtZW50KCkp
KQorICAgIGlmIChhc3NvY2lhdGVkVXNlRWxlbWVudChncmFwaGljc0VsZW1lbnQoKSkpIHsKICAg
ICAgICAgc2V0SGFzU1ZHVHJhbnNmb3JtKCk7CisgICAgICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0
ZWRQcm9wZXJ0eSgpOworICAgIH0KIH0KIAogdm9pZCBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29u
dGFpbmVyOjphcHBseVRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIE9w
dGlvblNldDxSZW5kZXJTdHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uPiBvcHRpb25zKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGlu
Z0JveENvbXB1dGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbi5jcHAKaW5kZXggNzk4MDk4ZGViMmM5ODU0NjViOTE2MDc4NjQ3
OTRjODZlZmI0NjczMy4uNGRiNWM4MjE2ZmZhMDgxODVkMDAwNTkzZjdlNTIxYmQ1MTE2ZTJhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb24uY3BwCkBAIC0xNzUsOCArMTc1LDEwIEBAIEZsb2F0UmVjdCBTVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uOjpoYW5kbGVSb290T3JDb250YWluZXIoY29uc3QgU1ZHQm91
bmRpbmdCb3hDCiAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246
Ok92ZXJyaWRlQm94V2l0aEZpbHRlckJveEZvckNoaWxkcmVuKSAmJiBpczxSZW5kZXJTVkdDb250
YWluZXI+KGNoaWxkKSkKICAgICAgICAgICAgIGNoaWxkQm91bmRpbmdCb3hDb21wdXRhdGlvbi5h
ZGp1c3RCb3hGb3JDbGlwcGluZ0FuZEVmZmVjdHMoeyBEZWNvcmF0aW9uT3B0aW9uOjpPdmVycmlk
ZUJveFdpdGhGaWx0ZXJCb3ggfSwgY2hpbGRCb3gpOwogCi0gICAgICAgIGlmIChhdXRvIGxheWVy
VHJhbnNmb3JtID0gdHJhbnNmb3JtYXRpb25NYXRyaXhGcm9tQ2hpbGQoY2hpbGQpKQotICAgICAg
ICAgICAgY2hpbGRCb3ggPSBsYXllclRyYW5zZm9ybS0+bWFwUmVjdChjaGlsZEJveCk7CisgICAg
ICAgIGlmICghb3B0aW9ucy5jb250YWlucyhEZWNvcmF0aW9uT3B0aW9uOjpJZ25vcmVUcmFuc2Zv
cm1hdGlvbnMpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBsYXllclRyYW5zZm9ybSA9IHRyYW5z
Zm9ybWF0aW9uTWF0cml4RnJvbUNoaWxkKGNoaWxkKSkKKyAgICAgICAgICAgICAgICBjaGlsZEJv
eCA9IGxheWVyVHJhbnNmb3JtLT5tYXBSZWN0KGNoaWxkQm94KTsKKyAgICAgICAgfQogCiAgICAg
ICAgIGlmIChvcHRpb25zID09IG9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbikKICAgICAgICAg
ICAgIHVuaXRlQm91bmRpbmdCb3hSZXNwZWN0aW5nVmFsaWRpdHkoYm94VmFsaWQsIGJveCwgY2hp
bGQsIGNoaWxkQm94KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmgKaW5kZXggODNkYTYzYmQ2ZjA5ODJlYzY3ZmE1
YjNiYzk0NmJkODgyZDI1OWQ0NC4uMGQ3NTRhZDQzMTFlYzg1ZGI5MTcwMDkwOGEwYTAzYjEyZDU2
NmU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGlu
Z0JveENvbXB1dGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdo
dCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIxLCAyMDIyIElnYWxp
YSBTLkwuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM1LDE1ICszNSwxNiBAQCBwdWJsaWM6CiAg
ICAgZXhwbGljaXQgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbihjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0Jik7CiAgICAgflNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24oKSA9IGRlZmF1bHQ7
CiAKLSAgICBlbnVtIGNsYXNzIERlY29yYXRpb25PcHRpb24gOiB1aW50OF90IHsKKyAgICBlbnVt
IGNsYXNzIERlY29yYXRpb25PcHRpb24gOiB1aW50MTZfdCB7CiAgICAgICAgIEluY2x1ZGVGaWxs
U2hhcGUgICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLCAvKiBjb3JyZXNwb25kcyB0byAnYm9v
bCBmaWxsJyAgICAgKi8KICAgICAgICAgSW5jbHVkZVN0cm9rZVNoYXBlICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDEsIC8qIGNvcnJlc3BvbmRzIHRvICdib29sIHN0cm9rZScgICAqLwogICAgICAg
ICBJbmNsdWRlTWFya2VycyAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMiwgLyogY29ycmVz
cG9uZHMgdG8gJ2Jvb2wgbWFya2VycycgICovCiAgICAgICAgIEluY2x1ZGVDbGlwcGVycyAgICAg
ICAgICAgICAgICAgICAgID0gMSA8PCAzLCAvKiBjb3JyZXNwb25kcyB0byAnYm9vbCBjbGlwcGVy
cycgKi8KICAgICAgICAgSW5jbHVkZU1hc2tlcnMgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8
IDQsIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAgICAqLwogICAgICAgICBJbmNsdWRl
T3V0bGluZSAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNSwgLyogV2ViS2l0IGV4dGVuc2lv
biAtIGludGVybmFsICAgICovCi0gICAgICAgIE92ZXJyaWRlQm94V2l0aEZpbHRlckJveCAgICAg
ICAgICAgID0gMSA8PCA2LCAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJuYWwgICAgKi8KLSAg
ICAgICAgT3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94Rm9yQ2hpbGRyZW4gPSAxIDw8IDcgIC8qIFdl
YktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAgICAqLworICAgICAgICBJZ25vcmVUcmFuc2Zvcm1h
dGlvbnMgICAgICAgICAgICAgICA9IDEgPDwgNiwgLyogV2ViS2l0IGV4dGVuc2lvbiAtIGludGVy
bmFsICAgICovCisgICAgICAgIE92ZXJyaWRlQm94V2l0aEZpbHRlckJveCAgICAgICAgICAgID0g
MSA8PCA3LCAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJuYWwgICAgKi8KKyAgICAgICAgT3Zl
cnJpZGVCb3hXaXRoRmlsdGVyQm94Rm9yQ2hpbGRyZW4gPSAxIDw8IDggIC8qIFdlYktpdCBleHRl
bnNpb24gLSBpbnRlcm5hbCAgICAqLwogICAgIH07CiAKICAgICB1c2luZyBEZWNvcmF0aW9uT3B0
aW9ucyA9IE9wdGlvblNldDxEZWNvcmF0aW9uT3B0aW9uPjsKQEAgLTczLDcgKzc0LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAogICAgICAgICBhdXRvIHZp
c3VhbE92ZXJmbG93UmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QocmVwYWludEJvdW5kaW5nQm94
KTsKLSAgICAgICAgdmlzdWFsT3ZlcmZsb3dSZWN0Lm1vdmVCeSgtZmxvb3JlZExheW91dFBvaW50
KHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCkubWluWE1pbllDb3JuZXIoKSkpOworICAgICAg
ICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5KC1yZW5kZXJlci5ub21pbmFsU1ZHTGF5b3V0TG9j
YXRpb24oKSk7CiAgICAgICAgIHJldHVybiB2aXN1YWxPdmVyZmxvd1JlY3Q7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5j
cHAKaW5kZXggODEzYzNlY2VmOTM4YmRhNDg2NDQ0ZDRhZjcwOGQ5N2NiNzNjZWFlMC4uODMyODJj
ZjAzMTY2ZTgyZGM0ZDI2MDY5MTAwOTI0ZmIyODUwZTU3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmNwcApAQCAtMTIwLDQxICsx
MjAsNiBAQCB2b2lkIFNWR0NvbnRhaW5lckxheW91dDo6bGF5b3V0Q2hpbGRyZW4oYm9vbCBjb250
YWluZXJOZWVkc0xheW91dCkKICAgICAgICAgQVNTRVJUKGVsZW1lbnRzVGhhdERpZE5vdFJlY2Vp
dmVMYXlvdXQuaXNFbXB0eSgpKTsKIH0KIAotc3RhdGljIGlubGluZSBMYXlvdXRQb2ludCBsYXlv
dXRMb2NhdGlvbkZyb21SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQotewot
ICAgIGlmIChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIpKQotICAgICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXlvdXRMb2NhdGlv
bigpOwotCi0gICAgaWYgKGlzPFJlbmRlclNWR0Jsb2NrPihyZW5kZXJlcikpIC8vIDxmb3JlaWdu
T2JqZWN0PiAvIDx0ZXh0PgotICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHQmxvY2s+
KHJlbmRlcmVyKS5sb2NhdGlvbigpOwotCi0gICAgaWYgKGlzPFJlbmRlclNWR0lubGluZT4ocmVu
ZGVyZXIpKSAvLyA8dHNwYW4+IC8gPHRleHRQYXRoPgotICAgICAgICByZXR1cm4geyB9OwotCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotc3RhdGljIGlu
bGluZSB2b2lkIHNldExheW91dExvY2F0aW9uRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0JiByZW5k
ZXJlciwgY29uc3QgTGF5b3V0UG9pbnQmIG5ld0xvY2F0aW9uKQotewotICAgIGlmIChpczxSZW5k
ZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIpKSB7Ci0gICAgICAgIGRvd25jYXN0PFJlbmRlclNW
R01vZGVsT2JqZWN0PihyZW5kZXJlcikuc2V0TGF5b3V0TG9jYXRpb24obmV3TG9jYXRpb24pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gPGZvcmVpZ25PYmplY3Q+IC8gPHRleHQ+
Ci0gICAgaWYgKGlzPFJlbmRlclNWR0Jsb2NrPihyZW5kZXJlcikpIHsKLSAgICAgICAgZG93bmNh
c3Q8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVyKS5zZXRMb2NhdGlvbihuZXdMb2NhdGlvbik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyA8dHNwYW4+IC8gPHRleHRQYXRoPgotICAg
IGlmIChpczxSZW5kZXJTVkdJbmxpbmU+KHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KIHZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0Ojpw
b3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcigpCiB7CiAgICAgaWYgKG1fcG9zaXRp
b25lZENoaWxkcmVuLmlzRW1wdHkoKSkKQEAgLTE3Nyw0MCArMTQyLDM2IEBAIHZvaWQgU1ZHQ29u
dGFpbmVyTGF5b3V0Ojpwb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcigpCiAgICAg
fTsKIAogICAgIC8vIEFycmFuZ2UgbGF5b3V0IGxvY2F0aW9uIGZvciBhbGwgY2hpbGQgcmVuZGVy
ZXJzIHJlbGF0aXZlIHRvIHRoZSBjb250YWluZXIgbGF5b3V0IGxvY2F0aW9uLgotICAgIGF1dG8g
cGFyZW50TGF5b3V0TG9jYXRpb24gPSBmbG9vcmVkTGF5b3V0UG9pbnQobV9jb250YWluZXIub2Jq
ZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKTsKLSAgICBmb3IgKFJlbmRlck9iamVj
dCYgY2hpbGQgOiBtX3Bvc2l0aW9uZWRDaGlsZHJlbikgeworICAgIGF1dG8gcGFyZW50TGF5b3V0
TG9jYXRpb24gPSBtX2NvbnRhaW5lci5ub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKTsKKyAgICBm
b3IgKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIGNoaWxkIDogbV9wb3NpdGlvbmVkQ2hpbGRyZW4p
IHsKICAgICAgICAgdmVyaWZ5UG9zaXRpb25lZENoaWxkUmVuZGVyZXJFeHBlY3RhdGlvbihjaGls
ZCk7CiAKLSAgICAgICAgYXV0byBvYmplY3RCb3VuZGluZ0JveENoaWxkID0gY2hpbGQub2JqZWN0
Qm91bmRpbmdCb3goKTsKLSAgICAgICAgYXV0byBsYXlvdXRMb2NhdGlvbiA9IGZsb29yZWRMYXlv
dXRQb2ludChvYmplY3RCb3VuZGluZ0JveENoaWxkLm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAg
ICBhdXRvIGRlc2lyZWRMYXlvdXRMb2NhdGlvbiA9IHRvTGF5b3V0UG9pbnQobGF5b3V0TG9jYXRp
b24gLSBwYXJlbnRMYXlvdXRMb2NhdGlvbik7Ci0gICAgICAgIGF1dG8gY3VycmVudExheW91dExv
Y2F0aW9uID0gbGF5b3V0TG9jYXRpb25Gcm9tUmVuZGVyZXIoY2hpbGQpOwotICAgICAgICBpZiAo
Y3VycmVudExheW91dExvY2F0aW9uID09IGRlc2lyZWRMYXlvdXRMb2NhdGlvbikKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBzZXRMYXlvdXRMb2NhdGlvbkZvclJlbmRlcmVyKGNoaWxk
LCBkZXNpcmVkTGF5b3V0TG9jYXRpb24pOworICAgICAgICBhdXRvIGRlc2lyZWRMYXlvdXRMb2Nh
dGlvbiA9IHRvTGF5b3V0UG9pbnQoY2hpbGQubm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkgLSBw
YXJlbnRMYXlvdXRMb2NhdGlvbik7CisgICAgICAgIGlmIChjaGlsZC5jdXJyZW50U1ZHTGF5b3V0
TG9jYXRpb24oKSAhPSBkZXNpcmVkTGF5b3V0TG9jYXRpb24pCisgICAgICAgICAgICBjaGlsZC5z
ZXRDdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oZGVzaXJlZExheW91dExvY2F0aW9uKTsKICAgICB9
CiB9CiAKLXZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0Ojp2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNp
c3RlbmN5KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQordm9pZCBTVkdDb250YWluZXJM
YXlvdXQ6OnZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koY29uc3QgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCYgcmVuZGVyZXIpCiB7CiAgICAgaWYgKHJlbmRlcmVyLmlzU1ZHTGF5ZXJBd2Fy
ZVJlbmRlcmVyKCkgJiYgIXJlbmRlcmVyLmlzU1ZHUm9vdCgpKSB7Ci0gICAgICAgIGF1dG8gY3Vy
cmVudExheW91dExvY2F0aW9uID0gbGF5b3V0TG9jYXRpb25Gcm9tUmVuZGVyZXIocmVuZGVyZXIp
OworICAgICAgICBhdXRvIGN1cnJlbnRMYXlvdXRMb2NhdGlvbiA9IHJlbmRlcmVyLmN1cnJlbnRT
VkdMYXlvdXRMb2NhdGlvbigpOwogCiAgICAgICAgIGF1dG8gZXhwZWN0ZWRMYXlvdXRMb2NhdGlv
biA9IGN1cnJlbnRMYXlvdXRMb2NhdGlvbjsKLSAgICAgICAgZm9yIChhdXRvJiBhbmNlc3RvciA6
IGFuY2VzdG9yc09mVHlwZTxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBhbmNlc3RvciA6IGFuY2VzdG9yc09mVHlwZTxSZW5kZXJMYXllck1vZGVsT2JqZWN0
PihyZW5kZXJlcikpIHsKICAgICAgICAgICAgIEFTU0VSVChhbmNlc3Rvci5pc1NWR0xheWVyQXdh
cmVSZW5kZXJlcigpKTsKICAgICAgICAgICAgIGlmIChhbmNlc3Rvci5pc1NWR1Jvb3QoKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGV4cGVjdGVkTGF5b3V0TG9jYXRpb24u
bW92ZUJ5KGxheW91dExvY2F0aW9uRnJvbVJlbmRlcmVyKGFuY2VzdG9yKSk7CisgICAgICAgICAg
ICBleHBlY3RlZExheW91dExvY2F0aW9uLm1vdmVCeShhbmNlc3Rvci5jdXJyZW50U1ZHTGF5b3V0
TG9jYXRpb24oKSk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGluaXRpYWxMYXlvdXRMb2Nh
dGlvbiA9IGZsb29yZWRMYXlvdXRQb2ludChyZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpLm1p
blhNaW5ZQ29ybmVyKCkpOworICAgICAgICBhdXRvIGluaXRpYWxMYXlvdXRMb2NhdGlvbiA9IHJl
bmRlcmVyLm5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpOwogICAgICAgICBpZiAoZXhwZWN0ZWRM
YXlvdXRMb2NhdGlvbiA9PSBpbml0aWFsTGF5b3V0TG9jYXRpb24pIHsKICAgICAgICAgICAgIExP
R19XSVRIX1NUUkVBTShTVkcsIHN0cmVhbSA8PCAiLS0+IFNWR0NvbnRhaW5lckxheW91dCByZW5k
ZXJlciAiIDw8ICZyZW5kZXJlciA8PCAiICgiIDw8IHJlbmRlcmVyLnJlbmRlck5hbWUoKS5jaGFy
YWN0ZXJzKCkgPDwgIikiCi0gICAgICAgICAgICAgICAgPDwgIiAtIHZlcmlmeUxheW91dExvY2F0
aW9uQ29uc2lzdGVuY3koKSBvYmplY3RCb3VuZGluZ0JveCAvIGxheW91dExvY2F0aW9uIGFyZSBp
biBzeW5jLiIpOworICAgICAgICAgICAgICAgIDw8ICIgLSB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNv
bnNpc3RlbmN5KCkgY3VycmVudFNWR0xheW91dExvY2F0aW9uIC8gbm9taW5hbFNWR0xheW91dExv
Y2F0aW9uIGFyZSBpbiBzeW5jLiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgTE9H
X1dJVEhfU1RSRUFNKFNWRywgc3RyZWFtIDw8ICItLT4gU1ZHQ29udGFpbmVyTGF5b3V0IHJlbmRl
cmVyICIgPDwgJnJlbmRlcmVyIDw8ICIgKCIgPDwgcmVuZGVyZXIucmVuZGVyTmFtZSgpLmNoYXJh
Y3RlcnMoKSA8PCAiKSIKLSAgICAgICAgICAgICAgICA8PCAiIC0gdmVyaWZ5TGF5b3V0TG9jYXRp
b25Db25zaXN0ZW5jeSgpIG9iamVjdEJvdW5kaW5nQm94IC8gbGF5b3V0TG9jYXRpb24gaW52YXJp
YW50IHZpb2xhdGVkIC0tIG91dCBvZiBzeW5jIGR1ZSB0byBwYXJ0aWFsIGxheW91dD8iCisgICAg
ICAgICAgICAgICAgPDwgIiAtIHZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koKSBjdXJy
ZW50U1ZHTGF5b3V0TG9jYXRpb24gLyBub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24gaW52YXJpYW50
IHZpb2xhdGVkIC0tIG91dCBvZiBzeW5jIGR1ZSB0byBwYXJ0aWFsIGxheW91dD8iCiAgICAgICAg
ICAgICAgICAgPDwgIiBjdXJyZW50TGF5b3V0TG9jYXRpb249IiA8PCBjdXJyZW50TGF5b3V0TG9j
YXRpb24KICAgICAgICAgICAgICAgICA8PCAiICAoZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbj0iIDw8
IGV4cGVjdGVkTGF5b3V0TG9jYXRpb24KICAgICAgICAgICAgICAgICA8PCAiICE9IGluaXRpYWxM
YXlvdXRMb2NhdGlvbj0iIDw8IGluaXRpYWxMYXlvdXRMb2NhdGlvbiA8PCAiKSIKQEAgLTIyNCw3
ICsxODUsNyBAQCB2b2lkIFNWR0NvbnRhaW5lckxheW91dDo6dmVyaWZ5TGF5b3V0TG9jYXRpb25D
b25zaXN0ZW5jeShjb25zdCBSZW5kZXJFbGVtZW50JiByZQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KHJlbmRl
cmVyKSkgeworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJMYXll
ck1vZGVsT2JqZWN0PihyZW5kZXJlcikpIHsKICAgICAgICAgaWYgKGNoaWxkLmlzU1ZHTGF5ZXJB
d2FyZVJlbmRlcmVyKCkpCiAgICAgICAgICAgICB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3Rl
bmN5KGNoaWxkKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0NvbnRhaW5lckxheW91dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdDb250YWluZXJMYXlvdXQuaAppbmRleCBlYzEzMDkzNTEyNmNmN2VjZTE1OTk5MmE4ZGI3MWMx
MTY3MzAyNmU3Li41MzQ0MDFjY2Q0ZmI4YzhlZmMyMjU3OGZhZGJmMDYxZDFmMmZlODg4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmgK
QEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwb3NpdGlvbkNoaWxkcmVuUmVs
YXRpdmVUb0NvbnRhaW5lcigpOwogCi0gICAgc3RhdGljIHZvaWQgdmVyaWZ5TGF5b3V0TG9jYXRp
b25Db25zaXN0ZW5jeShjb25zdCBSZW5kZXJFbGVtZW50Jik7CisgICAgc3RhdGljIHZvaWQgdmVy
aWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeShjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
Jik7CiAgICAgc3RhdGljIGJvb2wgdHJhbnNmb3JtVG9Sb290Q2hhbmdlZChjb25zdCBSZW5kZXJP
YmplY3QqIGFuY2VzdG9yKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCmluZGV4IDljNmMwOTgwMTM3NmJjZDM3ZGRm
ZjlhMzkwYTNlYjAzNjY5NDM5ZjMuLmY4MjMxNWQ1ZjY2ZGFkODc2ZTdkMTJlNzk3NTA2NThiMjQw
MmE0ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElu
bGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5s
aW5lQm94LmNwcApAQCAtNDYsMjEgKzQ2LDM0IEBAIFNWR1Jvb3RJbmxpbmVCb3g6OlNWR1Jvb3RJ
bmxpbmVCb3goUmVuZGVyU1ZHVGV4dCYgcmVuZGVyU1ZHVGV4dCkKIHsKIH0KIAotUmVuZGVyU1ZH
VGV4dCYgU1ZHUm9vdElubGluZUJveDo6cmVuZGVyU1ZHVGV4dCgpCitSZW5kZXJTVkdUZXh0JiBT
VkdSb290SW5saW5lQm94OjpyZW5kZXJTVkdUZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gZG93
bmNhc3Q8UmVuZGVyU1ZHVGV4dD4oYmxvY2tGbG93KCkpOwogfQogCi12b2lkIFNWR1Jvb3RJbmxp
bmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQsIExheW91dFVuaXQsIExheW91dFVuaXQpCit2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6
OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKQogewogICAgIEFT
U0VSVChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCB8fCBwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKTsKICAgICBBU1NFUlQoIXBhaW50SW5m
by5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxlZCgpKTsKIAorI2lmIEVOQUJMRShMQVlFUl9CQVNF
RF9TVkdfRU5HSU5FKQorICAgIGlmIChyZW5kZXJlcigpLmRvY3VtZW50KCkuc2V0dGluZ3MoKS5s
YXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8gb3ZlcmZsb3dSZWN0
KHZpc3VhbE92ZXJmbG93UmVjdChsaW5lVG9wLCBsaW5lQm90dG9tKSk7CisgICAgICAgIGZsaXBG
b3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgICAgICBvdmVyZmxvd1JlY3QubW92ZUJ5
KHBhaW50T2Zmc2V0KTsKKworICAgICAgICBpZiAoIXBhaW50SW5mby5yZWN0LmludGVyc2VjdHMo
b3ZlcmZsb3dSZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKwogICAg
IGJvb2wgaXNQcmludGluZyA9IHJlbmRlclNWR1RleHQoKS5kb2N1bWVudCgpLnByaW50aW5nKCk7
CiAgICAgYm9vbCBoYXNTZWxlY3Rpb24gPSAhaXNQcmludGluZyAmJiBzZWxlY3Rpb25TdGF0ZSgp
ICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmU7CiAgICAgYm9vbCBzaG91bGRQ
YWludFNlbGVjdGlvbkhpZ2hsaWdodCA9ICEocGFpbnRJbmZvLnBhaW50QmVoYXZpb3IuY29udGFp
bnMoUGFpbnRCZWhhdmlvcjo6U2tpcFNlbGVjdGlvbkhpZ2hsaWdodCkpOwogCiAgICAgUGFpbnRJ
bmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7CisgICAgY2hpbGRQYWludEluZm8udXBkYXRl
U3VidHJlZVBhaW50Um9vdEZvckNoaWxkcmVuKCZyZW5kZXJlcigpKTsKKwogICAgIGlmIChoYXNT
ZWxlY3Rpb24gJiYgc2hvdWxkUGFpbnRTZWxlY3Rpb25IaWdobGlnaHQpIHsKICAgICAgICAgZm9y
IChhdXRvKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRP
bkxpbmUoKSkgewogICAgICAgICAgICAgaWYgKGlzPFNWR0lubGluZVRleHRCb3g+KCpjaGlsZCkp
CkBAIC03MCw2ICs4MywxNyBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZQogICAgICAgICB9CiAg
ICAgfQogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKHJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkp
IHsKKyAgICAgICAgZm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgeworICAgICAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJl
cigpLmlzVGV4dCgpIHx8ICFjaGlsZC0+Ym94TW9kZWxPYmplY3QoKS0+aGFzU2VsZlBhaW50aW5n
TGF5ZXIoKSkKKyAgICAgICAgICAgICAgICBjaGlsZC0+cGFpbnQoY2hpbGRQYWludEluZm8sIHBh
aW50T2Zmc2V0LCBsaW5lVG9wLCBsaW5lQm90dG9tKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKKwogICAgIFNWR1JlbmRlcmluZ0NvbnRleHQgcmVuZGVyaW5n
Q29udGV4dChyZW5kZXJTVkdUZXh0KCksIHBhaW50SW5mbywgU1ZHUmVuZGVyaW5nQ29udGV4dDo6
U2F2ZUdyYXBoaWNzQ29udGV4dCk7CiAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQuaXNSZW5kZXJp
bmdQcmVwYXJlZCgpKSB7CiAgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpCkBAIC0xNzAsOSArMTk0LDcgQEAg
dm9pZCBTVkdSb290SW5saW5lQm94OjpsYXlvdXRSb290Qm94KGNvbnN0IEZsb2F0UmVjdCYgY2hp
bGRSZWN0KQogICAgIFJlbmRlclNWR1RleHQmIHBhcmVudEJsb2NrID0gcmVuZGVyU1ZHVGV4dCgp
OwogCiAgICAgLy8gRmluYWxseSwgYXNzaWduIHRoZSByb290IGJsb2NrIHBvc2l0aW9uLCBub3cg
dGhhdCBhbGwgY29udGVudCBpcyBsYWlkIG91dC4KLSAgICBMYXlvdXRSZWN0IGJvdW5kaW5nUmVj
dCA9IGVuY2xvc2luZ0xheW91dFJlY3QoY2hpbGRSZWN0KTsKLSAgICBwYXJlbnRCbG9jay5zZXRM
b2NhdGlvbihib3VuZGluZ1JlY3QubG9jYXRpb24oKSk7Ci0gICAgcGFyZW50QmxvY2suc2V0U2l6
ZShib3VuZGluZ1JlY3Quc2l6ZSgpKTsKKyAgICBwYXJlbnRCbG9jay51cGRhdGVQb3NpdGlvbkFu
ZE92ZXJmbG93KGNoaWxkUmVjdCk7CiAKICAgICAvLyBQb3NpdGlvbiBhbGwgY2hpbGRyZW4gcmVs
YXRpdmUgdG8gdGhlIHBhcmVudCBibG9jay4KICAgICBmb3IgKGF1dG8qIGNoaWxkID0gZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKSB7CkBAIC0xODcsNiAr
MjA5LDggQEAgdm9pZCBTVkdSb290SW5saW5lQm94OjpsYXlvdXRSb290Qm94KGNvbnN0IEZsb2F0
UmVjdCYgY2hpbGRSZWN0KQogICAgIHNldFkoMCk7CiAgICAgc2V0TG9naWNhbFdpZHRoKGNoaWxk
UmVjdC53aWR0aCgpKTsKICAgICBzZXRMb2dpY2FsSGVpZ2h0KGNoaWxkUmVjdC5oZWlnaHQoKSk7
CisKKyAgICBhdXRvIGJvdW5kaW5nUmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QoY2hpbGRSZWN0
KTsKICAgICBzZXRMaW5lVG9wQm90dG9tUG9zaXRpb25zKDAsIGJvdW5kaW5nUmVjdC5oZWlnaHQo
KSwgMCwgYm91bmRpbmdSZWN0LmhlaWdodCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaAppbmRleCAwZDE2MjY5ZWI1YzE3MzdhMGYz
MTJjN2RlYWE0OTI5ODcxYTQ2MWQ2Li5hZjFiMTNlYWQ1ZGFiMTE0ZjEwZjA2ZmJhNmVlMmU3YTdk
NTljNDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJ
bmxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxp
bmVCb3guaApAQCAtMzUsOCArMzUsNiBAQCBjbGFzcyBTVkdSb290SW5saW5lQm94IGZpbmFsIDog
cHVibGljIExlZ2FjeVJvb3RJbmxpbmVCb3ggewogcHVibGljOgogICAgIGV4cGxpY2l0IFNWR1Jv
b3RJbmxpbmVCb3goUmVuZGVyU1ZHVGV4dCYpOwogCi0gICAgUmVuZGVyU1ZHVGV4dCYgcmVuZGVy
U1ZHVGV4dCgpOwotCiAgICAgZmxvYXQgdmlydHVhbExvZ2ljYWxIZWlnaHQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2xvZ2ljYWxIZWlnaHQ7IH0KICAgICB2b2lkIHNldExvZ2ljYWxIZWln
aHQoZmxvYXQgaGVpZ2h0KSB7IG1fbG9naWNhbEhlaWdodCA9IGhlaWdodDsgfQogCkBAIC00OSw2
ICs0Nyw4IEBAIHB1YmxpYzoKICAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNv
bnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0
IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgSGl0VGVzdEFjdGlvbikgZmluYWw7CiAK
IHByaXZhdGU6CisgICAgUmVuZGVyU1ZHVGV4dCYgcmVuZGVyU1ZHVGV4dCgpIGNvbnN0OworCiAg
ICAgYm9vbCBpc1NWR1Jvb3RJbmxpbmVCb3goKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CiAgICAgdm9pZCByZW9yZGVyVmFsdWVMaXN0c1RvTG9naWNhbE9yZGVyKFZlY3RvcjxTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlcyo+Jik7CiAgICAgdm9pZCBsYXlvdXRDaGFyYWN0ZXJzSW5UZXh0
Qm94ZXMoTGVnYWN5SW5saW5lRmxvd0JveCosIFNWR1RleHRMYXlvdXRFbmdpbmUmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKaW5kZXggZjJjMDc2ZjdiNzcyZDExNWU0ZWVm
NmE4MDZmYmFiYjI1ZjU1ZmU5My4uODY5YjE5YTZiNzg5NzE5M2NkNDM4YmE4MjBmYTNlYTk4MWQ0
MzEzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKQEAgLTU0LDYgKzU0
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVk
RmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHR3JhcGhp
Y3NFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdVUklSZWZl
cmVuY2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtMzY0LDEzICszNjUsMjkgQEAgdm9p
ZCBBZGp1c3Rlcjo6YWRqdXN0KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUq
IHVzZXJBZ2VudEFwcGVhcmFuY2UKICAgICBlbHNlCiAgICAgICAgIHN0eWxlLnNldFVzZWRaSW5k
ZXgoc3R5bGUuc3BlY2lmaWVkWkluZGV4KCkpOwogCisgICAgLy8gRm9yIFNWRyBjb21wYXRpYmls
aXR5IHB1cnBvc2VzIHdlIGhhdmUgdG8gY29uc2lkZXIgdGhlICdhbmltYXRlZExvY2FsVHJhbnNm
b3JtJyBiZXNpZGVzIHRoZSBSZW5kZXJTdHlsZSB0byBxdWVyeQorICAgIC8vIGlmIGFuIGVsZW1l
bnQgaGFzIGEgdHJhbnNmb3JtLiBTVkcgdHJhbnNmb3JtcyBhcmUgbm90IHN0b3JlZCBvbiB0aGUg
UmVuZGVyU3R5bGUsIGFuZCB0aHVzIHdlIG5lZWQgYSBzcGVjaWFsIGNhc2UgaGVyZS4KKyAgICBh
dXRvIGhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSA9IFtdKGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkgeworICAgICAgICBpZiAoc3R5bGUuaGFzVHJh
bnNmb3JtUmVsYXRlZFByb3BlcnR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworI2lm
IEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgICAgICBpZiAoZWxlbWVudCAmJiBl
bGVtZW50LT5kb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQo
KSAmJiBpczxTVkdHcmFwaGljc0VsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJu
ICFkb3duY2FzdDxTVkdHcmFwaGljc0VsZW1lbnQ+KCplbGVtZW50KS5hbmltYXRlZExvY2FsVHJh
bnNmb3JtKCkuaXNJZGVudGl0eSgpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKGVsZW1l
bnQpOworI2VuZGlmCisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKICAgICAvLyBB
dXRvIHotaW5kZXggYmVjb21lcyAwIGZvciB0aGUgcm9vdCBlbGVtZW50IGFuZCB0cmFuc3BhcmVu
dCBvYmplY3RzLiBUaGlzIHByZXZlbnRzCiAgICAgLy8gY2FzZXMgd2hlcmUgb2JqZWN0cyB0aGF0
IHNob3VsZCBiZSBibGVuZGVkIGFzIGEgc2luZ2xlIHVuaXQgZW5kIHVwIHdpdGggYSBub24tdHJh
bnNwYXJlbnQKICAgICAvLyBvYmplY3Qgd2VkZ2VkIGluIGJldHdlZW4gdGhlbS4gQXV0byB6LWlu
ZGV4IGFsc28gYmVjb21lcyAwIGZvciBvYmplY3RzIHRoYXQgc3BlY2lmeSB0cmFuc2Zvcm1zL21h
c2tzL3JlZmxlY3Rpb25zLgogICAgIGlmIChzdHlsZS5oYXNBdXRvVXNlZFpJbmRleCgpKSB7CiAg
ICAgICAgIGlmICgobV9lbGVtZW50ICYmIG1fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCkgPT0g
bV9lbGVtZW50KQogICAgICAgICAgICAgfHwgc3R5bGUuaGFzT3BhY2l0eSgpCi0gICAgICAgICAg
ICB8fCBzdHlsZS5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKQorICAgICAgICAgICAgfHwg
aGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KHN0eWxlLCBtX2VsZW1lbnQpCiAgICAgICAgICAg
ICB8fCBzdHlsZS5oYXNNYXNrKCkKICAgICAgICAgICAgIHx8IHN0eWxlLmNsaXBQYXRoKCkKICAg
ICAgICAgICAgIHx8IHN0eWxlLmJveFJlZmxlY3QoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3Bw
CmluZGV4IDQxNDgxNTA4NWRiY2FhMzk0ZGMxMWY5MDUwZWQzOGM3MGI4MTRiNTMuLjI4NjJkMzYw
ODkxMDMwMmYxZGRlZWU3ZmUxYjJjOGFkZDk3ZDRkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dC5jcHAKQEAgLTUzMSw3ICs1MzEsNyBAQCBzdGF0aWMgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IGNyZWF0ZVNWR0xheWVyQXdhcmVFbAogICAgIC8v
IExpc3Qgb2YgYWxsIFNWRyBlbGVtZW50cyB3aG9zZSByZW5kZXJlcnMgc3VwcG9ydCB0aGUgbGF5
ZXIgYXdhcmUgbGF5b3V0IC8gcGFpbnRpbmcgLyBoaXQtdGVzdGluZyBtb2RlICgnTEJTRS1tb2Rl
JykuCiAgICAgdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOwogICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7Ci0gICAgZm9yIChhdXRvJiB0
YWcgOiB7IGdUYWcuZ2V0KCksIHJlY3RUYWcuZ2V0KCkgfSkKKyAgICBmb3IgKGF1dG8mIHRhZyA6
IHsgZ1RhZy5nZXQoKSwgcmVjdFRhZy5nZXQoKSwgdGV4dFRhZy5nZXQoKSB9KQogICAgICAgICBz
ZXQuYWRkKHRhZy5sb2NhbE5hbWUoKSk7CiAgICAgcmV0dXJuIHNldDsKIH0K
</data>
<flag name="commit-queue"
          id="487153"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458315</attachid>
            <date>2022-04-25 16:55:02 -0700</date>
            <delta_ts>2022-04-26 02:26:45 -0700</delta_ts>
            <desc>Patch, v2 (includes patch from bug 239717)</desc>
            <filename>bug-239743-20220425165501.patch</filename>
            <type>text/plain</type>
            <size>82678</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzMzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMyOTgxNjY4ZTIxMjRh
ZTIxNGJhNzE2NjllZTg2ZWEyOTUxYjA5Ni4uNzljNjgzZTY3MzAxNmYxZGEzNzBhODhkYmEwODJl
MWMwYTZjZjU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OCBAQAorMjAyMi0wNC0yNSAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQWN0aXZhdGUgdGV4dCByZW5kZXJpbmcsIGJ5IHJlLXVzaW5nIFJlbmRlclNWR1RleHQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTc0MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkYXB0IFJlbmRl
clNWR1RleHQgdG8gYmUgdXNhYmxlIGF0IHRoZSBzYW1lIHRpbWUgZnJvbSBsZWdhY3kgU1ZHIGVu
Z2luZSAoYXMKKyAgICAgICAgaXQgaXMgcmlnaHQgbm93KSBhbmQgZnJvbSBMQlNFLiBUaGlzIHJl
cXVpcmVzIG1pbmltYWwgZWZmb3J0LCBzaW5jZSBSZW5kZXJTVkdUZXh0CisgICAgICAgIGFscmVh
ZHkgaW5oZXJpdGVkIGZyb20gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCwgc28gdGhlcmUncyBubyBu
ZWVkIGZvciB0aGUgY3JlYXRpb24KKyAgICAgICAgb2YgTGVnYWN5UmVuZGVyU1ZHVGV4dCAvIFJl
bmRlclNWR1RleHQgYXMgc2VwYXJhdGVkIGxlZ2FjeS9MQlNFIGltcGxlbWVudGF0aW9ucy4KKwor
ICAgICAgICBNb3N0IFNWRyAxLjEgPHRleHQ+IHRlc3RjYXNlcyBhbHJlYWR5IHBhc3Mgb3V0IG9m
IHRoZSBib3ggd2l0aCB0aGlzIGNoYW5nZS4KKyAgICAgICAgVGhlIG5leHQgcGF0Y2ggYWZ0ZXIg
dGV4dCBzdXBwb3J0IHdpbGwgYWRkIGEgbmV3ICdtYWNvcy13azItbGJzZS14eHgnIHNwZWNpZmlj
CisgICAgICAgIHBsYXRmb3JtIGJhc2VsaW5lLCBzbyB0aGF0IHdlIGNhbiBydW4gdGVzdHMgTEJT
RSBhZ2FpbnQgaXNlbGYgKGZpbmFsbHkgd2UgY2FuCisgICAgICAgIGluY2x1ZGUgdGhlIHByb2dy
ZXNzaW9ucyBpbiB0aGUgZm9ybSBvZiBUZXN0RXhwZWN0YXRpb24gZmlsZSBjaGFuZ2VzLCBvbmNl
IGEgY2VydGFpbgorICAgICAgICBwYXRjaCBpbXBsZW1lbnRzIGEgbmV3IGZlYXR1cmUgaW4gTEJT
RS4gVGhpcyBtYWtlcyBzZW5zZSBub3cgYXMgZW5vdWdoIGlzIHVwc3RyZWFtZWQKKyAgICAgICAg
dGhhdCBhIGNvbnNpZGVyYWJsZSBhbW91bnQgb2YgdGhlIFNWRyAxLjEgdGVzdHN1aXRlIGFscmVh
ZHkgcGFzc2VzIHBpeGVsIHBlcmZlY3QuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0
ZXN0cywgbm8gY2hhbmdlIGluIGJlaGF2aW91ci4gKEhvd2V2ZXIgdGVzdGFiaWxpdHkgZm9yIExC
U0UgaXMgcmVhZHkgc29vbiEpLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9k
ZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6
Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdDb250YWluZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0SXNSZWxheW91
dEJvdW5kYXJ5KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jsb2NrOjp1cGRhdGVGcm9tU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmFic29sdXRlUXVhZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0Jsb2NrOjpjb21wdXRlT3ZlcmZsb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHQmxvY2s6OmNsaXBwZWRPdmVyZmxvd1JlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jsb2NrOjpjb21wdXRlRmxvYXRW
aXNpYmxlUmVjdEluQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R0Jsb2NrOjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR0Jsb2NrOjpvZmZzZXRGcm9tQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR0Jsb2NrOjpub2RlQXRQb2ludCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpSZW5k
ZXJTVkdUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmxheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1RleHQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Rl
eHQ6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1RleHQ6OnVwZGF0ZVBvc2l0aW9uQW5kT3ZlcmZsb3cpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVRdWFkcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJ
bmxpbmVCb3g6OnJlbmRlclNWR1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9v
dElubGluZUJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6
bGF5b3V0Um9vdEJveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpyZW5k
ZXJTVkdUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxp
bmVCb3guaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVTVkdMYXllckF3YXJlRWxlbWVudFNldCk6CisKKzIwMjItMDQtMjUgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0xCU0VdIEZp
eCBvcmlnaW4gb2YgdHJhbnNmb3JtYXRpb25zIGluIFNWRworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IHRoZSBtYWpvcml0eSBvZiBTVkcgdHJhbnNm
b3JtIGlzc3VlcyBpbiBMQlNFLiB3ZWJraXQub3JnL2IvMjM3NzExIGxhaWQgdGhlIGdyb3VuZHdv
cmsgZm9yIFNWRworICAgICAgICB0cmFuc2Zvcm1zIGluIExCU0UsIGhvd2V2ZXIgdGhlcmUgYXJl
IHN0aWxsIGlzc3VlczoKKworICAgICAgICAtIFNWRyB0cmFuc2Zvcm1zIHNwZWNpZmllZCBhbG9u
ZSBvbiBTVkcgZWxlbWVudHMsIHcvbyBhbnkgYWRkaXRpb25hbCBzdHlsZS9wZXJzcGVjdGl2ZSBy
ZWxhdGVkIHByb3BlcnR5CisgICAgICAgICAgc3VjaCBhcyB0cmFuc2Zvcm0tYm94IC8gdHJhbnNm
b3JtLW9yaWdpbiAvIC4uLiBkbyBub3QgdHJpZ2dlciBsYXllciBjcmVhdGlvbiwgZml4IGJ5IGFk
YXB0aW5nIFN0eWxlQWRqdXN0ZXIuCisKKyAgICAgICAgLSBTd2l0Y2hpbmcgb24vb2ZmIHRyYW5z
Zm9ybXMgZm9yIGEgU1ZHIGVsZW1lbnQsIHdhcyBub3QgdHJhY2tpbmcgdXBkYXRlcyB0byBib3Ro
ICdIYXNTVkdUcmFuc2Zvcm0nIGFuZAorICAgICAgICAgICdIYXNUcmFuc2Zvcm1SZWxhdGVkUHJv
cGVydHknIGZsYWdzIGNvcnJlY3RseSwgZml4IHRoYXQgYnkgaW50cm9kdWNpbmcgYW4gJ3VwZGF0
ZUhhc1NWR1RyYW5zZm9ybUZsYWdzJyBoZWxwZXIuCisKKyAgICAgICAgLSBNb2RpZnkgU1ZHQ29u
dGFpbmVyTGF5b3V0IHRvIGF2b2lkIGEgZGVwZW5kZW5jeSBvbiB0aGUgY2hpbGRyZW4gdHJhbnNm
b3JtYXRpb25zIHdoZW4gY29tcHV0aW5nIGNvbnRhaW5lcgorICAgICAgICAgIGJvdW5kYXJpZXMu
IEluIHRoZSBsZWdhY3kgZW5naW5lLCB3ZSBhbHdheXMgaGF2ZSB0byBtYXJrIHRoZSB3aG9sZSBh
bmNlc3RvciBjaGFpbiBhcyAnbmVlZCB0byByZWNvbXB1dGUgYm91bmRhcmllcycKKyAgICAgICAg
ICBhbmQgaW52b2tpbmcgYSByZS1sYXlvdXQsIHRvIHBlcmZvcm0gdGhlIHJlY29tcHV0YXRpb24u
IFRoaXMgY2hhbmdlIGF2b2lkcyB0aGUgaW52YWxpZGF0aW9uIG9mIHRoZSB3aG9sZSBhbmNlc3Rv
cgorICAgICAgICAgIGNoYWluLCB3aGVuIGFuIGVsZW1lbnRzIHRyYW5zZm9ybSBjaGFuZ2VzIGlu
IGEgbm9uLWFjY2VsZXJhdGVkIHdheSAoZS5nLiBTVkdUcmFuc2Zvcm1MaXN0IG1hbmlwdWxhdGlv
biwgU01JTAorICAgICAgICAgIDxhbmltYXRlVHJhbnNmb3JtPiAvIDxhbmltYXRlPiAvIDxzZXQ+
KS4gSW4gQ1NTIHRyYW5zZm9ybWF0aW9ucyBkbyBub3QgYWZmZWN0IGxheW91dCwgb25seSBoaXQt
dGVzdGluZyBhbmQgcGFpbnRpbmcuCisKKyAgICAgICAgICAtPiBTVkcvQ1NTIHRyYW5zZm9ybXMg
YXBwbGllZCBvbiBTVkcgZWxlbWVudHMgaXMgY29uY2VwdHVhbGx5IGVxdWl2YWxlbnQgdG8gQ1NT
IHRyYW5zZm9ybWF0aW9ucyBvbiBDU1MgYm94ZXMgbm93LgorICAgICAgICAgICAgIFRyYW5zZm9y
bWF0aW9uIGNoYW5nZXMgbm8gbG9uZ2VyIGFmZmVjdCB0aGUgJ2ludGVybmFsIGdlb21ldHJ5JyAo
b2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zKCkpLgorICAgICAgICAgICAg
IGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpIC8gbm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkg
YXJlIGNvbXB1dGVkIHVzaW5nIHRoZSAnaW50ZXJuYWwgZ2VvbWV0cnknIGFuZCB1c2VkCisgICAg
ICAgICAgICAgdGhyb3VnaG91dCBsYXlvdXQuCisKKyAgICAgICAgICBUaGlzIGF2b2lkcyBtb3N0
IG9mIHRoZSBSZW5kZXJMYXllciAvIFJlbmRlckxheWVyQmFja2luZyBzcGVjaWZpYyBjaGFuZ2Vz
IHRoYXQgd2VyZSBwcmVzZW50IGluIHRoZSBkb3duc3RyZWFtCisgICAgICAgICAgTEJTRSBpbXBs
ZW1lbnRhdGlvbiwgd2hpbGUgYWxzbyBzb2x2aW5nIGFuIGltcG9ydGFudCBkZXNpZ24gaXNzdWU6
IG5vIGJhY2stc3BsYXNoIGZyb20gY2hpbGRyZW4gdG8gcGFyZW50cy4KKyAgICAgICAgICBMYXJn
ZSwgZGVlcCBuZXN0ZWQgZG9jdW1lbnRzIC0tIGFzIHNlZW4gaW4gdGhlIHdpbGQgLS0gd2lsbCBi
ZW5lZml0IHRoZSBtb3N0LCBhdm9pZGluZyB0aGUgZnJlcXVlbnQgYW5jZXN0b3IKKyAgICAgICAg
ICB3YWxrcyB0byBtYXJrIHRoZSBjb250YWluaW5nIGJsb2NrIC8gcGFyZW50IGhpZXJhY2h5IGZv
ciByZS1sYXlvdXQuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cywgbm8gY2hh
bmdlIGluIGJlaGF2aW91ci4gKEhvd2V2ZXIgdGVzdGFiaWxpdHkgZm9yIExCU0UgaXMgcmVhZHkg
c29vbiEpLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVmZXJlbmNlQm94UmVjdCBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpSZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpjYW5DcmVhdGVTdGFja2lu
Z0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFw
cGx5aW5nVHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZW5kZXJlckxvY2F0aW9uIGNvbnN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJblNW
R0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0Ojp1cGRhdGVIYXNTVkdUcmFuc2Zvcm1GbGFncyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9k
ZWxPYmplY3Q6Om5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2V0Q3VycmVu
dFNWR0xheW91dExvY2F0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om9iamVjdEJvdW5kaW5nQm94V2l0aG91
dFRyYW5zZm9ybWF0aW9ucyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0Q2hpbGRyZW4p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVs
T2JqZWN0Ojp1cGRhdGVGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVs
T2JqZWN0OjpjdXJyZW50U1ZHTGF5b3V0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0Q3VycmVudFNWR0xheW91dFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmZyYW1lUmVjdEVxdWl2YWxlbnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFwcGx5VG9wTGVmdExv
Y2F0aW9uT2Zmc2V0RXF1aXZhbGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdNb2RlbE9iamVjdDo6bGF5b3V0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TGF5b3V0UmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TGF5b3V0TG9jYXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnBhaW50aW5n
TG9jYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmxheW91dExvY2F0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRMb2NhdGlvbk9mZnNldCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bGF5b3V0U2l6
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojp1cGRhdGVGcm9tU3R5bGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmxheW91
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6dXBkYXRlRnJvbVN0eWxlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6aGFuZGxlUm9vdE9y
Q29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0JvdW5kaW5nQm94Q29tcHV0YXRp
b246OmNvbXB1dGVWaXN1YWxPdmVyZmxvd1JlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
U1ZHQ29udGFpbmVyTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NvbnRhaW5lckxh
eW91dDo6cG9zaXRpb25DaGlsZHJlblJlbGF0aXZlVG9Db250YWluZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQ29udGFpbmVyTGF5b3V0Ojp2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5
KToKKyAgICAgICAgKFdlYkNvcmU6OmxheW91dExvY2F0aW9uRnJvbVJlbmRlcmVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldExheW91dExvY2F0aW9uRm9yUmVuZGVyZXIpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0Lmg6CisgICAg
ICAgICogc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
QWRqdXN0ZXI6OmFkanVzdCBjb25zdCk6CisKIDIwMjItMDQtMjUgIERldmluIFJvdXNzbyAgPGRy
b3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlcXVlc3QgaW50ZXJj
ZXB0aW9uIHNob3VsZCBub3QgYmUgZ3VhcmRlZCBiYXNlZCBvbiBzZXJ2aWNlIHdvcmtlcnMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRleCBiNzZlMTgxZTZh
MjAwZDcwOGNmODQ2NGY1MGQ4MGU1MGIwM2UxYWNhLi42ODBjZTVjNzZjYTZhZDZhMzdjYWE3M2Iw
YTliNWNhMGEwYmViMmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwCkBAIC0yNDE4LDIxICsyNDE4LDQzIEBAIEZsb2F0UmVjdCBSZW5kZXJFbGVtZW50Ojpy
ZWZlcmVuY2VCb3hSZWN0KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKICAgICBpZiAoIWlzPFNW
R0VsZW1lbnQ+KGVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiB7IH07CiAKKyAgICBhdXRvIGFs
aWduUmVmZXJlbmNlQm94ID0gWyZdKEZsb2F0UmVjdCByZWZlcmVuY2VCb3gpIHsKKyAgICAgICAg
Ly8gVGhlIENTUyBib3JkZXJCb3hSZWN0KCkgaXMgZGVmaW5lZCB0byBzdGFydCBhdCBhbiBvcmln
aW4gb2YgKDAsIDApLgorICAgICAgICAvLyBBIHBvc3NpYmxlIHNoaWZ0IG9mIGEgQ1NTIGJveCAo
ZS5nLiBkdWUgdG8gbm9uLXN0YXRpYyBwb3NpdGlvbiArIHRvcC9sZWZ0IHByb3BlcnRpZXMpCisg
ICAgICAgIC8vIGRvZXMgbm90IGVmZmVjdCB0aGUgYm9yZGVyQm94UmVjdCgpIGxvY2F0aW9uLiBU
aGUgbG9jYXRpb24gaW5mb3JtYXRpb24KKyAgICAgICAgLy8gaXMgcHJvcGFnYXRlZCB1cG9uIHBh
aW50IHRpbWUsIGUuZy4gdmlhICdwYWludE9mZnNldCcgd2hlbiBjYWxsaW5nIFJlbmRlck9iamVj
dDo6cGFpbnQoKSwKKyAgICAgICAgLy8gb3IgYnkgYWx0ZXJpbmcgdGhlIFJlbmRlckxheWVyIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRvIGluY2x1ZGUgdGhlICdvZmZzZXRGcm9tQW5jZXN0b3InCisg
ICAgICAgIC8vIHJpZ2h0IGluIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIHdoZW4gQ1NTIHRy
YW5zZm9ybWF0aW9ucyBhcmUgcHJlc2VudCAoc2VlIFJlbmRlckxheWVyCisgICAgICAgIC8vIHBh
aW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKCkgZm9yIGRldGFpbHMpLgorICAgICAgICAvLwor
ICAgICAgICAvLyBUbyBtaW1pYyB0aGUgZXhwZWN0YXRpb24gZm9yIFNWRywgJ2ZpbGwtYm94JyBt
dXN0IGJlaGF2ZSB0aGUgc2FtZTogaWYgd2UnZCBpbmNsdWRlCisgICAgICAgIC8vIHRoZSAncmVm
ZXJlbmNlQm94JyBsb2NhdGlvbiBpbiB0aGUgcmV0dXJuZWQgcmVjdCwgd2UnZCBhcHBseSB0aGUg
KHgsIHkpIGxvY2F0aW9uCisgICAgICAgIC8vIGluZm9ybWF0aW9uIGZvciB0aGUgU1ZHIHJlbmRl
cmVyIHR3aWNlLiBXZSB3b3VsZCBzaGlmdCB0aGUgJ3RyYW5zZm9ybS1vcmlnaW4nIGJ5ICh4LCB5
KQorICAgICAgICAvLyBhbmQgYXQgdGhlIHNhbWUgdGltZSBhbHRlciB0aGUgQ1RNIGluIFJlbmRl
ckxheWVyOjpwYWludExheWVyQnlBcHBseWluZ1RyYW5zZm9ybSgpIGJ5CisgICAgICAgIC8vIGlu
Y2x1ZGluZyBhIHRyYW5zbGF0aW9uIHRvIHRoZSBlbmNsb3NpbmcgdHJhbnNmb3JtZWQgYW5jZXN0
b3IgKCdvZmZzZXRGcm9tQW5jZXN0b3InKS4KKyAgICAgICAgLy8gQXZvaWQgdGhhdCwgYW5kIG1v
dmUgYnkgLW5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpLgorI2lmIEVOQUJMRShMQVlFUl9CQVNF
RF9TVkdfRU5HSU5FKQorICAgICAgICBpZiAoaXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSAmJiAh
aXNTVkdSb290KCkgJiYgZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVF
bmFibGVkKCkpCisgICAgICAgICAgICByZWZlcmVuY2VCb3gubW92ZUJ5KC1kb3duY2FzdDxSZW5k
ZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkpOwor
I2VuZGlmCisgICAgICAgIHJldHVybiByZWZlcmVuY2VCb3g7CisgICAgfTsKKwogICAgIHN3aXRj
aCAoYm94VHlwZSkgewogICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm94TWlzc2luZzoKICAgICBjYXNl
IENTU0JveFR5cGU6OkNvbnRlbnRCb3g6CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpQYWRkaW5nQm94
OgogICAgIGNhc2UgQ1NTQm94VHlwZTo6RmlsbEJveDoKLSAgICAgICAgcmV0dXJuIG9iamVjdEJv
dW5kaW5nQm94KCk7CisgICAgICAgIHJldHVybiBhbGlnblJlZmVyZW5jZUJveChvYmplY3RCb3Vu
ZGluZ0JveCgpKTsKICAgICBjYXNlIENTU0JveFR5cGU6OkJvcmRlckJveDoKICAgICBjYXNlIENT
U0JveFR5cGU6Ok1hcmdpbkJveDoKICAgICBjYXNlIENTU0JveFR5cGU6OlN0cm9rZUJveDoKLSAg
ICAgICAgcmV0dXJuIHN0cm9rZUJvdW5kaW5nQm94KCk7CisgICAgICAgIHJldHVybiBhbGlnblJl
ZmVyZW5jZUJveChzdHJva2VCb3VuZGluZ0JveCgpKTsKICAgICBjYXNlIENTU0JveFR5cGU6OlZp
ZXdCb3g6CiAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW06IENhY2hlIHRoZSBpbW11
dGFibGUgU1ZHTGVuZ3RoQ29udGV4dCBwZXIgU1ZHRWxlbWVudCwgdG8gYXZvaWQgdGhlIHJlcGVh
dGVkIFJlbmRlclNWR1Jvb3Qgc2l6ZSBxdWVyaWVzIGluIGRldGVybWluZVZpZXdwb3J0KCkuCiAg
ICAgICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemU7CiAgICAgICAgIFNWR0xlbmd0aENvbnRleHQo
ZG93bmNhc3Q8U1ZHRWxlbWVudD4oZWxlbWVudCgpKSkuZGV0ZXJtaW5lVmlld3BvcnQodmlld3Bv
cnRTaXplKTsKLSAgICAgICAgcmV0dXJuIHsgeyB9LCB2aWV3cG9ydFNpemUgfTsKKyAgICAgICAg
cmV0dXJuIGFsaWduUmVmZXJlbmNlQm94KHsgeyB9LCB2aWV3cG9ydFNpemUgfSk7CiAgICAgfQog
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAppbmRleCBjMmRlMGI2ZDVmZDZmZDgyMTAyZjcwYmNjYzE5YmE3NjkzZGFlYzY3
Li5iYjRkM2E0ZTQ2MmJjYzk3NTY2ZWZiYTQ5YjhkMTgzOTc4Y2E0YTNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTMwMiw5ICszMDIsOSBAQCBzdGF0aWMg
U2Nyb2xsaW5nU2NvcGUgbmV4dFNjcm9sbGluZ1Njb3BlKCkKIAogREVGSU5FX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7CiAKLVJlbmRlckxheWVyOjpSZW5kZXJM
YXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCi0g
ICAgOiBtX2lzUmVuZGVyVmlld0xheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRl
clZpZXcoKSkKLSAgICAsIG1fZm9yY2VkU3RhY2tpbmdDb250ZXh0KHJlbmRlcmVyTGF5ZXJNb2Rl
bE9iamVjdC5pc01lZGlhKCkpCitSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCYgcmVuZGVyZXIpCisgICAgOiBtX2lzUmVuZGVyVmlld0xheWVyKHJlbmRlcmVy
LmlzUmVuZGVyVmlldygpKQorICAgICwgbV9mb3JjZWRTdGFja2luZ0NvbnRleHQocmVuZGVyZXIu
aXNNZWRpYSgpKQogICAgICwgbV9pc05vcm1hbEZsb3dPbmx5KGZhbHNlKQogICAgICwgbV9pc0NT
U1N0YWNraW5nQ29udGV4dChmYWxzZSkKICAgICAsIG1faXNPcHBvcnR1bmlzdGljU3RhY2tpbmdD
b250ZXh0KGZhbHNlKQpAQCAtMzQzLDcgKzM0Myw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXll
cihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAg
LCBtX2hhc05vdElzb2xhdGVkQmxlbmRpbmdEZXNjZW5kYW50c1N0YXR1c0RpcnR5KGZhbHNlKQog
I2VuZGlmCiAgICAgLCBtX3JlcGFpbnRSZWN0c1ZhbGlkKGZhbHNlKQotICAgICwgbV9yZW5kZXJl
cihyZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCisgICAgLCBtX3JlbmRlcmVyKHJlbmRlcmVyKQog
ewogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKICAg
ICBzZXRJc0NTU1N0YWNraW5nQ29udGV4dChzaG91bGRCZUNTU1N0YWNraW5nQ29udGV4dCgpKTsK
QEAgLTM1Myw5ICszNTMsOSBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgIGlmIChpc1JlbmRlclZp
ZXdMYXllcigpKQogICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gbV9jb250ZW50c1Njcm9s
bGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CiAKLSAgICBpZiAoIXJlbmRlcmVyKCku
Zmlyc3RDaGlsZCgpKSB7CisgICAgaWYgKCFyZW5kZXJlci5maXJzdENoaWxkKCkpIHsKICAgICAg
ICAgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5ID0gZmFsc2U7Ci0gICAgICAgIG1faGFzVmlz
aWJsZUNvbnRlbnQgPSByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxp
dHk6OlZpc2libGU7CisgICAgICAgIG1faGFzVmlzaWJsZUNvbnRlbnQgPSByZW5kZXJlci5zdHls
ZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0KIH0KIApAQCAt
NTUyLDkgKzU1Miw2IEBAIHN0YXRpYyBib29sIGNhbkNyZWF0ZVN0YWNraW5nQ29udGV4dChjb25z
dCBSZW5kZXJMYXllciYgbGF5ZXIpCiB7CiAgICAgYXV0byYgcmVuZGVyZXIgPSBsYXllci5yZW5k
ZXJlcigpOwogICAgIHJldHVybiByZW5kZXJlci5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHko
KQotI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQotICAgICAgICB8fCByZW5kZXJl
ci5oYXNTVkdUcmFuc2Zvcm0oKQotI2VuZGlmCiAgICAgICAgIHx8IHJlbmRlcmVyLmhhc0NsaXBQ
YXRoKCkKICAgICAgICAgfHwgcmVuZGVyZXIuaGFzRmlsdGVyKCkKICAgICAgICAgfHwgcmVuZGVy
ZXIuaGFzTWFzaygpCkBAIC0zNTQ1LDE5ICszNTQyLDI5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBh
aW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFp
bnRpCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5n
SW5mbywgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBjb25zdCBMYXlvdXRT
aXplJiB0cmFuc2xhdGlvbk9mZnNldCkKIHsKKyAgICBhdXRvIHVzZXNTVkdTdWJ0cmVlVHJhbnNm
b3JtUnVsZXMgPSBbXShjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikgewor
I2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgICAgICByZXR1cm4gcmVuZGVy
ZXIuZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkgJiYg
cmVuZGVyZXIuaXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSAmJiAhcmVuZGVyZXIuaXNTVkdSb290
KCk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0ocmVuZGVyZXIpOworI2VuZGlmCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCiAgICAgLy8gVGhpcyBpbnZvbHZlcyBzdWJ0cmFj
dGluZyBvdXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXllciBpbiBvdXIgY3VycmVudCBjb29yZGlu
YXRlIHNwYWNlLCBidXQgcHJlc2VydmluZwogICAgIC8vIHRoZSBhY2N1bXVsYXRlZCBlcnJvciBm
b3Igc3ViLXBpeGVsIGxheW91dC4KKyAgICAvLyBOb3RlOiBUaGUgcGl4ZWwtc25hcHBpbmcgbG9n
aWMgaXMgZGlzYWJsZWQgZm9yIHRoZSB3aG9sZSBTVkcgcmVuZGVyIHRyZWUsIGV4Y2VwdCB0aGUg
b3V0ZXJtb3N0IDxzdmc+LgogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIo
KS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgTGF5b3V0U2l6ZSBvZmZzZXRG
cm9tUGFyZW50ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHBhaW50aW5nSW5mby5yb290TGF5ZXIpOwog
ICAgIG9mZnNldEZyb21QYXJlbnQgKz0gdHJhbnNsYXRpb25PZmZzZXQ7CiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggdHJhbnNmb3JtKHJlbmRlcmFibGVUcmFuc2Zvcm0ocGFpbnRpbmdJbmZvLnBh
aW50QmVoYXZpb3IpKTsKICAgICAvLyBBZGQgdGhlIHN1YnBpeGVsIGFjY3VtdWxhdGlvbiB0byB0
aGUgY3VycmVudCBsYXllcidzIG9mZnNldCBzbyB0aGF0IHdlIGNhbiBhbHdheXMgc25hcCB0aGUg
dHJhbnNsYXRlUmlnaHQgdmFsdWUgdG8gd2hlcmUgdGhlIHJlbmRlcmVyKCkgaXMgc3VwcG9zZWQg
dG8gYmUgcGFpbnRpbmcuCiAgICAgTGF5b3V0U2l6ZSBvZmZzZXRGb3JUaGlzTGF5ZXIgPSBvZmZz
ZXRGcm9tUGFyZW50ICsgcGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0OwotICAgIEZsb2F0U2l6
ZSBkZXZpY2VQaXhlbFNuYXBwZWRPZmZzZXRGb3JUaGlzTGF5ZXIgPSB0b0Zsb2F0U2l6ZShyb3Vu
ZFBvaW50VG9EZXZpY2VQaXhlbHModG9MYXlvdXRQb2ludChvZmZzZXRGb3JUaGlzTGF5ZXIpLCBk
ZXZpY2VTY2FsZUZhY3RvcikpOworICAgIEZsb2F0U2l6ZSBhbGlnbmVkT2Zmc2V0Rm9yVGhpc0xh
eWVyID0gdXNlc1NWR1N1YnRyZWVUcmFuc2Zvcm1SdWxlcyhyZW5kZXJlcigpKSA/IG9mZnNldEZv
clRoaXNMYXllciA6IHRvRmxvYXRTaXplKHJvdW5kUG9pbnRUb0RldmljZVBpeGVscyh0b0xheW91
dFBvaW50KG9mZnNldEZvclRoaXNMYXllciksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgLy8g
V2UgaGFuZGxlIGFjY3VtdWxhdGVkIHN1YnBpeGVscyB0aHJvdWdoIG5lc3RlZCBsYXllcnMgaGVy
ZS4gU2luY2UgdGhlIGNvbnRleHQgZ2V0cyB0cmFuc2xhdGVkIHRvIGRldmljZSBwaXhlbHMsCiAg
ICAgLy8gYWxsIHdlIG5lZWQgdG8gZG8gaXMgYWRkIHRoZSBkZWx0YSB0byB0aGUgYWNjdW11bGF0
ZWQgcGl4ZWxzIGNvbWluZyBmcm9tIGFuY2VzdG9yIGxheWVycy4KICAgICAvLyBUcmFuc2xhdGUg
dGhlIGdyYXBoaWNzIGNvbnRleHQgdG8gdGhlIHNuYXBwaW5nIHBvc2l0aW9uIHRvIGF2b2lkIG9m
Zi1kZXZpY2UtcGl4ZWwgcG9zaXRpbmcuCi0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KGRl
dmljZVBpeGVsU25hcHBlZE9mZnNldEZvclRoaXNMYXllci53aWR0aCgpLCBkZXZpY2VQaXhlbFNu
YXBwZWRPZmZzZXRGb3JUaGlzTGF5ZXIuaGVpZ2h0KCkpOworICAgIHRyYW5zZm9ybS50cmFuc2xh
dGVSaWdodChhbGlnbmVkT2Zmc2V0Rm9yVGhpc0xheWVyLndpZHRoKCksIGFsaWduZWRPZmZzZXRG
b3JUaGlzTGF5ZXIuaGVpZ2h0KCkpOwogICAgIC8vIEFwcGx5IHRoZSB0cmFuc2Zvcm0uCiAgICAg
YXV0byBvbGRUcmFuc2Zvcm0gPSBjb250ZXh0LmdldENUTSgpOwogICAgIGF1dG8gYWZmaW5lVHJh
bnNmb3JtID0gdHJhbnNmb3JtLnRvQWZmaW5lVHJhbnNmb3JtKCk7CkBAIC0zNTY3LDcgKzM1NzQs
MTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgICAgICBwYWludGluZ0luZm8uZXZlbnRS
ZWdpb25Db250ZXh0LT5wdXNoVHJhbnNmb3JtKGFmZmluZVRyYW5zZm9ybSk7CiAKICAgICAvLyBO
b3cgZG8gYSBwYWludCB3aXRoIHRoZSByb290IGxheWVyIHNoaWZ0ZWQgdG8gYmUgdXMuCi0gICAg
TGF5b3V0U2l6ZSBhZGp1c3RlZFN1YnBpeGVsT2Zmc2V0ID0gb2Zmc2V0Rm9yVGhpc0xheWVyIC0g
TGF5b3V0U2l6ZShkZXZpY2VQaXhlbFNuYXBwZWRPZmZzZXRGb3JUaGlzTGF5ZXIpOworICAgIExh
eW91dFNpemUgYWRqdXN0ZWRTdWJwaXhlbE9mZnNldDsKKyAgICBpZiAoIXVzZXNTVkdTdWJ0cmVl
VHJhbnNmb3JtUnVsZXMocmVuZGVyZXIoKSkgJiYgIXJlbmRlcmVyKCkuaXNTVkdSb290KCkpCisg
ICAgICAgIGFkanVzdGVkU3VicGl4ZWxPZmZzZXQgPSBvZmZzZXRGb3JUaGlzTGF5ZXIgLSBMYXlv
dXRTaXplKGFsaWduZWRPZmZzZXRGb3JUaGlzTGF5ZXIpOworCiAgICAgTGF5ZXJQYWludGluZ0lu
Zm8gdHJhbnNmb3JtZWRQYWludGluZ0luZm8ocGFpbnRpbmdJbmZvKTsKICAgICB0cmFuc2Zvcm1l
ZFBhaW50aW5nSW5mby5yb290TGF5ZXIgPSB0aGlzOwogICAgIHRyYW5zZm9ybWVkUGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0ID0gTGF5b3V0UmVjdChlbmNsb3NlUmVjdFRvRGV2aWNlUGl4ZWxz
KHZhbHVlT3JEZWZhdWx0KHRyYW5zZm9ybS5pbnZlcnNlKCkpLm1hcFJlY3QocGFpbnRpbmdJbmZv
LnBhaW50RGlydHlSZWN0KSwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKaW5kZXggN2QzY2IxNTdkMGZiZjIwMmVhN2Q4YTY0OTIzZjgwNGRm
MzA5MWM3Mi4uODA0NzYxYThmOTIwMDA0ZThmZGQ0MjdlMThkNGE3OTg0NTEzMWI5ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTk4NCw3ICs5ODQsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSku
bG9jYXRpb24oKTsKICNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKICAgICAgICAg
aWYgKGlzPFJlbmRlclNWR01vZGVsT2JqZWN0PihyZW5kZXJlcigpKSkKLSAgICAgICAgICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIoKSkubGF5b3V0TG9j
YXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJTVkdNb2RlbE9iamVj
dD4ocmVuZGVyZXIoKSkuY3VycmVudFNWR0xheW91dExvY2F0aW9uKCk7CiAjZW5kaWYKIAogICAg
ICAgICByZXR1cm4gTGF5b3V0UG9pbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCAwMWI5OGFmNDgxZWVmZjI3YjQ2
MGFhNDZiYWRhYzBlYWRmN2QxMmUwLi5iNmRjOTUyZDhhMWFkY2U5MzZkNmM2YjU2MjhkNWZlNDc4
OWZjMGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
TW9kZWxPYmplY3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJC
YWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0Jsb2NrLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCiAjaW5jbHVkZSAiU1ZHR3JhcGhpY3NFbGVtZW50LmgiCkBAIC0xMjksNiArMTMwLDkgQEAg
dm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgICAgIGxheWVyKCktPndpbGxSZW1vdmVD
aGlsZFdpdGhCbGVuZE1vZGUoKTsKICNlbmRpZgogICAgICAgICBzZXRIYXNUcmFuc2Zvcm1SZWxh
dGVkUHJvcGVydHkoZmFsc2UpOyAvLyBBbGwgdHJhbnNmb3JtLXJlbGF0ZWQgcHJvcGVydGllcyBm
b3JjZSBsYXllcnMsIHNvIHdlIGtub3cgd2UgZG9uJ3QgaGF2ZSBvbmUgb3IgdGhlIG9iamVjdCBk
b2Vzbid0IHN1cHBvcnQgdGhlbS4KKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
KyAgICAgICAgc2V0SGFzU1ZHVHJhbnNmb3JtKGZhbHNlKTsgLy8gU2FtZSByZWFzb24gYXMgZm9y
IHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpLgorI2VuZGlmCiAgICAgICAgIHNldEhh
c1JlZmxlY3Rpb24oZmFsc2UpOwogCiAgICAgICAgIC8vIFJlcGFpbnQgdGhlIGFib3V0IHRvIGJl
IGRlc3Ryb3llZCBzZWxmLXBhaW50aW5nIGxheWVyIHdoZW4gc3R5bGUgY2hhbmdlIGFsc28gdHJp
Z2dlcnMgcmVwYWludC4KQEAgLTI0MiwxMCArMjQ2LDcgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0Ojp1cGRhdGVMYXllclRyYW5zZm9ybSgpCiAjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NW
R19FTkdJTkUpCiBzdGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IFJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q6OmNvbXB1dGVWaXNpYmxlUmVjdEluU1ZHQ29udGFpbmVyKGNvbnN0IExheW91dFJlY3QmIHJl
Y3QsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0
OjpWaXNpYmxlUmVjdENvbnRleHQgY29udGV4dCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogW0xC
U0VdIFVwc3RyZWFtIFJlbmRlclNWR0Jsb2NrIGNoYW5nZXMKLSAgICAvLyBBU1NFUlQoaXM8UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q+KHRoaXMpIHx8IGlzPFJlbmRlclNWR0Jsb2NrPih0aGlzKSk7Ci0g
ICAgQVNTRVJUKGlzPFJlbmRlclNWR01vZGVsT2JqZWN0Pih0aGlzKSk7Ci0KKyAgICBBU1NFUlQo
aXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHRoaXMpIHx8IGlzPFJlbmRlclNWR0Jsb2NrPih0aGlz
KSk7CiAgICAgQVNTRVJUKCFzdHlsZSgpLmhhc0luRmxvd1Bvc2l0aW9uKCkpOwogICAgIEFTU0VS
VCghdmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2FjaGVF
bmFibGVkKCkpOwogCkBAIC0yNzUsNyArMjc2LDcgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0
PiBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJblNWR0NvbnRhaW4K
ICAgICAqLwogCiAgICAgaWYgKG1vdmVUb09yaWdpbikKLSAgICAgICAgYWRqdXN0ZWRSZWN0Lm1v
dmVCeShmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5l
cigpKSk7CisgICAgICAgIGFkanVzdGVkUmVjdC5tb3ZlQnkobm9taW5hbFNWR0xheW91dExvY2F0
aW9uKCkpOwogCiAgICAgaWYgKGF1dG8qIHRyYW5zZm9ybSA9IGxheWVyKCktPnRyYW5zZm9ybSgp
KQogICAgICAgICBhZGp1c3RlZFJlY3QgPSB0cmFuc2Zvcm0tPm1hcFJlY3QoYWRqdXN0ZWRSZWN0
KTsKQEAgLTM1Niw2ICszNTcsMTMgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjphcHBs
eVNWR1RyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLAogCiAgICAgc3R5
bGUudW5hcHBseVRyYW5zZm9ybU9yaWdpbih0cmFuc2Zvcm0sIG9yaWdpblRyYW5zbGF0ZSk7CiB9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dXBkYXRlSGFzU1ZHVHJhbnNmb3JtRmxh
Z3MoY29uc3QgU1ZHR3JhcGhpY3NFbGVtZW50JiBncmFwaGljc0VsZW1lbnQpCit7CisgICAgYm9v
bCBoYXNTVkdUcmFuc2Zvcm0gPSAhZ3JhcGhpY3NFbGVtZW50LmFuaW1hdGVkTG9jYWxUcmFuc2Zv
cm0oKS5pc0lkZW50aXR5KCk7CisgICAgc2V0SGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KHN0
eWxlKCkuaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkgfHwgaGFzU1ZHVHJhbnNmb3JtKTsK
KyAgICBzZXRIYXNTVkdUcmFuc2Zvcm0oaGFzU1ZHVHJhbnNmb3JtKTsKK30KICNlbmRpZgogCiBi
b29sIHJlbmRlcmVyTmVlZHNQaXhlbFNuYXBwaW5nKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QmIHJlbmRlcmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyTW9kZWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmgKaW5kZXggMDZhYzc4YzNmZTNjZWM1MDJmZDcwM2Q0N2FhYzM3NTYwNGUw
N2EyNC4uYzhiNzBlZDg5M2YwZmQ3ZjAxZTA2YjVlZWUxOTgxMjUxMDY4MDBkZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCkBAIC03
OCw2ICs3OCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXBMb2NhbFRvU1ZHQ29udGFpbmVyKGNv
bnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFuc2Zvcm1T
dGF0ZSYsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29sKiB3YXNGaXhlZCkgY29u
c3Q7CiAKICAgICB2b2lkIGFwcGx5U1ZHVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
U1ZHR3JhcGhpY3NFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGbG9hdFJlY3Qm
IGJvdW5kaW5nQm94LCBPcHRpb25TZXQ8UmVuZGVyU3R5bGU6OlRyYW5zZm9ybU9wZXJhdGlvbk9w
dGlvbj4pIGNvbnN0OworICAgIHZvaWQgdXBkYXRlSGFzU1ZHVHJhbnNmb3JtRmxhZ3MoY29uc3Qg
U1ZHR3JhcGhpY3NFbGVtZW50Jik7CisKKyAgICBMYXlvdXRQb2ludCBub21pbmFsU1ZHTGF5b3V0
TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRp
bmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zKCkubWluWE1pbllDb3JuZXIoKSk7IH0KKyAgICB2
aXJ0dWFsIExheW91dFBvaW50IGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiB7IH07IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vy
cmVudFNWR0xheW91dExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50JikgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQogI2VuZGlmCiAKICAgICB2b2lkIHVwZGF0ZUxheWVyVHJhbnNmb3JtKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDYxOTExYzhhYzY2
MmZjM2MyM2E5MzU2NTZkODgxOGVmY2M2YzlkODIuLjAzYWY0NGIzODhkZTBhZmFkNWFlOTkwOTU2
MWRhM2YxYWQ2YjE2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCkBAIC01MjEsNiArNTIxLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmplY3RJc1JlbGF5
b3V0Qm91bmRhcnkoY29uc3QgUmVuZGVyRWxlbWVudCogb2JqZWN0KQogICAgIGlmICghb2JqZWN0
LT5oYXNOb25WaXNpYmxlT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisjaWYg
RU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKG9iamVjdC0+ZG9jdW1lbnQo
KS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkgJiYgb2JqZWN0LT5pc1NW
R0xheWVyQXdhcmVSZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKwog
ICAgIGlmIChvYmplY3QtPnN0eWxlKCkud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpIHx8IG9i
amVjdC0+c3R5bGUoKS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpIHx8IG9iamVjdC0+c3R5
bGUoKS5oZWlnaHQoKS5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggMzY4YzNk
MTdiM2I2MGI3NTIyOWQ2ZDNhYzQ3OGMwY2VhYmRkYjNkYy4uZTkwZTkwNDhhZTg1NGUxYzMxN2Zm
MjM0YmZhZDI2NGY2ZWU1OTVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaApAQCAtMzY3LDYgKzM2NywxOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VC
b3VuZGluZ0JveCgpIGNvbnN0OwogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUp
CisgICAgLy8gVGhlIG9iamVjdEJvdW5kaW5nQm94IG9mIGEgU1ZHIGNvbnRhaW5lciBpcyBhZmZl
Y3RlZCBieSB0aGUgdHJhbnNmb3JtYXRpb25zIGFwcGxpZWQgb24gaXRzIGNoaWxkcmVuIC0tIHRo
ZSBjb250YWluZXIKKyAgICAvLyBib3VuZGluZyBib3ggaXMgYSB1bmlvbiBvZiBhbGwgY2hpbGQg
Ym91bmRpbmcgYm94ZXMsIG1hcHBlZCB0aHJvdWdoIHRoZWlyIHRyYW5zZm9ybWF0aW9uIG1hdHJp
Y2VzLgorICAgIC8vCisgICAgLy8gVGhpcyBtZXRob2QgaWdub3JlcyBhbGwgdHJhbnNmb3JtYXRp
b25zIGFuZCBjb21wdXRlcyB0aGUgb2JqZWN0Qm91bmRpbmdCb3gsIHdpdGhvdXQgbWFwcGluZyB0
aHJvdWdoIHRoZSBjaGlsZAorICAgIC8vIHRyYW5zZm9ybWF0aW9uIG1hdHJpY2VzLiBUaGUgU1ZH
IHJlbmRlciB0cmVlIGlzIGNvbnN0cnVjdGVkIGluIHN1Y2ggYSB3YXksIHRoYXQgaXQgY2FuIGJl
IG1hcHBlZCB0byBDU1MgZXF1aXZhbGVudHM6CisgICAgLy8gVGhlIFNWRyByZW5kZXIgdHJlZSB1
bmRlcm5lYXRoIHRoZSBvdXRlcm1vc3QgPHN2Zz4gYmVoYXZlcyBhcyBhIHNldCBvZiBhYnNvbHV0
ZWx5IHBvc2l0aW9uZWQsIHBvc3NpYmx5IG5lc3RlZCwgYm94ZXMuCisgICAgLy8gVGhlaXIgbGFp
ZCBvdXQgaW4gc3VjaCBhIHdheSB0aGF0IHRyYW5zZm9ybWF0aW9ucyBkbyBOT1QgYWZmZWN0IGxh
eW91dCwgYXMgaW4gSFRNTC9DU1Mgd29ybGQsIGJ1dCB0YWtlIGFmZmVjdCBkdXJpbmcKKyAgICAv
LyBwYWludGluZywgaGl0LXRlc3RpbmcgZXRjLiBUaGlzIGFsbG93cyB0byBtaW5pbWl6ZSB0aGUg
YW1vdW50IG9mIHJlLWxheW91dHMgd2hlbiBhbmltYXRpbmcgdHJhbnNmb3JtYXRpb25zIGluIFNW
RworICAgIC8vIChub3QgdXNpbmcgQ1NTIEFuaW1hdGlvbnMvVHJhbnNpdGlvbnMgLyBXZWIgQW5p
bWF0aW9ucywgYnV0IGUuZy4gU01JTCwgPGFuaW1hdGVUcmFuc2Zvcm0+LCBKUywgLi4uKS4KKyAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlv
bnMoKSBjb25zdCB7IHJldHVybiBvYmplY3RCb3VuZGluZ0JveCgpOyB9CisjZW5kaWYKKwogICAg
IC8vIFJldHVybnMgdGhlIHNtYWxsZXN0IHJlY3RhbmdsZSBlbmNsb3NpbmcgYWxsIG9mIHRoZSBw
YWludGVkIGNvbnRlbnQKICAgICAvLyByZXNwZWN0aW5nIGNsaXBwaW5nLCBtYXNraW5nLCBmaWx0
ZXJzLCBvcGFjaXR5LCBzdHJva2Utd2lkdGggYW5kIG1hcmtlcnMKICAgICB2aXJ0dWFsIEZsb2F0
UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcAppbmRleCAyZTEwNTcyODFj
ODgwNGIwZTYxYTdjOGY5ZjA0OTJlNGFjMTcxMDQ1Li43ZDFkODE2ZTkzYzA3NmE4ODJmYzJiNTY4
MGRlOTI5N2VjYzg2NjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0Jsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0Jsb2NrLmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR0Jsb2NrLmgiCiAKKyNpbmNsdWRlICJSZW5kZXJTVkdCbG9ja0lu
bGluZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0dy
YXBoaWNzRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKQEAgLTQyLDYg
KzQzLDEzIEBAIHZvaWQgUmVuZGVyU1ZHQmxvY2s6OnVwZGF0ZUZyb21TdHlsZSgpCiB7CiAgICAg
UmVuZGVyQmxvY2tGbG93Ojp1cGRhdGVGcm9tU3R5bGUoKTsKIAorI2lmIEVOQUJMRShMQVlFUl9C
QVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNl
ZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAgICB1cGRhdGVIYXNTVkdUcmFuc2Zvcm1GbGFn
cyhncmFwaGljc0VsZW1lbnQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKwog
ICAgIC8vIFJlbmRlclNWR2xvY2ssIHVzZWQgYnkgUmVuZGVyKFNWR1RleHR8Rm9yZWlnbk9iamVj
dCksIGlzIG5vdCBhbGxvd2VkIHRvIGNhbGwgc2V0SGFzTm9uVmlzaWJsZU92ZXJmbG93KHRydWUp
LgogICAgIC8vIFJlbmRlckJsb2NrIGFzc3VtZXMgYSBsYXllciB0byBiZSBwcmVzZW50IHdoZW4g
dGhlIG92ZXJmbG93IGNsaXAgZnVuY3Rpb25hbGl0eSBpcyByZXF1ZXN0ZWQuIEJvdGgKICAgICAv
LyBSZW5kZXIoU1ZHVGV4dHxGb3JlaWduT2JqZWN0KSByZXR1cm4gJ2ZhbHNlJyBvbiAncmVxdWly
ZXNMYXllcicuIEZpbmUgZm9yIFJlbmRlclNWR1RleHQuCkBAIC01NywxMiArNjUsMjQgQEAgdm9p
ZCBSZW5kZXJTVkdCbG9jazo6dXBkYXRlRnJvbVN0eWxlKCkKICAgICBzZXRIYXNOb25WaXNpYmxl
T3ZlcmZsb3coZmFsc2UpOwogfQogCi12b2lkIFJlbmRlclNWR0Jsb2NrOjphYnNvbHV0ZVJlY3Rz
KFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JikgY29uc3QKK3ZvaWQgUmVuZGVy
U1ZHQmxvY2s6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdAogeworI2lmIEVOQUJMRShMQVlFUl9C
QVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNl
ZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAgICByZWN0cy5hcHBlbmQoc25hcHBlZEludFJl
Y3QoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCksIHNpemUoKSkpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCiAgICAgLy8gVGhpcyBjb2RlIHBhdGgg
c2hvdWxkIG5ldmVyIGJlIHRha2VuIGZvciBTVkcsIGFzIHdlJ3JlIGFzc3VtaW5nIHVzZVRyYW5z
Zm9ybXM9dHJ1ZSBldmVyeXdoZXJlLCBhYnNvbHV0ZVF1YWRzIHNob3VsZCBiZSB1c2VkLgogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIFJlbmRlclNWR0Jsb2NrOjphYnNvbHV0
ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCogd2FzRml4ZWQpIGNvbnN0Cit7
CisgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoc3Ryb2tlQm91bmRpbmdCb3go
KSwgVXNlVHJhbnNmb3Jtcywgd2FzRml4ZWQpKTsKK30KKwogdm9pZCBSZW5kZXJTVkdCbG9jazo6
d2lsbEJlRGVzdHJveWVkKCkKIHsKICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50RGVzdHJv
eWVkKCp0aGlzKTsKQEAgLTcxLDcgKzkxLDExIEBAIHZvaWQgUmVuZGVyU1ZHQmxvY2s6OndpbGxC
ZURlc3Ryb3llZCgpCiAKIHZvaWQgUmVuZGVyU1ZHQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CisjaWYgRU5B
QkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJl
bmNlOjpMYXlvdXQgJiYgIWRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5l
RW5hYmxlZCgpKQorI2Vsc2UKICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2U6OkxheW91
dCkKKyNlbmRpZgogICAgICAgICBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKICAgICBSZW5k
ZXJCbG9ja0Zsb3c6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKICAgICBTVkdSZXNv
dXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKCp0aGlzLCBkaWZmLCBzdHlsZSgpKTsKQEAg
LTgxLDYgKzEwNSwxMSBAQCB2b2lkIFJlbmRlclNWR0Jsb2NrOjpjb21wdXRlT3ZlcmZsb3coTGF5
b3V0VW5pdCBvbGRDbGllbnRBZnRlckVkZ2UsIGJvb2wgcmVjb21wdQogewogICAgIFJlbmRlckJs
b2NrRmxvdzo6Y29tcHV0ZU92ZXJmbG93KG9sZENsaWVudEFmdGVyRWRnZSwgcmVjb21wdXRlRmxv
YXRzKTsKIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1
bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworI2VuZGlmCisKICAgICBjb25zdCBhdXRvKiB0ZXh0U2hhZG93ID0gc3R5bGUoKS50
ZXh0U2hhZG93KCk7CiAgICAgaWYgKCF0ZXh0U2hhZG93KQogICAgICAgICByZXR1cm47CkBAIC05
MCwxMyArMTE5LDI4IEBAIHZvaWQgUmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyhMYXlv
dXRVbml0IG9sZENsaWVudEFmdGVyRWRnZSwgYm9vbCByZWNvbXB1CiAgICAgYWRkVmlzdWFsT3Zl
cmZsb3coc25hcHBlZEludFJlY3QoYm9yZGVyUmVjdCkpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRl
clNWR0Jsb2NrOjpjbGlwcGVkT3ZlcmZsb3dSZWN0KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCkgY29uc3QKK0xheW91dFJl
Y3QgUmVuZGVyU1ZHQmxvY2s6OmNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0IGNvbnRleHQp
IGNvbnN0CiB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGRv
Y3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKSB7CisgICAg
ICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlICYmICFl
bmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29udGVudCgpKQorICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgICAgICBBU1NFUlQoIXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0
KCkuaXNQYWludE9mZnNldENhY2hlRW5hYmxlZCgpKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVS
ZWN0KHZpc3VhbE92ZXJmbG93UmVjdCgpLCByZXBhaW50Q29udGFpbmVyLCBjb250ZXh0KTsKKyAg
ICB9CisjZW5kaWYKKwogICAgIHJldHVybiBTVkdSZW5kZXJTdXBwb3J0OjpjbGlwcGVkT3ZlcmZs
b3dSZWN0Rm9yUmVwYWludCgqdGhpcywgcmVwYWludENvbnRhaW5lcik7CiB9CiAKIHN0ZDo6b3B0
aW9uYWw8TGF5b3V0UmVjdD4gUmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVWaXNpYmxlUmVjdEluQ29u
dGFpbmVyKGNvbnN0IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QqIGNvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0IGNvbnRleHQpIGNvbnN0CiB7CisjaWYg
RU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0dGlu
Z3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gY29tcHV0
ZVZpc2libGVSZWN0SW5TVkdDb250YWluZXIocmVjdCwgY29udGFpbmVyLCBjb250ZXh0KTsKKyNl
bmRpZgorCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGFkanVzdGVkUmVjdCA9IGNvbXB1
dGVGbG9hdFZpc2libGVSZWN0SW5Db250YWluZXIocmVjdCwgY29udGFpbmVyLCBjb250ZXh0KTsK
ICAgICBpZiAoYWRqdXN0ZWRSZWN0KQogICAgICAgICByZXR1cm4gZW5jbG9zaW5nTGF5b3V0UmVj
dCgqYWRqdXN0ZWRSZWN0KTsKQEAgLTEwNSw2ICsxNDksOSBAQCBzdGQ6Om9wdGlvbmFsPExheW91
dFJlY3Q+IFJlbmRlclNWR0Jsb2NrOjpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25z
dCBMYQogCiBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gUmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVG
bG9hdFZpc2libGVSZWN0SW5Db250YWluZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCBjb250
ZXh0KSBjb25zdAogeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIEFT
U0VSVCghZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkp
OworI2VuZGlmCiAgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVGbG9hdFZpc2li
bGVSZWN0SW5Db250YWluZXIoKnRoaXMsIHJlY3QsIGNvbnRhaW5lciwgY29udGV4dCk7CiB9CiAK
QEAgLTExNSwxMyArMTYyLDIzIEBAIHZvaWQgUmVuZGVyU1ZHQmxvY2s6Om1hcExvY2FsVG9Db250
YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JDCiAKIGNvbnN0IFJl
bmRlck9iamVjdCogUmVuZGVyU1ZHQmxvY2s6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlN
YXAmIGdlb21ldHJ5TWFwKSBjb25zdAogeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5H
SU5FKQorICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5l
cihhbmNlc3RvclRvU3RvcEF0LCBnZW9tZXRyeU1hcCk7CisjZW5kaWYKKwogICAgIHJldHVybiBT
VkdSZW5kZXJTdXBwb3J0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKCp0aGlzLCBhbmNlc3RvclRv
U3RvcEF0LCBnZW9tZXRyeU1hcCk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHQmxvY2s6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYsIGNvbnN0IExheW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikKKyNpZiBFTkFCTEUo
TEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKK0xheW91dFNpemUgUmVuZGVyU1ZHQmxvY2s6Om9mZnNl
dEZyb21Db250YWluZXIoUmVuZGVyRWxlbWVudCYgY29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYsIGJvb2wqKSBjb25zdAogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBmYWxzZTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRhaW5lciwgJmNvbnRhaW5lciA9PSB0aGlz
LT5jb250YWluZXIoKSk7CisgICAgQVNTRVJUKCFpc0luRmxvd1Bvc2l0aW9uZWQoKSk7CisgICAg
QVNTRVJUKCFpc0Fic29sdXRlbHlQb3NpdGlvbmVkKCkpOworICAgIEFTU0VSVCghaXNJbmxpbmUo
KSk7CisgICAgcmV0dXJuIExheW91dFNpemUoKTsKIH0KKyNlbmRpZgogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmgKaW5kZXggOWU5OWFlMDY0NjBm
OTg5YzhhYTE3NjhiZmU1OWI1Yjk3OWM5OTVhNC4uOGUxZDdjODEyZTg0YzI1ZjlhNGViNjBiZWM1
MjJkNWJhOWFjY2YwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHQmxvY2suaApAQCAtNDUsMTcgKzQ1LDIzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1JlbmRl
clNWR0Jsb2NrKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCBhYnNv
bHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCkgY29uc3Qgb3ZlcnJpZGU7Ci0KKyAgICB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9y
PEZsb2F0UXVhZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZSkgZmluYWw7CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBMYXlv
dXRQb2ludCBjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBs
b2NhdGlvbigpOyB9CisgICAgdm9pZCBzZXRDdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oY29uc3Qg
TGF5b3V0UG9pbnQmIGxvY2F0aW9uKSBmaW5hbCB7IHNldExvY2F0aW9uKGxvY2F0aW9uKTsgfQor
I2VuZGlmCisKICAgICBMYXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBj
b25zdCBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gY29tcHV0ZUZsb2F0Vmlz
aWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCkgY29uc3QgZmluYWw7CiAg
ICAgc3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0PiBjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5l
cihjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFp
bmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCBtYXBMb2Nh
bFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFp
bmVyLCBUcmFuc2Zvcm1TdGF0ZSYsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29s
KiB3YXNGaXhlZCkgY29uc3QgZmluYWw7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFw
cGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9T
dG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJikgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBmaW5hbDsKKyNpZiBFTkFCTEUoTEFZRVJfQkFT
RURfU1ZHX0VOR0lORSkKKyAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Db250YWluZXIoUmVuZGVy
RWxlbWVudCYsIGNvbnN0IExheW91dFBvaW50JiwgYm9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQg
PSBudWxscHRyKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCmluZGV4IDM0NWQ2MzYxMzRkNWZkYmNmOTI2N2JmY2RhY2M0Y2Y2MmNiM2M2
YzcuLjIxMzgwOTM5NjNjNzJkZGM0M2RhZDQzMmNjOTM0YjkyOWQ2MWZhMjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKQEAg
LTExOSwxOSArMTE5LDE0IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXRDaGlsZHJl
bigpCiAKICAgICBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uIGJvdW5kaW5nQm94Q29tcHV0YXRp
b24oKnRoaXMpOwogICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBib3VuZGluZ0JveENvbXB1dGF0
aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
OjpvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb24sICZtX29iamVjdEJvdW5kaW5nQm94VmFsaWQp
OwotICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBib3VuZGluZ0JveENvbXB1dGF0aW9uLmNvbXB1
dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpzdHJva2VC
b3VuZGluZ0JveERlY29yYXRpb24pOwotICAgIHNldExheW91dFJlY3QoZW5jbG9zaW5nTGF5b3V0
UmVjdChtX29iamVjdEJvdW5kaW5nQm94KSk7CiAKLSAgICBjb250YWluZXJMYXlvdXQucG9zaXRp
b25DaGlsZHJlblJlbGF0aXZlVG9Db250YWluZXIoKTsKLX0KKyAgICBjb25zdGV4cHIgYXV0byBv
YmplY3RCb3VuZGluZ0JveERlY29yYXRpb25XaXRob3V0VHJhbnNmb3JtYXRpb25zID0gU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbjo6b2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0aW9uIHwgU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbjo6RGVjb3JhdGlvbk9wdGlvbjo6SWdub3JlVHJhbnNmb3JtYXRp
b25zOworICAgIG1fb2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zID0gYm91
bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3gob2JqZWN0Qm91
bmRpbmdCb3hEZWNvcmF0aW9uV2l0aG91dFRyYW5zZm9ybWF0aW9ucyk7CiAKLXZvaWQgUmVuZGVy
U1ZHQ29udGFpbmVyOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzdHls
ZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CisgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IGJv
dW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb246OnN0cm9rZUJvdW5kaW5nQm94RGVjb3JhdGlvbik7CisgICAgc2V0
Q3VycmVudFNWR0xheW91dFJlY3QoZW5jbG9zaW5nTGF5b3V0UmVjdChtX29iamVjdEJvdW5kaW5n
Qm94V2l0aG91dFRyYW5zZm9ybWF0aW9ucykpOwogCi0gICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0
cmVhbSBSZW5kZXJMYXllciBjaGFuZ2VzCi0gICAgLy8gaWYgKGhhc0xheWVyKCkpCi0gICAgLy8g
ICAgIGxheWVyKCktPnNldElzT3Bwb3J0dW5pc3RpY1N0YWNraW5nQ29udGV4dCh0cnVlKTsKKyAg
ICBjb250YWluZXJMYXlvdXQucG9zaXRpb25DaGlsZHJlblJlbGF0aXZlVG9Db250YWluZXIoKTsK
IH0KIAogYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OnNlbGZXaWxsUGFpbnQoKQpAQCAtMTY1LDcg
KzE2MCw3IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxheW91dExv
Y2F0aW9uKCk7CisgICAgYXV0byBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBj
dXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKTsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2U6Ok1hc2spIHsKICAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdS
ZW5kZXJTdXBwb3J0IGNoYW5nZXMKICAgICAgICAgLy8gU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRT
VkdNYXNrKCp0aGlzLCBwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOwpAQCAtMTg1LDcg
KzE4MCw3IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmCiAKIGJvb2wgUmVuZGVyU1ZHQ29udGFp
bmVyOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRU
ZXN0QWN0aW9uKQogewotICAgIGF1dG8gYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zm
c2V0ICsgbGF5b3V0TG9jYXRpb24oKTsKKyAgICBhdXRvIGFkanVzdGVkTG9jYXRpb24gPSBhY2N1
bXVsYXRlZE9mZnNldCArIGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogCiAgICAgYXV0byB2
aXN1YWxPdmVyZmxvd1JlY3QgPSB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCk7CiAgICAg
dmlzdWFsT3ZlcmZsb3dSZWN0Lm1vdmVCeShhZGp1c3RlZExvY2F0aW9uKTsKQEAgLTE5Myw4ICsx
ODgsNyBAQCBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBhdXRvIGxvY2FsUG9pbnQgPSBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCk7Ci0gICAg
YXV0byBib3VuZGluZ0JveFRvcExlZnRDb3JuZXIgPSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0
Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKTsKLSAgICBhdXRvIGNvb3JkaW5hdGVTeXN0
ZW1PcmlnaW5UcmFuc2xhdGlvbiA9IGJvdW5kaW5nQm94VG9wTGVmdENvcm5lciAtIGFkanVzdGVk
TG9jYXRpb247CisgICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24gPSBu
b21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKSAtIGFkanVzdGVkTG9jYXRpb247CiAgICAgbG9jYWxQ
b2ludC5tb3ZlKGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbik7CiAKICAgICBpZiAo
IVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEoKnRoaXMsIGxvY2FsUG9pbnQp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250
YWluZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVy
LmgKaW5kZXggZTM0ODJhYjlmMDNhMTVmOTMxYTI5OTY5ZDFmNjU0MDY2MDVmNTdiYi4uZmQ0MjVh
MzBjNDhlZGQyMjE3Nzg2NTU3YWFlNWZiMGIyNjJlNzdjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCkBAIC00MCw2ICs0MCw3IEBA
IHB1YmxpYzoKICAgICBib29sIGlzT2JqZWN0Qm91bmRpbmdCb3hWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3hWYWxpZDsgfQogCiAgICAgRmxvYXRSZWN0IG9iamVjdEJv
dW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQor
ICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnMoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0
aW9uczsgfQogICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5nQm94KCp0aGlzKTsgfQogCkBAIC00OSw4
ICs1MCw2IEBAIHByb3RlY3RlZDoKICAgICBBU0NJSUxpdGVyYWwgcmVuZGVyTmFtZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJTVkdDb250YWluZXIiX3M7IH0KICAgICBib29sIGNh
bkhhdmVDaGlsZHJlbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQg
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0Q2hpbGRyZW4oKTsKICAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRp
b25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uKSBvdmVycmlkZTsKQEAgLTYyLDYgKzYxLDcgQEAgcHJvdGVjdGVkOgogCiAgICAg
Ym9vbCBtX29iamVjdEJvdW5kaW5nQm94VmFsaWQgeyBmYWxzZSB9OwogICAgIEZsb2F0UmVjdCBt
X29iamVjdEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94V2l0
aG91dFRyYW5zZm9ybWF0aW9uczsKICAgICBGbG9hdFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsK
IAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW5saW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZS5oCmluZGV4IDIwMDAxNDc3NWNlZTgyNWQxZGFmYmE0ZDk0MGUyYjhkMDIzMjc1NDIuLjU0
YTVhMTdlOGUwYWY2Y2UxMzcwYmVmNzlhYmZmNWJlOTlhMWMyNDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaApAQCAtNTEsNiArNTEsMTEgQEAg
cHJpdmF0ZToKICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCBmaW5hbDsK
ICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBmaW5h
bDsKIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIExheW91dFBvaW50
IGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQor
ICAgIHZvaWQgc2V0Q3VycmVudFNWR0xheW91dExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50Jikg
ZmluYWwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorI2VuZGlmCisKICAgICBMYXlvdXRSZWN0
IGNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBmaW5hbDsKICAgICBzdGQ6Om9w
dGlvbmFsPEZsb2F0UmVjdD4gY29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZp
c2libGVSZWN0Q29udGV4dCkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBtYXBMb2NhbFRvQ29udGFp
bmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFu
c2Zvcm1TdGF0ZSYsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29sKiB3YXNGaXhl
ZCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCmluZGV4IGM5Njk1ZTZiNmE0M2Y5Y2Y0ZmYwMzk1YWMz
NjFhNDMyNjFkYjhlMjMuLjZmZmVlOTk3MTgyZTllZTcyMDUyYTlhZjA3OTY5MjE4OTBjM2MzMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuY3BwCkBAIC02MSwxMiArNjEsOCBAQCB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0
Ojp1cGRhdGVGcm9tU3R5bGUoKQogewogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnVwZGF0
ZUZyb21TdHlsZSgpOwogCi0gICAgYm9vbCBoYXNTVkdUcmFuc2Zvcm0gPSBmYWxzZTsKICAgICBp
ZiAoaXM8U1ZHR3JhcGhpY3NFbGVtZW50PihlbGVtZW50KCkpKQotICAgICAgICBoYXNTVkdUcmFu
c2Zvcm0gPSAhZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50PihlbGVtZW50KCkpLmFuaW1hdGVk
TG9jYWxUcmFuc2Zvcm0oKS5pc0lkZW50aXR5KCk7Ci0KLSAgICBzZXRIYXNUcmFuc2Zvcm1SZWxh
dGVkUHJvcGVydHkoc3R5bGUoKS5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSB8fCBoYXNT
VkdUcmFuc2Zvcm0pOwotICAgIHNldEhhc1NWR1RyYW5zZm9ybShoYXNTVkdUcmFuc2Zvcm0pOwor
ICAgICAgICB1cGRhdGVIYXNTVkdUcmFuc2Zvcm1GbGFncyhkb3duY2FzdDxTVkdHcmFwaGljc0Vs
ZW1lbnQ+KGVsZW1lbnQoKSkpOwogfQogCiBGbG9hdFJlY3QgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OmJvcmRlckJveFJlY3RJbkZyYWdtZW50RXF1aXZhbGVudChSZW5kZXJGcmFnbWVudENvbnRhaW5l
ciosIFJlbmRlckJveDo6UmVuZGVyQm94RnJhZ21lbnRJbmZvRmxhZ3MpIGNvbnN0CkBAIC0xNDEs
NyArMTM3LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5k
c0ZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE8KIAogdm9pZCBSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CiB7Ci0gICAgcmVjdHMuYXBwZW5kKHNu
YXBwZWRJbnRSZWN0KExheW91dFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyBsYXlvdXRMb2NhdGlv
bigpLCBsYXlvdXRTaXplKCkpKSk7CisgICAgcmVjdHMuYXBwZW5kKHNuYXBwZWRJbnRSZWN0KExh
eW91dFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyBtX2xheW91dFJlY3QubG9jYXRpb24oKSwgbV9s
YXlvdXRSZWN0LnNpemUoKSkpKTsKIH0KIAogdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJz
b2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9i
amVjdC5oCmluZGV4IGJjMTEyNDUwNDNjOWQxZTU0ZWIwY2M0Y2MyYzE0OGM5YTliMjM4YzMuLmFl
ODliOGRlYWM5OGIyZGU1YmM5OTE3NmEyOThhNDMzMjg0NDdkYzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKQEAgLTU4LDI2
ICs1OCwyMSBAQCBwdWJsaWM6CiAKICAgICBpbmxpbmUgU1ZHRWxlbWVudCYgZWxlbWVudCgpIGNv
bnN0OwogCisgICAgTGF5b3V0UmVjdCBjdXJyZW50U1ZHTGF5b3V0UmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5b3V0UmVjdDsgfQorICAgIHZvaWQgc2V0Q3VycmVudFNWR0xheW91dFJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgbGF5b3V0UmVjdCkgeyBtX2xheW91dFJlY3QgPSBsYXlvdXRSZWN0OyB9
CisKKyAgICBMYXlvdXRQb2ludCBjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2xheW91dFJlY3QubG9jYXRpb24oKTsgfQorICAgIHZvaWQgc2V0Q3VycmVu
dFNWR0xheW91dExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbikgZmluYWwgeyBt
X2xheW91dFJlY3Quc2V0TG9jYXRpb24obG9jYXRpb24pOyB9CisKICAgICAvLyBNaW1pYyB0aGUg
UmVuZGVyQm94IGFjY2Vzc29ycyAtIGJ5IHNoYXJpbmcgdGhlIHNhbWUgdGVybWlub2xvZ3kgdGhl
IHBhaW50aW5nIC8gaGl0IHRlc3RpbmcgLyBsYXlvdXQgbG9naWMgaXMKICAgICAvLyBzaW1pbGFy
IHRvIHJlYWQgY29tcGFyZWQgdG8gbm9uLVNWRyByZW5kZXJlcnMgc3VjaCBhcyBSZW5kZXJCb3gg
JiBmcmllbmRzLgogICAgIExheW91dFJlY3QgYm9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKSBjb25z
dCB7IHJldHVybiB7IExheW91dFBvaW50KCksIG1fbGF5b3V0UmVjdC5zaXplKCkgfTsgfQogICAg
IExheW91dFJlY3QgY29udGVudEJveFJlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gYm9y
ZGVyQm94UmVjdEVxdWl2YWxlbnQoKTsgfQogICAgIExheW91dFJlY3QgZnJhbWVSZWN0RXF1aXZh
bGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdDsgfQotCiAgICAgTGF5b3V0UmVjdCB2
aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gU1ZHQm91bmRpbmdC
b3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCgqdGhpcyk7IH0KIAotICAg
IHZvaWQgYXBwbHlUb3BMZWZ0TG9jYXRpb25PZmZzZXRFcXVpdmFsZW50KExheW91dFBvaW50JiBw
b2ludCkgY29uc3QgeyBwb2ludC5tb3ZlQnkobGF5b3V0TG9jYXRpb24oKSk7IH0KLQotICAgIExh
eW91dFJlY3QgbGF5b3V0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdDsgfQotICAg
IHZvaWQgc2V0TGF5b3V0UmVjdChjb25zdCBMYXlvdXRSZWN0JiBsYXlvdXRSZWN0KSB7IG1fbGF5
b3V0UmVjdCA9IGxheW91dFJlY3Q7IH0KLSAgICB2b2lkIHNldExheW91dExvY2F0aW9uKGNvbnN0
IExheW91dFBvaW50JiBsYXlvdXRMb2NhdGlvbikgeyBtX2xheW91dFJlY3Quc2V0TG9jYXRpb24o
bGF5b3V0TG9jYXRpb24pOyB9Ci0KLSAgICBMYXlvdXRQb2ludCBwYWludGluZ0xvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gdG9MYXlvdXRQb2ludChsYXlvdXRMb2NhdGlvbigpIC0gZmxvb3JlZExh
eW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCkubWluWE1pbllDb3JuZXIoKSkpOyB9Ci0gICAg
TGF5b3V0UG9pbnQgbGF5b3V0TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xheW91dFJlY3Qu
bG9jYXRpb24oKTsgfQotICAgIExheW91dFNpemUgbGF5b3V0TG9jYXRpb25PZmZzZXQoKSBjb25z
dCB7IHJldHVybiB0b0xheW91dFNpemUobV9sYXlvdXRSZWN0LmxvY2F0aW9uKCkpOyB9Ci0gICAg
TGF5b3V0U2l6ZSBsYXlvdXRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0LnNpemUo
KTsgfQotCiAgICAgLy8gRm9yIFJlbmRlckxheWVyIG9ubHkKKyAgICB2b2lkIGFwcGx5VG9wTGVm
dExvY2F0aW9uT2Zmc2V0RXF1aXZhbGVudChMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcG9p
bnQubW92ZUJ5KGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpKTsgfQogICAgIEZsb2F0UmVjdCBi
b3JkZXJCb3hSZWN0SW5GcmFnbWVudEVxdWl2YWxlbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
LCBSZW5kZXJCb3g6OlJlbmRlckJveEZyYWdtZW50SW5mb0ZsYWdzID0gUmVuZGVyQm94OjpDYWNo
ZVJlbmRlckJveEZyYWdtZW50SW5mbykgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IG92
ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVu
dENvbnRhaW5lciogPSBudWxscHRyLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBQYWludFBoYXNlID0gUGFpbnRQaGFzZTo6QmxvY2tC
YWNrZ3JvdW5kKSBjb25zdDsKICAgICBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3RGb3JDaGls
ZExheWVycyhjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFp
bmVyKiBmcmFnbWVudCwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSB7
IHJldHVybiBvdmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVudCwgcmVsZXZhbmN5KTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKaW5k
ZXggYTliOTMzMjJiMGE4ZjI0NmUwMmM1NjAzNjI1ZGYzMzQ2ZDNkZmJjYy4uMjJhMDBjZjQ0OTNj
YjRiZDE5MzI2MGIxMTk3ZDQzMmNjYzdmNzM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC0xOTYsNiArMTk2LDEwIEBAIHZvaWQgUmVu
ZGVyU1ZHUm9vdDo6bGF5b3V0KCkKIAogICAgICAgICBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
IGJvdW5kaW5nQm94Q29tcHV0YXRpb24oKnRoaXMpOwogICAgICAgICBtX29iamVjdEJvdW5kaW5n
Qm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3go
U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6b2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0aW9uKTsK
KworICAgICAgICBjb25zdGV4cHIgYXV0byBvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb25XaXRo
b3V0VHJhbnNmb3JtYXRpb25zID0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6b2JqZWN0Qm91
bmRpbmdCb3hEZWNvcmF0aW9uIHwgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6RGVjb3JhdGlv
bk9wdGlvbjo6SWdub3JlVHJhbnNmb3JtYXRpb25zOworICAgICAgICBtX29iamVjdEJvdW5kaW5n
Qm94V2l0aG91dFRyYW5zZm9ybWF0aW9ucyA9IGJvdW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0
ZURlY29yYXRlZEJvdW5kaW5nQm94KG9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbldpdGhvdXRU
cmFuc2Zvcm1hdGlvbnMpOworCiAgICAgICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBib3VuZGlu
Z0JveENvbXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uOjpzdHJva2VCb3VuZGluZ0JveERlY29yYXRpb24pOwogICAgIH0KIApAQCAt
Mzk3LDYgKzQwMSw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlRnJvbVN0eWxlKCkKICAg
ICBSZW5kZXJSZXBsYWNlZDo6dXBkYXRlRnJvbVN0eWxlKCk7CiAKICAgICBzZXRIYXNTVkdUcmFu
c2Zvcm0oKTsKKyAgICBzZXRIYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKTsKIAogICAgIGlm
IChzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpKQogICAgICAgICBzZXRIYXNOb25WaXNpYmxlT3Zl
cmZsb3coKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgK
aW5kZXggZTdmNzE1NTMyNjdlYjIzOTgwMDU4ZDE3ZWQwOGRjODIwMTgwMDA4Zi4uYzBkMWNjZGRh
Mzg2ODlmNzJkY2ZiM2VhMTQwMzIzZmI3MTJhNTAyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKQEAgLTY3LDYgKzY3LDcgQEAgcHVibGljOgogICAg
IGJvb2wgc2hvdWxkQXBwbHlWaWV3cG9ydENsaXAoKSBjb25zdDsKIAogICAgIEZsb2F0UmVjdCBv
YmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdC
b3g7IH0KKyAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRp
b25zKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFu
c2Zvcm1hdGlvbnM7IH0KICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9CiAgICAgRmxvYXRSZWN0IHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU1ZHQm91bmRp
bmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVJlcGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7IH0KIApA
QCAtMTIzLDYgKzEyNCw3IEBAIHByaXZhdGU6CiAKICAgICBJbnRTaXplIG1fY29udGFpbmVyU2l6
ZTsKICAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9v
YmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnM7CiAgICAgRmxvYXRSZWN0IG1f
c3Ryb2tlQm91bmRpbmdCb3g7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fdmlld0JveFRyYW5zZm9y
bTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9zdXBwbGVtZW50YWxMb2NhbFRvUGFyZW50VHJhbnNm
b3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdT
aGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNw
cAppbmRleCBjYWFmNmIzNWIwZTA1MjAwM2RmOTIwMWVlYzAwMDRkNTQzNTFmNDA2Li45OWIyODg0
ZDcyNDU5OWYzNjk5NGFhMzA3MGY4NzQzYmFmMjllODIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIHZv
aWQgUmVuZGVyU1ZHU2hhcGU6OmxheW91dCgpCiAgICAgICAgIHVwZGF0ZVNoYXBlRnJvbUVsZW1l
bnQoKTsKIAogICAgICAgICBtX25lZWRzU2hhcGVVcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgc2V0
TGF5b3V0UmVjdChlbmNsb3NpbmdMYXlvdXRSZWN0KG1fZmlsbEJvdW5kaW5nQm94KSk7CisgICAg
ICAgIHNldEN1cnJlbnRTVkdMYXlvdXRSZWN0KGVuY2xvc2luZ0xheW91dFJlY3QobV9maWxsQm91
bmRpbmdCb3gpKTsKICAgICB9CiAKICAgICB1cGRhdGVMYXllclRyYW5zZm9ybSgpOwpAQCAtMjg4
LDcgKzI4OCw3IEBAIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxheW91
dExvY2F0aW9uKCk7CisgICAgYXV0byBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQg
KyBjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKTsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2U6Ok1hc2spIHsKICAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBT
VkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKICAgICAgICAgLy8gU1ZHUmVuZGVyU3VwcG9ydDo6cGFp
bnRTVkdNYXNrKCp0aGlzLCBwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOwpAQCAtMzA4
LDcgKzMwOCw3IEBAIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRJbmZvLmNvbnRleHQoKSk7CiAKLSAgICBhdXRv
IGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbiA9IGFkanVzdGVkUGFpbnRPZmZzZXQg
LSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5sb2NhdGlvbigpKTsKKyAg
ICBhdXRvIGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbiA9IGFkanVzdGVkUGFpbnRP
ZmZzZXQgLSBub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKTsKICAgICBwYWludEluZm8uY29udGV4
dCgpLnRyYW5zbGF0ZShjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24ud2lkdGgoKSwg
Y29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uLmhlaWdodCgpKTsKIAogICAgIGlmIChz
dHlsZSgpLnN2Z1N0eWxlKCkuc2hhcGVSZW5kZXJpbmcoKSA9PSBTaGFwZVJlbmRlcmluZzo6Q3Jp
c3BFZGdlcykKQEAgLTM0NSwxMSArMzQ1LDEwIEBAIGJvb2wgUmVuZGVyU1ZHU2hhcGU6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByCiAg
ICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGF1dG8gYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0
ICsgbGF5b3V0TG9jYXRpb24oKTsKKyAgICBhdXRvIGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVs
YXRlZE9mZnNldCArIGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogCiAgICAgYXV0byBsb2Nh
bFBvaW50ID0gbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpOwotICAgIGF1dG8gYm91bmRpbmdC
b3hUb3BMZWZ0Q29ybmVyID0gZmxvb3JlZExheW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCku
bWluWE1pbllDb3JuZXIoKSk7Ci0gICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNs
YXRpb24gPSBib3VuZGluZ0JveFRvcExlZnRDb3JuZXIgLSBhZGp1c3RlZExvY2F0aW9uOworICAg
IGF1dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gbm9taW5hbFNWR0xheW91
dExvY2F0aW9uKCkgLSBhZGp1c3RlZExvY2F0aW9uOwogICAgIGxvY2FsUG9pbnQubW92ZShjb29y
ZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24pOwogCiAgICAgaWYgKCFTVkdSZW5kZXJTdXBw
b3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKCp0aGlzLCBsb2NhbFBvaW50KSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCmluZGV4IDU4OGFmMWExZjc3
NzI5NTMxMjk3ZWNkOTBiYzYwYjY1MzI3ZjFlYWIuLjhjYjNjYmViNjRhNDFiMWE5YTE1YTY4YTBl
MGYzOTg2NGMxOTMzNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0LmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR0lubGlu
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJTVkdF
bGVtZW50VHlwZUhlbHBlcnMuaCIKICNpbmNsdWRlICJTVkdMZW5ndGhMaXN0LmgiCiAjaW5jbHVk
ZSAiU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKQEAgLTU3LDEwICs1OCw2IEBAIFdURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChSZW5kZXJTVkdUZXh0KTsKIAogUmVuZGVyU1ZHVGV4dDo6UmVuZGVyU1ZH
VGV4dChTVkdUZXh0RWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKICAgICA6
IFJlbmRlclNWR0Jsb2NrKGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQotICAgICwgbV9uZWVkc1Jl
b3JkZXJpbmcoZmFsc2UpCi0gICAgLCBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUoZmFs
c2UpCi0gICAgLCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlKHRydWUpCi0gICAgLCBtX25lZWRzVGV4
dE1ldHJpY3NVcGRhdGUoZmFsc2UpCiB7CiB9CiAKQEAgLTMxMSwxNSArMzA4LDI3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCB1cGRhdGVGb250SW5BbGxEZXNjZW5kYW50cyhSZW5kZXJPYmplY3QqIHN0
YXJ0LCBTVkdUZXh0TGF5b3V0CiAKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKIHsKKyAg
ICBhdXRvIGlzTGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQgPSBbJl0oKSB7CisjaWYgRU5BQkxF
KExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgIHJldHVybiBkb2N1bWVudCgpLnNldHRp
bmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfTsKKwogICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5
b3V0Q2hlY2tQb2ludDsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgTGF5b3V0UmVw
YWludGVyIHJlcGFpbnRlcigqdGhpcywgU1ZHUmVuZGVyU3VwcG9ydDo6Y2hlY2tGb3JTVkdSZXBh
aW50RHVyaW5nTGF5b3V0KCp0aGlzKSk7CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigq
dGhpcywgaXNMYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpID8gY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkgOiBTVkdSZW5kZXJTdXBwb3J0OjpjaGVja0ZvclNWR1JlcGFpbnREdXJpbmdM
YXlvdXQoKnRoaXMpKTsKKworICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHTGVuZ3Ro
Q29udGV4dCBjaGFuZ2VzCisgICAgLy8gdGV4dEVsZW1lbnQoKS51cGRhdGVMZW5ndGhDb250ZXh0
KCk7CiAKICAgICBib29sIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSBmYWxzZTsK
LSAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgewotICAgICAgICBtX2xvY2FsVHJhbnNm
b3JtID0gdGV4dEVsZW1lbnQoKS5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7Ci0gICAgICAgIG1f
bmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRh
cmllc0luUGFyZW50cyA9IHRydWU7CisgICAgaWYgKCFpc0xheWVyQmFzZWRTVkdFbmdpbmVFbmFi
bGVkKCkpIHsKKyAgICAgICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKKyAgICAgICAg
ICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSB0ZXh0RWxlbWVudCgpLmFuaW1hdGVkTG9jYWxUcmFuc2Zv
cm0oKTsKKyAgICAgICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOworICAgICAgICB9
CiAgICAgfQogCiAgICAgaWYgKCFldmVySGFkTGF5b3V0KCkpIHsKQEAgLTM0Nyw4ICszNTYsMTUg
QEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQogICAgICAgICBtX25lZWRzUG9zaXRpb25p
bmdWYWx1ZXNVcGRhdGUgPSBmYWxzZTsKICAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0lu
UGFyZW50cyA9IHRydWU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTGVnYWN5UmVuZGVyU1ZHUm9v
dCogcm9vdE9iaiA9IFNWR1JlbmRlclN1cHBvcnQ6OmZpbmRUcmVlUm9vdE9iamVjdCgqdGhpcyk7
Ci0gICAgICAgIGlmIChtX25lZWRzVGV4dE1ldHJpY3NVcGRhdGUgfHwgKHJvb3RPYmogJiYgcm9v
dE9iai0+aXNMYXlvdXRTaXplQ2hhbmdlZCgpKSkgeworICAgICAgICBib29sIGlzTGF5b3V0U2l6
ZUNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGF1dG8qIGxlZ2FjeVJvb3RPYmplY3QgPSBs
aW5lYWdlT2ZUeXBlPExlZ2FjeVJlbmRlclNWR1Jvb3Q+KCp0aGlzKS5maXJzdCgpKQorICAgICAg
ICAgICAgaXNMYXlvdXRTaXplQ2hhbmdlZCA9IGxlZ2FjeVJvb3RPYmplY3QtPmlzTGF5b3V0U2l6
ZUNoYW5nZWQoKTsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICAgICAg
ZWxzZSBpZiAoYXV0byogcm9vdE9iamVjdCA9IGxpbmVhZ2VPZlR5cGU8UmVuZGVyU1ZHUm9vdD4o
KnRoaXMpLmZpcnN0KCkpCisgICAgICAgICAgICBpc0xheW91dFNpemVDaGFuZ2VkID0gcm9vdE9i
amVjdC0+aXNMYXlvdXRTaXplQ2hhbmdlZCgpOworI2VuZGlmCisKKyAgICAgICAgaWYgKG1fbmVl
ZHNUZXh0TWV0cmljc1VwZGF0ZSB8fCBpc0xheW91dFNpemVDaGFuZ2VkKSB7CiAgICAgICAgICAg
ICAvLyBJZiB0aGUgcm9vdCBsYXlvdXQgc2l6ZSBjaGFuZ2VkIChlZy4gd2luZG93IHNpemUgY2hh
bmdlcykgb3IgdGhlIHRyYW5zZm9ybSB0byB0aGUgcm9vdAogICAgICAgICAgICAgLy8gY29udGV4
dCBoYXMgY2hhbmdlZCB0aGVuIHJlY29tcHV0ZSB0aGUgb24tc2NyZWVuIGZvbnQgc2l6ZS4KICAg
ICAgICAgICAgIHVwZGF0ZUZvbnRJbkFsbERlc2NlbmRhbnRzKHRoaXMsICZtX2xheW91dEF0dHJp
YnV0ZXNCdWlsZGVyKTsKQEAgLTM2NSwzMyArMzgxLDQwIEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6
bGF5b3V0KCkKICAgICAvLyBSZWR1Y2VkIHZlcnNpb24gb2YgUmVuZGVyQmxvY2s6OmxheW91dEJs
b2NrKCksIHdoaWNoIG9ubHkgdGFrZXMgY2FyZSBvZiBTVkcgdGV4dC4KICAgICAvLyBBbGwgaWYg
YnJhbmNoZXMgdGhhdCBjb3VsZCBjYXVzZSBlYXJseSBleGl0IGluIFJlbmRlckJsb2NrcyBsYXlv
dXRCbG9jaygpIG1ldGhvZCBhcmUgdHVybmVkIGludG8gYXNzZXJ0aW9ucy4KICAgICBBU1NFUlQo
IWlzSW5saW5lKCkpOwotICAgIEFTU0VSVCghc2ltcGxpZmllZExheW91dCgpKTsKICAgICBBU1NF
UlQoIXNjcm9sbHNPdmVyZmxvdygpKTsKICAgICBBU1NFUlQoIWhhc0NvbnRyb2xDbGlwKCkpOwog
ICAgIEFTU0VSVCghbXVsdGlDb2x1bW5GbG93KCkpOwogICAgIEFTU0VSVCghcG9zaXRpb25lZE9i
amVjdHMoKSk7Ci0gICAgQVNTRVJUKCFtX292ZXJmbG93KTsKICAgICBBU1NFUlQoIWlzQW5vbnlt
b3VzQmxvY2soKSk7CisgICAgaWYgKCFpc0xheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsK
KyAgICAgICAgQVNTRVJUKCFzaW1wbGlmaWVkTGF5b3V0KCkpOworICAgICAgICBBU1NFUlQoIW1f
b3ZlcmZsb3cpOworICAgIH0KIAogICAgIGlmICghZmlyc3RDaGlsZCgpKQogICAgICAgICBzZXRD
aGlsZHJlbklubGluZSh0cnVlKTsKIAogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpbmQgYSB3
YXkgdG8gb25seSBsYXlvdXQgdGhlIGNoaWxkIGJveGVzLCBpZiBuZWVkZWQuCiAgICAgRmxvYXRS
ZWN0IG9sZEJvdW5kYXJpZXMgPSBvYmplY3RCb3VuZGluZ0JveCgpOworICAgIGJvb2wgbGF5b3V0
Q2hhbmdlZCA9IGV2ZXJIYWRMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKTsKICAgICBBU1NF
UlQoY2hpbGRyZW5JbmxpbmUoKSk7CiAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbFRvcDsK
ICAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsQm90dG9tOwogICAgIHJlYnVpbGRGbG9hdGlu
Z09iamVjdFNldEZyb21JbnRydWRpbmdGbG9hdHMoKTsKICAgICBsYXlvdXRJbmxpbmVDaGlsZHJl
bih0cnVlLCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20pOwogCisgICAg
Ly8gdXBkYXRlUG9zaXRpb25BbmRPdmVyZmxvdygpIGlzIGNhbGxlZCBieSBTVkdSb290SW5saW5l
Qm94LCBhZnRlciBmb3JjZUxheW91dElubGluZUNoaWxkcmVuKCkgcmFuLCBiZWZvcmUgdGhpcyBw
b2ludCBpcyByZWFjaGVkLgogICAgIGlmIChtX25lZWRzUmVvcmRlcmluZykKICAgICAgICAgbV9u
ZWVkc1Jlb3JkZXJpbmcgPSBmYWxzZTsKIAotICAgIGlmICghdXBkYXRlQ2FjaGVkQm91bmRhcmll
c0luUGFyZW50cykKKyAgICBpZiAoaXNMYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKSB7Cisg
ICAgICAgIHVwZGF0ZUxheWVyVHJhbnNmb3JtKCk7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5k
YXJpZXNJblBhcmVudHMgPSBmYWxzZTsgLy8gTm8gbG9uZ2VyIG5lZWRlZCBmb3IgTEJTRS4KKyAg
ICB9IGVsc2UgaWYgKCF1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQogICAgICAgICB1
cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gb2xkQm91bmRhcmllcyAhPSBvYmplY3RC
b3VuZGluZ0JveCgpOwogCiAgICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMg
Y2xpZW50IGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KLSAgICBpZiAoZXZlckhhZExheW91dCgpICYm
IHNlbGZOZWVkc0xheW91dCgpKQorICAgIGlmIChsYXlvdXRDaGFuZ2VkKQogICAgICAgICBTVkdS
ZXNvdXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZCgqdGhpcyk7CiAKICAgICAvLyBJZiBv
dXIgYm91bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4KQEAgLTQwNCw2ICs0MjcsOSBA
QCB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiAKIGJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9k
ZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9u
IGhpdFRlc3RBY3Rpb24pCiB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisg
ICAgQVNTRVJUKCFkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJs
ZWQoKSk7CisjZW5kaWYKICAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzOjpTVkdfVEVYVF9ISVRURVNUSU5HLCByZXF1ZXN0LCBzdHlsZSgpLmVm
ZmVjdGl2ZVBvaW50ZXJFdmVudHMoKSk7CiAgICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUoKS52
aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSk7CiAgICAgaWYgKGlzVmlzaWJsZSB8
fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKQEAgLTQxMiw3ICs0MzgsNyBAQCBib29sIFJl
bmRlclNWR1RleHQ6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bAogICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gdmFs
dWVPckRlZmF1bHQobG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKSkubWFwUG9pbnQo
cG9pbnRJblBhcmVudCk7CiAKICAgICAgICAgICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9p
bnRJbkNsaXBwaW5nQXJlYSgqdGhpcywgbG9jYWxQb2ludCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgICAgIFNWR0hpdFRlc3RDeWNsZURldGVjdGlvblNjb3BlIGhpdFRlc3RTY29wZSgqdGhpcyk7
CiAKQEAgLTQyNCw2ICs0NTAsMzMgQEAgYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKK2Jvb2wg
UmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbklu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24gaGl0VGVzdEFjdGlvbikKK3sKKyAgICBBU1NFUlQoZG9jdW1lbnQoKS5zZXR0aW5ncygp
LmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpOworICAgIGF1dG8gYWRqdXN0ZWRMb2NhdGlv
biA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKKworICAgIFBvaW50ZXJFdmVudHNI
aXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19URVhUX0hJVFRFU1RJ
TkcsIHJlcXVlc3QsIHN0eWxlKCkucG9pbnRlckV2ZW50cygpKTsKKyAgICBib29sIGlzVmlzaWJs
ZSA9IChzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlKTsKKyAgICBp
ZiAoaXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgeworICAgICAgICBpZiAo
KGhpdFJ1bGVzLmNhbkhpdFN0cm9rZSAmJiAoc3R5bGUoKS5zdmdTdHlsZSgpLmhhc1N0cm9rZSgp
IHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkKKyAgICAgICAgfHwgKGhpdFJ1bGVzLmNhbkhp
dEZpbGwgJiYgKHN0eWxlKCkuc3ZnU3R5bGUoKS5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJlcXVp
cmVGaWxsKSkpIHsKKyAgICAgICAgICAgIGF1dG8gbG9jYWxQb2ludCA9IGxvY2F0aW9uSW5Db250
YWluZXIucG9pbnQoKTsKKyAgICAgICAgICAgIGF1dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRy
YW5zbGF0aW9uID0gbm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkgLSBhZGp1c3RlZExvY2F0aW9u
OworICAgICAgICAgICAgbG9jYWxQb2ludC5tb3ZlKGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFu
c2xhdGlvbik7CisKKyAgICAgICAgICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNs
aXBwaW5nQXJlYSgqdGhpcywgbG9jYWxQb2ludCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgICAgICBTVkdIaXRUZXN0Q3ljbGVEZXRlY3Rpb25TY29wZSBoaXRUZXN0
U2NvcGUoKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0
LCBoaXRUZXN0QWN0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKyNlbmRpZgorCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHVGV4dDo6cG9zaXRpb25Gb3JQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRlbnRzLCBjb25zdCBSZW5kZXJGcmFn
bWVudENvbnRhaW5lciogZnJhZ21lbnQpCiB7CiAgICAgTGVnYWN5Um9vdElubGluZUJveCogcm9v
dEJveCA9IGZpcnN0Um9vdEJveCgpOwpAQCAtNDQwLDE4ICs0OTMsNTMgQEAgVmlzaWJsZVBvc2l0
aW9uIFJlbmRlclNWR1RleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50SW5Db250ZW4KICAgICByZXR1cm4gY2xvc2VzdEJveC0+cmVuZGVyZXIoKS5wb3NpdGlvbkZv
clBvaW50KHsgcG9pbnRJbkNvbnRlbnRzLngoKSwgTGF5b3V0VW5pdChjbG9zZXN0Qm94LT55KCkp
IH0sIGZyYWdtZW50KTsKIH0KIAotdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVF1YWRzKFZl
Y3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCogd2FzRml4ZWQpIGNvbnN0Ci17Ci0gICAgcXVh
ZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoc3Ryb2tlQm91bmRpbmdCb3goKSwgVXNlVHJh
bnNmb3Jtcywgd2FzRml4ZWQpKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdUZXh0OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmKQordm9pZCBSZW5kZXJTVkdUZXh0
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0KQogewogICAgIGlmIChwYWludEluZm8uY29udGV4dCgpLnBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNl
OjpGb3JlZ3JvdW5kICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpTZWxlY3Rpb24p
Ci0gICAgICAgICByZXR1cm47CisgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNl
OjpDbGlwcGluZ01hc2sgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6Ok1hc2sgJiYg
cGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OkZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBo
YXNlICE9IFBhaW50UGhhc2U6Ok91dGxpbmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhh
c2U6OlNlbGZPdXRsaW5lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXBhaW50SW5mby5z
aG91bGRQYWludFdpdGhpblJvb3QoKnRoaXMpKQorICAgICAgICByZXR1cm47CisKKyNpZiBFTkFC
TEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygp
LmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKHN0eWxlKCkudmlz
aWJpbGl0eSgpID09IFZpc2liaWxpdHk6OkhpZGRlbiB8fCBzdHlsZSgpLmRpc3BsYXkoKSA9PSBE
aXNwbGF5VHlwZTo6Tm9uZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBGSVhN
RTogW0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcworICAgICAgICAvLyBp
ZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnNob3VsZFBhaW50SGlkZGVuUmVuZGVyZXIoKnRoaXMpKQor
ICAgICAgICAvLyAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0g
UGFpbnRQaGFzZTo6Q2xpcHBpbmdNYXNrKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogW0xCU0Vd
IFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcworICAgICAgICAgICAgLy8gU1ZHUmVu
ZGVyU3VwcG9ydDo6cGFpbnRTVkdDbGlwcGluZ01hc2soKnRoaXMsIHBhaW50SW5mbyk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGFkanVzdGVkUGFpbnRP
ZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CisgICAgICAgIGlmIChwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZTo6TWFzaykgeworICAgICAgICAgICAgLy8gRklYTUU6IFtMQlNF
XSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAgICAgICAgIC8vIFNWR1Jl
bmRlclN1cHBvcnQ6OnBhaW50U1ZHTWFzaygqdGhpcywgcGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50
T2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6T3V0bGluZSB8fCBwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZTo6U2VsZk91dGxpbmUpIHsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrOjpw
YWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwYWlu
dEluZm8uY29udGV4dCgpKTsKKworICAgICAgICBhdXRvIGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5U
cmFuc2xhdGlvbiA9IGFkanVzdGVkUGFpbnRPZmZzZXQgLSBub21pbmFsU1ZHTGF5b3V0TG9jYXRp
b24oKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS50cmFuc2xhdGUoY29vcmRpbmF0ZVN5
c3RlbU9yaWdpblRyYW5zbGF0aW9uLndpZHRoKCksIGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFu
c2xhdGlvbi5oZWlnaHQoKSk7CisKKyAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50KHBhaW50SW5m
bywgcGFpbnRPZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCiAKICAgICBQ
YWludEluZm8gYmxvY2tJbmZvKHBhaW50SW5mbyk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGJsb2NrSW5mby5jb250ZXh0KCkpOwpAQCAtNDc5LDYgKzU2NywxMSBA
QCBGbG9hdFJlY3QgUmVuZGVyU1ZHVGV4dDo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAogCiBG
bG9hdFJlY3QgUmVuZGVyU1ZHVGV4dDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBj
b25zdAogeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1
bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVSZXBhaW50Qm91bmRpbmdC
b3goKnRoaXMpOworI2VuZGlmCisKICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3QgPSBzdHJva2VC
b3VuZGluZ0JveCgpOwogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0
V2l0aFJlc291cmNlcygqdGhpcywgcmVwYWludFJlY3QpOwogCkBAIC00ODgsNCArNTgxLDMyIEBA
IEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
IGNvbnN0CiAgICAgcmV0dXJuIHJlcGFpbnRSZWN0OwogfQogCit2b2lkIFJlbmRlclNWR1RleHQ6
OnVwZGF0ZVBvc2l0aW9uQW5kT3ZlcmZsb3coY29uc3QgRmxvYXRSZWN0JiBib3VuZGFyaWVzKQor
eworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1bWVudCgp
LnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAgICBjbGVh
ck92ZXJmbG93KCk7CisKKyAgICAgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IGJvdW5kYXJpZXM7
CisKKyAgICAgICAgYXV0byBib3VuZGluZ1JlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KG1fb2Jq
ZWN0Qm91bmRpbmdCb3gpOworICAgICAgICBzZXRMb2NhdGlvbihib3VuZGluZ1JlY3QubG9jYXRp
b24oKSk7CisgICAgICAgIHNldFNpemUoYm91bmRpbmdSZWN0LnNpemUoKSk7CisKKyAgICAgICAg
YXV0byBvdmVyZmxvd1JlY3QgPSB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCk7CisgICAg
ICAgIGlmIChjb25zdCBhdXRvKiB0ZXh0U2hhZG93ID0gc3R5bGUoKS50ZXh0U2hhZG93KCkpCisg
ICAgICAgICAgICB0ZXh0U2hhZG93LT5hZGp1c3RSZWN0Rm9yU2hhZG93KG92ZXJmbG93UmVjdCk7
CisKKyAgICAgICAgYWRkVmlzdWFsT3ZlcmZsb3cob3ZlcmZsb3dSZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgYXV0byBib3VuZGluZ1JlY3QgPSBlbmNsb3NpbmdM
YXlvdXRSZWN0KGJvdW5kYXJpZXMpOworICAgIHNldExvY2F0aW9uKGJvdW5kaW5nUmVjdC5sb2Nh
dGlvbigpKTsKKyAgICBzZXRTaXplKGJvdW5kaW5nUmVjdC5zaXplKCkpOworICAgIG1fb2JqZWN0
Qm91bmRpbmdCb3ggPSBib3VuZGluZ1JlY3Q7CisgICAgQVNTRVJUKG1fb2JqZWN0Qm91bmRpbmdC
b3ggPT0gZnJhbWVSZWN0KCkpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVGV4dC5oCmluZGV4IDQ0MTI2OTg4NTc5MTMwMjQyODJmZmYwYThlNjY1MWI2
YjdmMWNkYzYuLjY1NzQwMTRjNjhlNzkzYWZhYmNjYTQwYWQ5NjAxOWFiMDZmN2MyNDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCkBAIC0yMyw2ICsy
Myw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdCbG9jay5oIgorI2luY2x1ZGUgIlNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCIKICNpbmNs
dWRlICJTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNDIsOSArNDMsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNDaGlsZEFsbG93ZWQo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIHZvaWQgc2V0TmVlZHNQb3NpdGlvbmluZ1ZhbHVlc1VwZGF0ZSgpIHsgbV9uZWVkc1Bv
c2l0aW9uaW5nVmFsdWVzVXBkYXRlID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0TmVlZHNUcmFuc2Zv
cm1VcGRhdGUoKSBvdmVycmlkZSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CiAg
ICAgdm9pZCBzZXROZWVkc1RleHRNZXRyaWNzVXBkYXRlKCkgeyBtX25lZWRzVGV4dE1ldHJpY3NV
cGRhdGUgPSB0cnVlOyB9Ci0gICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBGSVhNRTogW0xCU0VdIE9ubHkgbmVlZGVk
IGZvciBsZWdhY3kgU1ZHIGVuZ2luZS4KKyAgICB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRl
KCkgb3ZlcnJpZGUgeyBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQogCiAgICAgc3Rh
dGljIFJlbmRlclNWR1RleHQqIGxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3RvcihSZW5kZXJPYmpl
Y3QmKTsKICAgICBzdGF0aWMgY29uc3QgUmVuZGVyU1ZHVGV4dCogbG9jYXRlUmVuZGVyU1ZHVGV4
dEFuY2VzdG9yKGNvbnN0IFJlbmRlck9iamVjdCYpOwpAQCAtNTgsOCArNjAsMTQgQEAgcHVibGlj
OgogICAgIHZvaWQgc3VidHJlZVN0eWxlRGlkQ2hhbmdlKFJlbmRlclNWR0lubGluZVRleHQqKTsK
ICAgICB2b2lkIHN1YnRyZWVUZXh0RGlkQ2hhbmdlKFJlbmRlclNWR0lubGluZVRleHQqKTsKIAot
ICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZyYW1lUmVjdCgpOyB9Ci0gICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQorICAgIEZsb2F0UmVjdCBzdHJva2VCb3Vu
ZGluZ0JveCgpIGNvbnN0IGZpbmFsOworICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpIGNvbnN0IGZpbmFsOworCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19F
TkdJTkUpCisgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29u
c3QgeyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJm
bG93UmVjdCgqdGhpcyk7IH0KKyNlbmRpZgorICAgIHZvaWQgdXBkYXRlUG9zaXRpb25BbmRPdmVy
Zmxvdyhjb25zdCBGbG9hdFJlY3QmKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGdyYXBoaWNzRWxl
bWVudCgpIGNvbnN0ID0gZGVsZXRlOwpAQCAtNjgsMjggKzc2LDM4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBpc1NWR1RleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pIG92ZXJy
aWRlOworICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRl
OwogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50
JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSBvdmVycmlkZTsKIAotICAgIGJvb2wg
cmVxdWlyZXNMYXllcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9p
ZCBsYXlvdXQoKSBvdmVycmlkZTsKKyAgICBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICAgICAg
aWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KIAotICAgIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wq
IHdhc0ZpeGVkKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGxheW91dCgpIG92ZXJyaWRlOwog
CiAgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKSBvdmVycmlkZTsKIAorICAgIC8vIEZJWE1FOiBb
TEJTRV0gQmVnaW4gY29kZSBvbmx5IG5lZWRlZCBmb3IgbGVnYWN5IFNWRyBlbmdpbmUuCisgICAg
Ym9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pIG92ZXJy
aWRlOwogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KICAgICBBZmZpbmVU
cmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvY2Fs
VHJhbnNmb3JtOyB9CisgICAgLy8gRklYTUU6IFtMQlNFXSBFbmQgY29kZSBvbmx5IG5lZWRlZCBm
b3IgbGVnYWN5IFNWRyBlbmdpbmUuCiAKICAgICBib29sIHNob3VsZEhhbmRsZVN1YnRyZWVNdXRh
dGlvbnMoKSBjb25zdDsKIAotICAgIGJvb2wgbV9uZWVkc1Jlb3JkZXJpbmcgOiAxOwotICAgIGJv
b2wgbV9uZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlIDogMTsKLSAgICBib29sIG1fbmVlZHNU
cmFuc2Zvcm1VcGRhdGUgOiAxOwotICAgIGJvb2wgbV9uZWVkc1RleHRNZXRyaWNzVXBkYXRlIDog
MTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsKKyAgICBib29sIG1fbmVl
ZHNSZW9yZGVyaW5nIDogMSB7IGZhbHNlIH07CisgICAgYm9vbCBtX25lZWRzUG9zaXRpb25pbmdW
YWx1ZXNVcGRhdGUgOiAxIHsgZmFsc2UgfTsKKyAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRh
dGUgOiAxIHsgdHJ1ZSB9OyAvLyBGSVhNRTogW0xCU0VdIE9ubHkgbmVlZGVkIGZvciBsZWdhY3kg
U1ZHIGVuZ2luZS4KKyAgICBib29sIG1fbmVlZHNUZXh0TWV0cmljc1VwZGF0ZSA6IDEgeyBmYWxz
ZSB9OworICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOyAvLyBGSVhNRTogW0xC
U0VdIE9ubHkgbmVlZGVkIGZvciBsZWdhY3kgU1ZHIGVuZ2luZS4KICAgICBTVkdUZXh0TGF5b3V0
QXR0cmlidXRlc0J1aWxkZXIgbV9sYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjsKICAgICBWZWN0b3I8
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqPiBtX2xheW91dEF0dHJpYnV0ZXM7CisgICAgRmxvYXRS
ZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9y
bWFibGVDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAppbmRleCBiMDBmYjUwYWE5ZTAwMDE3OTdmYzk1
NTA4NTg2YTZiMjE0MDc3Zjc5Li4wZGViMGUzN2JiYzNkZmVlZTA5OTIwMGJmZDVjNWIwMDQ4Yzlj
YzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Ry
YW5zZm9ybWFibGVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAKQEAgLTk3LDggKzk3LDEwIEBA
IHZvaWQgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6dXBkYXRlRnJvbVN0eWxlKCkK
IHsKICAgICBSZW5kZXJTVkdDb250YWluZXI6OnVwZGF0ZUZyb21TdHlsZSgpOwogCi0gICAgaWYg
KGFzc29jaWF0ZWRVc2VFbGVtZW50KGdyYXBoaWNzRWxlbWVudCgpKSkKKyAgICBpZiAoYXNzb2Np
YXRlZFVzZUVsZW1lbnQoZ3JhcGhpY3NFbGVtZW50KCkpKSB7CiAgICAgICAgIHNldEhhc1NWR1Ry
YW5zZm9ybSgpOworICAgICAgICBzZXRIYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6YXBwbHlUcmFu
c2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBPcHRpb25TZXQ8UmVuZGVyU3R5
bGU6OlRyYW5zZm9ybU9wZXJhdGlvbk9wdGlvbj4gb3B0aW9ucykgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRp
b24uY3BwCmluZGV4IDc5ODA5OGRlYjJjOTg1NDY1YjkxNjA3ODY0Nzk0Yzg2ZWZiNDY3MzMuLjRk
YjVjODIxNmZmYTA4MTg1ZDAwMDU5M2Y3ZTUyMWJkNTExNmUyYWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
LmNwcApAQCAtMTc1LDggKzE3NSwxMCBAQCBGbG9hdFJlY3QgU1ZHQm91bmRpbmdCb3hDb21wdXRh
dGlvbjo6aGFuZGxlUm9vdE9yQ29udGFpbmVyKGNvbnN0IFNWR0JvdW5kaW5nQm94QwogICAgICAg
ICBpZiAob3B0aW9ucy5jb250YWlucyhEZWNvcmF0aW9uT3B0aW9uOjpPdmVycmlkZUJveFdpdGhG
aWx0ZXJCb3hGb3JDaGlsZHJlbikgJiYgaXM8UmVuZGVyU1ZHQ29udGFpbmVyPihjaGlsZCkpCiAg
ICAgICAgICAgICBjaGlsZEJvdW5kaW5nQm94Q29tcHV0YXRpb24uYWRqdXN0Qm94Rm9yQ2xpcHBp
bmdBbmRFZmZlY3RzKHsgRGVjb3JhdGlvbk9wdGlvbjo6T3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94
IH0sIGNoaWxkQm94KTsKIAotICAgICAgICBpZiAoYXV0byBsYXllclRyYW5zZm9ybSA9IHRyYW5z
Zm9ybWF0aW9uTWF0cml4RnJvbUNoaWxkKGNoaWxkKSkKLSAgICAgICAgICAgIGNoaWxkQm94ID0g
bGF5ZXJUcmFuc2Zvcm0tPm1hcFJlY3QoY2hpbGRCb3gpOworICAgICAgICBpZiAoIW9wdGlvbnMu
Y29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SWdub3JlVHJhbnNmb3JtYXRpb25zKSkgeworICAg
ICAgICAgICAgaWYgKGF1dG8gbGF5ZXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1hdGlvbk1hdHJpeEZy
b21DaGlsZChjaGlsZCkpCisgICAgICAgICAgICAgICAgY2hpbGRCb3ggPSBsYXllclRyYW5zZm9y
bS0+bWFwUmVjdChjaGlsZEJveCk7CisgICAgICAgIH0KIAogICAgICAgICBpZiAob3B0aW9ucyA9
PSBvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb24pCiAgICAgICAgICAgICB1bml0ZUJvdW5kaW5n
Qm94UmVzcGVjdGluZ1ZhbGlkaXR5KGJveFZhbGlkLCBib3gsIGNoaWxkLCBjaGlsZEJveCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29t
cHV0YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbi5oCmluZGV4IDgzZGE2M2JkNmYwOTgyZWM2N2ZhNWIzYmM5NDZiZDg4MmQyNTlk
NDQuLjBkNzU0YWQ0MzExZWM4NWRiOTE3MDA5MDhhMGEwM2IxMmQ1NjZlNGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRh
dGlvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSwgMjAyMiBJZ2FsaWEgUy5MLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0zNSwxNSArMzUsMTYgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFNWR0Jv
dW5kaW5nQm94Q29tcHV0YXRpb24oY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAg
IH5TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uKCkgPSBkZWZhdWx0OwogCi0gICAgZW51bSBjbGFz
cyBEZWNvcmF0aW9uT3B0aW9uIDogdWludDhfdCB7CisgICAgZW51bSBjbGFzcyBEZWNvcmF0aW9u
T3B0aW9uIDogdWludDE2X3QgewogICAgICAgICBJbmNsdWRlRmlsbFNoYXBlICAgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMCwgLyogY29ycmVzcG9uZHMgdG8gJ2Jvb2wgZmlsbCcgICAgICovCiAg
ICAgICAgIEluY2x1ZGVTdHJva2VTaGFwZSAgICAgICAgICAgICAgICAgID0gMSA8PCAxLCAvKiBj
b3JyZXNwb25kcyB0byAnYm9vbCBzdHJva2UnICAgKi8KICAgICAgICAgSW5jbHVkZU1hcmtlcnMg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDIsIC8qIGNvcnJlc3BvbmRzIHRvICdib29sIG1h
cmtlcnMnICAqLwogICAgICAgICBJbmNsdWRlQ2xpcHBlcnMgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMywgLyogY29ycmVzcG9uZHMgdG8gJ2Jvb2wgY2xpcHBlcnMnICovCiAgICAgICAgIElu
Y2x1ZGVNYXNrZXJzICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA0LCAvKiBXZWJLaXQgZXh0
ZW5zaW9uIC0gaW50ZXJuYWwgICAgKi8KICAgICAgICAgSW5jbHVkZU91dGxpbmUgICAgICAgICAg
ICAgICAgICAgICAgPSAxIDw8IDUsIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAgICAq
LwotICAgICAgICBPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3ggICAgICAgICAgICA9IDEgPDwgNiwg
LyogV2ViS2l0IGV4dGVuc2lvbiAtIGludGVybmFsICAgICovCi0gICAgICAgIE92ZXJyaWRlQm94
V2l0aEZpbHRlckJveEZvckNoaWxkcmVuID0gMSA8PCA3ICAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0g
aW50ZXJuYWwgICAgKi8KKyAgICAgICAgSWdub3JlVHJhbnNmb3JtYXRpb25zICAgICAgICAgICAg
ICAgPSAxIDw8IDYsIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAgICAqLworICAgICAg
ICBPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3ggICAgICAgICAgICA9IDEgPDwgNywgLyogV2ViS2l0
IGV4dGVuc2lvbiAtIGludGVybmFsICAgICovCisgICAgICAgIE92ZXJyaWRlQm94V2l0aEZpbHRl
ckJveEZvckNoaWxkcmVuID0gMSA8PCA4ICAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJuYWwg
ICAgKi8KICAgICB9OwogCiAgICAgdXNpbmcgRGVjb3JhdGlvbk9wdGlvbnMgPSBPcHRpb25TZXQ8
RGVjb3JhdGlvbk9wdGlvbj47CkBAIC03Myw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICAgICAgYXV0byB2aXN1YWxPdmVyZmxvd1JlY3Qg
PSBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlcGFpbnRCb3VuZGluZ0JveCk7Ci0gICAgICAgIHZpc3Vh
bE92ZXJmbG93UmVjdC5tb3ZlQnkoLWZsb29yZWRMYXlvdXRQb2ludChyZW5kZXJlci5vYmplY3RC
b3VuZGluZ0JveCgpLm1pblhNaW5ZQ29ybmVyKCkpKTsKKyAgICAgICAgdmlzdWFsT3ZlcmZsb3dS
ZWN0Lm1vdmVCeSgtcmVuZGVyZXIubm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkpOwogICAgICAg
ICByZXR1cm4gdmlzdWFsT3ZlcmZsb3dSZWN0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuY3BwCmluZGV4IDgxM2MzZWNl
ZjkzOGJkYTQ4NjQ0NGQ0YWY3MDhkOTdjYjczY2VhZTAuLjgzMjgyY2YwMzE2NmU4MmRjNGQyNjA2
OTEwMDkyNGZiMjg1MGU1NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHQ29udGFpbmVyTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0NvbnRhaW5lckxheW91dC5jcHAKQEAgLTEyMCw0MSArMTIwLDYgQEAgdm9pZCBTVkdD
b250YWluZXJMYXlvdXQ6OmxheW91dENoaWxkcmVuKGJvb2wgY29udGFpbmVyTmVlZHNMYXlvdXQp
CiAgICAgICAgIEFTU0VSVChlbGVtZW50c1RoYXREaWROb3RSZWNlaXZlTGF5b3V0LmlzRW1wdHko
KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgTGF5b3V0UG9pbnQgbGF5b3V0TG9jYXRpb25Gcm9tUmVu
ZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBpZiAoaXM8UmVuZGVy
U1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
clNWR01vZGVsT2JqZWN0PihyZW5kZXJlcikubGF5b3V0TG9jYXRpb24oKTsKLQotICAgIGlmIChp
czxSZW5kZXJTVkdCbG9jaz4ocmVuZGVyZXIpKSAvLyA8Zm9yZWlnbk9iamVjdD4gLyA8dGV4dD4K
LSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclNWR0Jsb2NrPihyZW5kZXJlcikubG9jYXRp
b24oKTsKLQotICAgIGlmIChpczxSZW5kZXJTVkdJbmxpbmU+KHJlbmRlcmVyKSkgLy8gPHRzcGFu
PiAvIDx0ZXh0UGF0aD4KLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMYXlv
dXRMb2NhdGlvbkZvclJlbmRlcmVyKFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IExheW91
dFBvaW50JiBuZXdMb2NhdGlvbikKLXsKLSAgICBpZiAoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+
KHJlbmRlcmVyKSkgewotICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVu
ZGVyZXIpLnNldExheW91dExvY2F0aW9uKG5ld0xvY2F0aW9uKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIDxmb3JlaWduT2JqZWN0PiAvIDx0ZXh0PgotICAgIGlmIChpczxSZW5k
ZXJTVkdCbG9jaz4ocmVuZGVyZXIpKSB7Ci0gICAgICAgIGRvd25jYXN0PFJlbmRlclNWR0Jsb2Nr
PihyZW5kZXJlcikuc2V0TG9jYXRpb24obmV3TG9jYXRpb24pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gPHRzcGFuPiAvIDx0ZXh0UGF0aD4KLSAgICBpZiAoaXM8UmVuZGVyU1ZH
SW5saW5lPihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotfQotCiB2b2lkIFNWR0NvbnRhaW5lckxheW91dDo6cG9zaXRpb25DaGlsZHJlblJl
bGF0aXZlVG9Db250YWluZXIoKQogewogICAgIGlmIChtX3Bvc2l0aW9uZWRDaGlsZHJlbi5pc0Vt
cHR5KCkpCkBAIC0xNzcsNDAgKzE0MiwzNiBAQCB2b2lkIFNWR0NvbnRhaW5lckxheW91dDo6cG9z
aXRpb25DaGlsZHJlblJlbGF0aXZlVG9Db250YWluZXIoKQogICAgIH07CiAKICAgICAvLyBBcnJh
bmdlIGxheW91dCBsb2NhdGlvbiBmb3IgYWxsIGNoaWxkIHJlbmRlcmVycyByZWxhdGl2ZSB0byB0
aGUgY29udGFpbmVyIGxheW91dCBsb2NhdGlvbi4KLSAgICBhdXRvIHBhcmVudExheW91dExvY2F0
aW9uID0gZmxvb3JlZExheW91dFBvaW50KG1fY29udGFpbmVyLm9iamVjdEJvdW5kaW5nQm94KCku
bWluWE1pbllDb3JuZXIoKSk7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QmIGNoaWxkIDogbV9wb3Np
dGlvbmVkQ2hpbGRyZW4pIHsKKyAgICBhdXRvIHBhcmVudExheW91dExvY2F0aW9uID0gbV9jb250
YWluZXIubm9taW5hbFNWR0xheW91dExvY2F0aW9uKCk7CisgICAgZm9yIChSZW5kZXJMYXllck1v
ZGVsT2JqZWN0JiBjaGlsZCA6IG1fcG9zaXRpb25lZENoaWxkcmVuKSB7CiAgICAgICAgIHZlcmlm
eVBvc2l0aW9uZWRDaGlsZFJlbmRlcmVyRXhwZWN0YXRpb24oY2hpbGQpOwogCi0gICAgICAgIGF1
dG8gb2JqZWN0Qm91bmRpbmdCb3hDaGlsZCA9IGNoaWxkLm9iamVjdEJvdW5kaW5nQm94KCk7Ci0g
ICAgICAgIGF1dG8gbGF5b3V0TG9jYXRpb24gPSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91
bmRpbmdCb3hDaGlsZC5taW5YTWluWUNvcm5lcigpKTsKLSAgICAgICAgYXV0byBkZXNpcmVkTGF5
b3V0TG9jYXRpb24gPSB0b0xheW91dFBvaW50KGxheW91dExvY2F0aW9uIC0gcGFyZW50TGF5b3V0
TG9jYXRpb24pOwotICAgICAgICBhdXRvIGN1cnJlbnRMYXlvdXRMb2NhdGlvbiA9IGxheW91dExv
Y2F0aW9uRnJvbVJlbmRlcmVyKGNoaWxkKTsKLSAgICAgICAgaWYgKGN1cnJlbnRMYXlvdXRMb2Nh
dGlvbiA9PSBkZXNpcmVkTGF5b3V0TG9jYXRpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgc2V0TGF5b3V0TG9jYXRpb25Gb3JSZW5kZXJlcihjaGlsZCwgZGVzaXJlZExheW91dExv
Y2F0aW9uKTsKKyAgICAgICAgYXV0byBkZXNpcmVkTGF5b3V0TG9jYXRpb24gPSB0b0xheW91dFBv
aW50KGNoaWxkLm5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpIC0gcGFyZW50TGF5b3V0TG9jYXRp
b24pOworICAgICAgICBpZiAoY2hpbGQuY3VycmVudFNWR0xheW91dExvY2F0aW9uKCkgIT0gZGVz
aXJlZExheW91dExvY2F0aW9uKQorICAgICAgICAgICAgY2hpbGQuc2V0Q3VycmVudFNWR0xheW91
dExvY2F0aW9uKGRlc2lyZWRMYXlvdXRMb2NhdGlvbik7CiAgICAgfQogfQogCi12b2lkIFNWR0Nv
bnRhaW5lckxheW91dDo6dmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeShjb25zdCBSZW5k
ZXJFbGVtZW50JiByZW5kZXJlcikKK3ZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0Ojp2ZXJpZnlMYXlv
dXRMb2NhdGlvbkNvbnNpc3RlbmN5KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRl
cmVyKQogewogICAgIGlmIChyZW5kZXJlci5pc1NWR0xheWVyQXdhcmVSZW5kZXJlcigpICYmICFy
ZW5kZXJlci5pc1NWR1Jvb3QoKSkgewotICAgICAgICBhdXRvIGN1cnJlbnRMYXlvdXRMb2NhdGlv
biA9IGxheW91dExvY2F0aW9uRnJvbVJlbmRlcmVyKHJlbmRlcmVyKTsKKyAgICAgICAgYXV0byBj
dXJyZW50TGF5b3V0TG9jYXRpb24gPSByZW5kZXJlci5jdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24o
KTsKIAogICAgICAgICBhdXRvIGV4cGVjdGVkTGF5b3V0TG9jYXRpb24gPSBjdXJyZW50TGF5b3V0
TG9jYXRpb247Ci0gICAgICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnNPZlR5cGU8
UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpKSB7CisgICAgICAgIGZvciAoYXV0byYgYW5jZXN0b3Ig
OiBhbmNlc3RvcnNPZlR5cGU8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4ocmVuZGVyZXIpKSB7CiAg
ICAgICAgICAgICBBU1NFUlQoYW5jZXN0b3IuaXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSk7CiAg
ICAgICAgICAgICBpZiAoYW5jZXN0b3IuaXNTVkdSb290KCkpCiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBleHBlY3RlZExheW91dExvY2F0aW9uLm1vdmVCeShsYXlvdXRMb2Nh
dGlvbkZyb21SZW5kZXJlcihhbmNlc3RvcikpOworICAgICAgICAgICAgZXhwZWN0ZWRMYXlvdXRM
b2NhdGlvbi5tb3ZlQnkoYW5jZXN0b3IuY3VycmVudFNWR0xheW91dExvY2F0aW9uKCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgYXV0byBpbml0aWFsTGF5b3V0TG9jYXRpb24gPSBmbG9vcmVkTGF5
b3V0UG9pbnQocmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKTsK
KyAgICAgICAgYXV0byBpbml0aWFsTGF5b3V0TG9jYXRpb24gPSByZW5kZXJlci5ub21pbmFsU1ZH
TGF5b3V0TG9jYXRpb24oKTsKICAgICAgICAgaWYgKGV4cGVjdGVkTGF5b3V0TG9jYXRpb24gPT0g
aW5pdGlhbExheW91dExvY2F0aW9uKSB7CiAgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU1ZH
LCBzdHJlYW0gPDwgIi0tPiBTVkdDb250YWluZXJMYXlvdXQgcmVuZGVyZXIgIiA8PCAmcmVuZGVy
ZXIgPDwgIiAoIiA8PCByZW5kZXJlci5yZW5kZXJOYW1lKCkuY2hhcmFjdGVycygpIDw8ICIpIgot
ICAgICAgICAgICAgICAgIDw8ICIgLSB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KCkg
b2JqZWN0Qm91bmRpbmdCb3ggLyBsYXlvdXRMb2NhdGlvbiBhcmUgaW4gc3luYy4iKTsKKyAgICAg
ICAgICAgICAgICA8PCAiIC0gdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeSgpIGN1cnJl
bnRTVkdMYXlvdXRMb2NhdGlvbiAvIG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbiBhcmUgaW4gc3lu
Yy4iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShTVkcs
IHN0cmVhbSA8PCAiLS0+IFNWR0NvbnRhaW5lckxheW91dCByZW5kZXJlciAiIDw8ICZyZW5kZXJl
ciA8PCAiICgiIDw8IHJlbmRlcmVyLnJlbmRlck5hbWUoKS5jaGFyYWN0ZXJzKCkgPDwgIikiCi0g
ICAgICAgICAgICAgICAgPDwgIiAtIHZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koKSBv
YmplY3RCb3VuZGluZ0JveCAvIGxheW91dExvY2F0aW9uIGludmFyaWFudCB2aW9sYXRlZCAtLSBv
dXQgb2Ygc3luYyBkdWUgdG8gcGFydGlhbCBsYXlvdXQ/IgorICAgICAgICAgICAgICAgIDw8ICIg
LSB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KCkgY3VycmVudFNWR0xheW91dExvY2F0
aW9uIC8gbm9taW5hbFNWR0xheW91dExvY2F0aW9uIGludmFyaWFudCB2aW9sYXRlZCAtLSBvdXQg
b2Ygc3luYyBkdWUgdG8gcGFydGlhbCBsYXlvdXQ/IgogICAgICAgICAgICAgICAgIDw8ICIgY3Vy
cmVudExheW91dExvY2F0aW9uPSIgPDwgY3VycmVudExheW91dExvY2F0aW9uCiAgICAgICAgICAg
ICAgICAgPDwgIiAgKGV4cGVjdGVkTGF5b3V0TG9jYXRpb249IiA8PCBleHBlY3RlZExheW91dExv
Y2F0aW9uCiAgICAgICAgICAgICAgICAgPDwgIiAhPSBpbml0aWFsTGF5b3V0TG9jYXRpb249IiA8
PCBpbml0aWFsTGF5b3V0TG9jYXRpb24gPDwgIikiCkBAIC0yMjQsNyArMTg1LDcgQEAgdm9pZCBT
VkdDb250YWluZXJMYXlvdXQ6OnZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koY29uc3Qg
UmVuZGVyRWxlbWVudCYgcmUKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAoYXV0byYgY2hp
bGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikpIHsKKyAgICBmb3Ig
KGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4ocmVu
ZGVyZXIpKSB7CiAgICAgICAgIGlmIChjaGlsZC5pc1NWR0xheWVyQXdhcmVSZW5kZXJlcigpKQog
ICAgICAgICAgICAgdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeShjaGlsZCk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJM
YXlvdXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0
LmgKaW5kZXggZWMxMzA5MzUxMjZjZjdlY2UxNTk5OTJhOGRiNzFjMTE2NzMwMjZlNy4uNTM0NDAx
Y2NkNGZiOGM4ZWZjMjI1NzhmYWRiZjA2MWQxZjJmZTg4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5oCkBAIC00MCw3ICs0MCw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgcG9zaXRpb25DaGlsZHJlblJlbGF0aXZlVG9Db250YWluZXIo
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koY29u
c3QgUmVuZGVyRWxlbWVudCYpOworICAgIHN0YXRpYyB2b2lkIHZlcmlmeUxheW91dExvY2F0aW9u
Q29uc2lzdGVuY3koY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAgIHN0YXRpYyBi
b29sIHRyYW5zZm9ybVRvUm9vdENoYW5nZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBhbmNlc3Rvcik7
CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290
SW5saW5lQm94LmNwcAppbmRleCA5YzZjMDk4MDEzNzZiY2QzN2RkZmY5YTM5MGEzZWIwMzY2OTQz
OWYzLi5mODIzMTVkNWY2NmRhZDg3NmU3ZDEyZTc5NzUwNjU4YjI0MDJhNGVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKQEAgLTQ2
LDIxICs0NiwzNCBAQCBTVkdSb290SW5saW5lQm94OjpTVkdSb290SW5saW5lQm94KFJlbmRlclNW
R1RleHQmIHJlbmRlclNWR1RleHQpCiB7CiB9CiAKLVJlbmRlclNWR1RleHQmIFNWR1Jvb3RJbmxp
bmVCb3g6OnJlbmRlclNWR1RleHQoKQorUmVuZGVyU1ZHVGV4dCYgU1ZHUm9vdElubGluZUJveDo6
cmVuZGVyU1ZHVGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclNWR1Rl
eHQ+KGJsb2NrRmxvdygpKTsKIH0KIAotdm9pZCBTVkdSb290SW5saW5lQm94OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBMYXlvdXRV
bml0LCBMYXlvdXRVbml0KQordm9pZCBTVkdSb290SW5saW5lQm94OjpwYWludChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBMYXlvdXRVbml0IGxp
bmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKIHsKICAgICBBU1NFUlQocGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2U6OkZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2U6OlNlbGVjdGlvbik7CiAgICAgQVNTRVJUKCFwYWludEluZm8uY29udGV4dCgpLnBhaW50
aW5nRGlzYWJsZWQoKSk7CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAg
ICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2lu
ZUVuYWJsZWQoKSkgeworICAgICAgICBhdXRvIG92ZXJmbG93UmVjdCh2aXN1YWxPdmVyZmxvd1Jl
Y3QobGluZVRvcCwgbGluZUJvdHRvbSkpOworICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3Zl
cmZsb3dSZWN0KTsKKyAgICAgICAgb3ZlcmZsb3dSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisK
KyAgICAgICAgaWYgKCFwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKG92ZXJmbG93UmVjdCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKICAgICBib29sIGlzUHJpbnRpbmcg
PSByZW5kZXJTVkdUZXh0KCkuZG9jdW1lbnQoKS5wcmludGluZygpOwogICAgIGJvb2wgaGFzU2Vs
ZWN0aW9uID0gIWlzUHJpbnRpbmcgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodFN0YXRlOjpOb25lOwogICAgIGJvb2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25IaWdo
bGlnaHQgPSAhKHBhaW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6
OlNraXBTZWxlY3Rpb25IaWdobGlnaHQpKTsKIAogICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5m
byhwYWludEluZm8pOworICAgIGNoaWxkUGFpbnRJbmZvLnVwZGF0ZVN1YnRyZWVQYWludFJvb3RG
b3JDaGlsZHJlbigmcmVuZGVyZXIoKSk7CisKICAgICBpZiAoaGFzU2VsZWN0aW9uICYmIHNob3Vs
ZFBhaW50U2VsZWN0aW9uSGlnaGxpZ2h0KSB7CiAgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBm
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKICAgICAg
ICAgICAgIGlmIChpczxTVkdJbmxpbmVUZXh0Qm94PigqY2hpbGQpKQpAQCAtNzAsNiArODMsMTcg
QEAgdm9pZCBTVkdSb290SW5saW5lQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2UKICAgICAgICAgfQogICAgIH0KIAorI2lmIEVOQUJM
RShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChyZW5kZXJlcigpLmRvY3VtZW50KCku
c2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKSB7CisgICAgICAgIGZvciAo
YXV0byogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25M
aW5lKCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIoKS5pc1RleHQoKSB8fCAh
Y2hpbGQtPmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpCisgICAgICAg
ICAgICAgICAgY2hpbGQtPnBhaW50KGNoaWxkUGFpbnRJbmZvLCBwYWludE9mZnNldCwgbGluZVRv
cCwgbGluZUJvdHRvbSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisKICAgICBTVkdSZW5kZXJpbmdDb250ZXh0IHJlbmRlcmluZ0NvbnRleHQocmVuZGVyU1ZH
VGV4dCgpLCBwYWludEluZm8sIFNWR1JlbmRlcmluZ0NvbnRleHQ6OlNhdmVHcmFwaGljc0NvbnRl
eHQpOwogICAgIGlmIChyZW5kZXJpbmdDb250ZXh0LmlzUmVuZGVyaW5nUHJlcGFyZWQoKSkgewog
ICAgICAgICBmb3IgKGF1dG8qIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dE9uTGluZSgpKQpAQCAtMTcwLDkgKzE5NCw3IEBAIHZvaWQgU1ZHUm9vdElubGlu
ZUJveDo6bGF5b3V0Um9vdEJveChjb25zdCBGbG9hdFJlY3QmIGNoaWxkUmVjdCkKICAgICBSZW5k
ZXJTVkdUZXh0JiBwYXJlbnRCbG9jayA9IHJlbmRlclNWR1RleHQoKTsKIAogICAgIC8vIEZpbmFs
bHksIGFzc2lnbiB0aGUgcm9vdCBibG9jayBwb3NpdGlvbiwgbm93IHRoYXQgYWxsIGNvbnRlbnQg
aXMgbGFpZCBvdXQuCi0gICAgTGF5b3V0UmVjdCBib3VuZGluZ1JlY3QgPSBlbmNsb3NpbmdMYXlv
dXRSZWN0KGNoaWxkUmVjdCk7Ci0gICAgcGFyZW50QmxvY2suc2V0TG9jYXRpb24oYm91bmRpbmdS
ZWN0LmxvY2F0aW9uKCkpOwotICAgIHBhcmVudEJsb2NrLnNldFNpemUoYm91bmRpbmdSZWN0LnNp
emUoKSk7CisgICAgcGFyZW50QmxvY2sudXBkYXRlUG9zaXRpb25BbmRPdmVyZmxvdyhjaGlsZFJl
Y3QpOwogCiAgICAgLy8gUG9zaXRpb24gYWxsIGNoaWxkcmVuIHJlbGF0aXZlIHRvIHRoZSBwYXJl
bnQgYmxvY2suCiAgICAgZm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewpAQCAtMTg3LDYgKzIwOSw4IEBAIHZvaWQgU1ZH
Um9vdElubGluZUJveDo6bGF5b3V0Um9vdEJveChjb25zdCBGbG9hdFJlY3QmIGNoaWxkUmVjdCkK
ICAgICBzZXRZKDApOwogICAgIHNldExvZ2ljYWxXaWR0aChjaGlsZFJlY3Qud2lkdGgoKSk7CiAg
ICAgc2V0TG9naWNhbEhlaWdodChjaGlsZFJlY3QuaGVpZ2h0KCkpOworCisgICAgYXV0byBib3Vu
ZGluZ1JlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KGNoaWxkUmVjdCk7CiAgICAgc2V0TGluZVRv
cEJvdHRvbVBvc2l0aW9ucygwLCBib3VuZGluZ1JlY3QuaGVpZ2h0KCksIDAsIGJvdW5kaW5nUmVj
dC5oZWlnaHQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUm9vdElubGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
b290SW5saW5lQm94LmgKaW5kZXggMGQxNjI2OWViNWMxNzM3YTBmMzEyYzdkZWFhNDkyOTg3MWE0
NjFkNi4uYWYxYjEzZWFkNWRhYjExNGYxMGYwNmZiYTZlZTJlN2E3ZDU5YzQ2YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmgKQEAgLTM1LDgg
KzM1LDYgQEAgY2xhc3MgU1ZHUm9vdElubGluZUJveCBmaW5hbCA6IHB1YmxpYyBMZWdhY3lSb290
SW5saW5lQm94IHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBTVkdSb290SW5saW5lQm94KFJlbmRl
clNWR1RleHQmKTsKIAotICAgIFJlbmRlclNWR1RleHQmIHJlbmRlclNWR1RleHQoKTsKLQogICAg
IGZsb2F0IHZpcnR1YWxMb2dpY2FsSGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9s
b2dpY2FsSGVpZ2h0OyB9CiAgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KGZsb2F0IGhlaWdodCkg
eyBtX2xvZ2ljYWxIZWlnaHQgPSBoZWlnaHQ7IH0KIApAQCAtNDksNiArNDcsOCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRV
bml0IGxpbmVCb3R0b20sIEhpdFRlc3RBY3Rpb24pIGZpbmFsOwogCiBwcml2YXRlOgorICAgIFJl
bmRlclNWR1RleHQmIHJlbmRlclNWR1RleHQoKSBjb25zdDsKKwogICAgIGJvb2wgaXNTVkdSb290
SW5saW5lQm94KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZvaWQgcmVv
cmRlclZhbHVlTGlzdHNUb0xvZ2ljYWxPcmRlcihWZWN0b3I8U1ZHVGV4dExheW91dEF0dHJpYnV0
ZXMqPiYpOwogICAgIHZvaWQgbGF5b3V0Q2hhcmFjdGVyc0luVGV4dEJveGVzKExlZ2FjeUlubGlu
ZUZsb3dCb3gqLCBTVkdUZXh0TGF5b3V0RW5naW5lJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
QWRqdXN0ZXIuY3BwCmluZGV4IGYyYzA3NmY3Yjc3MmQxMTVlNGVlZjZhODA2ZmJhYmIyNWY1NWZl
OTMuLjg2OWIxOWE2Yjc4OTcxOTNjZDQzOGJhODIwZmEzZWE5ODFkNDMxMzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5j
bHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0dyYXBoaWNzRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKQEAgLTM2NCwxMyArMzY1LDI5IEBAIHZvaWQgQWRqdXN0ZXI6OmFkanVz
dChSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB1c2VyQWdlbnRBcHBlYXJh
bmNlCiAgICAgZWxzZQogICAgICAgICBzdHlsZS5zZXRVc2VkWkluZGV4KHN0eWxlLnNwZWNpZmll
ZFpJbmRleCgpKTsKIAorICAgIC8vIEZvciBTVkcgY29tcGF0aWJpbGl0eSBwdXJwb3NlcyB3ZSBo
YXZlIHRvIGNvbnNpZGVyIHRoZSAnYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybScgYmVzaWRlcyB0aGUg
UmVuZGVyU3R5bGUgdG8gcXVlcnkKKyAgICAvLyBpZiBhbiBlbGVtZW50IGhhcyBhIHRyYW5zZm9y
bS4gU1ZHIHRyYW5zZm9ybXMgYXJlIG5vdCBzdG9yZWQgb24gdGhlIFJlbmRlclN0eWxlLCBhbmQg
dGh1cyB3ZSBuZWVkIGEgc3BlY2lhbCBjYXNlIGhlcmUuCisgICAgYXV0byBoYXNUcmFuc2Zvcm1S
ZWxhdGVkUHJvcGVydHkgPSBbXShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKHN0eWxlLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9w
ZXJ0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyNpZiBFTkFCTEUoTEFZRVJfQkFT
RURfU1ZHX0VOR0lORSkKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQo
KS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkgJiYgaXM8U1ZHR3JhcGhp
Y3NFbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybiAhZG93bmNhc3Q8U1ZHR3Jh
cGhpY3NFbGVtZW50PigqZWxlbWVudCkuYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpLmlzSWRlbnRp
dHkoKTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKyNlbmRpZgorCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCiAgICAgLy8gQXV0byB6LWluZGV4IGJlY29t
ZXMgMCBmb3IgdGhlIHJvb3QgZWxlbWVudCBhbmQgdHJhbnNwYXJlbnQgb2JqZWN0cy4gVGhpcyBw
cmV2ZW50cwogICAgIC8vIGNhc2VzIHdoZXJlIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgYmxlbmRl
ZCBhcyBhIHNpbmdsZSB1bml0IGVuZCB1cCB3aXRoIGEgbm9uLXRyYW5zcGFyZW50CiAgICAgLy8g
b2JqZWN0IHdlZGdlZCBpbiBiZXR3ZWVuIHRoZW0uIEF1dG8gei1pbmRleCBhbHNvIGJlY29tZXMg
MCBmb3Igb2JqZWN0cyB0aGF0IHNwZWNpZnkgdHJhbnNmb3Jtcy9tYXNrcy9yZWZsZWN0aW9ucy4K
ICAgICBpZiAoc3R5bGUuaGFzQXV0b1VzZWRaSW5kZXgoKSkgewogICAgICAgICBpZiAoKG1fZWxl
bWVudCAmJiBtX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpID09IG1fZWxlbWVudCkKICAgICAg
ICAgICAgIHx8IHN0eWxlLmhhc09wYWNpdHkoKQotICAgICAgICAgICAgfHwgc3R5bGUuaGFzVHJh
bnNmb3JtUmVsYXRlZFByb3BlcnR5KCkKKyAgICAgICAgICAgIHx8IGhhc1RyYW5zZm9ybVJlbGF0
ZWRQcm9wZXJ0eShzdHlsZSwgbV9lbGVtZW50KQogICAgICAgICAgICAgfHwgc3R5bGUuaGFzTWFz
aygpCiAgICAgICAgICAgICB8fCBzdHlsZS5jbGlwUGF0aCgpCiAgICAgICAgICAgICB8fCBzdHls
ZS5ib3hSZWZsZWN0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAppbmRleCA0MTQ4MTUwODVk
YmNhYTM5NGRjMTFmOTA1MGVkMzhjNzBiODE0YjUzLi4yODYyZDM2MDg5MTAzMDJmMWRkZWVlN2Zl
MWIyYzhhZGQ5N2Q0ZDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCkBAIC01MzEsNyAr
NTMxLDcgQEAgc3RhdGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxB
dG9tU3RyaW5nPiBjcmVhdGVTVkdMYXllckF3YXJlRWwKICAgICAvLyBMaXN0IG9mIGFsbCBTVkcg
ZWxlbWVudHMgd2hvc2UgcmVuZGVyZXJzIHN1cHBvcnQgdGhlIGxheWVyIGF3YXJlIGxheW91dCAv
IHBhaW50aW5nIC8gaGl0LXRlc3RpbmcgbW9kZSAoJ0xCU0UtbW9kZScpLgogICAgIHVzaW5nIG5h
bWVzcGFjZSBTVkdOYW1lczsKICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8QXRvbVN0cmluZz4gc2V0OwotICAgIGZvciAoYXV0byYgdGFnIDogeyBnVGFnLmdldCgp
LCByZWN0VGFnLmdldCgpIH0pCisgICAgZm9yIChhdXRvJiB0YWcgOiB7IGdUYWcuZ2V0KCksIHJl
Y3RUYWcuZ2V0KCksIHRleHRUYWcuZ2V0KCkgfSkKICAgICAgICAgc2V0LmFkZCh0YWcubG9jYWxO
YW1lKCkpOwogICAgIHJldHVybiBzZXQ7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458345</attachid>
            <date>2022-04-26 02:26:50 -0700</date>
            <delta_ts>2022-04-27 14:22:47 -0700</delta_ts>
            <desc>Patch, v3 (depends on bug 239717)</desc>
            <filename>bug-239743-20220426022647.patch</filename>
            <type>text/plain</type>
            <size>34784</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzNDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjhkYjQ0ZGIyZmViNTY1
NDU2MzRjNDQxNzdkNDUzMWMzM2I2NTZjZi4uMmE5MmZmZTU4NWI2MmIzMjI0ZWQ2YmZmNzZiNmU4
YmIyYjY3MDJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDIyLTA0LTI1ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBBY3RpdmF0ZSB0ZXh0IHJlbmRlcmluZywgYnkgcmUtdXNpbmcgUmVuZGVyU1ZHVGV4dAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5NzQzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRhcHQgUmVuZGVy
U1ZHVGV4dCB0byBiZSB1c2FibGUgYXQgdGhlIHNhbWUgdGltZSBmcm9tIGxlZ2FjeSBTVkcgZW5n
aW5lIChhcworICAgICAgICBpdCBpcyByaWdodCBub3cpIGFuZCBmcm9tIExCU0UuIFRoaXMgcmVx
dWlyZXMgbWluaW1hbCBlZmZvcnQsIHNpbmNlIFJlbmRlclNWR1RleHQKKyAgICAgICAgYWxyZWFk
eSBpbmhlcml0ZWQgZnJvbSBSZW5kZXJMYXllck1vZGVsT2JqZWN0LCBzbyB0aGVyZSdzIG5vIG5l
ZWQgZm9yIHRoZSBjcmVhdGlvbgorICAgICAgICBvZiBMZWdhY3lSZW5kZXJTVkdUZXh0IC8gUmVu
ZGVyU1ZHVGV4dCBhcyBzZXBhcmF0ZWQgbGVnYWN5L0xCU0UgaW1wbGVtZW50YXRpb25zLgorCisg
ICAgICAgIE1vc3QgU1ZHIDEuMSA8dGV4dD4gdGVzdGNhc2VzIGFscmVhZHkgcGFzcyBvdXQgb2Yg
dGhlIGJveCB3aXRoIHRoaXMgY2hhbmdlLgorICAgICAgICBUaGUgbmV4dCBwYXRjaCBhZnRlciB0
ZXh0IHN1cHBvcnQgd2lsbCBhZGQgYSBuZXcgJ21hY29zLXdrMi1sYnNlLXh4eCcgc3BlY2lmaWMK
KyAgICAgICAgcGxhdGZvcm0gYmFzZWxpbmUsIHNvIHRoYXQgd2UgY2FuIHJ1biB0ZXN0cyBMQlNF
IGFnYWludCBpc2VsZiAoZmluYWxseSB3ZSBjYW4KKyAgICAgICAgaW5jbHVkZSB0aGUgcHJvZ3Jl
c3Npb25zIGluIHRoZSBmb3JtIG9mIFRlc3RFeHBlY3RhdGlvbiBmaWxlIGNoYW5nZXMsIG9uY2Ug
YSBjZXJ0YWluCisgICAgICAgIHBhdGNoIGltcGxlbWVudHMgYSBuZXcgZmVhdHVyZSBpbiBMQlNF
LiBUaGlzIG1ha2VzIHNlbnNlIG5vdyBhcyBlbm91Z2ggaXMgdXBzdHJlYW1lZAorICAgICAgICB0
aGF0IGEgY29uc2lkZXJhYmxlIGFtb3VudCBvZiB0aGUgU1ZHIDEuMSB0ZXN0c3VpdGUgYWxyZWFk
eSBwYXNzZXMgcGl4ZWwgcGVyZmVjdC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRl
c3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3VyLiAoSG93ZXZlciB0ZXN0YWJpbGl0eSBmb3IgTEJT
RSBpcyByZWFkeSBzb29uISkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpj
b21wdXRlVmlzaWJsZVJlY3RJblNWR0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvYmplY3RJc1JlbGF5b3V0
Qm91bmRhcnkpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6YWJzb2x1dGVSZWN0cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6YWJzb2x1dGVRdWFkcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdCbG9jazo6Y2xpcHBlZE92ZXJmbG93UmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6Y29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVGbG9hdFZp
c2libGVSZWN0SW5Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
QmxvY2s6OnB1c2hNYXBwaW5nVG9Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHQmxvY2s6Om9mZnNldEZyb21Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHQmxvY2s6Om5vZGVBdFBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OlJlbmRl
clNWR1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6Om5vZGVBdEZsb2F0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHVGV4dDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4
dDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHVGV4dDo6dXBkYXRlUG9zaXRpb25BbmRPdmVyZmxvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVF1YWRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElu
bGluZUJveDo6cmVuZGVyU1ZHVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290
SW5saW5lQm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94Ojps
YXlvdXRSb290Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OnJlbmRl
clNWR1RleHQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUm9vdElubGlu
ZUJveC5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZVNWR0xheWVyQXdhcmVFbGVtZW50U2V0KToKKwogMjAyMi0wNC0yNSAgTmlrb2xhcyBa
aW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbTEJTRV0gRml4
IG9yaWdpbiBvZiB0cmFuc2Zvcm1hdGlvbnMgaW4gU1ZHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5kZXggY2VjMDRmYTNiM2Zj
NTc4ZjFmNDViZGQ0OWQxM2RjMmZjOTk1YTgyNS4uYjZkYzk1MmQ4YTFhZGNlOTM2ZDZjNmI1NjI4
ZDVmZTQ3ODlmYzBiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllck1vZGVsT2JqZWN0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlJlbmRl
ckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdC
bG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogI2luY2x1ZGUgIlNWR0dyYXBoaWNzRWxlbWVudC5oIgpAQCAtMjQ1LDEwICsy
NDYsNyBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnVwZGF0ZUxheWVyVHJhbnNmb3Jt
KCkKICNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKIHN0ZDo6b3B0aW9uYWw8TGF5
b3V0UmVjdD4gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdD
b250YWluZXIoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogY29udGFpbmVyLCBSZW5kZXJPYmplY3Q6OlZpc2libGVSZWN0Q29udGV4dCBjb250ZXh0
KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyU1ZHQmxvY2sg
Y2hhbmdlcwotICAgIC8vIEFTU0VSVChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4odGhpcykgfHwg
aXM8UmVuZGVyU1ZHQmxvY2s+KHRoaXMpKTsKLSAgICBBU1NFUlQoaXM8UmVuZGVyU1ZHTW9kZWxP
YmplY3Q+KHRoaXMpKTsKLQorICAgIEFTU0VSVChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4odGhp
cykgfHwgaXM8UmVuZGVyU1ZHQmxvY2s+KHRoaXMpKTsKICAgICBBU1NFUlQoIXN0eWxlKCkuaGFz
SW5GbG93UG9zaXRpb24oKSk7CiAgICAgQVNTRVJUKCF2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0
Q29udGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggNjE5MTFjOGFjNjYyZmMzYzIzYTkzNTY1
NmQ4ODE4ZWZjYzZjOWQ4Mi4uMDNhZjQ0YjM4OGRlMGFmYWQ1YWU5OTA5NTYxZGEzZjFhZDZiMTYw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTUyMSw2
ICs1MjEsMTEgQEAgc3RhdGljIGlubGluZSBib29sIG9iamVjdElzUmVsYXlvdXRCb3VuZGFyeShj
b25zdCBSZW5kZXJFbGVtZW50KiBvYmplY3QpCiAgICAgaWYgKCFvYmplY3QtPmhhc05vblZpc2li
bGVPdmVyZmxvdygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyNpZiBFTkFCTEUoTEFZRVJf
QkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAob2JqZWN0LT5kb2N1bWVudCgpLnNldHRpbmdzKCku
bGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSAmJiBvYmplY3QtPmlzU1ZHTGF5ZXJBd2FyZVJl
bmRlcmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCiAgICAgaWYgKG9iamVj
dC0+c3R5bGUoKS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgfHwgb2JqZWN0LT5zdHlsZSgp
LmhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkgfHwgb2JqZWN0LT5zdHlsZSgpLmhlaWdodCgp
LmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAKaW5kZXggMmUx
MDU3MjgxYzg4MDRiMGU2MWE3YzhmOWYwNDkyZTRhYzE3MTA0NS4uNjg5OWExOGU0NTNmMzQzN2Y0
NDI5MTUyNGI4MDYyNDgwYTlmNjk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdCbG9jay5oIgogCisjaW5jbHVkZSAiUmVuZGVyU1ZH
QmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRl
ICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCkBA
IC00Miw2ICs0MywxMyBAQCB2b2lkIFJlbmRlclNWR0Jsb2NrOjp1cGRhdGVGcm9tU3R5bGUoKQog
ewogICAgIFJlbmRlckJsb2NrRmxvdzo6dXBkYXRlRnJvbVN0eWxlKCk7CiAKKyNpZiBFTkFCTEUo
TEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxh
eWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgdXBkYXRlSGFzU1ZHVHJhbnNm
b3JtRmxhZ3MoZ3JhcGhpY3NFbGVtZW50KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisKICAgICAvLyBSZW5kZXJTVkdsb2NrLCB1c2VkIGJ5IFJlbmRlcihTVkdUZXh0fEZvcmVp
Z25PYmplY3QpLCBpcyBub3QgYWxsb3dlZCB0byBjYWxsIHNldEhhc05vblZpc2libGVPdmVyZmxv
dyh0cnVlKS4KICAgICAvLyBSZW5kZXJCbG9jayBhc3N1bWVzIGEgbGF5ZXIgdG8gYmUgcHJlc2Vu
dCB3aGVuIHRoZSBvdmVyZmxvdyBjbGlwIGZ1bmN0aW9uYWxpdHkgaXMgcmVxdWVzdGVkLiBCb3Ro
CiAgICAgLy8gUmVuZGVyKFNWR1RleHR8Rm9yZWlnbk9iamVjdCkgcmV0dXJuICdmYWxzZScgb24g
J3JlcXVpcmVzTGF5ZXInLiBGaW5lIGZvciBSZW5kZXJTVkdUZXh0LgpAQCAtNTcsMTIgKzY1LDI3
IEBAIHZvaWQgUmVuZGVyU1ZHQmxvY2s6OnVwZGF0ZUZyb21TdHlsZSgpCiAgICAgc2V0SGFzTm9u
VmlzaWJsZU92ZXJmbG93KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdCbG9jazo6YWJzb2x1
dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0Cit2b2lk
IFJlbmRlclNWR0Jsb2NrOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3QKIHsKKyNpZiBFTkFCTEUo
TEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxh
eWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgcmVjdHMuYXBwZW5kKHNuYXBw
ZWRJbnRSZWN0KExheW91dFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpLCBzaXpl
KCkpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShy
ZWN0cyk7CisgICAgVU5VU0VEX1BBUkFNKGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyNlbmRpZgorCiAg
ICAgLy8gVGhpcyBjb2RlIHBhdGggc2hvdWxkIG5ldmVyIGJlIHRha2VuIGZvciBTVkcsIGFzIHdl
J3JlIGFzc3VtaW5nIHVzZVRyYW5zZm9ybXM9dHJ1ZSBldmVyeXdoZXJlLCBhYnNvbHV0ZVF1YWRz
IHNob3VsZCBiZSB1c2VkLgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIFJl
bmRlclNWR0Jsb2NrOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9v
bCogd2FzRml4ZWQpIGNvbnN0Cit7CisgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1
YWQoc3Ryb2tlQm91bmRpbmdCb3goKSwgVXNlVHJhbnNmb3Jtcywgd2FzRml4ZWQpKTsKK30KKwog
dm9pZCBSZW5kZXJTVkdCbG9jazo6d2lsbEJlRGVzdHJveWVkKCkKIHsKICAgICBTVkdSZXNvdXJj
ZXNDYWNoZTo6Y2xpZW50RGVzdHJveWVkKCp0aGlzKTsKQEAgLTcxLDcgKzk0LDExIEBAIHZvaWQg
UmVuZGVyU1ZHQmxvY2s6OndpbGxCZURlc3Ryb3llZCgpCiAKIHZvaWQgUmVuZGVyU1ZHQmxvY2s6
OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUpCiB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYg
KGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlOjpMYXlvdXQgJiYgIWRvY3VtZW50KCkuc2V0dGluZ3Mo
KS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKQorI2Vsc2UKICAgICBpZiAoZGlmZiA9PSBT
dHlsZURpZmZlcmVuY2U6OkxheW91dCkKKyNlbmRpZgogICAgICAgICBzZXROZWVkc0JvdW5kYXJp
ZXNVcGRhdGUoKTsKICAgICBSZW5kZXJCbG9ja0Zsb3c6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9s
ZFN0eWxlKTsKICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKCp0aGlz
LCBkaWZmLCBzdHlsZSgpKTsKQEAgLTgxLDYgKzEwOCwxMSBAQCB2b2lkIFJlbmRlclNWR0Jsb2Nr
Ojpjb21wdXRlT3ZlcmZsb3coTGF5b3V0VW5pdCBvbGRDbGllbnRBZnRlckVkZ2UsIGJvb2wgcmVj
b21wdQogewogICAgIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZU92ZXJmbG93KG9sZENsaWVudEFm
dGVyRWRnZSwgcmVjb21wdXRlRmxvYXRzKTsKIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdf
RU5HSU5FKQorICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2lu
ZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICBjb25zdCBhdXRvKiB0
ZXh0U2hhZG93ID0gc3R5bGUoKS50ZXh0U2hhZG93KCk7CiAgICAgaWYgKCF0ZXh0U2hhZG93KQog
ICAgICAgICByZXR1cm47CkBAIC05MCwxMyArMTIyLDMwIEBAIHZvaWQgUmVuZGVyU1ZHQmxvY2s6
OmNvbXB1dGVPdmVyZmxvdyhMYXlvdXRVbml0IG9sZENsaWVudEFmdGVyRWRnZSwgYm9vbCByZWNv
bXB1CiAgICAgYWRkVmlzdWFsT3ZlcmZsb3coc25hcHBlZEludFJlY3QoYm9yZGVyUmVjdCkpOwog
fQogCi1MYXlvdXRSZWN0IFJlbmRlclNWR0Jsb2NrOjpjbGlwcGVkT3ZlcmZsb3dSZWN0KGNvbnN0
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFZpc2libGVSZWN0Q29u
dGV4dCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyU1ZHQmxvY2s6OmNsaXBwZWRPdmVyZmxvd1Jl
Y3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVmlzaWJs
ZVJlY3RDb250ZXh0IGNvbnRleHQpIGNvbnN0CiB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NW
R19FTkdJTkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5n
aW5lRW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNp
YmlsaXR5OjpWaXNpYmxlICYmICFlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29udGVudCgp
KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBBU1NFUlQoIXZpZXcoKS5mcmFt
ZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNQYWludE9mZnNldENhY2hlRW5hYmxlZCgpKTsKKyAg
ICAgICAgcmV0dXJuIGNvbXB1dGVSZWN0KHZpc3VhbE92ZXJmbG93UmVjdCgpLCByZXBhaW50Q29u
dGFpbmVyLCBjb250ZXh0KTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0
KTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNsaXBwZWRPdmVyZmxv
d1JlY3RGb3JSZXBhaW50KCp0aGlzLCByZXBhaW50Q29udGFpbmVyKTsKIH0KIAogc3RkOjpvcHRp
b25hbDxMYXlvdXRSZWN0PiBSZW5kZXJTVkdCbG9jazo6Y29tcHV0ZVZpc2libGVSZWN0SW5Db250
YWluZXIoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogY29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQgY29udGV4dCkgY29uc3QKIHsKKyNpZiBF
TkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5n
cygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBjb21wdXRl
VmlzaWJsZVJlY3RJblNWR0NvbnRhaW5lcihyZWN0LCBjb250YWluZXIsIGNvbnRleHQpOworI2Vu
ZGlmCisKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gYWRqdXN0ZWRSZWN0ID0gY29tcHV0
ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihyZWN0LCBjb250YWluZXIsIGNvbnRleHQpOwog
ICAgIGlmIChhZGp1c3RlZFJlY3QpCiAgICAgICAgIHJldHVybiBlbmNsb3NpbmdMYXlvdXRSZWN0
KCphZGp1c3RlZFJlY3QpOwpAQCAtMTA1LDYgKzE1NCw5IEBAIHN0ZDo6b3B0aW9uYWw8TGF5b3V0
UmVjdD4gUmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0
IExhCiAKIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBSZW5kZXJTVkdCbG9jazo6Y29tcHV0ZUZs
b2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0IGNvbnRl
eHQpIGNvbnN0CiB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgQVNT
RVJUKCFkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSk7
CisjZW5kaWYKICAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUZsb2F0VmlzaWJs
ZVJlY3RJbkNvbnRhaW5lcigqdGhpcywgcmVjdCwgY29udGFpbmVyLCBjb250ZXh0KTsKIH0KIApA
QCAtMTE1LDEzICsxNjcsMjMgQEAgdm9pZCBSZW5kZXJTVkdCbG9jazo6bWFwTG9jYWxUb0NvbnRh
aW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckMKIAogY29uc3QgUmVu
ZGVyT2JqZWN0KiBSZW5kZXJTVkdCbG9jazo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1h
cCYgZ2VvbWV0cnlNYXApIGNvbnN0CiB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJ
TkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5h
YmxlZCgpKQorICAgICAgICByZXR1cm4gUmVuZGVyQm94OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVy
KGFuY2VzdG9yVG9TdG9wQXQsIGdlb21ldHJ5TWFwKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIFNW
R1JlbmRlclN1cHBvcnQ6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoKnRoaXMsIGFuY2VzdG9yVG9T
dG9wQXQsIGdlb21ldHJ5TWFwKTsKIH0KIAotYm9vbCBSZW5kZXJTVkdCbG9jazo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQorI2lmIEVOQUJMRShM
QVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorTGF5b3V0U2l6ZSBSZW5kZXJTVkdCbG9jazo6b2Zmc2V0
RnJvbUNvbnRhaW5lcihSZW5kZXJFbGVtZW50JiBjb250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiwgYm9vbCopIGNvbnN0CiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIEFTU0VSVF9VTlVTRUQoY29udGFpbmVyLCAmY29udGFpbmVyID09IHRoaXMt
PmNvbnRhaW5lcigpKTsKKyAgICBBU1NFUlQoIWlzSW5GbG93UG9zaXRpb25lZCgpKTsKKyAgICBB
U1NFUlQoIWlzQWJzb2x1dGVseVBvc2l0aW9uZWQoKSk7CisgICAgQVNTRVJUKCFpc0lubGluZSgp
KTsKKyAgICByZXR1cm4gTGF5b3V0U2l6ZSgpOwogfQorI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suaAppbmRleCBjMTQ2ZGRhZWYyMGI1
M2M0ZDQxYTU5NDg0YTk3NGNhZGZjZDZmMzU2Li44ZTFkN2M4MTJlODRjMjVmOWE0ZWI2MGJlYzUy
MmQ1YmE5YWNjZjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0Jsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdCbG9jay5oCkBAIC00NSw3ICs0NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1JlbmRlclNW
R0Jsb2NrKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCBhYnNvbHV0
ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCkgY29uc3Qgb3ZlcnJpZGU7Ci0KKyAgICB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZs
b2F0UXVhZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkg
ZmluYWw7CiAKICNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKQEAgLTU5LDggKzU5
LDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmLCBP
cHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0IGZpbmFs
OwogICAgIGNvbnN0IFJlbmRlck9iamVjdCogcHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1h
cCYpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbikgZmluYWw7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgTGF5
b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRQ
b2ludCYsIGJvb2wqIG9mZnNldERlcGVuZHNPblBvaW50ID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJp
ZGU7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCmluZGV4IDU4OGFmMWExZjc3NzI5
NTMxMjk3ZWNkOTBiYzYwYjY1MzI3ZjFlYWIuLmQ4OWQ3NDhiMzM2ODFiYzU5NTg1NDg2ZTcwNzA0
YmMyNTA5OGE1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0LmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJTVkdFbGVt
ZW50VHlwZUhlbHBlcnMuaCIKICNpbmNsdWRlICJTVkdMZW5ndGhMaXN0LmgiCiAjaW5jbHVkZSAi
U1ZHUmVzb3VyY2VzQ2FjaGUuaCIKQEAgLTU3LDEwICs1OCw2IEBAIFdURl9NQUtFX0lTT19BTExP
Q0FURURfSU1QTChSZW5kZXJTVkdUZXh0KTsKIAogUmVuZGVyU1ZHVGV4dDo6UmVuZGVyU1ZHVGV4
dChTVkdUZXh0RWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKICAgICA6IFJl
bmRlclNWR0Jsb2NrKGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQotICAgICwgbV9uZWVkc1Jlb3Jk
ZXJpbmcoZmFsc2UpCi0gICAgLCBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUoZmFsc2Up
Ci0gICAgLCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlKHRydWUpCi0gICAgLCBtX25lZWRzVGV4dE1l
dHJpY3NVcGRhdGUoZmFsc2UpCiB7CiB9CiAKQEAgLTMxMSwxNSArMzA4LDI4IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCB1cGRhdGVGb250SW5BbGxEZXNjZW5kYW50cyhSZW5kZXJPYmplY3QqIHN0YXJ0
LCBTVkdUZXh0TGF5b3V0CiAKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKIHsKKyAgICBh
dXRvIGlzTGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQgPSBbJl0oKSB7CisjaWYgRU5BQkxFKExB
WUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgIHJldHVybiBkb2N1bWVudCgpLnNldHRpbmdz
KCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZgorICAgIH07CisKICAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50
IGxheW91dENoZWNrUG9pbnQ7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIExheW91
dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIFNWR1JlbmRlclN1cHBvcnQ6OmNoZWNrRm9yU1ZH
UmVwYWludER1cmluZ0xheW91dCgqdGhpcykpOworICAgIExheW91dFJlcGFpbnRlciByZXBhaW50
ZXIoKnRoaXMsIGlzTGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSA/IGNoZWNrRm9yUmVwYWlu
dER1cmluZ0xheW91dCgpIDogU1ZHUmVuZGVyU3VwcG9ydDo6Y2hlY2tGb3JTVkdSZXBhaW50RHVy
aW5nTGF5b3V0KCp0aGlzKSk7CisKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0xl
bmd0aENvbnRleHQgY2hhbmdlcworICAgIC8vIHRleHRFbGVtZW50KCkudXBkYXRlTGVuZ3RoQ29u
dGV4dCgpOwogCiAgICAgYm9vbCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gZmFs
c2U7Ci0gICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKLSAgICAgICAgbV9sb2NhbFRy
YW5zZm9ybSA9IHRleHRFbGVtZW50KCkuYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOwotICAgICAg
ICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJv
dW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOworICAgIGlmICghaXNMYXllckJhc2VkU1ZHRW5naW5l
RW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7CisgICAg
ICAgICAgICBtX2xvY2FsVHJhbnNmb3JtID0gdGV4dEVsZW1lbnQoKS5hbmltYXRlZExvY2FsVHJh
bnNmb3JtKCk7CisgICAgICAgICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Cisg
ICAgICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIGlmICghZXZlckhhZExheW91dCgpKSB7CkBAIC0zNDcsOCArMzU3
LDE1IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKICAgICAgICAgbV9uZWVkc1Bvc2l0
aW9uaW5nVmFsdWVzVXBkYXRlID0gZmFsc2U7CiAgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJp
ZXNJblBhcmVudHMgPSB0cnVlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIExlZ2FjeVJlbmRlclNW
R1Jvb3QqIHJvb3RPYmogPSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVHJlZVJvb3RPYmplY3QoKnRo
aXMpOwotICAgICAgICBpZiAobV9uZWVkc1RleHRNZXRyaWNzVXBkYXRlIHx8IChyb290T2JqICYm
IHJvb3RPYmotPmlzTGF5b3V0U2l6ZUNoYW5nZWQoKSkpIHsKKyAgICAgICAgYm9vbCBpc0xheW91
dFNpemVDaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGlmIChhdXRvKiBsZWdhY3lSb290T2JqZWN0
ID0gbGluZWFnZU9mVHlwZTxMZWdhY3lSZW5kZXJTVkdSb290PigqdGhpcykuZmlyc3QoKSkKKyAg
ICAgICAgICAgIGlzTGF5b3V0U2l6ZUNoYW5nZWQgPSBsZWdhY3lSb290T2JqZWN0LT5pc0xheW91
dFNpemVDaGFuZ2VkKCk7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAg
ICAgIGVsc2UgaWYgKGF1dG8qIHJvb3RPYmplY3QgPSBsaW5lYWdlT2ZUeXBlPFJlbmRlclNWR1Jv
b3Q+KCp0aGlzKS5maXJzdCgpKQorICAgICAgICAgICAgaXNMYXlvdXRTaXplQ2hhbmdlZCA9IHJv
b3RPYmplY3QtPmlzTGF5b3V0U2l6ZUNoYW5nZWQoKTsKKyNlbmRpZgorCisgICAgICAgIGlmICht
X25lZWRzVGV4dE1ldHJpY3NVcGRhdGUgfHwgaXNMYXlvdXRTaXplQ2hhbmdlZCkgewogICAgICAg
ICAgICAgLy8gSWYgdGhlIHJvb3QgbGF5b3V0IHNpemUgY2hhbmdlZCAoZWcuIHdpbmRvdyBzaXpl
IGNoYW5nZXMpIG9yIHRoZSB0cmFuc2Zvcm0gdG8gdGhlIHJvb3QKICAgICAgICAgICAgIC8vIGNv
bnRleHQgaGFzIGNoYW5nZWQgdGhlbiByZWNvbXB1dGUgdGhlIG9uLXNjcmVlbiBmb250IHNpemUu
CiAgICAgICAgICAgICB1cGRhdGVGb250SW5BbGxEZXNjZW5kYW50cyh0aGlzLCAmbV9sYXlvdXRB
dHRyaWJ1dGVzQnVpbGRlcik7CkBAIC0zNjUsMzMgKzM4Miw0MCBAQCB2b2lkIFJlbmRlclNWR1Rl
eHQ6OmxheW91dCgpCiAgICAgLy8gUmVkdWNlZCB2ZXJzaW9uIG9mIFJlbmRlckJsb2NrOjpsYXlv
dXRCbG9jaygpLCB3aGljaCBvbmx5IHRha2VzIGNhcmUgb2YgU1ZHIHRleHQuCiAgICAgLy8gQWxs
IGlmIGJyYW5jaGVzIHRoYXQgY291bGQgY2F1c2UgZWFybHkgZXhpdCBpbiBSZW5kZXJCbG9ja3Mg
bGF5b3V0QmxvY2soKSBtZXRob2QgYXJlIHR1cm5lZCBpbnRvIGFzc2VydGlvbnMuCiAgICAgQVNT
RVJUKCFpc0lubGluZSgpKTsKLSAgICBBU1NFUlQoIXNpbXBsaWZpZWRMYXlvdXQoKSk7CiAgICAg
QVNTRVJUKCFzY3JvbGxzT3ZlcmZsb3coKSk7CiAgICAgQVNTRVJUKCFoYXNDb250cm9sQ2xpcCgp
KTsKICAgICBBU1NFUlQoIW11bHRpQ29sdW1uRmxvdygpKTsKICAgICBBU1NFUlQoIXBvc2l0aW9u
ZWRPYmplY3RzKCkpOwotICAgIEFTU0VSVCghbV9vdmVyZmxvdyk7CiAgICAgQVNTRVJUKCFpc0Fu
b255bW91c0Jsb2NrKCkpOworICAgIGlmICghaXNMYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgp
KSB7CisgICAgICAgIEFTU0VSVCghc2ltcGxpZmllZExheW91dCgpKTsKKyAgICAgICAgQVNTRVJU
KCFtX292ZXJmbG93KTsKKyAgICB9CiAKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSkKICAgICAgICAg
c2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7CiAKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBmaW5k
IGEgd2F5IHRvIG9ubHkgbGF5b3V0IHRoZSBjaGlsZCBib3hlcywgaWYgbmVlZGVkLgogICAgIEZs
b2F0UmVjdCBvbGRCb3VuZGFyaWVzID0gb2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBib29sIGxh
eW91dENoYW5nZWQgPSBldmVySGFkTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCk7CiAgICAg
QVNTRVJUKGNoaWxkcmVuSW5saW5lKCkpOwogICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxU
b3A7CiAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbEJvdHRvbTsKICAgICByZWJ1aWxkRmxv
YXRpbmdPYmplY3RTZXRGcm9tSW50cnVkaW5nRmxvYXRzKCk7CiAgICAgbGF5b3V0SW5saW5lQ2hp
bGRyZW4odHJ1ZSwgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKIAor
ICAgIC8vIHVwZGF0ZVBvc2l0aW9uQW5kT3ZlcmZsb3coKSBpcyBjYWxsZWQgYnkgU1ZHUm9vdElu
bGluZUJveCwgYWZ0ZXIgZm9yY2VMYXlvdXRJbmxpbmVDaGlsZHJlbigpIHJhbiwgYmVmb3JlIHRo
aXMgcG9pbnQgaXMgcmVhY2hlZC4KICAgICBpZiAobV9uZWVkc1Jlb3JkZXJpbmcpCiAgICAgICAg
IG1fbmVlZHNSZW9yZGVyaW5nID0gZmFsc2U7CiAKLSAgICBpZiAoIXVwZGF0ZUNhY2hlZEJvdW5k
YXJpZXNJblBhcmVudHMpCisgICAgaWYgKGlzTGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkg
eworICAgICAgICB1cGRhdGVMYXllclRyYW5zZm9ybSgpOworICAgICAgICB1cGRhdGVDYWNoZWRC
b3VuZGFyaWVzSW5QYXJlbnRzID0gZmFsc2U7IC8vIE5vIGxvbmdlciBuZWVkZWQgZm9yIExCU0Uu
CisgICAgfSBlbHNlIGlmICghdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cykKICAgICAg
ICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IG9sZEJvdW5kYXJpZXMgIT0gb2Jq
ZWN0Qm91bmRpbmdCb3goKTsKIAogICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0
aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCi0gICAgaWYgKGV2ZXJIYWRMYXlvdXQo
KSAmJiBzZWxmTmVlZHNMYXlvdXQoKSkKKyAgICBpZiAobGF5b3V0Q2hhbmdlZCkKICAgICAgICAg
U1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQoKnRoaXMpOwogCiAgICAgLy8g
SWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMuCkBAIC00MDQsNiArNDI4
LDkgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQogCiBib29sIFJlbmRlclNWR1RleHQ6
Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFj
dGlvbiBoaXRUZXN0QWN0aW9uKQogeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5F
KQorICAgIEFTU0VSVCghZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVF
bmFibGVkKCkpOworI2VuZGlmCiAgICAgUG9pbnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBv
aW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1RFWFRfSElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUo
KS5lZmZlY3RpdmVQb2ludGVyRXZlbnRzKCkpOwogICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxl
KCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUpOwogICAgIGlmIChpc1Zpc2li
bGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7CkBAIC00MTIsNyArNDM5LDcgQEAgYm9v
bCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9
IHZhbHVlT3JEZWZhdWx0KGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkpLm1hcFBv
aW50KHBvaW50SW5QYXJlbnQpOwogCiAgICAgICAgICAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6
OnBvaW50SW5DbGlwcGluZ0FyZWEoKnRoaXMsIGxvY2FsUG9pbnQpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgICAgICBTVkdIaXRUZXN0Q3ljbGVEZXRlY3Rpb25TY29wZSBoaXRUZXN0U2NvcGUoKnRo
aXMpOwogCkBAIC00MjQsNiArNDUxLDMzIEBAIGJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0Rmxv
YXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCiti
b29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRp
b25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCit7CisgICAgQVNTRVJUKGRvY3VtZW50KCkuc2V0dGlu
Z3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKTsKKyAgICBhdXRvIGFkanVzdGVkTG9j
YXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CisKKyAgICBQb2ludGVyRXZl
bnRzSGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfVEVYVF9ISVRU
RVNUSU5HLCByZXF1ZXN0LCBzdHlsZSgpLnBvaW50ZXJFdmVudHMoKSk7CisgICAgYm9vbCBpc1Zp
c2libGUgPSAoc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSk7Cisg
ICAgaWYgKGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKKyAgICAgICAg
aWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN0eWxlKCkuc3ZnU3R5bGUoKS5oYXNTdHJv
a2UoKSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCisgICAgICAgIHx8IChoaXRSdWxlcy5j
YW5IaXRGaWxsICYmIChzdHlsZSgpLnN2Z1N0eWxlKCkuaGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5y
ZXF1aXJlRmlsbCkpKSB7CisgICAgICAgICAgICBhdXRvIGxvY2FsUG9pbnQgPSBsb2NhdGlvbklu
Q29udGFpbmVyLnBvaW50KCk7CisgICAgICAgICAgICBhdXRvIGNvb3JkaW5hdGVTeXN0ZW1Pcmln
aW5UcmFuc2xhdGlvbiA9IG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpIC0gYWRqdXN0ZWRMb2Nh
dGlvbjsKKyAgICAgICAgICAgIGxvY2FsUG9pbnQubW92ZShjb29yZGluYXRlU3lzdGVtT3JpZ2lu
VHJhbnNsYXRpb24pOworCisgICAgICAgICAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50
SW5DbGlwcGluZ0FyZWEoKnRoaXMsIGxvY2FsUG9pbnQpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgU1ZHSGl0VGVzdEN5Y2xlRGV0ZWN0aW9uU2NvcGUgaGl0
VGVzdFNjb3BlKCp0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9m
ZnNldCwgaGl0VGVzdEFjdGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisjZW5kaWYKKwogVmlzaWJsZVBvc2l0aW9uIFJlbmRlclNWR1RleHQ6OnBvc2l0aW9u
Rm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250ZW50cywgY29uc3QgUmVuZGVy
RnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KQogewogICAgIExlZ2FjeVJvb3RJbmxpbmVCb3gq
IHJvb3RCb3ggPSBmaXJzdFJvb3RCb3goKTsKQEAgLTQ0MCwxOCArNDk0LDU1IEBAIFZpc2libGVQ
b3NpdGlvbiBSZW5kZXJTVkdUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50
JiBwb2ludEluQ29udGVuCiAgICAgcmV0dXJuIGNsb3Nlc3RCb3gtPnJlbmRlcmVyKCkucG9zaXRp
b25Gb3JQb2ludCh7IHBvaW50SW5Db250ZW50cy54KCksIExheW91dFVuaXQoY2xvc2VzdEJveC0+
eSgpKSB9LCBmcmFnbWVudCk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVRdWFk
cyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdAotewotICAg
IHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKHN0cm9rZUJvdW5kaW5nQm94KCksIFVz
ZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHVGV4dDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JikKK3ZvaWQgUmVuZGVyU1ZH
VGV4dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCkKIHsKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQoKS5wYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQ
aGFzZTo6Rm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6U2VsZWN0
aW9uKQotICAgICAgICAgcmV0dXJuOworICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQ
aGFzZTo6Q2xpcHBpbmdNYXNrICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpNYXNr
ICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kICYmIHBhaW50SW5m
by5waGFzZSAhPSBQYWludFBoYXNlOjpPdXRsaW5lICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWlu
dFBoYXNlOjpTZWxmT3V0bGluZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFwYWludElu
Zm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYg
RU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0dGlu
Z3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChzdHlsZSgp
LnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpIaWRkZW4gfHwgc3R5bGUoKS5kaXNwbGF5KCkg
PT0gRGlzcGxheVR5cGU6Ok5vbmUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8g
RklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAgICAg
Ly8gaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpzaG91bGRQYWludEhpZGRlblJlbmRlcmVyKCp0aGlz
KSkKKyAgICAgICAgLy8gICAgIHJldHVybjsKKworICAgICAgICBpZiAocGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2U6OkNsaXBwaW5nTWFzaykgeworICAgICAgICAgICAgLy8gRklYTUU6IFtM
QlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAgICAgICAgIC8vIFNW
R1JlbmRlclN1cHBvcnQ6OnBhaW50U1ZHQ2xpcHBpbmdNYXNrKCp0aGlzLCBwYWludEluZm8pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBhZGp1c3RlZFBh
aW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgICAgICBpZiAocGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2U6Ok1hc2spIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBb
TEJTRV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgICAgICAgICAvLyBT
VkdSZW5kZXJTdXBwb3J0OjpwYWludFNWR01hc2soKnRoaXMsIHBhaW50SW5mbywgYWRqdXN0ZWRQ
YWludE9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6Ok91dGxpbmUgfHwgcGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2U6OlNlbGZPdXRsaW5lKSB7CisgICAgICAgICAgICBSZW5kZXJCbG9j
azo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
cGFpbnRJbmZvLmNvbnRleHQoKSk7CisKKyAgICAgICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3Jp
Z2luVHJhbnNsYXRpb24gPSBhZGp1c3RlZFBhaW50T2Zmc2V0IC0gbm9taW5hbFNWR0xheW91dExv
Y2F0aW9uKCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkudHJhbnNsYXRlKGNvb3JkaW5h
dGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbi53aWR0aCgpLCBjb29yZGluYXRlU3lzdGVtT3JpZ2lu
VHJhbnNsYXRpb24uaGVpZ2h0KCkpOworCisgICAgICAgIFJlbmRlckJsb2NrOjpwYWludChwYWlu
dEluZm8sIHBhaW50T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHBhaW50T2Zmc2V0KTsKKyNlbmRpZgogCiAgICAgUGFpbnRJbmZvIGJsb2Nr
SW5mbyhwYWludEluZm8pOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cihibG9ja0luZm8uY29udGV4dCgpKTsKQEAgLTQ3OSw2ICs1NzAsMTEgQEAgRmxvYXRSZWN0IFJl
bmRlclNWR1RleHQ6OnN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKIAogRmxvYXRSZWN0IFJlbmRl
clNWR1RleHQ6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QKIHsKKyNpZiBF
TkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5n
cygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBTVkdCb3Vu
ZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5nQm94KCp0aGlzKTsKKyNl
bmRpZgorCiAgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gc3Ryb2tlQm91bmRpbmdCb3goKTsK
ICAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXMo
KnRoaXMsIHJlcGFpbnRSZWN0KTsKIApAQCAtNDg4LDQgKzU4NCwzMiBAQCBGbG9hdFJlY3QgUmVu
ZGVyU1ZHVGV4dDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdAogICAgIHJl
dHVybiByZXBhaW50UmVjdDsKIH0KIAordm9pZCBSZW5kZXJTVkdUZXh0Ojp1cGRhdGVQb3NpdGlv
bkFuZE92ZXJmbG93KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRhcmllcykKK3sKKyNpZiBFTkFCTEUo
TEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxh
eWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgY2xlYXJPdmVyZmxvdygpOwor
CisgICAgICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBib3VuZGFyaWVzOworCisgICAgICAgIGF1
dG8gYm91bmRpbmdSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChtX29iamVjdEJvdW5kaW5nQm94
KTsKKyAgICAgICAgc2V0TG9jYXRpb24oYm91bmRpbmdSZWN0LmxvY2F0aW9uKCkpOworICAgICAg
ICBzZXRTaXplKGJvdW5kaW5nUmVjdC5zaXplKCkpOworCisgICAgICAgIGF1dG8gb3ZlcmZsb3dS
ZWN0ID0gdmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpOworICAgICAgICBpZiAoY29uc3Qg
YXV0byogdGV4dFNoYWRvdyA9IHN0eWxlKCkudGV4dFNoYWRvdygpKQorICAgICAgICAgICAgdGV4
dFNoYWRvdy0+YWRqdXN0UmVjdEZvclNoYWRvdyhvdmVyZmxvd1JlY3QpOworCisgICAgICAgIGFk
ZFZpc3VhbE92ZXJmbG93KG92ZXJmbG93UmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKKworICAgIGF1dG8gYm91bmRpbmdSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChib3Vu
ZGFyaWVzKTsKKyAgICBzZXRMb2NhdGlvbihib3VuZGluZ1JlY3QubG9jYXRpb24oKSk7CisgICAg
c2V0U2l6ZShib3VuZGluZ1JlY3Quc2l6ZSgpKTsKKyAgICBtX29iamVjdEJvdW5kaW5nQm94ID0g
Ym91bmRpbmdSZWN0OworICAgIEFTU0VSVChtX29iamVjdEJvdW5kaW5nQm94ID09IGZyYW1lUmVj
dCgpKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Rl
eHQuaAppbmRleCA0NDEyNjk4ODU3OTEzMDI0MjgyZmZmMGE4ZTY2NTFiNmI3ZjFjZGM2Li4zYWIz
NjYzZTZkMmNlMjllODVjMWE1NWMyOTZmNGQ0ZTM1YjUyZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQmxvY2suaCIKKyNp
bmNsdWRlICJTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXNCdWlsZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDkg
KzQzLDEwIEBAIHB1YmxpYzoKICAgICBib29sIGlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNl
dE5lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUoKSB7IG1fbmVlZHNQb3NpdGlvbmluZ1ZhbHVl
c1VwZGF0ZSA9IHRydWU7IH0KLSAgICB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgb3Zl
cnJpZGUgeyBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQogICAgIHZvaWQgc2V0TmVl
ZHNUZXh0TWV0cmljc1VwZGF0ZSgpIHsgbV9uZWVkc1RleHRNZXRyaWNzVXBkYXRlID0gdHJ1ZTsg
fQotICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgLy8gRklYTUU6IFtMQlNFXSBPbmx5IG5lZWRlZCBmb3IgbGVnYWN5IFNW
RyBlbmdpbmUuCisgICAgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIG92ZXJyaWRlIHsg
bV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KIAogICAgIHN0YXRpYyBSZW5kZXJTVkdU
ZXh0KiBsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoUmVuZGVyT2JqZWN0Jik7CiAgICAgc3Rh
dGljIGNvbnN0IFJlbmRlclNWR1RleHQqIGxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3Rvcihjb25z
dCBSZW5kZXJPYmplY3QmKTsKQEAgLTU4LDggKzYwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHN1
YnRyZWVTdHlsZURpZENoYW5nZShSZW5kZXJTVkdJbmxpbmVUZXh0Kik7CiAgICAgdm9pZCBzdWJ0
cmVlVGV4dERpZENoYW5nZShSZW5kZXJTVkdJbmxpbmVUZXh0Kik7CiAKLSAgICBGbG9hdFJlY3Qg
b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmcmFtZVJlY3QoKTsg
fQotICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IG92ZXJyaWRlOworICAg
IEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb2Jq
ZWN0Qm91bmRpbmdCb3g7IH0KKyAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25z
dCBmaW5hbDsKKyAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBj
b25zdCBmaW5hbDsKKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIExh
eW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIFNW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVWaXN1YWxPdmVyZmxvd1JlY3QoKnRoaXMp
OyB9CisjZW5kaWYKKyAgICB2b2lkIHVwZGF0ZVBvc2l0aW9uQW5kT3ZlcmZsb3coY29uc3QgRmxv
YXRSZWN0Jik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBncmFwaGljc0VsZW1lbnQoKSBjb25zdCA9
IGRlbGV0ZTsKQEAgLTY4LDI4ICs3Niw0MCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNTVkdUZXh0
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCBwYWludChQYWlu
dEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlOwotICAgIGJvb2wgbm9kZUF0Rmxv
YXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKKyNpZiBFTkFC
TEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9j
YXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKKyNlbmRpZgogICAgIFZpc2libGVQb3NpdGlvbiBwb3Np
dGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqKSBvdmVycmlkZTsKIAotICAgIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKKyAgICBi
b29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyNpZiBFTkFCTEUoTEFZ
RVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICAgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5s
YXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisj
ZW5kaWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIHZvaWQgYWJzb2x1dGVR
dWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGxheW91dCgpIG92ZXJyaWRlOwogCiAgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQo
KSBvdmVycmlkZTsKIAorICAgIC8vIEZJWE1FOiBbTEJTRV0gQmVnaW4gY29kZSBvbmx5IG5lZWRl
ZCBmb3IgbGVnYWN5IFNWRyBlbmdpbmUuCisgICAgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwogICAgIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
bG9jYWxUcmFuc2Zvcm07IH0KICAgICBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisgICAgLy8gRklYTUU6
IFtMQlNFXSBFbmQgY29kZSBvbmx5IG5lZWRlZCBmb3IgbGVnYWN5IFNWRyBlbmdpbmUuCiAKICAg
ICBib29sIHNob3VsZEhhbmRsZVN1YnRyZWVNdXRhdGlvbnMoKSBjb25zdDsKIAotICAgIGJvb2wg
bV9uZWVkc1Jlb3JkZXJpbmcgOiAxOwotICAgIGJvb2wgbV9uZWVkc1Bvc2l0aW9uaW5nVmFsdWVz
VXBkYXRlIDogMTsKLSAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwotICAgIGJv
b2wgbV9uZWVkc1RleHRNZXRyaWNzVXBkYXRlIDogMTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9s
b2NhbFRyYW5zZm9ybTsKKyAgICBib29sIG1fbmVlZHNSZW9yZGVyaW5nIDogMSB7IGZhbHNlIH07
CisgICAgYm9vbCBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUgOiAxIHsgZmFsc2UgfTsK
KyAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxIHsgdHJ1ZSB9OyAvLyBGSVhNRTog
W0xCU0VdIE9ubHkgbmVlZGVkIGZvciBsZWdhY3kgU1ZHIGVuZ2luZS4KKyAgICBib29sIG1fbmVl
ZHNUZXh0TWV0cmljc1VwZGF0ZSA6IDEgeyBmYWxzZSB9OworICAgIEFmZmluZVRyYW5zZm9ybSBt
X2xvY2FsVHJhbnNmb3JtOyAvLyBGSVhNRTogW0xCU0VdIE9ubHkgbmVlZGVkIGZvciBsZWdhY3kg
U1ZHIGVuZ2luZS4KICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIgbV9sYXlvdXRB
dHRyaWJ1dGVzQnVpbGRlcjsKICAgICBWZWN0b3I8U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqPiBt
X2xheW91dEF0dHJpYnV0ZXM7CisgICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAppbmRleCA5YzZjMDk4MDEzNzZiY2QzN2RkZmY5
YTM5MGEzZWIwMzY2OTQzOWYzLi4xYzBjYThiZmMwMjYzODMwYWFiOTg3OTk2OTY0ZDRlM2E5MmFl
Y2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxp
bmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGlu
ZUJveC5jcHAKQEAgLTQ2LDIxICs0NiwzNyBAQCBTVkdSb290SW5saW5lQm94OjpTVkdSb290SW5s
aW5lQm94KFJlbmRlclNWR1RleHQmIHJlbmRlclNWR1RleHQpCiB7CiB9CiAKLVJlbmRlclNWR1Rl
eHQmIFNWR1Jvb3RJbmxpbmVCb3g6OnJlbmRlclNWR1RleHQoKQorUmVuZGVyU1ZHVGV4dCYgU1ZH
Um9vdElubGluZUJveDo6cmVuZGVyU1ZHVGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvd25j
YXN0PFJlbmRlclNWR1RleHQ+KGJsb2NrRmxvdygpKTsKIH0KIAotdm9pZCBTVkdSb290SW5saW5l
Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0LCBMYXlvdXRVbml0LCBMYXlvdXRVbml0KQordm9pZCBTVkdSb290SW5saW5lQm94Ojpw
YWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKIHsKICAgICBBU1NF
UlQocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkZvcmVncm91bmQgfHwgcGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2U6OlNlbGVjdGlvbik7CiAgICAgQVNTRVJUKCFwYWludEluZm8u
Y29udGV4dCgpLnBhaW50aW5nRGlzYWJsZWQoKSk7CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURf
U1ZHX0VOR0lORSkKKyAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLnNldHRpbmdzKCkubGF5
ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAgICBhdXRvIG92ZXJmbG93UmVjdCh2
aXN1YWxPdmVyZmxvd1JlY3QobGluZVRvcCwgbGluZUJvdHRvbSkpOworICAgICAgICBmbGlwRm9y
V3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICAgICAgb3ZlcmZsb3dSZWN0Lm1vdmVCeShw
YWludE9mZnNldCk7CisKKyAgICAgICAgaWYgKCFwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKG92
ZXJmbG93UmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0obGluZVRvcCk7CisgICAgVU5VU0VEX1BBUkFNKGxpbmVCb3R0b20pOworI2VuZGlm
CisKICAgICBib29sIGlzUHJpbnRpbmcgPSByZW5kZXJTVkdUZXh0KCkuZG9jdW1lbnQoKS5wcmlu
dGluZygpOwogICAgIGJvb2wgaGFzU2VsZWN0aW9uID0gIWlzUHJpbnRpbmcgJiYgc2VsZWN0aW9u
U3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lOwogICAgIGJvb2wg
c2hvdWxkUGFpbnRTZWxlY3Rpb25IaWdobGlnaHQgPSAhKHBhaW50SW5mby5wYWludEJlaGF2aW9y
LmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OlNraXBTZWxlY3Rpb25IaWdobGlnaHQpKTsKIAogICAg
IFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhwYWludEluZm8pOworICAgIGNoaWxkUGFpbnRJbmZv
LnVwZGF0ZVN1YnRyZWVQYWludFJvb3RGb3JDaGlsZHJlbigmcmVuZGVyZXIoKSk7CisKICAgICBp
ZiAoaGFzU2VsZWN0aW9uICYmIHNob3VsZFBhaW50U2VsZWN0aW9uSGlnaGxpZ2h0KSB7CiAgICAg
ICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0T25MaW5lKCkpIHsKICAgICAgICAgICAgIGlmIChpczxTVkdJbmxpbmVUZXh0Qm94Pigq
Y2hpbGQpKQpAQCAtNzAsNiArODYsMTcgQEAgdm9pZCBTVkdSb290SW5saW5lQm94OjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2UKICAgICAg
ICAgfQogICAgIH0KIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlm
IChyZW5kZXJlcigpLmRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5h
YmxlZCgpKSB7CisgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+
cmVuZGVyZXIoKS5pc1RleHQoKSB8fCAhY2hpbGQtPmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQ
YWludGluZ0xheWVyKCkpCisgICAgICAgICAgICAgICAgY2hpbGQtPnBhaW50KGNoaWxkUGFpbnRJ
bmZvLCBwYWludE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKICAgICBTVkdSZW5kZXJpbmdDb250ZXh0IHJl
bmRlcmluZ0NvbnRleHQocmVuZGVyU1ZHVGV4dCgpLCBwYWludEluZm8sIFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OlNhdmVHcmFwaGljc0NvbnRleHQpOwogICAgIGlmIChyZW5kZXJpbmdDb250ZXh0Lmlz
UmVuZGVyaW5nUHJlcGFyZWQoKSkgewogICAgICAgICBmb3IgKGF1dG8qIGNoaWxkID0gZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKQpAQCAtMTcwLDkgKzE5
Nyw3IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0Um9vdEJveChjb25zdCBGbG9hdFJl
Y3QmIGNoaWxkUmVjdCkKICAgICBSZW5kZXJTVkdUZXh0JiBwYXJlbnRCbG9jayA9IHJlbmRlclNW
R1RleHQoKTsKIAogICAgIC8vIEZpbmFsbHksIGFzc2lnbiB0aGUgcm9vdCBibG9jayBwb3NpdGlv
biwgbm93IHRoYXQgYWxsIGNvbnRlbnQgaXMgbGFpZCBvdXQuCi0gICAgTGF5b3V0UmVjdCBib3Vu
ZGluZ1JlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KGNoaWxkUmVjdCk7Ci0gICAgcGFyZW50Qmxv
Y2suc2V0TG9jYXRpb24oYm91bmRpbmdSZWN0LmxvY2F0aW9uKCkpOwotICAgIHBhcmVudEJsb2Nr
LnNldFNpemUoYm91bmRpbmdSZWN0LnNpemUoKSk7CisgICAgcGFyZW50QmxvY2sudXBkYXRlUG9z
aXRpb25BbmRPdmVyZmxvdyhjaGlsZFJlY3QpOwogCiAgICAgLy8gUG9zaXRpb24gYWxsIGNoaWxk
cmVuIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgYmxvY2suCiAgICAgZm9yIChhdXRvKiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewpAQCAt
MTg3LDYgKzIxMiw4IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0Um9vdEJveChjb25z
dCBGbG9hdFJlY3QmIGNoaWxkUmVjdCkKICAgICBzZXRZKDApOwogICAgIHNldExvZ2ljYWxXaWR0
aChjaGlsZFJlY3Qud2lkdGgoKSk7CiAgICAgc2V0TG9naWNhbEhlaWdodChjaGlsZFJlY3QuaGVp
Z2h0KCkpOworCisgICAgYXV0byBib3VuZGluZ1JlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KGNo
aWxkUmVjdCk7CiAgICAgc2V0TGluZVRvcEJvdHRvbVBvc2l0aW9ucygwLCBib3VuZGluZ1JlY3Qu
aGVpZ2h0KCksIDAsIGJvdW5kaW5nUmVjdC5oZWlnaHQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmgKaW5kZXggMGQxNjI2OWViNWMx
NzM3YTBmMzEyYzdkZWFhNDkyOTg3MWE0NjFkNi4uYWYxYjEzZWFkNWRhYjExNGYxMGYwNmZiYTZl
ZTJlN2E3ZDU5YzQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSb290SW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
b290SW5saW5lQm94LmgKQEAgLTM1LDggKzM1LDYgQEAgY2xhc3MgU1ZHUm9vdElubGluZUJveCBm
aW5hbCA6IHB1YmxpYyBMZWdhY3lSb290SW5saW5lQm94IHsKIHB1YmxpYzoKICAgICBleHBsaWNp
dCBTVkdSb290SW5saW5lQm94KFJlbmRlclNWR1RleHQmKTsKIAotICAgIFJlbmRlclNWR1RleHQm
IHJlbmRlclNWR1RleHQoKTsKLQogICAgIGZsb2F0IHZpcnR1YWxMb2dpY2FsSGVpZ2h0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9sb2dpY2FsSGVpZ2h0OyB9CiAgICAgdm9pZCBzZXRMb2dp
Y2FsSGVpZ2h0KGZsb2F0IGhlaWdodCkgeyBtX2xvZ2ljYWxIZWlnaHQgPSBoZWlnaHQ7IH0KIApA
QCAtNDksNiArNDcsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0
aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5
b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIEhpdFRlc3RBY3Rpb24pIGZp
bmFsOwogCiBwcml2YXRlOgorICAgIFJlbmRlclNWR1RleHQmIHJlbmRlclNWR1RleHQoKSBjb25z
dDsKKwogICAgIGJvb2wgaXNTVkdSb290SW5saW5lQm94KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZvaWQgcmVvcmRlclZhbHVlTGlzdHNUb0xvZ2ljYWxPcmRlcihWZWN0
b3I8U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqPiYpOwogICAgIHZvaWQgbGF5b3V0Q2hhcmFjdGVy
c0luVGV4dEJveGVzKExlZ2FjeUlubGluZUZsb3dCb3gqLCBTVkdUZXh0TGF5b3V0RW5naW5lJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5kZXggNDE0ODE1MDg1ZGJjYWEzOTRkYzExZjkw
NTBlZDM4YzcwYjgxNGI1My4uMjg2MmQzNjA4OTEwMzAyZjFkZGVlZTdmZTFiMmM4YWRkOTdkNGQw
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApAQCAtNTMxLDcgKzUzMSw3IEBAIHN0YXRp
YyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gY3Jl
YXRlU1ZHTGF5ZXJBd2FyZUVsCiAgICAgLy8gTGlzdCBvZiBhbGwgU1ZHIGVsZW1lbnRzIHdob3Nl
IHJlbmRlcmVycyBzdXBwb3J0IHRoZSBsYXllciBhd2FyZSBsYXlvdXQgLyBwYWludGluZyAvIGhp
dC10ZXN0aW5nIG1vZGUgKCdMQlNFLW1vZGUnKS4KICAgICB1c2luZyBuYW1lc3BhY2UgU1ZHTmFt
ZXM7CiAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJp
bmc+IHNldDsKLSAgICBmb3IgKGF1dG8mIHRhZyA6IHsgZ1RhZy5nZXQoKSwgcmVjdFRhZy5nZXQo
KSB9KQorICAgIGZvciAoYXV0byYgdGFnIDogeyBnVGFnLmdldCgpLCByZWN0VGFnLmdldCgpLCB0
ZXh0VGFnLmdldCgpIH0pCiAgICAgICAgIHNldC5hZGQodGFnLmxvY2FsTmFtZSgpKTsKICAgICBy
ZXR1cm4gc2V0OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458346</attachid>
            <date>2022-04-26 02:27:42 -0700</date>
            <delta_ts>2022-04-27 14:22:51 -0700</delta_ts>
            <desc>Patch, v3 (includes patch from bug 239717)</desc>
            <filename>bug-239743-20220426022738.patch</filename>
            <type>text/plain</type>
            <size>82928</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzNDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjk4ZDA2NTliYjdkM2Y3
ZjkzZjBmZGQ4MDJkNDY1NTdhMzZkZmQyZS4uMmE5MmZmZTU4NWI2MmIzMjI0ZWQ2YmZmNzZiNmU4
YmIyYjY3MDJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OCBAQAorMjAyMi0wNC0yNSAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQWN0aXZhdGUgdGV4dCByZW5kZXJpbmcsIGJ5IHJlLXVzaW5nIFJlbmRlclNWR1RleHQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTc0MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkYXB0IFJlbmRl
clNWR1RleHQgdG8gYmUgdXNhYmxlIGF0IHRoZSBzYW1lIHRpbWUgZnJvbSBsZWdhY3kgU1ZHIGVu
Z2luZSAoYXMKKyAgICAgICAgaXQgaXMgcmlnaHQgbm93KSBhbmQgZnJvbSBMQlNFLiBUaGlzIHJl
cXVpcmVzIG1pbmltYWwgZWZmb3J0LCBzaW5jZSBSZW5kZXJTVkdUZXh0CisgICAgICAgIGFscmVh
ZHkgaW5oZXJpdGVkIGZyb20gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCwgc28gdGhlcmUncyBubyBu
ZWVkIGZvciB0aGUgY3JlYXRpb24KKyAgICAgICAgb2YgTGVnYWN5UmVuZGVyU1ZHVGV4dCAvIFJl
bmRlclNWR1RleHQgYXMgc2VwYXJhdGVkIGxlZ2FjeS9MQlNFIGltcGxlbWVudGF0aW9ucy4KKwor
ICAgICAgICBNb3N0IFNWRyAxLjEgPHRleHQ+IHRlc3RjYXNlcyBhbHJlYWR5IHBhc3Mgb3V0IG9m
IHRoZSBib3ggd2l0aCB0aGlzIGNoYW5nZS4KKyAgICAgICAgVGhlIG5leHQgcGF0Y2ggYWZ0ZXIg
dGV4dCBzdXBwb3J0IHdpbGwgYWRkIGEgbmV3ICdtYWNvcy13azItbGJzZS14eHgnIHNwZWNpZmlj
CisgICAgICAgIHBsYXRmb3JtIGJhc2VsaW5lLCBzbyB0aGF0IHdlIGNhbiBydW4gdGVzdHMgTEJT
RSBhZ2FpbnQgaXNlbGYgKGZpbmFsbHkgd2UgY2FuCisgICAgICAgIGluY2x1ZGUgdGhlIHByb2dy
ZXNzaW9ucyBpbiB0aGUgZm9ybSBvZiBUZXN0RXhwZWN0YXRpb24gZmlsZSBjaGFuZ2VzLCBvbmNl
IGEgY2VydGFpbgorICAgICAgICBwYXRjaCBpbXBsZW1lbnRzIGEgbmV3IGZlYXR1cmUgaW4gTEJT
RS4gVGhpcyBtYWtlcyBzZW5zZSBub3cgYXMgZW5vdWdoIGlzIHVwc3RyZWFtZWQKKyAgICAgICAg
dGhhdCBhIGNvbnNpZGVyYWJsZSBhbW91bnQgb2YgdGhlIFNWRyAxLjEgdGVzdHN1aXRlIGFscmVh
ZHkgcGFzc2VzIHBpeGVsIHBlcmZlY3QuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0
ZXN0cywgbm8gY2hhbmdlIGluIGJlaGF2aW91ci4gKEhvd2V2ZXIgdGVzdGFiaWxpdHkgZm9yIExC
U0UgaXMgcmVhZHkgc29vbiEpLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9k
ZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6
Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdDb250YWluZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0SXNSZWxheW91
dEJvdW5kYXJ5KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jsb2NrOjp1cGRhdGVGcm9tU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmFic29sdXRlUXVhZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0Jsb2NrOjpjb21wdXRlT3ZlcmZsb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHQmxvY2s6OmNsaXBwZWRPdmVyZmxvd1JlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jsb2NrOjpjb21wdXRlRmxvYXRW
aXNpYmxlUmVjdEluQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R0Jsb2NrOjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR0Jsb2NrOjpvZmZzZXRGcm9tQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR0Jsb2NrOjpub2RlQXRQb2ludCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpSZW5k
ZXJTVkdUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmxheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1RleHQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Rl
eHQ6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1RleHQ6OnVwZGF0ZVBvc2l0aW9uQW5kT3ZlcmZsb3cpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVRdWFkcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJ
bmxpbmVCb3g6OnJlbmRlclNWR1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9v
dElubGluZUJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6
bGF5b3V0Um9vdEJveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpyZW5k
ZXJTVkdUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxp
bmVCb3guaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVTVkdMYXllckF3YXJlRWxlbWVudFNldCk6CisKKzIwMjItMDQtMjUgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0xCU0VdIEZp
eCBvcmlnaW4gb2YgdHJhbnNmb3JtYXRpb25zIGluIFNWRworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IHRoZSBtYWpvcml0eSBvZiBTVkcgdHJhbnNm
b3JtIGlzc3VlcyBpbiBMQlNFLiB3ZWJraXQub3JnL2IvMjM3NzExIGxhaWQgdGhlIGdyb3VuZHdv
cmsgZm9yIFNWRworICAgICAgICB0cmFuc2Zvcm1zIGluIExCU0UsIGhvd2V2ZXIgdGhlcmUgYXJl
IHN0aWxsIGlzc3VlczoKKworICAgICAgICAtIFNWRyB0cmFuc2Zvcm1zIHNwZWNpZmllZCBhbG9u
ZSBvbiBTVkcgZWxlbWVudHMsIHcvbyBhbnkgYWRkaXRpb25hbCBzdHlsZS9wZXJzcGVjdGl2ZSBy
ZWxhdGVkIHByb3BlcnR5CisgICAgICAgICAgc3VjaCBhcyB0cmFuc2Zvcm0tYm94IC8gdHJhbnNm
b3JtLW9yaWdpbiAvIC4uLiBkbyBub3QgdHJpZ2dlciBsYXllciBjcmVhdGlvbiwgZml4IGJ5IGFk
YXB0aW5nIFN0eWxlQWRqdXN0ZXIuCisKKyAgICAgICAgLSBTd2l0Y2hpbmcgb24vb2ZmIHRyYW5z
Zm9ybXMgZm9yIGEgU1ZHIGVsZW1lbnQsIHdhcyBub3QgdHJhY2tpbmcgdXBkYXRlcyB0byBib3Ro
ICdIYXNTVkdUcmFuc2Zvcm0nIGFuZAorICAgICAgICAgICdIYXNUcmFuc2Zvcm1SZWxhdGVkUHJv
cGVydHknIGZsYWdzIGNvcnJlY3RseSwgZml4IHRoYXQgYnkgaW50cm9kdWNpbmcgYW4gJ3VwZGF0
ZUhhc1NWR1RyYW5zZm9ybUZsYWdzJyBoZWxwZXIuCisKKyAgICAgICAgLSBNb2RpZnkgU1ZHQ29u
dGFpbmVyTGF5b3V0IHRvIGF2b2lkIGEgZGVwZW5kZW5jeSBvbiB0aGUgY2hpbGRyZW4gdHJhbnNm
b3JtYXRpb25zIHdoZW4gY29tcHV0aW5nIGNvbnRhaW5lcgorICAgICAgICAgIGJvdW5kYXJpZXMu
IEluIHRoZSBsZWdhY3kgZW5naW5lLCB3ZSBhbHdheXMgaGF2ZSB0byBtYXJrIHRoZSB3aG9sZSBh
bmNlc3RvciBjaGFpbiBhcyAnbmVlZCB0byByZWNvbXB1dGUgYm91bmRhcmllcycKKyAgICAgICAg
ICBhbmQgaW52b2tpbmcgYSByZS1sYXlvdXQsIHRvIHBlcmZvcm0gdGhlIHJlY29tcHV0YXRpb24u
IFRoaXMgY2hhbmdlIGF2b2lkcyB0aGUgaW52YWxpZGF0aW9uIG9mIHRoZSB3aG9sZSBhbmNlc3Rv
cgorICAgICAgICAgIGNoYWluLCB3aGVuIGFuIGVsZW1lbnRzIHRyYW5zZm9ybSBjaGFuZ2VzIGlu
IGEgbm9uLWFjY2VsZXJhdGVkIHdheSAoZS5nLiBTVkdUcmFuc2Zvcm1MaXN0IG1hbmlwdWxhdGlv
biwgU01JTAorICAgICAgICAgIDxhbmltYXRlVHJhbnNmb3JtPiAvIDxhbmltYXRlPiAvIDxzZXQ+
KS4gSW4gQ1NTIHRyYW5zZm9ybWF0aW9ucyBkbyBub3QgYWZmZWN0IGxheW91dCwgb25seSBoaXQt
dGVzdGluZyBhbmQgcGFpbnRpbmcuCisKKyAgICAgICAgICAtPiBTVkcvQ1NTIHRyYW5zZm9ybXMg
YXBwbGllZCBvbiBTVkcgZWxlbWVudHMgaXMgY29uY2VwdHVhbGx5IGVxdWl2YWxlbnQgdG8gQ1NT
IHRyYW5zZm9ybWF0aW9ucyBvbiBDU1MgYm94ZXMgbm93LgorICAgICAgICAgICAgIFRyYW5zZm9y
bWF0aW9uIGNoYW5nZXMgbm8gbG9uZ2VyIGFmZmVjdCB0aGUgJ2ludGVybmFsIGdlb21ldHJ5JyAo
b2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zKCkpLgorICAgICAgICAgICAg
IGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpIC8gbm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkg
YXJlIGNvbXB1dGVkIHVzaW5nIHRoZSAnaW50ZXJuYWwgZ2VvbWV0cnknIGFuZCB1c2VkCisgICAg
ICAgICAgICAgdGhyb3VnaG91dCBsYXlvdXQuCisKKyAgICAgICAgICBUaGlzIGF2b2lkcyBtb3N0
IG9mIHRoZSBSZW5kZXJMYXllciAvIFJlbmRlckxheWVyQmFja2luZyBzcGVjaWZpYyBjaGFuZ2Vz
IHRoYXQgd2VyZSBwcmVzZW50IGluIHRoZSBkb3duc3RyZWFtCisgICAgICAgICAgTEJTRSBpbXBs
ZW1lbnRhdGlvbiwgd2hpbGUgYWxzbyBzb2x2aW5nIGFuIGltcG9ydGFudCBkZXNpZ24gaXNzdWU6
IG5vIGJhY2stc3BsYXNoIGZyb20gY2hpbGRyZW4gdG8gcGFyZW50cy4KKyAgICAgICAgICBMYXJn
ZSwgZGVlcCBuZXN0ZWQgZG9jdW1lbnRzIC0tIGFzIHNlZW4gaW4gdGhlIHdpbGQgLS0gd2lsbCBi
ZW5lZml0IHRoZSBtb3N0LCBhdm9pZGluZyB0aGUgZnJlcXVlbnQgYW5jZXN0b3IKKyAgICAgICAg
ICB3YWxrcyB0byBtYXJrIHRoZSBjb250YWluaW5nIGJsb2NrIC8gcGFyZW50IGhpZXJhY2h5IGZv
ciByZS1sYXlvdXQuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cywgbm8gY2hh
bmdlIGluIGJlaGF2aW91ci4gKEhvd2V2ZXIgdGVzdGFiaWxpdHkgZm9yIExCU0UgaXMgcmVhZHkg
c29vbiEpLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVmZXJlbmNlQm94UmVjdCBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpSZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpjYW5DcmVhdGVTdGFja2lu
Z0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFw
cGx5aW5nVHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZW5kZXJlckxvY2F0aW9uIGNvbnN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJblNW
R0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0Ojp1cGRhdGVIYXNTVkdUcmFuc2Zvcm1GbGFncyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9k
ZWxPYmplY3Q6Om5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2V0Q3VycmVu
dFNWR0xheW91dExvY2F0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om9iamVjdEJvdW5kaW5nQm94V2l0aG91
dFRyYW5zZm9ybWF0aW9ucyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0Q2hpbGRyZW4p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVs
T2JqZWN0Ojp1cGRhdGVGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVs
T2JqZWN0OjpjdXJyZW50U1ZHTGF5b3V0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0Q3VycmVudFNWR0xheW91dFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmZyYW1lUmVjdEVxdWl2YWxlbnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFwcGx5VG9wTGVmdExv
Y2F0aW9uT2Zmc2V0RXF1aXZhbGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdNb2RlbE9iamVjdDo6bGF5b3V0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TGF5b3V0UmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TGF5b3V0TG9jYXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnBhaW50aW5n
TG9jYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmxheW91dExvY2F0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRMb2NhdGlvbk9mZnNldCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bGF5b3V0U2l6
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojp1cGRhdGVGcm9tU3R5bGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmxheW91
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6dXBkYXRlRnJvbVN0eWxlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6aGFuZGxlUm9vdE9y
Q29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0JvdW5kaW5nQm94Q29tcHV0YXRp
b246OmNvbXB1dGVWaXN1YWxPdmVyZmxvd1JlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
U1ZHQ29udGFpbmVyTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NvbnRhaW5lckxh
eW91dDo6cG9zaXRpb25DaGlsZHJlblJlbGF0aXZlVG9Db250YWluZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQ29udGFpbmVyTGF5b3V0Ojp2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5
KToKKyAgICAgICAgKFdlYkNvcmU6OmxheW91dExvY2F0aW9uRnJvbVJlbmRlcmVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldExheW91dExvY2F0aW9uRm9yUmVuZGVyZXIpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0Lmg6CisgICAg
ICAgICogc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
QWRqdXN0ZXI6OmFkanVzdCBjb25zdCk6CisKIDIwMjItMDQtMjYgIFlvdWVubiBGYWJsZXQgIDx5
b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFNlcnZpY2UgV29ya2VyIGxvYWRzIHNob3VsZCBu
b3QgZXhwb3NlIHNvbWUgUmVzb3VyY2VUaW1pbmcgaW5mb3JtYXRpb24KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRleCBiNzZlMTgxZTZhMjAwZDcwOGNmODQ2
NGY1MGQ4MGU1MGIwM2UxYWNhLi42ODBjZTVjNzZjYTZhZDZhMzdjYWE3M2IwYTliNWNhMGEwYmVi
MmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCkBAIC0y
NDE4LDIxICsyNDE4LDQzIEBAIEZsb2F0UmVjdCBSZW5kZXJFbGVtZW50OjpyZWZlcmVuY2VCb3hS
ZWN0KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKICAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+KGVs
ZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiB7IH07CiAKKyAgICBhdXRvIGFsaWduUmVmZXJlbmNl
Qm94ID0gWyZdKEZsb2F0UmVjdCByZWZlcmVuY2VCb3gpIHsKKyAgICAgICAgLy8gVGhlIENTUyBi
b3JkZXJCb3hSZWN0KCkgaXMgZGVmaW5lZCB0byBzdGFydCBhdCBhbiBvcmlnaW4gb2YgKDAsIDAp
LgorICAgICAgICAvLyBBIHBvc3NpYmxlIHNoaWZ0IG9mIGEgQ1NTIGJveCAoZS5nLiBkdWUgdG8g
bm9uLXN0YXRpYyBwb3NpdGlvbiArIHRvcC9sZWZ0IHByb3BlcnRpZXMpCisgICAgICAgIC8vIGRv
ZXMgbm90IGVmZmVjdCB0aGUgYm9yZGVyQm94UmVjdCgpIGxvY2F0aW9uLiBUaGUgbG9jYXRpb24g
aW5mb3JtYXRpb24KKyAgICAgICAgLy8gaXMgcHJvcGFnYXRlZCB1cG9uIHBhaW50IHRpbWUsIGUu
Zy4gdmlhICdwYWludE9mZnNldCcgd2hlbiBjYWxsaW5nIFJlbmRlck9iamVjdDo6cGFpbnQoKSwK
KyAgICAgICAgLy8gb3IgYnkgYWx0ZXJpbmcgdGhlIFJlbmRlckxheWVyIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRvIGluY2x1ZGUgdGhlICdvZmZzZXRGcm9tQW5jZXN0b3InCisgICAgICAgIC8vIHJp
Z2h0IGluIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIHdoZW4gQ1NTIHRyYW5zZm9ybWF0aW9u
cyBhcmUgcHJlc2VudCAoc2VlIFJlbmRlckxheWVyCisgICAgICAgIC8vIHBhaW50TGF5ZXJCeUFw
cGx5aW5nVHJhbnNmb3JtKCkgZm9yIGRldGFpbHMpLgorICAgICAgICAvLworICAgICAgICAvLyBU
byBtaW1pYyB0aGUgZXhwZWN0YXRpb24gZm9yIFNWRywgJ2ZpbGwtYm94JyBtdXN0IGJlaGF2ZSB0
aGUgc2FtZTogaWYgd2UnZCBpbmNsdWRlCisgICAgICAgIC8vIHRoZSAncmVmZXJlbmNlQm94JyBs
b2NhdGlvbiBpbiB0aGUgcmV0dXJuZWQgcmVjdCwgd2UnZCBhcHBseSB0aGUgKHgsIHkpIGxvY2F0
aW9uCisgICAgICAgIC8vIGluZm9ybWF0aW9uIGZvciB0aGUgU1ZHIHJlbmRlcmVyIHR3aWNlLiBX
ZSB3b3VsZCBzaGlmdCB0aGUgJ3RyYW5zZm9ybS1vcmlnaW4nIGJ5ICh4LCB5KQorICAgICAgICAv
LyBhbmQgYXQgdGhlIHNhbWUgdGltZSBhbHRlciB0aGUgQ1RNIGluIFJlbmRlckxheWVyOjpwYWlu
dExheWVyQnlBcHBseWluZ1RyYW5zZm9ybSgpIGJ5CisgICAgICAgIC8vIGluY2x1ZGluZyBhIHRy
YW5zbGF0aW9uIHRvIHRoZSBlbmNsb3NpbmcgdHJhbnNmb3JtZWQgYW5jZXN0b3IgKCdvZmZzZXRG
cm9tQW5jZXN0b3InKS4KKyAgICAgICAgLy8gQXZvaWQgdGhhdCwgYW5kIG1vdmUgYnkgLW5vbWlu
YWxTVkdMYXlvdXRMb2NhdGlvbigpLgorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5F
KQorICAgICAgICBpZiAoaXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSAmJiAhaXNTVkdSb290KCkg
JiYgZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpCisg
ICAgICAgICAgICByZWZlcmVuY2VCb3gubW92ZUJ5KC1kb3duY2FzdDxSZW5kZXJMYXllck1vZGVs
T2JqZWN0PigqdGhpcykubm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkpOworI2VuZGlmCisgICAg
ICAgIHJldHVybiByZWZlcmVuY2VCb3g7CisgICAgfTsKKwogICAgIHN3aXRjaCAoYm94VHlwZSkg
ewogICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm94TWlzc2luZzoKICAgICBjYXNlIENTU0JveFR5cGU6
OkNvbnRlbnRCb3g6CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpQYWRkaW5nQm94OgogICAgIGNhc2Ug
Q1NTQm94VHlwZTo6RmlsbEJveDoKLSAgICAgICAgcmV0dXJuIG9iamVjdEJvdW5kaW5nQm94KCk7
CisgICAgICAgIHJldHVybiBhbGlnblJlZmVyZW5jZUJveChvYmplY3RCb3VuZGluZ0JveCgpKTsK
ICAgICBjYXNlIENTU0JveFR5cGU6OkJvcmRlckJveDoKICAgICBjYXNlIENTU0JveFR5cGU6Ok1h
cmdpbkJveDoKICAgICBjYXNlIENTU0JveFR5cGU6OlN0cm9rZUJveDoKLSAgICAgICAgcmV0dXJu
IHN0cm9rZUJvdW5kaW5nQm94KCk7CisgICAgICAgIHJldHVybiBhbGlnblJlZmVyZW5jZUJveChz
dHJva2VCb3VuZGluZ0JveCgpKTsKICAgICBjYXNlIENTU0JveFR5cGU6OlZpZXdCb3g6CiAgICAg
ICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW06IENhY2hlIHRoZSBpbW11dGFibGUgU1ZHTGVu
Z3RoQ29udGV4dCBwZXIgU1ZHRWxlbWVudCwgdG8gYXZvaWQgdGhlIHJlcGVhdGVkIFJlbmRlclNW
R1Jvb3Qgc2l6ZSBxdWVyaWVzIGluIGRldGVybWluZVZpZXdwb3J0KCkuCiAgICAgICAgIEZsb2F0
U2l6ZSB2aWV3cG9ydFNpemU7CiAgICAgICAgIFNWR0xlbmd0aENvbnRleHQoZG93bmNhc3Q8U1ZH
RWxlbWVudD4oZWxlbWVudCgpKSkuZGV0ZXJtaW5lVmlld3BvcnQodmlld3BvcnRTaXplKTsKLSAg
ICAgICAgcmV0dXJuIHsgeyB9LCB2aWV3cG9ydFNpemUgfTsKKyAgICAgICAgcmV0dXJuIGFsaWdu
UmVmZXJlbmNlQm94KHsgeyB9LCB2aWV3cG9ydFNpemUgfSk7CiAgICAgfQogCiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApp
bmRleCBjMmRlMGI2ZDVmZDZmZDgyMTAyZjcwYmNjYzE5YmE3NjkzZGFlYzY3Li5iYjRkM2E0ZTQ2
MmJjYzk3NTY2ZWZiYTQ5YjhkMTgzOTc4Y2E0YTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKQEAgLTMwMiw5ICszMDIsOSBAQCBzdGF0aWMgU2Nyb2xsaW5nU2Nv
cGUgbmV4dFNjcm9sbGluZ1Njb3BlKCkKIAogREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihSZW5kZXJMYXllcik7CiAKLVJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJM
YXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCi0gICAgOiBtX2lzUmVu
ZGVyVmlld0xheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRlclZpZXcoKSkKLSAg
ICAsIG1fZm9yY2VkU3RhY2tpbmdDb250ZXh0KHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc01l
ZGlhKCkpCitSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYg
cmVuZGVyZXIpCisgICAgOiBtX2lzUmVuZGVyVmlld0xheWVyKHJlbmRlcmVyLmlzUmVuZGVyVmll
dygpKQorICAgICwgbV9mb3JjZWRTdGFja2luZ0NvbnRleHQocmVuZGVyZXIuaXNNZWRpYSgpKQog
ICAgICwgbV9pc05vcm1hbEZsb3dPbmx5KGZhbHNlKQogICAgICwgbV9pc0NTU1N0YWNraW5nQ29u
dGV4dChmYWxzZSkKICAgICAsIG1faXNPcHBvcnR1bmlzdGljU3RhY2tpbmdDb250ZXh0KGZhbHNl
KQpAQCAtMzQzLDcgKzM0Myw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgLCBtX2hhc05vdElz
b2xhdGVkQmxlbmRpbmdEZXNjZW5kYW50c1N0YXR1c0RpcnR5KGZhbHNlKQogI2VuZGlmCiAgICAg
LCBtX3JlcGFpbnRSZWN0c1ZhbGlkKGZhbHNlKQotICAgICwgbV9yZW5kZXJlcihyZW5kZXJlckxh
eWVyTW9kZWxPYmplY3QpCisgICAgLCBtX3JlbmRlcmVyKHJlbmRlcmVyKQogewogICAgIHNldElz
Tm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKICAgICBzZXRJc0NTU1N0
YWNraW5nQ29udGV4dChzaG91bGRCZUNTU1N0YWNraW5nQ29udGV4dCgpKTsKQEAgLTM1Myw5ICsz
NTMsOSBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYg
cmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgIGlmIChpc1JlbmRlclZpZXdMYXllcigpKQog
ICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0g
bmV4dFNjcm9sbGluZ1Njb3BlKCk7CiAKLSAgICBpZiAoIXJlbmRlcmVyKCkuZmlyc3RDaGlsZCgp
KSB7CisgICAgaWYgKCFyZW5kZXJlci5maXJzdENoaWxkKCkpIHsKICAgICAgICAgbV92aXNpYmxl
Q29udGVudFN0YXR1c0RpcnR5ID0gZmFsc2U7Ci0gICAgICAgIG1faGFzVmlzaWJsZUNvbnRlbnQg
PSByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7
CisgICAgICAgIG1faGFzVmlzaWJsZUNvbnRlbnQgPSByZW5kZXJlci5zdHlsZSgpLnZpc2liaWxp
dHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0KIH0KIApAQCAtNTUyLDkgKzU1Miw2
IEBAIHN0YXRpYyBib29sIGNhbkNyZWF0ZVN0YWNraW5nQ29udGV4dChjb25zdCBSZW5kZXJMYXll
ciYgbGF5ZXIpCiB7CiAgICAgYXV0byYgcmVuZGVyZXIgPSBsYXllci5yZW5kZXJlcigpOwogICAg
IHJldHVybiByZW5kZXJlci5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKQotI2lmIEVOQUJM
RShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQotICAgICAgICB8fCByZW5kZXJlci5oYXNTVkdUcmFu
c2Zvcm0oKQotI2VuZGlmCiAgICAgICAgIHx8IHJlbmRlcmVyLmhhc0NsaXBQYXRoKCkKICAgICAg
ICAgfHwgcmVuZGVyZXIuaGFzRmlsdGVyKCkKICAgICAgICAgfHwgcmVuZGVyZXIuaGFzTWFzaygp
CkBAIC0zNTQ1LDE5ICszNTQyLDI5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250
ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpCiAKIHZvaWQg
UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgT3B0aW9u
U2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBjb25zdCBMYXlvdXRTaXplJiB0cmFuc2xh
dGlvbk9mZnNldCkKIHsKKyAgICBhdXRvIHVzZXNTVkdTdWJ0cmVlVHJhbnNmb3JtUnVsZXMgPSBb
XShjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikgeworI2lmIEVOQUJMRShM
QVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgICAgICByZXR1cm4gcmVuZGVyZXIuZG9jdW1lbnQo
KS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkgJiYgcmVuZGVyZXIuaXNT
VkdMYXllckF3YXJlUmVuZGVyZXIoKSAmJiAhcmVuZGVyZXIuaXNTVkdSb290KCk7CisjZWxzZQor
ICAgICAgICBVTlVTRURfUEFSQU0ocmVuZGVyZXIpOworI2VuZGlmCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9OworCiAgICAgLy8gVGhpcyBpbnZvbHZlcyBzdWJ0cmFjdGluZyBvdXQgdGhl
IHBvc2l0aW9uIG9mIHRoZSBsYXllciBpbiBvdXIgY3VycmVudCBjb29yZGluYXRlIHNwYWNlLCBi
dXQgcHJlc2VydmluZwogICAgIC8vIHRoZSBhY2N1bXVsYXRlZCBlcnJvciBmb3Igc3ViLXBpeGVs
IGxheW91dC4KKyAgICAvLyBOb3RlOiBUaGUgcGl4ZWwtc25hcHBpbmcgbG9naWMgaXMgZGlzYWJs
ZWQgZm9yIHRoZSB3aG9sZSBTVkcgcmVuZGVyIHRyZWUsIGV4Y2VwdCB0aGUgb3V0ZXJtb3N0IDxz
dmc+LgogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUGFyZW50ID0g
b2Zmc2V0RnJvbUFuY2VzdG9yKHBhaW50aW5nSW5mby5yb290TGF5ZXIpOwogICAgIG9mZnNldEZy
b21QYXJlbnQgKz0gdHJhbnNsYXRpb25PZmZzZXQ7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dHJhbnNmb3JtKHJlbmRlcmFibGVUcmFuc2Zvcm0ocGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3Ip
KTsKICAgICAvLyBBZGQgdGhlIHN1YnBpeGVsIGFjY3VtdWxhdGlvbiB0byB0aGUgY3VycmVudCBs
YXllcidzIG9mZnNldCBzbyB0aGF0IHdlIGNhbiBhbHdheXMgc25hcCB0aGUgdHJhbnNsYXRlUmln
aHQgdmFsdWUgdG8gd2hlcmUgdGhlIHJlbmRlcmVyKCkgaXMgc3VwcG9zZWQgdG8gYmUgcGFpbnRp
bmcuCiAgICAgTGF5b3V0U2l6ZSBvZmZzZXRGb3JUaGlzTGF5ZXIgPSBvZmZzZXRGcm9tUGFyZW50
ICsgcGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0OwotICAgIEZsb2F0U2l6ZSBkZXZpY2VQaXhl
bFNuYXBwZWRPZmZzZXRGb3JUaGlzTGF5ZXIgPSB0b0Zsb2F0U2l6ZShyb3VuZFBvaW50VG9EZXZp
Y2VQaXhlbHModG9MYXlvdXRQb2ludChvZmZzZXRGb3JUaGlzTGF5ZXIpLCBkZXZpY2VTY2FsZUZh
Y3RvcikpOworICAgIEZsb2F0U2l6ZSBhbGlnbmVkT2Zmc2V0Rm9yVGhpc0xheWVyID0gdXNlc1NW
R1N1YnRyZWVUcmFuc2Zvcm1SdWxlcyhyZW5kZXJlcigpKSA/IG9mZnNldEZvclRoaXNMYXllciA6
IHRvRmxvYXRTaXplKHJvdW5kUG9pbnRUb0RldmljZVBpeGVscyh0b0xheW91dFBvaW50KG9mZnNl
dEZvclRoaXNMYXllciksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgLy8gV2UgaGFuZGxlIGFj
Y3VtdWxhdGVkIHN1YnBpeGVscyB0aHJvdWdoIG5lc3RlZCBsYXllcnMgaGVyZS4gU2luY2UgdGhl
IGNvbnRleHQgZ2V0cyB0cmFuc2xhdGVkIHRvIGRldmljZSBwaXhlbHMsCiAgICAgLy8gYWxsIHdl
IG5lZWQgdG8gZG8gaXMgYWRkIHRoZSBkZWx0YSB0byB0aGUgYWNjdW11bGF0ZWQgcGl4ZWxzIGNv
bWluZyBmcm9tIGFuY2VzdG9yIGxheWVycy4KICAgICAvLyBUcmFuc2xhdGUgdGhlIGdyYXBoaWNz
IGNvbnRleHQgdG8gdGhlIHNuYXBwaW5nIHBvc2l0aW9uIHRvIGF2b2lkIG9mZi1kZXZpY2UtcGl4
ZWwgcG9zaXRpbmcuCi0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KGRldmljZVBpeGVsU25h
cHBlZE9mZnNldEZvclRoaXNMYXllci53aWR0aCgpLCBkZXZpY2VQaXhlbFNuYXBwZWRPZmZzZXRG
b3JUaGlzTGF5ZXIuaGVpZ2h0KCkpOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGVSaWdodChhbGln
bmVkT2Zmc2V0Rm9yVGhpc0xheWVyLndpZHRoKCksIGFsaWduZWRPZmZzZXRGb3JUaGlzTGF5ZXIu
aGVpZ2h0KCkpOwogICAgIC8vIEFwcGx5IHRoZSB0cmFuc2Zvcm0uCiAgICAgYXV0byBvbGRUcmFu
c2Zvcm0gPSBjb250ZXh0LmdldENUTSgpOwogICAgIGF1dG8gYWZmaW5lVHJhbnNmb3JtID0gdHJh
bnNmb3JtLnRvQWZmaW5lVHJhbnNmb3JtKCk7CkBAIC0zNTY3LDcgKzM1NzQsMTAgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdAogICAgICAgICBwYWludGluZ0luZm8uZXZlbnRSZWdpb25Db250ZXh0
LT5wdXNoVHJhbnNmb3JtKGFmZmluZVRyYW5zZm9ybSk7CiAKICAgICAvLyBOb3cgZG8gYSBwYWlu
dCB3aXRoIHRoZSByb290IGxheWVyIHNoaWZ0ZWQgdG8gYmUgdXMuCi0gICAgTGF5b3V0U2l6ZSBh
ZGp1c3RlZFN1YnBpeGVsT2Zmc2V0ID0gb2Zmc2V0Rm9yVGhpc0xheWVyIC0gTGF5b3V0U2l6ZShk
ZXZpY2VQaXhlbFNuYXBwZWRPZmZzZXRGb3JUaGlzTGF5ZXIpOworICAgIExheW91dFNpemUgYWRq
dXN0ZWRTdWJwaXhlbE9mZnNldDsKKyAgICBpZiAoIXVzZXNTVkdTdWJ0cmVlVHJhbnNmb3JtUnVs
ZXMocmVuZGVyZXIoKSkgJiYgIXJlbmRlcmVyKCkuaXNTVkdSb290KCkpCisgICAgICAgIGFkanVz
dGVkU3VicGl4ZWxPZmZzZXQgPSBvZmZzZXRGb3JUaGlzTGF5ZXIgLSBMYXlvdXRTaXplKGFsaWdu
ZWRPZmZzZXRGb3JUaGlzTGF5ZXIpOworCiAgICAgTGF5ZXJQYWludGluZ0luZm8gdHJhbnNmb3Jt
ZWRQYWludGluZ0luZm8ocGFpbnRpbmdJbmZvKTsKICAgICB0cmFuc2Zvcm1lZFBhaW50aW5nSW5m
by5yb290TGF5ZXIgPSB0aGlzOwogICAgIHRyYW5zZm9ybWVkUGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0ID0gTGF5b3V0UmVjdChlbmNsb3NlUmVjdFRvRGV2aWNlUGl4ZWxzKHZhbHVlT3JEZWZh
dWx0KHRyYW5zZm9ybS5pbnZlcnNlKCkpLm1hcFJlY3QocGFpbnRpbmdJbmZvLnBhaW50RGlydHlS
ZWN0KSwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmgKaW5kZXggN2QzY2IxNTdkMGZiZjIwMmVhN2Q4YTY0OTIzZjgwNGRmMzA5MWM3Mi4uODA0
NzYxYThmOTIwMDA0ZThmZGQ0MjdlMThkNGE3OTg0NTEzMWI5ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTk4NCw3ICs5ODQsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkubG9jYXRpb24oKTsK
ICNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKICAgICAgICAgaWYgKGlzPFJlbmRl
clNWR01vZGVsT2JqZWN0PihyZW5kZXJlcigpKSkKLSAgICAgICAgICAgIHJldHVybiBkb3duY2Fz
dDxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIoKSkubGF5b3V0TG9jYXRpb24oKTsKKyAg
ICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIo
KSkuY3VycmVudFNWR0xheW91dExvY2F0aW9uKCk7CiAjZW5kaWYKIAogICAgICAgICByZXR1cm4g
TGF5b3V0UG9pbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllck1vZGVsT2JqZWN0LmNwcAppbmRleCAwMWI5OGFmNDgxZWVmZjI3YjQ2MGFhNDZiYWRhYzBl
YWRmN2QxMmUwLi5iNmRjOTUyZDhhMWFkY2U5MzZkNmM2YjU2MjhkNWZlNDc4OWZjMGJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3Qu
Y3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0Jsb2NrLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVk
ZSAiU1ZHR3JhcGhpY3NFbGVtZW50LmgiCkBAIC0xMjksNiArMTMwLDkgQEAgdm9pZCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3QKICAgICAgICAgICAgIGxheWVyKCktPndpbGxSZW1vdmVDaGlsZFdpdGhCbGVu
ZE1vZGUoKTsKICNlbmRpZgogICAgICAgICBzZXRIYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHko
ZmFsc2UpOyAvLyBBbGwgdHJhbnNmb3JtLXJlbGF0ZWQgcHJvcGVydGllcyBmb3JjZSBsYXllcnMs
IHNvIHdlIGtub3cgd2UgZG9uJ3QgaGF2ZSBvbmUgb3IgdGhlIG9iamVjdCBkb2Vzbid0IHN1cHBv
cnQgdGhlbS4KKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICAgICAgc2V0
SGFzU1ZHVHJhbnNmb3JtKGZhbHNlKTsgLy8gU2FtZSByZWFzb24gYXMgZm9yIHNldEhhc1RyYW5z
Zm9ybVJlbGF0ZWRQcm9wZXJ0eSgpLgorI2VuZGlmCiAgICAgICAgIHNldEhhc1JlZmxlY3Rpb24o
ZmFsc2UpOwogCiAgICAgICAgIC8vIFJlcGFpbnQgdGhlIGFib3V0IHRvIGJlIGRlc3Ryb3llZCBz
ZWxmLXBhaW50aW5nIGxheWVyIHdoZW4gc3R5bGUgY2hhbmdlIGFsc28gdHJpZ2dlcnMgcmVwYWlu
dC4KQEAgLTI0MiwxMCArMjQ2LDcgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp1cGRh
dGVMYXllclRyYW5zZm9ybSgpCiAjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCiBz
dGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmNvbXB1dGVW
aXNpYmxlUmVjdEluU1ZHQ29udGFpbmVyKGNvbnN0IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0OjpWaXNpYmxlUmVj
dENvbnRleHQgY29udGV4dCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFt
IFJlbmRlclNWR0Jsb2NrIGNoYW5nZXMKLSAgICAvLyBBU1NFUlQoaXM8UmVuZGVyU1ZHTW9kZWxP
YmplY3Q+KHRoaXMpIHx8IGlzPFJlbmRlclNWR0Jsb2NrPih0aGlzKSk7Ci0gICAgQVNTRVJUKGlz
PFJlbmRlclNWR01vZGVsT2JqZWN0Pih0aGlzKSk7Ci0KKyAgICBBU1NFUlQoaXM8UmVuZGVyU1ZH
TW9kZWxPYmplY3Q+KHRoaXMpIHx8IGlzPFJlbmRlclNWR0Jsb2NrPih0aGlzKSk7CiAgICAgQVNT
RVJUKCFzdHlsZSgpLmhhc0luRmxvd1Bvc2l0aW9uKCkpOwogICAgIEFTU0VSVCghdmlldygpLmZy
YW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkpOwog
CkBAIC0yNzUsNyArMjc2LDcgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJblNWR0NvbnRhaW4KICAgICAqLwogCiAg
ICAgaWYgKG1vdmVUb09yaWdpbikKLSAgICAgICAgYWRqdXN0ZWRSZWN0Lm1vdmVCeShmbG9vcmVk
TGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7CisgICAg
ICAgIGFkanVzdGVkUmVjdC5tb3ZlQnkobm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkpOwogCiAg
ICAgaWYgKGF1dG8qIHRyYW5zZm9ybSA9IGxheWVyKCktPnRyYW5zZm9ybSgpKQogICAgICAgICBh
ZGp1c3RlZFJlY3QgPSB0cmFuc2Zvcm0tPm1hcFJlY3QoYWRqdXN0ZWRSZWN0KTsKQEAgLTM1Niw2
ICszNTcsMTMgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjphcHBseVNWR1RyYW5zZm9y
bShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLAogCiAgICAgc3R5bGUudW5hcHBseVRy
YW5zZm9ybU9yaWdpbih0cmFuc2Zvcm0sIG9yaWdpblRyYW5zbGF0ZSk7CiB9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdDo6dXBkYXRlSGFzU1ZHVHJhbnNmb3JtRmxhZ3MoY29uc3QgU1ZH
R3JhcGhpY3NFbGVtZW50JiBncmFwaGljc0VsZW1lbnQpCit7CisgICAgYm9vbCBoYXNTVkdUcmFu
c2Zvcm0gPSAhZ3JhcGhpY3NFbGVtZW50LmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKS5pc0lkZW50
aXR5KCk7CisgICAgc2V0SGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KHN0eWxlKCkuaGFzVHJh
bnNmb3JtUmVsYXRlZFByb3BlcnR5KCkgfHwgaGFzU1ZHVHJhbnNmb3JtKTsKKyAgICBzZXRIYXNT
VkdUcmFuc2Zvcm0oaGFzU1ZHVHJhbnNmb3JtKTsKK30KICNlbmRpZgogCiBib29sIHJlbmRlcmVy
TmVlZHNQaXhlbFNuYXBwaW5nKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxP
YmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0
LmgKaW5kZXggMDZhYzc4YzNmZTNjZWM1MDJmZDcwM2Q0N2FhYzM3NTYwNGUwN2EyNC4uYzhiNzBl
ZDg5M2YwZmQ3ZjAxZTA2YjVlZWUxOTgxMjUxMDY4MDBkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCkBAIC03OCw2ICs3OCwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBtYXBMb2NhbFRvU1ZHQ29udGFpbmVyKGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFuc2Zvcm1TdGF0ZSYsIE9wdGlv
blNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29sKiB3YXNGaXhlZCkgY29uc3Q7CiAKICAgICB2
b2lkIGFwcGx5U1ZHVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgU1ZHR3JhcGhpY3NF
bGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94
LCBPcHRpb25TZXQ8UmVuZGVyU3R5bGU6OlRyYW5zZm9ybU9wZXJhdGlvbk9wdGlvbj4pIGNvbnN0
OworICAgIHZvaWQgdXBkYXRlSGFzU1ZHVHJhbnNmb3JtRmxhZ3MoY29uc3QgU1ZHR3JhcGhpY3NF
bGVtZW50Jik7CisKKyAgICBMYXlvdXRQb2ludCBub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKSBj
b25zdCB7IHJldHVybiBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0
VHJhbnNmb3JtYXRpb25zKCkubWluWE1pbllDb3JuZXIoKSk7IH0KKyAgICB2aXJ0dWFsIExheW91
dFBvaW50IGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IHJldHVybiB7IH07IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VycmVudFNWR0xheW91
dExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQog
I2VuZGlmCiAKICAgICB2b2lkIHVwZGF0ZUxheWVyVHJhbnNmb3JtKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDYxOTExYzhhYzY2MmZjM2MyM2E5MzU2
NTZkODgxOGVmY2M2YzlkODIuLjAzYWY0NGIzODhkZTBhZmFkNWFlOTkwOTU2MWRhM2YxYWQ2YjE2
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC01MjEs
NiArNTIxLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmplY3RJc1JlbGF5b3V0Qm91bmRhcnko
Y29uc3QgUmVuZGVyRWxlbWVudCogb2JqZWN0KQogICAgIGlmICghb2JqZWN0LT5oYXNOb25WaXNp
YmxlT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisjaWYgRU5BQkxFKExBWUVS
X0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKG9iamVjdC0+ZG9jdW1lbnQoKS5zZXR0aW5ncygp
LmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkgJiYgb2JqZWN0LT5pc1NWR0xheWVyQXdhcmVS
ZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKwogICAgIGlmIChvYmpl
Y3QtPnN0eWxlKCkud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpIHx8IG9iamVjdC0+c3R5bGUo
KS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpIHx8IG9iamVjdC0+c3R5bGUoKS5oZWlnaHQo
KS5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggMzY4YzNkMTdiM2I2MGI3NTIy
OWQ2ZDNhYzQ3OGMwY2VhYmRkYjNkYy4uZTkwZTkwNDhhZTg1NGUxYzMxN2ZmMjM0YmZhZDI2NGY2
ZWU1OTVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtMzY3
LDYgKzM2NywxOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRp
bmdCb3goKSBjb25zdDsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgp
IGNvbnN0OwogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgLy8gVGhl
IG9iamVjdEJvdW5kaW5nQm94IG9mIGEgU1ZHIGNvbnRhaW5lciBpcyBhZmZlY3RlZCBieSB0aGUg
dHJhbnNmb3JtYXRpb25zIGFwcGxpZWQgb24gaXRzIGNoaWxkcmVuIC0tIHRoZSBjb250YWluZXIK
KyAgICAvLyBib3VuZGluZyBib3ggaXMgYSB1bmlvbiBvZiBhbGwgY2hpbGQgYm91bmRpbmcgYm94
ZXMsIG1hcHBlZCB0aHJvdWdoIHRoZWlyIHRyYW5zZm9ybWF0aW9uIG1hdHJpY2VzLgorICAgIC8v
CisgICAgLy8gVGhpcyBtZXRob2QgaWdub3JlcyBhbGwgdHJhbnNmb3JtYXRpb25zIGFuZCBjb21w
dXRlcyB0aGUgb2JqZWN0Qm91bmRpbmdCb3gsIHdpdGhvdXQgbWFwcGluZyB0aHJvdWdoIHRoZSBj
aGlsZAorICAgIC8vIHRyYW5zZm9ybWF0aW9uIG1hdHJpY2VzLiBUaGUgU1ZHIHJlbmRlciB0cmVl
IGlzIGNvbnN0cnVjdGVkIGluIHN1Y2ggYSB3YXksIHRoYXQgaXQgY2FuIGJlIG1hcHBlZCB0byBD
U1MgZXF1aXZhbGVudHM6CisgICAgLy8gVGhlIFNWRyByZW5kZXIgdHJlZSB1bmRlcm5lYXRoIHRo
ZSBvdXRlcm1vc3QgPHN2Zz4gYmVoYXZlcyBhcyBhIHNldCBvZiBhYnNvbHV0ZWx5IHBvc2l0aW9u
ZWQsIHBvc3NpYmx5IG5lc3RlZCwgYm94ZXMuCisgICAgLy8gVGhlaXIgbGFpZCBvdXQgaW4gc3Vj
aCBhIHdheSB0aGF0IHRyYW5zZm9ybWF0aW9ucyBkbyBOT1QgYWZmZWN0IGxheW91dCwgYXMgaW4g
SFRNTC9DU1Mgd29ybGQsIGJ1dCB0YWtlIGFmZmVjdCBkdXJpbmcKKyAgICAvLyBwYWludGluZywg
aGl0LXRlc3RpbmcgZXRjLiBUaGlzIGFsbG93cyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIHJl
LWxheW91dHMgd2hlbiBhbmltYXRpbmcgdHJhbnNmb3JtYXRpb25zIGluIFNWRworICAgIC8vIChu
b3QgdXNpbmcgQ1NTIEFuaW1hdGlvbnMvVHJhbnNpdGlvbnMgLyBXZWIgQW5pbWF0aW9ucywgYnV0
IGUuZy4gU01JTCwgPGFuaW1hdGVUcmFuc2Zvcm0+LCBKUywgLi4uKS4KKyAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnMoKSBjb25zdCB7
IHJldHVybiBvYmplY3RCb3VuZGluZ0JveCgpOyB9CisjZW5kaWYKKwogICAgIC8vIFJldHVybnMg
dGhlIHNtYWxsZXN0IHJlY3RhbmdsZSBlbmNsb3NpbmcgYWxsIG9mIHRoZSBwYWludGVkIGNvbnRl
bnQKICAgICAvLyByZXNwZWN0aW5nIGNsaXBwaW5nLCBtYXNraW5nLCBmaWx0ZXJzLCBvcGFjaXR5
LCBzdHJva2Utd2lkdGggYW5kIG1hcmtlcnMKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcAppbmRleCAyZTEwNTcyODFjODgwNGIwZTYxYTdj
OGY5ZjA0OTJlNGFjMTcxMDQ1Li42ODk5YTE4ZTQ1M2YzNDM3ZjQ0MjkxNTI0YjgwNjI0ODBhOWY2
OTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Js
b2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2Nr
LmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR0Jsb2NrLmgiCiAKKyNpbmNsdWRlICJSZW5kZXJTVkdCbG9ja0lubGluZXMuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0dyYXBoaWNzRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKQEAgLTQyLDYgKzQzLDEzIEBAIHZv
aWQgUmVuZGVyU1ZHQmxvY2s6OnVwZGF0ZUZyb21TdHlsZSgpCiB7CiAgICAgUmVuZGVyQmxvY2tG
bG93Ojp1cGRhdGVGcm9tU3R5bGUoKTsKIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5H
SU5FKQorICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVu
YWJsZWQoKSkgeworICAgICAgICB1cGRhdGVIYXNTVkdUcmFuc2Zvcm1GbGFncyhncmFwaGljc0Vs
ZW1lbnQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIFJlbmRl
clNWR2xvY2ssIHVzZWQgYnkgUmVuZGVyKFNWR1RleHR8Rm9yZWlnbk9iamVjdCksIGlzIG5vdCBh
bGxvd2VkIHRvIGNhbGwgc2V0SGFzTm9uVmlzaWJsZU92ZXJmbG93KHRydWUpLgogICAgIC8vIFJl
bmRlckJsb2NrIGFzc3VtZXMgYSBsYXllciB0byBiZSBwcmVzZW50IHdoZW4gdGhlIG92ZXJmbG93
IGNsaXAgZnVuY3Rpb25hbGl0eSBpcyByZXF1ZXN0ZWQuIEJvdGgKICAgICAvLyBSZW5kZXIoU1ZH
VGV4dHxGb3JlaWduT2JqZWN0KSByZXR1cm4gJ2ZhbHNlJyBvbiAncmVxdWlyZXNMYXllcicuIEZp
bmUgZm9yIFJlbmRlclNWR1RleHQuCkBAIC01NywxMiArNjUsMjcgQEAgdm9pZCBSZW5kZXJTVkdC
bG9jazo6dXBkYXRlRnJvbVN0eWxlKCkKICAgICBzZXRIYXNOb25WaXNpYmxlT3ZlcmZsb3coZmFs
c2UpOwogfQogCi12b2lkIFJlbmRlclNWR0Jsb2NrOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYsIGNvbnN0IExheW91dFBvaW50JikgY29uc3QKK3ZvaWQgUmVuZGVyU1ZHQmxvY2s6OmFi
c29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0KSBjb25zdAogeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5H
SU5FKQorICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVu
YWJsZWQoKSkgeworICAgICAgICByZWN0cy5hcHBlbmQoc25hcHBlZEludFJlY3QoTGF5b3V0UmVj
dChhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCksIHNpemUoKSkpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlY3RzKTsKKyAgICBVTlVTRURf
UEFSQU0oYWNjdW11bGF0ZWRPZmZzZXQpOworI2VuZGlmCisKICAgICAvLyBUaGlzIGNvZGUgcGF0
aCBzaG91bGQgbmV2ZXIgYmUgdGFrZW4gZm9yIFNWRywgYXMgd2UncmUgYXNzdW1pbmcgdXNlVHJh
bnNmb3Jtcz10cnVlIGV2ZXJ5d2hlcmUsIGFic29sdXRlUXVhZHMgc2hvdWxkIGJlIHVzZWQuCiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgUmVuZGVyU1ZHQmxvY2s6OmFic29s
dXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QK
K3sKKyAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3VuZGluZ0Jv
eCgpLCBVc2VUcmFuc2Zvcm1zLCB3YXNGaXhlZCkpOworfQorCiB2b2lkIFJlbmRlclNWR0Jsb2Nr
Ojp3aWxsQmVEZXN0cm95ZWQoKQogewogICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnREZXN0
cm95ZWQoKnRoaXMpOwpAQCAtNzEsNyArOTQsMTEgQEAgdm9pZCBSZW5kZXJTVkdCbG9jazo6d2ls
bEJlRGVzdHJveWVkKCkKIAogdm9pZCBSZW5kZXJTVkdCbG9jazo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKKyNpZiBF
TkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZl
cmVuY2U6OkxheW91dCAmJiAhZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdp
bmVFbmFibGVkKCkpCisjZWxzZQogICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZTo6TGF5
b3V0KQorI2VuZGlmCiAgICAgICAgIHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwogICAgIFJl
bmRlckJsb2NrRmxvdzo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwogICAgIFNWR1Jl
c291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nZWQoKnRoaXMsIGRpZmYsIHN0eWxlKCkpOwpA
QCAtODEsNiArMTA4LDExIEBAIHZvaWQgUmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyhM
YXlvdXRVbml0IG9sZENsaWVudEFmdGVyRWRnZSwgYm9vbCByZWNvbXB1CiB7CiAgICAgUmVuZGVy
QmxvY2tGbG93Ojpjb21wdXRlT3ZlcmZsb3cob2xkQ2xpZW50QWZ0ZXJFZGdlLCByZWNvbXB1dGVG
bG9hdHMpOwogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGRv
Y3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisjZW5kaWYKKwogICAgIGNvbnN0IGF1dG8qIHRleHRTaGFkb3cgPSBzdHlsZSgp
LnRleHRTaGFkb3coKTsKICAgICBpZiAoIXRleHRTaGFkb3cpCiAgICAgICAgIHJldHVybjsKQEAg
LTkwLDEzICsxMjIsMzAgQEAgdm9pZCBSZW5kZXJTVkdCbG9jazo6Y29tcHV0ZU92ZXJmbG93KExh
eW91dFVuaXQgb2xkQ2xpZW50QWZ0ZXJFZGdlLCBib29sIHJlY29tcHUKICAgICBhZGRWaXN1YWxP
dmVyZmxvdyhzbmFwcGVkSW50UmVjdChib3JkZXJSZWN0KSk7CiB9CiAKLUxheW91dFJlY3QgUmVu
ZGVyU1ZHQmxvY2s6OmNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdAorTGF5b3V0
UmVjdCBSZW5kZXJTVkdCbG9jazo6Y2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQgY29udGV4
dCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAo
ZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAg
ICAgICAgaWYgKHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUgJiYg
IWVuY2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkpCisgICAgICAgICAgICByZXR1
cm4geyB9OworCisgICAgICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRl
eHQoKS5pc1BhaW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkpOworICAgICAgICByZXR1cm4gY29tcHV0
ZVJlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KCksIHJlcGFpbnRDb250YWluZXIsIGNvbnRleHQpOwor
ICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworI2VuZGlmCisKICAgICBy
ZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoKnRo
aXMsIHJlcGFpbnRDb250YWluZXIpOwogfQogCiBzdGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IFJl
bmRlclNWR0Jsb2NrOjpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBMYXlvdXRS
ZWN0JiByZWN0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2li
bGVSZWN0Q29udGV4dCBjb250ZXh0KSBjb25zdAogeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9T
VkdfRU5HSU5FKQorICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0Vu
Z2luZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVWaXNpYmxlUmVjdEluU1ZHQ29u
dGFpbmVyKHJlY3QsIGNvbnRhaW5lciwgY29udGV4dCk7CisjZW5kaWYKKwogICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBhZGp1c3RlZFJlY3QgPSBjb21wdXRlRmxvYXRWaXNpYmxlUmVjdElu
Q29udGFpbmVyKHJlY3QsIGNvbnRhaW5lciwgY29udGV4dCk7CiAgICAgaWYgKGFkanVzdGVkUmVj
dCkKICAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0xheW91dFJlY3QoKmFkanVzdGVkUmVjdCk7CkBA
IC0xMDUsNiArMTU0LDkgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJTVkdCbG9j
azo6Y29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIoY29uc3QgTGEKIAogc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IFJlbmRlclNWR0Jsb2NrOjpjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29u
dGFpbmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogY29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQgY29udGV4dCkgY29uc3QKIHsKKyNpZiBF
TkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBBU1NFUlQoIWRvY3VtZW50KCkuc2V0
dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKTsKKyNlbmRpZgogICAgIHJldHVy
biBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKCp0
aGlzLCByZWN0LCBjb250YWluZXIsIGNvbnRleHQpOwogfQogCkBAIC0xMTUsMTMgKzE2NywyMyBA
QCB2b2lkIFJlbmRlclNWR0Jsb2NrOjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQwogCiBjb25zdCBSZW5kZXJPYmplY3QqIFJlbmRlclNW
R0Jsb2NrOjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29u
c3QKIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1l
bnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpCisgICAgICAgIHJl
dHVybiBSZW5kZXJCb3g6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoYW5jZXN0b3JUb1N0b3BBdCwg
Z2VvbWV0cnlNYXApOworI2VuZGlmCisKICAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6cHVz
aE1hcHBpbmdUb0NvbnRhaW5lcigqdGhpcywgYW5jZXN0b3JUb1N0b3BBdCwgZ2VvbWV0cnlNYXAp
OwogfQogCi1ib29sIFJlbmRlclNWR0Jsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlv
dXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJ
TkUpCitMYXlvdXRTaXplIFJlbmRlclNWR0Jsb2NrOjpvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRl
ckVsZW1lbnQmIGNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmLCBib29sKikgY29uc3QKIHsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJU
X1VOVVNFRChjb250YWluZXIsICZjb250YWluZXIgPT0gdGhpcy0+Y29udGFpbmVyKCkpOworICAg
IEFTU0VSVCghaXNJbkZsb3dQb3NpdGlvbmVkKCkpOworICAgIEFTU0VSVCghaXNBYnNvbHV0ZWx5
UG9zaXRpb25lZCgpKTsKKyAgICBBU1NFUlQoIWlzSW5saW5lKCkpOworICAgIHJldHVybiBMYXlv
dXRTaXplKCk7CiB9CisjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdCbG9jay5oCmluZGV4IDllOTlhZTA2NDYwZjk4OWM4YWExNzY4YmZlNTliNWI5
NzljOTk1YTQuLjhlMWQ3YzgxMmU4NGMyNWY5YTRlYjYwYmVjNTIyZDViYTlhY2NmMDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmgKQEAgLTQ1LDE3
ICs0NSwyMyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNSZW5kZXJTVkdCbG9jaygpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0IG92ZXJy
aWRlOwotCisgICAgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCog
d2FzRml4ZWQpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIGZpbmFsOwogCisjaWYgRU5B
QkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgTGF5b3V0UG9pbnQgY3VycmVudFNWR0xh
eW91dExvY2F0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbG9jYXRpb24oKTsgfQorICAgIHZv
aWQgc2V0Q3VycmVudFNWR0xheW91dExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlv
bikgZmluYWwgeyBzZXRMb2NhdGlvbihsb2NhdGlvbik7IH0KKyNlbmRpZgorCiAgICAgTGF5b3V0
UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCkgY29uc3QgZmluYWw7CiAgICAgc3Rk
OjpvcHRpb25hbDxGbG9hdFJlY3Q+IGNvbXB1dGVGbG9hdFZpc2libGVSZWN0SW5Db250YWluZXIo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVy
LCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8TGF5
b3V0UmVjdD4gY29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIoY29uc3QgTGF5b3V0UmVjdCYs
IGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250
ZXh0KSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUm
LCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0IGZp
bmFsOwogICAgIGNvbnN0IFJlbmRlck9iamVjdCogcHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRy
eU1hcCYpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9u
SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVz
dEFjdGlvbikgZmluYWw7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAg
TGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlv
dXRQb2ludCYsIGJvb2wqIG9mZnNldERlcGVuZHNPblBvaW50ID0gbnVsbHB0cikgY29uc3Qgb3Zl
cnJpZGU7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAppbmRleCAz
NDVkNjM2MTM0ZDVmZGJjZjkyNjdiZmNkYWNjNGNmNjJjYjNjNmM3Li4yMTM4MDkzOTYzYzcyZGRj
NDNkYWQ0MzJjYzkzNGI5MjlkNjFmYTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCkBAIC0xMTksMTkgKzExOSwxNCBAQCB2
b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0Q2hpbGRyZW4oKQogCiAgICAgU1ZHQm91bmRp
bmdCb3hDb21wdXRhdGlvbiBib3VuZGluZ0JveENvbXB1dGF0aW9uKCp0aGlzKTsKICAgICBtX29i
amVjdEJvdW5kaW5nQm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVk
Qm91bmRpbmdCb3goU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6b2JqZWN0Qm91bmRpbmdCb3hE
ZWNvcmF0aW9uLCAmbV9vYmplY3RCb3VuZGluZ0JveFZhbGlkKTsKLSAgICBtX3N0cm9rZUJvdW5k
aW5nQm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRpbmdC
b3goU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6c3Ryb2tlQm91bmRpbmdCb3hEZWNvcmF0aW9u
KTsKLSAgICBzZXRMYXlvdXRSZWN0KGVuY2xvc2luZ0xheW91dFJlY3QobV9vYmplY3RCb3VuZGlu
Z0JveCkpOwogCi0gICAgY29udGFpbmVyTGF5b3V0LnBvc2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRv
Q29udGFpbmVyKCk7Ci19CisgICAgY29uc3RleHByIGF1dG8gb2JqZWN0Qm91bmRpbmdCb3hEZWNv
cmF0aW9uV2l0aG91dFRyYW5zZm9ybWF0aW9ucyA9IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246
Om9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbiB8IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246
OkRlY29yYXRpb25PcHRpb246Oklnbm9yZVRyYW5zZm9ybWF0aW9uczsKKyAgICBtX29iamVjdEJv
dW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9ucyA9IGJvdW5kaW5nQm94Q29tcHV0YXRpb24u
Y29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KG9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbldp
dGhvdXRUcmFuc2Zvcm1hdGlvbnMpOwogCi12b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6c3R5bGVE
aWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZSkKLXsKLSAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xk
U3R5bGUpOworICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBib3VuZGluZ0JveENvbXB1dGF0aW9u
LmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpz
dHJva2VCb3VuZGluZ0JveERlY29yYXRpb24pOworICAgIHNldEN1cnJlbnRTVkdMYXlvdXRSZWN0
KGVuY2xvc2luZ0xheW91dFJlY3QobV9vYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1h
dGlvbnMpKTsKIAotICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyTGF5ZXIgY2hh
bmdlcwotICAgIC8vIGlmIChoYXNMYXllcigpKQotICAgIC8vICAgICBsYXllcigpLT5zZXRJc09w
cG9ydHVuaXN0aWNTdGFja2luZ0NvbnRleHQodHJ1ZSk7CisgICAgY29udGFpbmVyTGF5b3V0LnBv
c2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRvQ29udGFpbmVyKCk7CiB9CiAKIGJvb2wgUmVuZGVyU1ZH
Q29udGFpbmVyOjpzZWxmV2lsbFBhaW50KCkKQEAgLTE2NSw3ICsxNjAsNyBAQCB2b2lkIFJlbmRl
clNWR0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBhZGp1c3Rl
ZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsYXlvdXRMb2NhdGlvbigpOworICAgIGF1dG8g
YWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgY3VycmVudFNWR0xheW91dExvY2F0
aW9uKCk7CiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpNYXNrKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2Vz
CiAgICAgICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OnBhaW50U1ZHTWFzaygqdGhpcywgcGFpbnRJ
bmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKQEAgLTE4NSw3ICsxODAsNyBAQCB2b2lkIFJlbmRl
clNWR0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZgogCiBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBh
dXRvIGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxheW91dExvY2F0aW9u
KCk7CisgICAgYXV0byBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBjdXJy
ZW50U1ZHTGF5b3V0TG9jYXRpb24oKTsKIAogICAgIGF1dG8gdmlzdWFsT3ZlcmZsb3dSZWN0ID0g
dmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpOwogICAgIHZpc3VhbE92ZXJmbG93UmVjdC5t
b3ZlQnkoYWRqdXN0ZWRMb2NhdGlvbik7CkBAIC0xOTMsOCArMTg4LDcgQEAgYm9vbCBSZW5kZXJT
VkdDb250YWluZXI6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBsb2NhbFBvaW50
ID0gbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpOwotICAgIGF1dG8gYm91bmRpbmdCb3hUb3BM
ZWZ0Q29ybmVyID0gZmxvb3JlZExheW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCkubWluWE1p
bllDb3JuZXIoKSk7Ci0gICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24g
PSBib3VuZGluZ0JveFRvcExlZnRDb3JuZXIgLSBhZGp1c3RlZExvY2F0aW9uOworICAgIGF1dG8g
Y29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gbm9taW5hbFNWR0xheW91dExvY2F0
aW9uKCkgLSBhZGp1c3RlZExvY2F0aW9uOwogICAgIGxvY2FsUG9pbnQubW92ZShjb29yZGluYXRl
U3lzdGVtT3JpZ2luVHJhbnNsYXRpb24pOwogCiAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpw
b2ludEluQ2xpcHBpbmdBcmVhKCp0aGlzLCBsb2NhbFBvaW50KSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCmluZGV4IGUzNDgyYWI5ZjAz
YTE1ZjkzMWEyOTk2OWQxZjY1NDA2NjA1ZjU3YmIuLmZkNDI1YTMwYzQ4ZWRkMjIxNzc4NjU1N2Fh
ZTVmYjBiMjYyZTc3YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHQ29udGFpbmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdDb250YWluZXIuaApAQCAtNDAsNiArNDAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c09iamVjdEJvdW5kaW5nQm94VmFsaWQoKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5n
Qm94VmFsaWQ7IH0KIAogICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KKyAgICBGbG9hdFJlY3Qgb2JqZWN0
Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9vYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnM7IH0KICAgICBGbG9hdFJl
Y3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3N0cm9rZUJvdW5k
aW5nQm94OyB9CiAgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVJl
cGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7IH0KIApAQCAtNDksOCArNTAsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgQVNDSUlMaXRlcmFsIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAi
UmVuZGVyU1ZHQ29udGFpbmVyIl9zOyB9CiAgICAgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25z
dCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKLQogICAg
IHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dENoaWxkcmVu
KCk7CiAgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgb3ZlcnJpZGU7
CkBAIC02Miw2ICs2MSw3IEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgbV9vYmplY3RCb3VuZGlu
Z0JveFZhbGlkIHsgZmFsc2UgfTsKICAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGluZ0JveDsK
KyAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnM7
CiAgICAgRmxvYXRSZWN0IG1fc3Ryb2tlQm91bmRpbmdCb3g7CiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaAppbmRleCAyMDAwMTQ3
NzVjZWU4MjVkMWRhZmJhNGQ5NDBlMmI4ZDAyMzI3NTQyLi41NGE1YTE3ZThlMGFmNmNlMTM3MGJl
Zjc5YWJmZjViZTk5YTFjMjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0lubGluZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lLmgKQEAgLTUxLDYgKzUxLDExIEBAIHByaXZhdGU6CiAgICAgRmxvYXRS
ZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgZmluYWw7CiAgICAgRmxvYXRSZWN0IHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgZmluYWw7CiAKKyNpZiBFTkFCTEUoTEFZ
RVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBMYXlvdXRQb2ludCBjdXJyZW50U1ZHTGF5b3V0TG9j
YXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIHNldEN1cnJlbnRT
VkdMYXlvdXRMb2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYpIGZpbmFsIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KKyNlbmRpZgorCiAgICAgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0
KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFZpc2libGVS
ZWN0Q29udGV4dCkgY29uc3QgZmluYWw7CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGNv
bXB1dGVGbG9hdFZpc2libGVSZWN0SW5Db250YWluZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNv
bnN0IGZpbmFsOwogICAgIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmLCBPcHRpb25T
ZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0IGZpbmFsOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0
LmNwcAppbmRleCBjOTY5NWU2YjZhNDNmOWNmNGZmMDM5NWFjMzYxYTQzMjYxZGI4ZTIzLi42ZmZl
ZTk5NzE4MmU5ZWU3MjA1MmE5YWYwNzk2OTIxODkwYzNjMzJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApAQCAtNjEs
MTIgKzYxLDggQEAgdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6dXBkYXRlRnJvbVN0eWxlKCkK
IHsKICAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp1cGRhdGVGcm9tU3R5bGUoKTsKIAotICAg
IGJvb2wgaGFzU1ZHVHJhbnNmb3JtID0gZmFsc2U7CiAgICAgaWYgKGlzPFNWR0dyYXBoaWNzRWxl
bWVudD4oZWxlbWVudCgpKSkKLSAgICAgICAgaGFzU1ZHVHJhbnNmb3JtID0gIWRvd25jYXN0PFNW
R0dyYXBoaWNzRWxlbWVudD4oZWxlbWVudCgpKS5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCkuaXNJ
ZGVudGl0eSgpOwotCi0gICAgc2V0SGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KHN0eWxlKCku
aGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkgfHwgaGFzU1ZHVHJhbnNmb3JtKTsKLSAgICBz
ZXRIYXNTVkdUcmFuc2Zvcm0oaGFzU1ZHVHJhbnNmb3JtKTsKKyAgICAgICAgdXBkYXRlSGFzU1ZH
VHJhbnNmb3JtRmxhZ3MoZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50PihlbGVtZW50KCkpKTsK
IH0KIAogRmxvYXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0Ojpib3JkZXJCb3hSZWN0SW5GcmFn
bWVudEVxdWl2YWxlbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqLCBSZW5kZXJCb3g6OlJlbmRl
ckJveEZyYWdtZW50SW5mb0ZsYWdzKSBjb25zdApAQCAtMTQxLDcgKzEzNyw3IEBAIExheW91dFJl
Y3QgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om91dGxpbmVCb3VuZHNGb3JSZXBhaW50KGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPCiAKIHZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0KSBjb25zdAogewotICAgIHJlY3RzLmFwcGVuZChzbmFwcGVkSW50UmVjdChMYXlvdXRS
ZWN0KGFjY3VtdWxhdGVkT2Zmc2V0ICsgbGF5b3V0TG9jYXRpb24oKSwgbGF5b3V0U2l6ZSgpKSkp
OworICAgIHJlY3RzLmFwcGVuZChzbmFwcGVkSW50UmVjdChMYXlvdXRSZWN0KGFjY3VtdWxhdGVk
T2Zmc2V0ICsgbV9sYXlvdXRSZWN0LmxvY2F0aW9uKCksIG1fbGF5b3V0UmVjdC5zaXplKCkpKSk7
CiB9CiAKIHZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZs
b2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAppbmRleCBiYzExMjQ1
MDQzYzlkMWU1NGViMGNjNGNjMmMxNDhjOWE5YjIzOGMzLi5hZTg5YjhkZWFjOThiMmRlNWJjOTkx
NzZhMjk4YTQzMzI4NDQ3ZGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCkBAIC01OCwyNiArNTgsMjEgQEAgcHVibGljOgog
CiAgICAgaW5saW5lIFNWR0VsZW1lbnQmIGVsZW1lbnQoKSBjb25zdDsKIAorICAgIExheW91dFJl
Y3QgY3VycmVudFNWR0xheW91dFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2xheW91dFJlY3Q7IH0K
KyAgICB2b2lkIHNldEN1cnJlbnRTVkdMYXlvdXRSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheW91
dFJlY3QpIHsgbV9sYXlvdXRSZWN0ID0gbGF5b3V0UmVjdDsgfQorCisgICAgTGF5b3V0UG9pbnQg
Y3VycmVudFNWR0xheW91dExvY2F0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sYXlvdXRS
ZWN0LmxvY2F0aW9uKCk7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbihj
b25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24pIGZpbmFsIHsgbV9sYXlvdXRSZWN0LnNldExvY2F0
aW9uKGxvY2F0aW9uKTsgfQorCiAgICAgLy8gTWltaWMgdGhlIFJlbmRlckJveCBhY2Nlc3NvcnMg
LSBieSBzaGFyaW5nIHRoZSBzYW1lIHRlcm1pbm9sb2d5IHRoZSBwYWludGluZyAvIGhpdCB0ZXN0
aW5nIC8gbGF5b3V0IGxvZ2ljIGlzCiAgICAgLy8gc2ltaWxhciB0byByZWFkIGNvbXBhcmVkIHRv
IG5vbi1TVkcgcmVuZGVyZXJzIHN1Y2ggYXMgUmVuZGVyQm94ICYgZnJpZW5kcy4KICAgICBMYXlv
dXRSZWN0IGJvcmRlckJveFJlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4geyBMYXlvdXRQ
b2ludCgpLCBtX2xheW91dFJlY3Quc2l6ZSgpIH07IH0KICAgICBMYXlvdXRSZWN0IGNvbnRlbnRC
b3hSZWN0RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckJveFJlY3RFcXVpdmFsZW50
KCk7IH0KICAgICBMYXlvdXRSZWN0IGZyYW1lUmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVy
biBtX2xheW91dFJlY3Q7IH0KLQogICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dSZWN0RXF1
aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1
dGVWaXN1YWxPdmVyZmxvd1JlY3QoKnRoaXMpOyB9CiAKLSAgICB2b2lkIGFwcGx5VG9wTGVmdExv
Y2F0aW9uT2Zmc2V0RXF1aXZhbGVudChMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcG9pbnQu
bW92ZUJ5KGxheW91dExvY2F0aW9uKCkpOyB9Ci0KLSAgICBMYXlvdXRSZWN0IGxheW91dFJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX2xheW91dFJlY3Q7IH0KLSAgICB2b2lkIHNldExheW91dFJlY3Qo
Y29uc3QgTGF5b3V0UmVjdCYgbGF5b3V0UmVjdCkgeyBtX2xheW91dFJlY3QgPSBsYXlvdXRSZWN0
OyB9Ci0gICAgdm9pZCBzZXRMYXlvdXRMb2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYgbGF5b3V0
TG9jYXRpb24pIHsgbV9sYXlvdXRSZWN0LnNldExvY2F0aW9uKGxheW91dExvY2F0aW9uKTsgfQot
Ci0gICAgTGF5b3V0UG9pbnQgcGFpbnRpbmdMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRvTGF5
b3V0UG9pbnQobGF5b3V0TG9jYXRpb24oKSAtIGZsb29yZWRMYXlvdXRQb2ludChvYmplY3RCb3Vu
ZGluZ0JveCgpLm1pblhNaW5ZQ29ybmVyKCkpKTsgfQotICAgIExheW91dFBvaW50IGxheW91dExv
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0LmxvY2F0aW9uKCk7IH0KLSAgICBM
YXlvdXRTaXplIGxheW91dExvY2F0aW9uT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gdG9MYXlvdXRT
aXplKG1fbGF5b3V0UmVjdC5sb2NhdGlvbigpKTsgfQotICAgIExheW91dFNpemUgbGF5b3V0U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdC5zaXplKCk7IH0KLQogICAgIC8vIEZvciBS
ZW5kZXJMYXllciBvbmx5CisgICAgdm9pZCBhcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2
YWxlbnQoTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdCB7IHBvaW50Lm1vdmVCeShjdXJyZW50U1ZH
TGF5b3V0TG9jYXRpb24oKSk7IH0KICAgICBGbG9hdFJlY3QgYm9yZGVyQm94UmVjdEluRnJhZ21l
bnRFcXVpdmFsZW50KFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiwgUmVuZGVyQm94OjpSZW5kZXJC
b3hGcmFnbWVudEluZm9GbGFncyA9IFJlbmRlckJveDo6Q2FjaGVSZW5kZXJCb3hGcmFnbWVudElu
Zm8pIGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0KGNvbnN0
IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqID0gbnVsbHB0
ciwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFy
U2l6ZSwgUGFpbnRQaGFzZSA9IFBhaW50UGhhc2U6OkJsb2NrQmFja2dyb3VuZCkgY29uc3Q7CiAg
ICAgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMoY29uc3QgTGF5b3V0
UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQsIE92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgeyByZXR1cm4gb3ZlcmZsb3dDbGlw
UmVjdChsb2NhdGlvbiwgZnJhZ21lbnQsIHJlbGV2YW5jeSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCmluZGV4IGE5YjkzMzIyYjBhOGYyNDZl
MDJjNTYwMzYyNWRmMzM0NmQzZGZiY2MuLjIyYTAwY2Y0NDkzY2I0YmQxOTMyNjBiMTE5N2Q0MzJj
Y2M3ZjczN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
b290LmNwcApAQCAtMTk2LDYgKzE5NiwxMCBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OmxheW91dCgp
CiAKICAgICAgICAgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbiBib3VuZGluZ0JveENvbXB1dGF0
aW9uKCp0aGlzKTsKICAgICAgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IGJvdW5kaW5nQm94Q29t
cHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5kaW5nQm94Q29tcHV0
YXRpb246Om9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbik7CisKKyAgICAgICAgY29uc3RleHBy
IGF1dG8gb2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0aW9uV2l0aG91dFRyYW5zZm9ybWF0aW9ucyA9
IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246Om9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbiB8
IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OkRlY29yYXRpb25PcHRpb246Oklnbm9yZVRyYW5z
Zm9ybWF0aW9uczsKKyAgICAgICAgbV9vYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1h
dGlvbnMgPSBib3VuZGluZ0JveENvbXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0Jv
eChvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb25XaXRob3V0VHJhbnNmb3JtYXRpb25zKTsKKwog
ICAgICAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21w
dXRlRGVjb3JhdGVkQm91bmRpbmdCb3goU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6c3Ryb2tl
Qm91bmRpbmdCb3hEZWNvcmF0aW9uKTsKICAgICB9CiAKQEAgLTM5Nyw2ICs0MDEsNyBAQCB2b2lk
IFJlbmRlclNWR1Jvb3Q6OnVwZGF0ZUZyb21TdHlsZSgpCiAgICAgUmVuZGVyUmVwbGFjZWQ6OnVw
ZGF0ZUZyb21TdHlsZSgpOwogCiAgICAgc2V0SGFzU1ZHVHJhbnNmb3JtKCk7CisgICAgc2V0SGFz
VHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCk7CiAKICAgICBpZiAoc2hvdWxkQXBwbHlWaWV3cG9y
dENsaXAoKSkKICAgICAgICAgc2V0SGFzTm9uVmlzaWJsZU92ZXJmbG93KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCmluZGV4IGU3ZjcxNTUzMjY3ZWIy
Mzk4MDA1OGQxN2VkMDhkYzgyMDE4MDAwOGYuLmMwZDFjY2RkYTM4Njg5ZjcyZGNmYjNlYTE0MDMy
M2ZiNzEyYTUwMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUm9vdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Um9vdC5oCkBAIC02Nyw2ICs2Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZEFwcGx5Vmll
d3BvcnRDbGlwKCkgY29uc3Q7CiAKICAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9CisgICAgRmxvYXRSZWN0
IG9iamVjdEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9ucygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zOyB9CiAgICAg
RmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdHJv
a2VCb3VuZGluZ0JveDsgfQogICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNv
bXB1dGVSZXBhaW50Qm91bmRpbmdCb3goKnRoaXMpOyB9CiAKQEAgLTEyMyw2ICsxMjQsNyBAQCBw
cml2YXRlOgogCiAgICAgSW50U2l6ZSBtX2NvbnRhaW5lclNpemU7CiAgICAgRmxvYXRSZWN0IG1f
b2JqZWN0Qm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3hXaXRo
b3V0VHJhbnNmb3JtYXRpb25zOwogICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94Owog
ICAgIEFmZmluZVRyYW5zZm9ybSBtX3ZpZXdCb3hUcmFuc2Zvcm07CiAgICAgQWZmaW5lVHJhbnNm
b3JtIG1fc3VwcGxlbWVudGFsTG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKaW5kZXggY2FhZjZiMzViMGUw
NTIwMDNkZjkyMDFlZWMwMDA0ZDU0MzUxZjQwNi4uOTliMjg4NGQ3MjQ1OTlmMzY5OTRhYTMwNzBm
ODc0M2JhZjI5ZTgyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdTaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFJlbmRlclNWR1NoYXBlOjps
YXlvdXQoKQogICAgICAgICB1cGRhdGVTaGFwZUZyb21FbGVtZW50KCk7CiAKICAgICAgICAgbV9u
ZWVkc1NoYXBlVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHNldExheW91dFJlY3QoZW5jbG9zaW5n
TGF5b3V0UmVjdChtX2ZpbGxCb3VuZGluZ0JveCkpOworICAgICAgICBzZXRDdXJyZW50U1ZHTGF5
b3V0UmVjdChlbmNsb3NpbmdMYXlvdXRSZWN0KG1fZmlsbEJvdW5kaW5nQm94KSk7CiAgICAgfQog
CiAgICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKTsKQEAgLTI4OCw3ICsyODgsNyBAQCB2b2lkIFJl
bmRlclNWR1NoYXBlOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBhZGp1
c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsYXlvdXRMb2NhdGlvbigpOworICAgIGF1
dG8gYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgY3VycmVudFNWR0xheW91dExv
Y2F0aW9uKCk7CiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpNYXNrKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFu
Z2VzCiAgICAgICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OnBhaW50U1ZHTWFzaygqdGhpcywgcGFp
bnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKQEAgLTMwOCw3ICszMDgsNyBAQCB2b2lkIFJl
bmRlclNWR1NoYXBlOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0KQogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKHBhaW50SW5mby5jb250ZXh0KCkpOwogCi0gICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3Jp
Z2luVHJhbnNsYXRpb24gPSBhZGp1c3RlZFBhaW50T2Zmc2V0IC0gZmxvb3JlZExheW91dFBvaW50
KG9iamVjdEJvdW5kaW5nQm94KCkubG9jYXRpb24oKSk7CisgICAgYXV0byBjb29yZGluYXRlU3lz
dGVtT3JpZ2luVHJhbnNsYXRpb24gPSBhZGp1c3RlZFBhaW50T2Zmc2V0IC0gbm9taW5hbFNWR0xh
eW91dExvY2F0aW9uKCk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS50cmFuc2xhdGUoY29vcmRp
bmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uLndpZHRoKCksIGNvb3JkaW5hdGVTeXN0ZW1Pcmln
aW5UcmFuc2xhdGlvbi5oZWlnaHQoKSk7CiAKICAgICBpZiAoc3R5bGUoKS5zdmdTdHlsZSgpLnNo
YXBlUmVuZGVyaW5nKCkgPT0gU2hhcGVSZW5kZXJpbmc6OkNyaXNwRWRnZXMpCkBAIC0zNDUsMTEg
KzM0NSwxMCBAQCBib29sIFJlbmRlclNWR1NoYXBlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcgogICAgIGlmIChoaXRUZXN0QWN0aW9u
ICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRv
IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxheW91dExvY2F0aW9uKCk7
CisgICAgYXV0byBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBjdXJyZW50
U1ZHTGF5b3V0TG9jYXRpb24oKTsKIAogICAgIGF1dG8gbG9jYWxQb2ludCA9IGxvY2F0aW9uSW5D
b250YWluZXIucG9pbnQoKTsKLSAgICBhdXRvIGJvdW5kaW5nQm94VG9wTGVmdENvcm5lciA9IGZs
b29yZWRMYXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveCgpLm1pblhNaW5ZQ29ybmVyKCkpOwot
ICAgIGF1dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gYm91bmRpbmdCb3hU
b3BMZWZ0Q29ybmVyIC0gYWRqdXN0ZWRMb2NhdGlvbjsKKyAgICBhdXRvIGNvb3JkaW5hdGVTeXN0
ZW1PcmlnaW5UcmFuc2xhdGlvbiA9IG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpIC0gYWRqdXN0
ZWRMb2NhdGlvbjsKICAgICBsb2NhbFBvaW50Lm1vdmUoY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRy
YW5zbGF0aW9uKTsKIAogICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5n
QXJlYSgqdGhpcywgbG9jYWxQb2ludCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUZXh0LmNwcAppbmRleCA1ODhhZjFhMWY3NzcyOTUzMTI5N2VjZDkwYmM2MGI2
NTMyN2YxZWFiLi5kODlkNzQ4YjMzNjgxYmM1OTU4NTQ4NmU3MDcwNGJjMjUwOThhNWRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKQEAgLTQw
LDYgKzQwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdJbmxpbmVUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNs
dWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgi
CiAjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hl
LmgiCkBAIC01NywxMCArNTgsNiBAQCBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUmVuZGVy
U1ZHVGV4dCk7CiAKIFJlbmRlclNWR1RleHQ6OlJlbmRlclNWR1RleHQoU1ZHVGV4dEVsZW1lbnQm
IGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCiAgICAgOiBSZW5kZXJTVkdCbG9jayhlbGVt
ZW50LCBXVEZNb3ZlKHN0eWxlKSkKLSAgICAsIG1fbmVlZHNSZW9yZGVyaW5nKGZhbHNlKQotICAg
ICwgbV9uZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlKGZhbHNlKQotICAgICwgbV9uZWVkc1Ry
YW5zZm9ybVVwZGF0ZSh0cnVlKQotICAgICwgbV9uZWVkc1RleHRNZXRyaWNzVXBkYXRlKGZhbHNl
KQogewogfQogCkBAIC0zMTEsMTUgKzMwOCwyOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRl
Rm9udEluQWxsRGVzY2VuZGFudHMoUmVuZGVyT2JqZWN0KiBzdGFydCwgU1ZHVGV4dExheW91dAog
CiB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiB7CisgICAgYXV0byBpc0xheWVyQmFzZWRT
VkdFbmdpbmVFbmFibGVkID0gWyZdKCkgeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5H
SU5FKQorICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdF
bmdpbmVFbmFibGVkKCk7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAg
ICB9OworCiAgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50
OwogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWlu
dGVyKCp0aGlzLCBTVkdSZW5kZXJTdXBwb3J0OjpjaGVja0ZvclNWR1JlcGFpbnREdXJpbmdMYXlv
dXQoKnRoaXMpKTsKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBpc0xheWVy
QmFzZWRTVkdFbmdpbmVFbmFibGVkKCkgPyBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSA6
IFNWR1JlbmRlclN1cHBvcnQ6OmNoZWNrRm9yU1ZHUmVwYWludER1cmluZ0xheW91dCgqdGhpcykp
OworCisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdMZW5ndGhDb250ZXh0IGNoYW5n
ZXMKKyAgICAvLyB0ZXh0RWxlbWVudCgpLnVwZGF0ZUxlbmd0aENvbnRleHQoKTsKIAogICAgIGJv
b2wgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOwotICAgIGlmIChtX25l
ZWRzVHJhbnNmb3JtVXBkYXRlKSB7Ci0gICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSB0ZXh0RWxl
bWVudCgpLmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKLSAgICAgICAgbV9uZWVkc1RyYW5zZm9y
bVVwZGF0ZSA9IGZhbHNlOwotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRz
ID0gdHJ1ZTsKKyAgICBpZiAoIWlzTGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAg
ICAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgeworICAgICAgICAgICAgbV9sb2NhbFRy
YW5zZm9ybSA9IHRleHRFbGVtZW50KCkuYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOworICAgICAg
ICAgICAgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgdXBkYXRl
Q2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICBpZiAoIWV2ZXJIYWRMYXlvdXQoKSkgewpAQCAtMzQ3LDggKzM1NywxNSBAQCB2b2lkIFJlbmRl
clNWR1RleHQ6OmxheW91dCgpCiAgICAgICAgIG1fbmVlZHNQb3NpdGlvbmluZ1ZhbHVlc1VwZGF0
ZSA9IGZhbHNlOwogICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1
ZTsKICAgICB9IGVsc2UgewotICAgICAgICBMZWdhY3lSZW5kZXJTVkdSb290KiByb290T2JqID0g
U1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KCp0aGlzKTsKLSAgICAgICAgaWYg
KG1fbmVlZHNUZXh0TWV0cmljc1VwZGF0ZSB8fCAocm9vdE9iaiAmJiByb290T2JqLT5pc0xheW91
dFNpemVDaGFuZ2VkKCkpKSB7CisgICAgICAgIGJvb2wgaXNMYXlvdXRTaXplQ2hhbmdlZCA9IGZh
bHNlOworICAgICAgICBpZiAoYXV0byogbGVnYWN5Um9vdE9iamVjdCA9IGxpbmVhZ2VPZlR5cGU8
TGVnYWN5UmVuZGVyU1ZHUm9vdD4oKnRoaXMpLmZpcnN0KCkpCisgICAgICAgICAgICBpc0xheW91
dFNpemVDaGFuZ2VkID0gbGVnYWN5Um9vdE9iamVjdC0+aXNMYXlvdXRTaXplQ2hhbmdlZCgpOwor
I2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgICAgICBlbHNlIGlmIChhdXRv
KiByb290T2JqZWN0ID0gbGluZWFnZU9mVHlwZTxSZW5kZXJTVkdSb290PigqdGhpcykuZmlyc3Qo
KSkKKyAgICAgICAgICAgIGlzTGF5b3V0U2l6ZUNoYW5nZWQgPSByb290T2JqZWN0LT5pc0xheW91
dFNpemVDaGFuZ2VkKCk7CisjZW5kaWYKKworICAgICAgICBpZiAobV9uZWVkc1RleHRNZXRyaWNz
VXBkYXRlIHx8IGlzTGF5b3V0U2l6ZUNoYW5nZWQpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBy
b290IGxheW91dCBzaXplIGNoYW5nZWQgKGVnLiB3aW5kb3cgc2l6ZSBjaGFuZ2VzKSBvciB0aGUg
dHJhbnNmb3JtIHRvIHRoZSByb290CiAgICAgICAgICAgICAvLyBjb250ZXh0IGhhcyBjaGFuZ2Vk
IHRoZW4gcmVjb21wdXRlIHRoZSBvbi1zY3JlZW4gZm9udCBzaXplLgogICAgICAgICAgICAgdXBk
YXRlRm9udEluQWxsRGVzY2VuZGFudHModGhpcywgJm1fbGF5b3V0QXR0cmlidXRlc0J1aWxkZXIp
OwpAQCAtMzY1LDMzICszODIsNDAgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQogICAg
IC8vIFJlZHVjZWQgdmVyc2lvbiBvZiBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soKSwgd2hpY2gg
b25seSB0YWtlcyBjYXJlIG9mIFNWRyB0ZXh0LgogICAgIC8vIEFsbCBpZiBicmFuY2hlcyB0aGF0
IGNvdWxkIGNhdXNlIGVhcmx5IGV4aXQgaW4gUmVuZGVyQmxvY2tzIGxheW91dEJsb2NrKCkgbWV0
aG9kIGFyZSB0dXJuZWQgaW50byBhc3NlcnRpb25zLgogICAgIEFTU0VSVCghaXNJbmxpbmUoKSk7
Ci0gICAgQVNTRVJUKCFzaW1wbGlmaWVkTGF5b3V0KCkpOwogICAgIEFTU0VSVCghc2Nyb2xsc092
ZXJmbG93KCkpOwogICAgIEFTU0VSVCghaGFzQ29udHJvbENsaXAoKSk7CiAgICAgQVNTRVJUKCFt
dWx0aUNvbHVtbkZsb3coKSk7CiAgICAgQVNTRVJUKCFwb3NpdGlvbmVkT2JqZWN0cygpKTsKLSAg
ICBBU1NFUlQoIW1fb3ZlcmZsb3cpOwogICAgIEFTU0VSVCghaXNBbm9ueW1vdXNCbG9jaygpKTsK
KyAgICBpZiAoIWlzTGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAgICBBU1NF
UlQoIXNpbXBsaWZpZWRMYXlvdXQoKSk7CisgICAgICAgIEFTU0VSVCghbV9vdmVyZmxvdyk7Cisg
ICAgfQogCiAgICAgaWYgKCFmaXJzdENoaWxkKCkpCiAgICAgICAgIHNldENoaWxkcmVuSW5saW5l
KHRydWUpOwogCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZmluZCBhIHdheSB0byBvbmx5IGxh
eW91dCB0aGUgY2hpbGQgYm94ZXMsIGlmIG5lZWRlZC4KICAgICBGbG9hdFJlY3Qgb2xkQm91bmRh
cmllcyA9IG9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgYm9vbCBsYXlvdXRDaGFuZ2VkID0gZXZl
ckhhZExheW91dCgpICYmIHNlbGZOZWVkc0xheW91dCgpOwogICAgIEFTU0VSVChjaGlsZHJlbklu
bGluZSgpKTsKICAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsVG9wOwogICAgIExheW91dFVu
aXQgcmVwYWludExvZ2ljYWxCb3R0b207CiAgICAgcmVidWlsZEZsb2F0aW5nT2JqZWN0U2V0RnJv
bUludHJ1ZGluZ0Zsb2F0cygpOwogICAgIGxheW91dElubGluZUNoaWxkcmVuKHRydWUsIHJlcGFp
bnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7CiAKKyAgICAvLyB1cGRhdGVQb3Np
dGlvbkFuZE92ZXJmbG93KCkgaXMgY2FsbGVkIGJ5IFNWR1Jvb3RJbmxpbmVCb3gsIGFmdGVyIGZv
cmNlTGF5b3V0SW5saW5lQ2hpbGRyZW4oKSByYW4sIGJlZm9yZSB0aGlzIHBvaW50IGlzIHJlYWNo
ZWQuCiAgICAgaWYgKG1fbmVlZHNSZW9yZGVyaW5nKQogICAgICAgICBtX25lZWRzUmVvcmRlcmlu
ZyA9IGZhbHNlOwogCi0gICAgaWYgKCF1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQor
ICAgIGlmIChpc0xheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgdXBkYXRl
TGF5ZXJUcmFuc2Zvcm0oKTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50
cyA9IGZhbHNlOyAvLyBObyBsb25nZXIgbmVlZGVkIGZvciBMQlNFLgorICAgIH0gZWxzZSBpZiAo
IXVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCiAgICAgICAgIHVwZGF0ZUNhY2hlZEJv
dW5kYXJpZXNJblBhcmVudHMgPSBvbGRCb3VuZGFyaWVzICE9IG9iamVjdEJvdW5kaW5nQm94KCk7
CiAKICAgICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3Vy
IGxheW91dCBjaGFuZ2VkLgotICAgIGlmIChldmVySGFkTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5
b3V0KCkpCisgICAgaWYgKGxheW91dENoYW5nZWQpCiAgICAgICAgIFNWR1Jlc291cmNlc0NhY2hl
OjpjbGllbnRMYXlvdXRDaGFuZ2VkKCp0aGlzKTsKIAogICAgIC8vIElmIG91ciBib3VuZHMgY2hh
bmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgpAQCAtNDA0LDYgKzQyOCw5IEBAIHZvaWQgUmVuZGVy
U1ZHVGV4dDo6bGF5b3V0KCkKIAogYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlv
bikKIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBBU1NFUlQoIWRv
Y3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKTsKKyNlbmRp
ZgogICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0UnVs
ZXM6OlNWR19URVhUX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxlKCkuZWZmZWN0aXZlUG9pbnRl
ckV2ZW50cygpKTsKICAgICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgpLnZpc2liaWxpdHkoKSA9
PSBWaXNpYmlsaXR5OjpWaXNpYmxlKTsKICAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5y
ZXF1aXJlVmlzaWJsZSkgewpAQCAtNDEyLDcgKzQzOSw3IEBAIGJvb2wgUmVuZGVyU1ZHVGV4dDo6
bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsCiAgICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSB2YWx1ZU9yRGVmYXVsdChs
b2NhbFRvUGFyZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpKS5tYXBQb2ludChwb2ludEluUGFyZW50
KTsKIAogICAgICAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdB
cmVhKCp0aGlzLCBsb2NhbFBvaW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAg
ICAgIAorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgU1ZHSGl0
VGVzdEN5Y2xlRGV0ZWN0aW9uU2NvcGUgaGl0VGVzdFNjb3BlKCp0aGlzKTsKIApAQCAtNDI0LDYg
KzQ1MSwzMyBAQCBib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorYm9vbCBSZW5kZXJTVkdUZXh0
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0
QWN0aW9uKQoreworICAgIEFTU0VSVChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNW
R0VuZ2luZUVuYWJsZWQoKSk7CisgICAgYXV0byBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0
ZWRPZmZzZXQgKyBsb2NhdGlvbigpOworCisgICAgUG9pbnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1
bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1RFWFRfSElUVEVTVElORywgcmVxdWVzdCwg
c3R5bGUoKS5wb2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxlKCku
dmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUpOworICAgIGlmIChpc1Zpc2libGUg
fHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7CisgICAgICAgIGlmICgoaGl0UnVsZXMuY2Fu
SGl0U3Ryb2tlICYmIChzdHlsZSgpLnN2Z1N0eWxlKCkuaGFzU3Ryb2tlKCkgfHwgIWhpdFJ1bGVz
LnJlcXVpcmVTdHJva2UpKQorICAgICAgICB8fCAoaGl0UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3R5
bGUoKS5zdmdTdHlsZSgpLmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWlyZUZpbGwpKSkgewor
ICAgICAgICAgICAgYXV0byBsb2NhbFBvaW50ID0gbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgp
OworICAgICAgICAgICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24gPSBu
b21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKSAtIGFkanVzdGVkTG9jYXRpb247CisgICAgICAgICAg
ICBsb2NhbFBvaW50Lm1vdmUoY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uKTsKKwor
ICAgICAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKCp0
aGlzLCBsb2NhbFBvaW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgICAgIFNWR0hpdFRlc3RDeWNsZURldGVjdGlvblNjb3BlIGhpdFRlc3RTY29wZSgqdGhpcyk7
CisgICAgICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rp
b24pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisK
IFZpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExh
eW91dFBvaW50JiBwb2ludEluQ29udGVudHMsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiBmcmFnbWVudCkKIHsKICAgICBMZWdhY3lSb290SW5saW5lQm94KiByb290Qm94ID0gZmlyc3RS
b290Qm94KCk7CkBAIC00NDAsMTggKzQ5NCw1NSBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZH
VGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRlbgog
ICAgIHJldHVybiBjbG9zZXN0Qm94LT5yZW5kZXJlcigpLnBvc2l0aW9uRm9yUG9pbnQoeyBwb2lu
dEluQ29udGVudHMueCgpLCBMYXlvdXRVbml0KGNsb3Nlc3RCb3gtPnkoKSkgfSwgZnJhZ21lbnQp
OwogfQogCi12b2lkIFJlbmRlclNWR1RleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVh
ZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKLXsKLSAgICBxdWFkcy5hcHBlbmQobG9j
YWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3VuZGluZ0JveCgpLCBVc2VUcmFuc2Zvcm1zLCB3YXNG
aXhlZCkpOwotfQotCi12b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYpCit2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAg
aWYgKHBhaW50SW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OkZvcmVncm91bmQg
JiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGVjdGlvbikKLSAgICAgICAgIHJl
dHVybjsKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OkNsaXBwaW5nTWFz
ayAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6TWFzayAmJiBwYWludEluZm8ucGhh
c2UgIT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQ
aGFzZTo6T3V0bGluZSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6U2VsZk91dGxp
bmUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0
aGluUm9vdCgqdGhpcykpCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShMQVlFUl9CQVNF
RF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNW
R0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAgICBpZiAoc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0g
VmlzaWJpbGl0eTo6SGlkZGVuIHx8IHN0eWxlKCkuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpO
b25lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBz
dHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgICAgIC8vIGlmICghU1ZHUmVuZGVy
U3VwcG9ydDo6c2hvdWxkUGFpbnRIaWRkZW5SZW5kZXJlcigqdGhpcykpCisgICAgICAgIC8vICAg
ICByZXR1cm47CisKKyAgICAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpD
bGlwcGluZ01hc2spIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZH
UmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgICAgICAgICAvLyBTVkdSZW5kZXJTdXBwb3J0Ojpw
YWludFNWR0NsaXBwaW5nTWFzaygqdGhpcywgcGFpbnRJbmZvKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50
T2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAgICAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlOjpNYXNrKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNW
R1JlbmRlclN1cHBvcnQgY2hhbmdlcworICAgICAgICAgICAgLy8gU1ZHUmVuZGVyU3VwcG9ydDo6
cGFpbnRTVkdNYXNrKCp0aGlzLCBwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlOjpPdXRsaW5lIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
OjpTZWxmT3V0bGluZSkgeworICAgICAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50KHBhaW50SW5m
bywgcGFpbnRPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBhaW50SW5mby5jb250ZXh0
KCkpOworCisgICAgICAgIGF1dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0g
YWRqdXN0ZWRQYWludE9mZnNldCAtIG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpOworICAgICAg
ICBwYWludEluZm8uY29udGV4dCgpLnRyYW5zbGF0ZShjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJh
bnNsYXRpb24ud2lkdGgoKSwgY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uLmhlaWdo
dCgpKTsKKworICAgICAgICBSZW5kZXJCbG9jazo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNl
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWlu
dE9mZnNldCk7CisjZW5kaWYKIAogICAgIFBhaW50SW5mbyBibG9ja0luZm8ocGFpbnRJbmZvKTsK
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoYmxvY2tJbmZvLmNvbnRl
eHQoKSk7CkBAIC00NzksNiArNTcwLDExIEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpzdHJv
a2VCb3VuZGluZ0JveCgpIGNvbnN0CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpyZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0CiB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VE
X1NWR19FTkdJTkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZH
RW5naW5lRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bjo6Y29tcHV0ZVJlcGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7CisjZW5kaWYKKwogICAgIEZsb2F0
UmVjdCByZXBhaW50UmVjdCA9IHN0cm9rZUJvdW5kaW5nQm94KCk7CiAgICAgU1ZHUmVuZGVyU3Vw
cG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKCp0aGlzLCByZXBhaW50UmVj
dCk7CiAKQEAgLTQ4OCw0ICs1ODQsMzIgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1RleHQ6OnJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QKICAgICByZXR1cm4gcmVwYWludFJlY3Q7
CiB9CiAKK3ZvaWQgUmVuZGVyU1ZHVGV4dDo6dXBkYXRlUG9zaXRpb25BbmRPdmVyZmxvdyhjb25z
dCBGbG9hdFJlY3QmIGJvdW5kYXJpZXMpCit7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19F
TkdJTkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5l
RW5hYmxlZCgpKSB7CisgICAgICAgIGNsZWFyT3ZlcmZsb3coKTsKKworICAgICAgICBtX29iamVj
dEJvdW5kaW5nQm94ID0gYm91bmRhcmllczsKKworICAgICAgICBhdXRvIGJvdW5kaW5nUmVjdCA9
IGVuY2xvc2luZ0xheW91dFJlY3QobV9vYmplY3RCb3VuZGluZ0JveCk7CisgICAgICAgIHNldExv
Y2F0aW9uKGJvdW5kaW5nUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgc2V0U2l6ZShib3VuZGlu
Z1JlY3Quc2l6ZSgpKTsKKworICAgICAgICBhdXRvIG92ZXJmbG93UmVjdCA9IHZpc3VhbE92ZXJm
bG93UmVjdEVxdWl2YWxlbnQoKTsKKyAgICAgICAgaWYgKGNvbnN0IGF1dG8qIHRleHRTaGFkb3cg
PSBzdHlsZSgpLnRleHRTaGFkb3coKSkKKyAgICAgICAgICAgIHRleHRTaGFkb3ctPmFkanVzdFJl
Y3RGb3JTaGFkb3cob3ZlcmZsb3dSZWN0KTsKKworICAgICAgICBhZGRWaXN1YWxPdmVyZmxvdyhv
dmVyZmxvd1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBhdXRv
IGJvdW5kaW5nUmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QoYm91bmRhcmllcyk7CisgICAgc2V0
TG9jYXRpb24oYm91bmRpbmdSZWN0LmxvY2F0aW9uKCkpOworICAgIHNldFNpemUoYm91bmRpbmdS
ZWN0LnNpemUoKSk7CisgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IGJvdW5kaW5nUmVjdDsKKyAg
ICBBU1NFUlQobV9vYmplY3RCb3VuZGluZ0JveCA9PSBmcmFtZVJlY3QoKSk7Cit9CisKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKaW5kZXggNDQxMjY5
ODg1NzkxMzAyNDI4MmZmZjBhOGU2NjUxYjZiN2YxY2RjNi4uM2FiMzY2M2U2ZDJjZTI5ZTg1YzFh
NTVjMjk2ZjRkNGUzNWI1MmQyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmgKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0Jsb2NrLmgiCisjaW5jbHVkZSAiU1ZHQm91bmRp
bmdCb3hDb21wdXRhdGlvbi5oIgogI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVp
bGRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Miw5ICs0MywxMCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0NoaWxkQWxsb3dlZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5k
ZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXROZWVkc1Bvc2l0aW9uaW5n
VmFsdWVzVXBkYXRlKCkgeyBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUgPSB0cnVlOyB9
Ci0gICAgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIG92ZXJyaWRlIHsgbV9uZWVkc1Ry
YW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KICAgICB2b2lkIHNldE5lZWRzVGV4dE1ldHJpY3NVcGRh
dGUoKSB7IG1fbmVlZHNUZXh0TWV0cmljc1VwZGF0ZSA9IHRydWU7IH0KLSAgICBGbG9hdFJlY3Qg
cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8v
IEZJWE1FOiBbTEJTRV0gT25seSBuZWVkZWQgZm9yIGxlZ2FjeSBTVkcgZW5naW5lLgorICAgIHZv
aWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSBvdmVycmlkZSB7IG1fbmVlZHNUcmFuc2Zvcm1V
cGRhdGUgPSB0cnVlOyB9CiAKICAgICBzdGF0aWMgUmVuZGVyU1ZHVGV4dCogbG9jYXRlUmVuZGVy
U1ZHVGV4dEFuY2VzdG9yKFJlbmRlck9iamVjdCYpOwogICAgIHN0YXRpYyBjb25zdCBSZW5kZXJT
VkdUZXh0KiBsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoY29uc3QgUmVuZGVyT2JqZWN0Jik7
CkBAIC01OCw4ICs2MCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdWJ0cmVlU3R5bGVEaWRDaGFu
Z2UoUmVuZGVyU1ZHSW5saW5lVGV4dCopOwogICAgIHZvaWQgc3VidHJlZVRleHREaWRDaGFuZ2Uo
UmVuZGVyU1ZHSW5saW5lVGV4dCopOwogCi0gICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZnJhbWVSZWN0KCk7IH0KLSAgICBGbG9hdFJlY3Qg
c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3Qgb2JqZWN0
Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9
CisgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgZmluYWw7CisgICAgRmxv
YXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgZmluYWw7CisKKyNp
ZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBMYXlvdXRSZWN0IHZpc3VhbE92
ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uOjpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0KCp0aGlzKTsgfQorI2VuZGlmCisgICAg
dm9pZCB1cGRhdGVQb3NpdGlvbkFuZE92ZXJmbG93KGNvbnN0IEZsb2F0UmVjdCYpOwogCiBwcml2
YXRlOgogICAgIHZvaWQgZ3JhcGhpY3NFbGVtZW50KCkgY29uc3QgPSBkZWxldGU7CkBAIC02OCwy
OCArNzYsNDAgQEAgcHJpdmF0ZToKICAgICBib29sIGlzU1ZHVGV4dCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmKSBvdmVycmlkZTsKLSAgICBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBh
cmVudCwgSGl0VGVzdEFjdGlvbikgb3ZlcnJpZGU7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NW
R19FTkdJTkUpCisgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgb3Zl
cnJpZGU7CisjZW5kaWYKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25z
dCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgb3ZlcnJpZGU7
CiAKLSAgICBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7CisgICAgYm9vbCByZXF1aXJlc0xheWVy
KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJ
TkUpCisgICAgICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2lu
ZUVuYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBsYXlvdXQo
KSBvdmVycmlkZTsKIAogICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGU7CiAKKyAg
ICAvLyBGSVhNRTogW0xCU0VdIEJlZ2luIGNvZGUgb25seSBuZWVkZWQgZm9yIGxlZ2FjeSBTVkcg
ZW5naW5lLgorICAgIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0
QWN0aW9uKSBvdmVycmlkZTsKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9
CiAgICAgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorICAgIC8vIEZJWE1FOiBbTEJTRV0gRW5kIGNvZGUg
b25seSBuZWVkZWQgZm9yIGxlZ2FjeSBTVkcgZW5naW5lLgogCiAgICAgYm9vbCBzaG91bGRIYW5k
bGVTdWJ0cmVlTXV0YXRpb25zKCkgY29uc3Q7CiAKLSAgICBib29sIG1fbmVlZHNSZW9yZGVyaW5n
IDogMTsKLSAgICBib29sIG1fbmVlZHNQb3NpdGlvbmluZ1ZhbHVlc1VwZGF0ZSA6IDE7Ci0gICAg
Ym9vbCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKLSAgICBib29sIG1fbmVlZHNUZXh0TWV0
cmljc1VwZGF0ZSA6IDE7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07Cisg
ICAgYm9vbCBtX25lZWRzUmVvcmRlcmluZyA6IDEgeyBmYWxzZSB9OworICAgIGJvb2wgbV9uZWVk
c1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlIDogMSB7IGZhbHNlIH07CisgICAgYm9vbCBtX25lZWRz
VHJhbnNmb3JtVXBkYXRlIDogMSB7IHRydWUgfTsgLy8gRklYTUU6IFtMQlNFXSBPbmx5IG5lZWRl
ZCBmb3IgbGVnYWN5IFNWRyBlbmdpbmUuCisgICAgYm9vbCBtX25lZWRzVGV4dE1ldHJpY3NVcGRh
dGUgOiAxIHsgZmFsc2UgfTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsg
Ly8gRklYTUU6IFtMQlNFXSBPbmx5IG5lZWRlZCBmb3IgbGVnYWN5IFNWRyBlbmdpbmUuCiAgICAg
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyIG1fbGF5b3V0QXR0cmlidXRlc0J1aWxkZXI7
CiAgICAgVmVjdG9yPFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKj4gbV9sYXlvdXRBdHRyaWJ1dGVz
OworICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAKaW5kZXggYjAwZmI1MGFh
OWUwMDAxNzk3ZmM5NTUwODU4NmE2YjIxNDA3N2Y3OS4uMGRlYjBlMzdiYmMzZGZlZWUwOTkyMDBi
ZmQ1YzViMDA0OGM5Y2MyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCkBAIC05
Nyw4ICs5NywxMCBAQCB2b2lkIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6OnVwZGF0
ZUZyb21TdHlsZSgpCiB7CiAgICAgUmVuZGVyU1ZHQ29udGFpbmVyOjp1cGRhdGVGcm9tU3R5bGUo
KTsKIAotICAgIGlmIChhc3NvY2lhdGVkVXNlRWxlbWVudChncmFwaGljc0VsZW1lbnQoKSkpCisg
ICAgaWYgKGFzc29jaWF0ZWRVc2VFbGVtZW50KGdyYXBoaWNzRWxlbWVudCgpKSkgewogICAgICAg
ICBzZXRIYXNTVkdUcmFuc2Zvcm0oKTsKKyAgICAgICAgc2V0SGFzVHJhbnNmb3JtUmVsYXRlZFBy
b3BlcnR5KCk7CisgICAgfQogfQogCiB2b2lkIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWlu
ZXI6OmFwcGx5VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwgT3B0aW9u
U2V0PFJlbmRlclN0eWxlOjpUcmFuc2Zvcm1PcGVyYXRpb25PcHRpb24+IG9wdGlvbnMpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGlu
Z0JveENvbXB1dGF0aW9uLmNwcAppbmRleCA3OTgwOThkZWIyYzk4NTQ2NWI5MTYwNzg2NDc5NGM4
NmVmYjQ2NzMzLi40ZGI1YzgyMTZmZmEwODE4NWQwMDA1OTNmN2U1MjFiZDUxMTZlMmFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdC
b3hDb21wdXRhdGlvbi5jcHAKQEAgLTE3NSw4ICsxNzUsMTAgQEAgRmxvYXRSZWN0IFNWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb246OmhhbmRsZVJvb3RPckNvbnRhaW5lcihjb25zdCBTVkdCb3VuZGlu
Z0JveEMKICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6T3Zl
cnJpZGVCb3hXaXRoRmlsdGVyQm94Rm9yQ2hpbGRyZW4pICYmIGlzPFJlbmRlclNWR0NvbnRhaW5l
cj4oY2hpbGQpKQogICAgICAgICAgICAgY2hpbGRCb3VuZGluZ0JveENvbXB1dGF0aW9uLmFkanVz
dEJveEZvckNsaXBwaW5nQW5kRWZmZWN0cyh7IERlY29yYXRpb25PcHRpb246Ok92ZXJyaWRlQm94
V2l0aEZpbHRlckJveCB9LCBjaGlsZEJveCk7CiAKLSAgICAgICAgaWYgKGF1dG8gbGF5ZXJUcmFu
c2Zvcm0gPSB0cmFuc2Zvcm1hdGlvbk1hdHJpeEZyb21DaGlsZChjaGlsZCkpCi0gICAgICAgICAg
ICBjaGlsZEJveCA9IGxheWVyVHJhbnNmb3JtLT5tYXBSZWN0KGNoaWxkQm94KTsKKyAgICAgICAg
aWYgKCFvcHRpb25zLmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246Oklnbm9yZVRyYW5zZm9ybWF0
aW9ucykpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGxheWVyVHJhbnNmb3JtID0gdHJhbnNmb3Jt
YXRpb25NYXRyaXhGcm9tQ2hpbGQoY2hpbGQpKQorICAgICAgICAgICAgICAgIGNoaWxkQm94ID0g
bGF5ZXJUcmFuc2Zvcm0tPm1hcFJlY3QoY2hpbGRCb3gpOworICAgICAgICB9CiAKICAgICAgICAg
aWYgKG9wdGlvbnMgPT0gb2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0aW9uKQogICAgICAgICAgICAg
dW5pdGVCb3VuZGluZ0JveFJlc3BlY3RpbmdWYWxpZGl0eShib3hWYWxpZCwgYm94LCBjaGlsZCwg
Y2hpbGRCb3gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaAppbmRleCA4M2RhNjNiZDZmMDk4MmVjNjdmYTViM2Jj
OTQ2YmQ4ODJkMjU5ZDQ0Li4wZDc1NGFkNDMxMWVjODVkYjkxNzAwOTA4YTBhMDNiMTJkNTY2ZTRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb24uaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChD
KSAyMDIxIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEsIDIwMjIgSWdhbGlhIFMu
TC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzUsMTUgKzM1LDE2IEBAIHB1YmxpYzoKICAgICBl
eHBsaWNpdCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uKGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QmKTsKICAgICB+U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbigpID0gZGVmYXVsdDsKIAot
ICAgIGVudW0gY2xhc3MgRGVjb3JhdGlvbk9wdGlvbiA6IHVpbnQ4X3QgeworICAgIGVudW0gY2xh
c3MgRGVjb3JhdGlvbk9wdGlvbiA6IHVpbnQxNl90IHsKICAgICAgICAgSW5jbHVkZUZpbGxTaGFw
ZSAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsIC8qIGNvcnJlc3BvbmRzIHRvICdib29sIGZp
bGwnICAgICAqLwogICAgICAgICBJbmNsdWRlU3Ryb2tlU2hhcGUgICAgICAgICAgICAgICAgICA9
IDEgPDwgMSwgLyogY29ycmVzcG9uZHMgdG8gJ2Jvb2wgc3Ryb2tlJyAgICovCiAgICAgICAgIElu
Y2x1ZGVNYXJrZXJzICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyLCAvKiBjb3JyZXNwb25k
cyB0byAnYm9vbCBtYXJrZXJzJyAgKi8KICAgICAgICAgSW5jbHVkZUNsaXBwZXJzICAgICAgICAg
ICAgICAgICAgICAgPSAxIDw8IDMsIC8qIGNvcnJlc3BvbmRzIHRvICdib29sIGNsaXBwZXJzJyAq
LwogICAgICAgICBJbmNsdWRlTWFza2VycyAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNCwg
LyogV2ViS2l0IGV4dGVuc2lvbiAtIGludGVybmFsICAgICovCiAgICAgICAgIEluY2x1ZGVPdXRs
aW5lICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA1LCAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0g
aW50ZXJuYWwgICAgKi8KLSAgICAgICAgT3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94ICAgICAgICAg
ICAgPSAxIDw8IDYsIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAgICAqLwotICAgICAg
ICBPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3hGb3JDaGlsZHJlbiA9IDEgPDwgNyAgLyogV2ViS2l0
IGV4dGVuc2lvbiAtIGludGVybmFsICAgICovCisgICAgICAgIElnbm9yZVRyYW5zZm9ybWF0aW9u
cyAgICAgICAgICAgICAgID0gMSA8PCA2LCAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJuYWwg
ICAgKi8KKyAgICAgICAgT3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94ICAgICAgICAgICAgPSAxIDw8
IDcsIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAgICAqLworICAgICAgICBPdmVycmlk
ZUJveFdpdGhGaWx0ZXJCb3hGb3JDaGlsZHJlbiA9IDEgPDwgOCAgLyogV2ViS2l0IGV4dGVuc2lv
biAtIGludGVybmFsICAgICovCiAgICAgfTsKIAogICAgIHVzaW5nIERlY29yYXRpb25PcHRpb25z
ID0gT3B0aW9uU2V0PERlY29yYXRpb25PcHRpb24+OwpAQCAtNzMsNyArNzQsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgICAgIGF1dG8gdmlzdWFs
T3ZlcmZsb3dSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50Qm91bmRpbmdCb3gpOwot
ICAgICAgICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5KC1mbG9vcmVkTGF5b3V0UG9pbnQocmVu
ZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7CisgICAgICAgIHZp
c3VhbE92ZXJmbG93UmVjdC5tb3ZlQnkoLXJlbmRlcmVyLm5vbWluYWxTVkdMYXlvdXRMb2NhdGlv
bigpKTsKICAgICAgICAgcmV0dXJuIHZpc3VhbE92ZXJmbG93UmVjdDsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmNwcApp
bmRleCA4MTNjM2VjZWY5MzhiZGE0ODY0NDRkNGFmNzA4ZDk3Y2I3M2NlYWUwLi44MzI4MmNmMDMx
NjZlODJkYzRkMjYwNjkxMDA5MjRmYjI4NTBlNTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuY3BwCkBAIC0xMjAsNDEgKzEyMCw2
IEBAIHZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0OjpsYXlvdXRDaGlsZHJlbihib29sIGNvbnRhaW5l
ck5lZWRzTGF5b3V0KQogICAgICAgICBBU1NFUlQoZWxlbWVudHNUaGF0RGlkTm90UmVjZWl2ZUxh
eW91dC5pc0VtcHR5KCkpOwogfQogCi1zdGF0aWMgaW5saW5lIExheW91dFBvaW50IGxheW91dExv
Y2F0aW9uRnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAg
aWYgKGlzPFJlbmRlclNWR01vZGVsT2JqZWN0PihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIpLmxheW91dExvY2F0aW9uKCk7
Ci0KLSAgICBpZiAoaXM8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVyKSkgLy8gPGZvcmVpZ25PYmpl
Y3Q+IC8gPHRleHQ+Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJTVkdCbG9jaz4ocmVu
ZGVyZXIpLmxvY2F0aW9uKCk7Ci0KLSAgICBpZiAoaXM8UmVuZGVyU1ZHSW5saW5lPihyZW5kZXJl
cikpIC8vIDx0c3Bhbj4gLyA8dGV4dFBhdGg+Ci0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1zdGF0aWMgaW5saW5l
IHZvaWQgc2V0TGF5b3V0TG9jYXRpb25Gb3JSZW5kZXJlcihSZW5kZXJPYmplY3QmIHJlbmRlcmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgbmV3TG9jYXRpb24pCi17Ci0gICAgaWYgKGlzPFJlbmRlclNW
R01vZGVsT2JqZWN0PihyZW5kZXJlcikpIHsKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q+KHJlbmRlcmVyKS5zZXRMYXlvdXRMb2NhdGlvbihuZXdMb2NhdGlvbik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyA8Zm9yZWlnbk9iamVjdD4gLyA8dGV4dD4KLSAg
ICBpZiAoaXM8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVyKSkgewotICAgICAgICBkb3duY2FzdDxS
ZW5kZXJTVkdCbG9jaz4ocmVuZGVyZXIpLnNldExvY2F0aW9uKG5ld0xvY2F0aW9uKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIDx0c3Bhbj4gLyA8dGV4dFBhdGg+Ci0gICAgaWYg
KGlzPFJlbmRlclNWR0lubGluZT4ocmVuZGVyZXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogdm9pZCBTVkdDb250YWluZXJMYXlvdXQ6OnBvc2l0
aW9uQ2hpbGRyZW5SZWxhdGl2ZVRvQ29udGFpbmVyKCkKIHsKICAgICBpZiAobV9wb3NpdGlvbmVk
Q2hpbGRyZW4uaXNFbXB0eSgpKQpAQCAtMTc3LDQwICsxNDIsMzYgQEAgdm9pZCBTVkdDb250YWlu
ZXJMYXlvdXQ6OnBvc2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRvQ29udGFpbmVyKCkKICAgICB9Owog
CiAgICAgLy8gQXJyYW5nZSBsYXlvdXQgbG9jYXRpb24gZm9yIGFsbCBjaGlsZCByZW5kZXJlcnMg
cmVsYXRpdmUgdG8gdGhlIGNvbnRhaW5lciBsYXlvdXQgbG9jYXRpb24uCi0gICAgYXV0byBwYXJl
bnRMYXlvdXRMb2NhdGlvbiA9IGZsb29yZWRMYXlvdXRQb2ludChtX2NvbnRhaW5lci5vYmplY3RC
b3VuZGluZ0JveCgpLm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0JiBj
aGlsZCA6IG1fcG9zaXRpb25lZENoaWxkcmVuKSB7CisgICAgYXV0byBwYXJlbnRMYXlvdXRMb2Nh
dGlvbiA9IG1fY29udGFpbmVyLm5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpOworICAgIGZvciAo
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgY2hpbGQgOiBtX3Bvc2l0aW9uZWRDaGlsZHJlbikgewog
ICAgICAgICB2ZXJpZnlQb3NpdGlvbmVkQ2hpbGRSZW5kZXJlckV4cGVjdGF0aW9uKGNoaWxkKTsK
IAotICAgICAgICBhdXRvIG9iamVjdEJvdW5kaW5nQm94Q2hpbGQgPSBjaGlsZC5vYmplY3RCb3Vu
ZGluZ0JveCgpOwotICAgICAgICBhdXRvIGxheW91dExvY2F0aW9uID0gZmxvb3JlZExheW91dFBv
aW50KG9iamVjdEJvdW5kaW5nQm94Q2hpbGQubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIGF1
dG8gZGVzaXJlZExheW91dExvY2F0aW9uID0gdG9MYXlvdXRQb2ludChsYXlvdXRMb2NhdGlvbiAt
IHBhcmVudExheW91dExvY2F0aW9uKTsKLSAgICAgICAgYXV0byBjdXJyZW50TGF5b3V0TG9jYXRp
b24gPSBsYXlvdXRMb2NhdGlvbkZyb21SZW5kZXJlcihjaGlsZCk7Ci0gICAgICAgIGlmIChjdXJy
ZW50TGF5b3V0TG9jYXRpb24gPT0gZGVzaXJlZExheW91dExvY2F0aW9uKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHNldExheW91dExvY2F0aW9uRm9yUmVuZGVyZXIoY2hpbGQsIGRl
c2lyZWRMYXlvdXRMb2NhdGlvbik7CisgICAgICAgIGF1dG8gZGVzaXJlZExheW91dExvY2F0aW9u
ID0gdG9MYXlvdXRQb2ludChjaGlsZC5ub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKSAtIHBhcmVu
dExheW91dExvY2F0aW9uKTsKKyAgICAgICAgaWYgKGNoaWxkLmN1cnJlbnRTVkdMYXlvdXRMb2Nh
dGlvbigpICE9IGRlc2lyZWRMYXlvdXRMb2NhdGlvbikKKyAgICAgICAgICAgIGNoaWxkLnNldEN1
cnJlbnRTVkdMYXlvdXRMb2NhdGlvbihkZXNpcmVkTGF5b3V0TG9jYXRpb24pOwogICAgIH0KIH0K
IAotdm9pZCBTVkdDb250YWluZXJMYXlvdXQ6OnZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVu
Y3koY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCit2b2lkIFNWR0NvbnRhaW5lckxheW91
dDo6dmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeShjb25zdCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0JiByZW5kZXJlcikKIHsKICAgICBpZiAocmVuZGVyZXIuaXNTVkdMYXllckF3YXJlUmVu
ZGVyZXIoKSAmJiAhcmVuZGVyZXIuaXNTVkdSb290KCkpIHsKLSAgICAgICAgYXV0byBjdXJyZW50
TGF5b3V0TG9jYXRpb24gPSBsYXlvdXRMb2NhdGlvbkZyb21SZW5kZXJlcihyZW5kZXJlcik7Cisg
ICAgICAgIGF1dG8gY3VycmVudExheW91dExvY2F0aW9uID0gcmVuZGVyZXIuY3VycmVudFNWR0xh
eW91dExvY2F0aW9uKCk7CiAKICAgICAgICAgYXV0byBleHBlY3RlZExheW91dExvY2F0aW9uID0g
Y3VycmVudExheW91dExvY2F0aW9uOwotICAgICAgICBmb3IgKGF1dG8mIGFuY2VzdG9yIDogYW5j
ZXN0b3JzT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkgeworICAgICAgICBmb3IgKGF1
dG8mIGFuY2VzdG9yIDogYW5jZXN0b3JzT2ZUeXBlPFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KHJl
bmRlcmVyKSkgewogICAgICAgICAgICAgQVNTRVJUKGFuY2VzdG9yLmlzU1ZHTGF5ZXJBd2FyZVJl
bmRlcmVyKCkpOwogICAgICAgICAgICAgaWYgKGFuY2VzdG9yLmlzU1ZHUm9vdCgpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbi5tb3Zl
QnkobGF5b3V0TG9jYXRpb25Gcm9tUmVuZGVyZXIoYW5jZXN0b3IpKTsKKyAgICAgICAgICAgIGV4
cGVjdGVkTGF5b3V0TG9jYXRpb24ubW92ZUJ5KGFuY2VzdG9yLmN1cnJlbnRTVkdMYXlvdXRMb2Nh
dGlvbigpKTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gaW5pdGlhbExheW91dExvY2F0aW9u
ID0gZmxvb3JlZExheW91dFBvaW50KHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCkubWluWE1p
bllDb3JuZXIoKSk7CisgICAgICAgIGF1dG8gaW5pdGlhbExheW91dExvY2F0aW9uID0gcmVuZGVy
ZXIubm9taW5hbFNWR0xheW91dExvY2F0aW9uKCk7CiAgICAgICAgIGlmIChleHBlY3RlZExheW91
dExvY2F0aW9uID09IGluaXRpYWxMYXlvdXRMb2NhdGlvbikgewogICAgICAgICAgICAgTE9HX1dJ
VEhfU1RSRUFNKFNWRywgc3RyZWFtIDw8ICItLT4gU1ZHQ29udGFpbmVyTGF5b3V0IHJlbmRlcmVy
ICIgPDwgJnJlbmRlcmVyIDw8ICIgKCIgPDwgcmVuZGVyZXIucmVuZGVyTmFtZSgpLmNoYXJhY3Rl
cnMoKSA8PCAiKSIKLSAgICAgICAgICAgICAgICA8PCAiIC0gdmVyaWZ5TGF5b3V0TG9jYXRpb25D
b25zaXN0ZW5jeSgpIG9iamVjdEJvdW5kaW5nQm94IC8gbGF5b3V0TG9jYXRpb24gYXJlIGluIHN5
bmMuIik7CisgICAgICAgICAgICAgICAgPDwgIiAtIHZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lz
dGVuY3koKSBjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24gLyBub21pbmFsU1ZHTGF5b3V0TG9jYXRp
b24gYXJlIGluIHN5bmMuIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oU1ZHLCBzdHJlYW0gPDwgIi0tPiBTVkdDb250YWluZXJMYXlvdXQgcmVuZGVyZXIg
IiA8PCAmcmVuZGVyZXIgPDwgIiAoIiA8PCByZW5kZXJlci5yZW5kZXJOYW1lKCkuY2hhcmFjdGVy
cygpIDw8ICIpIgotICAgICAgICAgICAgICAgIDw8ICIgLSB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNv
bnNpc3RlbmN5KCkgb2JqZWN0Qm91bmRpbmdCb3ggLyBsYXlvdXRMb2NhdGlvbiBpbnZhcmlhbnQg
dmlvbGF0ZWQgLS0gb3V0IG9mIHN5bmMgZHVlIHRvIHBhcnRpYWwgbGF5b3V0PyIKKyAgICAgICAg
ICAgICAgICA8PCAiIC0gdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeSgpIGN1cnJlbnRT
VkdMYXlvdXRMb2NhdGlvbiAvIG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbiBpbnZhcmlhbnQgdmlv
bGF0ZWQgLS0gb3V0IG9mIHN5bmMgZHVlIHRvIHBhcnRpYWwgbGF5b3V0PyIKICAgICAgICAgICAg
ICAgICA8PCAiIGN1cnJlbnRMYXlvdXRMb2NhdGlvbj0iIDw8IGN1cnJlbnRMYXlvdXRMb2NhdGlv
bgogICAgICAgICAgICAgICAgIDw8ICIgIChleHBlY3RlZExheW91dExvY2F0aW9uPSIgPDwgZXhw
ZWN0ZWRMYXlvdXRMb2NhdGlvbgogICAgICAgICAgICAgICAgIDw8ICIgIT0gaW5pdGlhbExheW91
dExvY2F0aW9uPSIgPDwgaW5pdGlhbExheW91dExvY2F0aW9uIDw8ICIpIgpAQCAtMjI0LDcgKzE4
NSw3IEBAIHZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0Ojp2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNp
c3RlbmN5KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBm
b3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIp
KSB7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckxheWVyTW9k
ZWxPYmplY3Q+KHJlbmRlcmVyKSkgewogICAgICAgICBpZiAoY2hpbGQuaXNTVkdMYXllckF3YXJl
UmVuZGVyZXIoKSkKICAgICAgICAgICAgIHZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3ko
Y2hpbGQpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHQ29udGFpbmVyTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0Nv
bnRhaW5lckxheW91dC5oCmluZGV4IGVjMTMwOTM1MTI2Y2Y3ZWNlMTU5OTkyYThkYjcxYzExNjcz
MDI2ZTcuLjUzNDQwMWNjZDRmYjhjOGVmYzIyNTc4ZmFkYmYwNjFkMWYyZmU4ODggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuaApAQCAt
NDAsNyArNDAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBvc2l0aW9uQ2hpbGRyZW5SZWxhdGl2
ZVRvQ29udGFpbmVyKCk7CiAKLSAgICBzdGF0aWMgdm9pZCB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNv
bnNpc3RlbmN5KGNvbnN0IFJlbmRlckVsZW1lbnQmKTsKKyAgICBzdGF0aWMgdm9pZCB2ZXJpZnlM
YXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsK
ICAgICBzdGF0aWMgYm9vbCB0cmFuc2Zvcm1Ub1Jvb3RDaGFuZ2VkKGNvbnN0IFJlbmRlck9iamVj
dCogYW5jZXN0b3IpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKaW5kZXggOWM2YzA5ODAxMzc2YmNkMzdkZGZmOWEz
OTBhM2ViMDM2Njk0MzlmMy4uMWMwY2E4YmZjMDI2MzgzMGFhYjk4Nzk5Njk2NGQ0ZTNhOTJhZWNk
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5l
Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVC
b3guY3BwCkBAIC00NiwyMSArNDYsMzcgQEAgU1ZHUm9vdElubGluZUJveDo6U1ZHUm9vdElubGlu
ZUJveChSZW5kZXJTVkdUZXh0JiByZW5kZXJTVkdUZXh0KQogewogfQogCi1SZW5kZXJTVkdUZXh0
JiBTVkdSb290SW5saW5lQm94OjpyZW5kZXJTVkdUZXh0KCkKK1JlbmRlclNWR1RleHQmIFNWR1Jv
b3RJbmxpbmVCb3g6OnJlbmRlclNWR1RleHQoKSBjb25zdAogewogICAgIHJldHVybiBkb3duY2Fz
dDxSZW5kZXJTVkdUZXh0PihibG9ja0Zsb3coKSk7CiB9CiAKLXZvaWQgU1ZHUm9vdElubGluZUJv
eDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCwgTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCkKK3ZvaWQgU1ZHUm9vdElubGluZUJveDo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwg
TGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCiB7CiAgICAgQVNTRVJU
KHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kIHx8IHBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlOjpTZWxlY3Rpb24pOwogICAgIEFTU0VSVCghcGFpbnRJbmZvLmNv
bnRleHQoKS5wYWludGluZ0Rpc2FibGVkKCkpOwogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NW
R19FTkdJTkUpCisgICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVy
QmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byBvdmVyZmxvd1JlY3Qodmlz
dWFsT3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVCb3R0b20pKTsKKyAgICAgICAgZmxpcEZvcldy
aXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgICAgIG92ZXJmbG93UmVjdC5tb3ZlQnkocGFp
bnRPZmZzZXQpOworCisgICAgICAgIGlmICghcGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0cyhvdmVy
Zmxvd1JlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGxpbmVUb3ApOworICAgIFVOVVNFRF9QQVJBTShsaW5lQm90dG9tKTsKKyNlbmRpZgor
CiAgICAgYm9vbCBpc1ByaW50aW5nID0gcmVuZGVyU1ZHVGV4dCgpLmRvY3VtZW50KCkucHJpbnRp
bmcoKTsKICAgICBib29sIGhhc1NlbGVjdGlvbiA9ICFpc1ByaW50aW5nICYmIHNlbGVjdGlvblN0
YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZTsKICAgICBib29sIHNo
b3VsZFBhaW50U2VsZWN0aW9uSGlnaGxpZ2h0ID0gIShwYWludEluZm8ucGFpbnRCZWhhdmlvci5j
b250YWlucyhQYWludEJlaGF2aW9yOjpTa2lwU2VsZWN0aW9uSGlnaGxpZ2h0KSk7CiAKICAgICBQ
YWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKKyAgICBjaGlsZFBhaW50SW5mby51
cGRhdGVTdWJ0cmVlUGFpbnRSb290Rm9yQ2hpbGRyZW4oJnJlbmRlcmVyKCkpOworCiAgICAgaWYg
KGhhc1NlbGVjdGlvbiAmJiBzaG91bGRQYWludFNlbGVjdGlvbkhpZ2hsaWdodCkgewogICAgICAg
ICBmb3IgKGF1dG8qIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dE9uTGluZSgpKSB7CiAgICAgICAgICAgICBpZiAoaXM8U1ZHSW5saW5lVGV4dEJveD4oKmNo
aWxkKSkKQEAgLTcwLDYgKzg2LDE3IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNlCiAgICAgICAg
IH0KICAgICB9CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAo
cmVuZGVyZXIoKS5kb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJs
ZWQoKSkgeworICAgICAgICBmb3IgKGF1dG8qIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKSB7CisgICAgICAgICAgICBpZiAoY2hpbGQtPnJl
bmRlcmVyKCkuaXNUZXh0KCkgfHwgIWNoaWxkLT5ib3hNb2RlbE9iamVjdCgpLT5oYXNTZWxmUGFp
bnRpbmdMYXllcigpKQorICAgICAgICAgICAgICAgIGNoaWxkLT5wYWludChjaGlsZFBhaW50SW5m
bywgcGFpbnRPZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20pOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCiAgICAgU1ZHUmVuZGVyaW5nQ29udGV4dCByZW5k
ZXJpbmdDb250ZXh0KHJlbmRlclNWR1RleHQoKSwgcGFpbnRJbmZvLCBTVkdSZW5kZXJpbmdDb250
ZXh0OjpTYXZlR3JhcGhpY3NDb250ZXh0KTsKICAgICBpZiAocmVuZGVyaW5nQ29udGV4dC5pc1Jl
bmRlcmluZ1ByZXBhcmVkKCkpIHsKICAgICAgICAgZm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkKQEAgLTE3MCw5ICsxOTcs
NyBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmxheW91dFJvb3RCb3goY29uc3QgRmxvYXRSZWN0
JiBjaGlsZFJlY3QpCiAgICAgUmVuZGVyU1ZHVGV4dCYgcGFyZW50QmxvY2sgPSByZW5kZXJTVkdU
ZXh0KCk7CiAKICAgICAvLyBGaW5hbGx5LCBhc3NpZ24gdGhlIHJvb3QgYmxvY2sgcG9zaXRpb24s
IG5vdyB0aGF0IGFsbCBjb250ZW50IGlzIGxhaWQgb3V0LgotICAgIExheW91dFJlY3QgYm91bmRp
bmdSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChjaGlsZFJlY3QpOwotICAgIHBhcmVudEJsb2Nr
LnNldExvY2F0aW9uKGJvdW5kaW5nUmVjdC5sb2NhdGlvbigpKTsKLSAgICBwYXJlbnRCbG9jay5z
ZXRTaXplKGJvdW5kaW5nUmVjdC5zaXplKCkpOworICAgIHBhcmVudEJsb2NrLnVwZGF0ZVBvc2l0
aW9uQW5kT3ZlcmZsb3coY2hpbGRSZWN0KTsKIAogICAgIC8vIFBvc2l0aW9uIGFsbCBjaGlsZHJl
biByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGJsb2NrLgogICAgIGZvciAoYXV0byogY2hpbGQgPSBm
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKQEAgLTE4
Nyw2ICsyMTIsOCBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmxheW91dFJvb3RCb3goY29uc3Qg
RmxvYXRSZWN0JiBjaGlsZFJlY3QpCiAgICAgc2V0WSgwKTsKICAgICBzZXRMb2dpY2FsV2lkdGgo
Y2hpbGRSZWN0LndpZHRoKCkpOwogICAgIHNldExvZ2ljYWxIZWlnaHQoY2hpbGRSZWN0LmhlaWdo
dCgpKTsKKworICAgIGF1dG8gYm91bmRpbmdSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChjaGls
ZFJlY3QpOwogICAgIHNldExpbmVUb3BCb3R0b21Qb3NpdGlvbnMoMCwgYm91bmRpbmdSZWN0Lmhl
aWdodCgpLCAwLCBib3VuZGluZ1JlY3QuaGVpZ2h0KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5oCmluZGV4IDBkMTYyNjllYjVjMTcz
N2EwZjMxMmM3ZGVhYTQ5Mjk4NzFhNDYxZDYuLmFmMWIxM2VhZDVkYWIxMTRmMTBmMDZmYmE2ZWUy
ZTdhN2Q1OWM0NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
Um9vdElubGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9v
dElubGluZUJveC5oCkBAIC0zNSw4ICszNSw2IEBAIGNsYXNzIFNWR1Jvb3RJbmxpbmVCb3ggZmlu
YWwgOiBwdWJsaWMgTGVnYWN5Um9vdElubGluZUJveCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQg
U1ZHUm9vdElubGluZUJveChSZW5kZXJTVkdUZXh0Jik7CiAKLSAgICBSZW5kZXJTVkdUZXh0JiBy
ZW5kZXJTVkdUZXh0KCk7Ci0KICAgICBmbG9hdCB2aXJ0dWFsTG9naWNhbEhlaWdodCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fbG9naWNhbEhlaWdodDsgfQogICAgIHZvaWQgc2V0TG9naWNh
bEhlaWdodChmbG9hdCBoZWlnaHQpIHsgbV9sb2dpY2FsSGVpZ2h0ID0gaGVpZ2h0OyB9CiAKQEAg
LTQ5LDYgKzQ3LDggQEAgcHVibGljOgogICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlv
bkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91
dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tLCBIaXRUZXN0QWN0aW9uKSBmaW5h
bDsKIAogcHJpdmF0ZToKKyAgICBSZW5kZXJTVkdUZXh0JiByZW5kZXJTVkdUZXh0KCkgY29uc3Q7
CisKICAgICBib29sIGlzU1ZHUm9vdElubGluZUJveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KICAgICB2b2lkIHJlb3JkZXJWYWx1ZUxpc3RzVG9Mb2dpY2FsT3JkZXIoVmVjdG9y
PFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKj4mKTsKICAgICB2b2lkIGxheW91dENoYXJhY3RlcnNJ
blRleHRCb3hlcyhMZWdhY3lJbmxpbmVGbG93Qm94KiwgU1ZHVGV4dExheW91dEVuZ2luZSYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcAppbmRleCBmMmMwNzZmN2I3NzJkMTE1
ZTRlZWY2YTgwNmZiYWJiMjVmNTVmZTkzLi44NjliMTlhNmI3ODk3MTkzY2Q0MzhiYTgyMGZhM2Vh
OTgxZDQzMTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcApAQCAtNTQs
NiArNTQsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdH
cmFwaGljc0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1VS
SVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0zNjQsMTMgKzM2NSwyOSBA
QCB2b2lkIEFkanVzdGVyOjphZGp1c3QoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSogdXNlckFnZW50QXBwZWFyYW5jZQogICAgIGVsc2UKICAgICAgICAgc3R5bGUuc2V0VXNl
ZFpJbmRleChzdHlsZS5zcGVjaWZpZWRaSW5kZXgoKSk7CiAKKyAgICAvLyBGb3IgU1ZHIGNvbXBh
dGliaWxpdHkgcHVycG9zZXMgd2UgaGF2ZSB0byBjb25zaWRlciB0aGUgJ2FuaW1hdGVkTG9jYWxU
cmFuc2Zvcm0nIGJlc2lkZXMgdGhlIFJlbmRlclN0eWxlIHRvIHF1ZXJ5CisgICAgLy8gaWYgYW4g
ZWxlbWVudCBoYXMgYSB0cmFuc2Zvcm0uIFNWRyB0cmFuc2Zvcm1zIGFyZSBub3Qgc3RvcmVkIG9u
IHRoZSBSZW5kZXJTdHlsZSwgYW5kIHRodXMgd2UgbmVlZCBhIHNwZWNpYWwgY2FzZSBoZXJlLgor
ICAgIGF1dG8gaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5ID0gW10oY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSB7CisgICAgICAgIGlmIChzdHlsZS5o
YXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgIGlmIChlbGVtZW50
ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5h
YmxlZCgpICYmIGlzPFNWR0dyYXBoaWNzRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAgICAgICBy
ZXR1cm4gIWRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oKmVsZW1lbnQpLmFuaW1hdGVkTG9j
YWxUcmFuc2Zvcm0oKS5pc0lkZW50aXR5KCk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0o
ZWxlbWVudCk7CisjZW5kaWYKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKwogICAg
IC8vIEF1dG8gei1pbmRleCBiZWNvbWVzIDAgZm9yIHRoZSByb290IGVsZW1lbnQgYW5kIHRyYW5z
cGFyZW50IG9iamVjdHMuIFRoaXMgcHJldmVudHMKICAgICAvLyBjYXNlcyB3aGVyZSBvYmplY3Rz
IHRoYXQgc2hvdWxkIGJlIGJsZW5kZWQgYXMgYSBzaW5nbGUgdW5pdCBlbmQgdXAgd2l0aCBhIG5v
bi10cmFuc3BhcmVudAogICAgIC8vIG9iamVjdCB3ZWRnZWQgaW4gYmV0d2VlbiB0aGVtLiBBdXRv
IHotaW5kZXggYWxzbyBiZWNvbWVzIDAgZm9yIG9iamVjdHMgdGhhdCBzcGVjaWZ5IHRyYW5zZm9y
bXMvbWFza3MvcmVmbGVjdGlvbnMuCiAgICAgaWYgKHN0eWxlLmhhc0F1dG9Vc2VkWkluZGV4KCkp
IHsKICAgICAgICAgaWYgKChtX2VsZW1lbnQgJiYgbV9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQo
KSA9PSBtX2VsZW1lbnQpCiAgICAgICAgICAgICB8fCBzdHlsZS5oYXNPcGFjaXR5KCkKLSAgICAg
ICAgICAgIHx8IHN0eWxlLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpCisgICAgICAgICAg
ICB8fCBoYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoc3R5bGUsIG1fZWxlbWVudCkKICAgICAg
ICAgICAgIHx8IHN0eWxlLmhhc01hc2soKQogICAgICAgICAgICAgfHwgc3R5bGUuY2xpcFBhdGgo
KQogICAgICAgICAgICAgfHwgc3R5bGUuYm94UmVmbGVjdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dC5jcHAKaW5kZXggNDE0ODE1MDg1ZGJjYWEzOTRkYzExZjkwNTBlZDM4YzcwYjgxNGI1My4uMjg2
MmQzNjA4OTEwMzAyZjFkZGVlZTdmZTFiMmM4YWRkOTdkNGQwMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50LmNwcApAQCAtNTMxLDcgKzUzMSw3IEBAIHN0YXRpYyBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gY3JlYXRlU1ZHTGF5ZXJBd2FyZUVsCiAg
ICAgLy8gTGlzdCBvZiBhbGwgU1ZHIGVsZW1lbnRzIHdob3NlIHJlbmRlcmVycyBzdXBwb3J0IHRo
ZSBsYXllciBhd2FyZSBsYXlvdXQgLyBwYWludGluZyAvIGhpdC10ZXN0aW5nIG1vZGUgKCdMQlNF
LW1vZGUnKS4KICAgICB1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CiAgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKLSAgICBmb3IgKGF1
dG8mIHRhZyA6IHsgZ1RhZy5nZXQoKSwgcmVjdFRhZy5nZXQoKSB9KQorICAgIGZvciAoYXV0byYg
dGFnIDogeyBnVGFnLmdldCgpLCByZWN0VGFnLmdldCgpLCB0ZXh0VGFnLmdldCgpIH0pCiAgICAg
ICAgIHNldC5hZGQodGFnLmxvY2FsTmFtZSgpKTsKICAgICByZXR1cm4gc2V0OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458469</attachid>
            <date>2022-04-27 14:22:56 -0700</date>
            <delta_ts>2022-05-16 04:11:16 -0700</delta_ts>
            <desc>Patch, v4</desc>
            <filename>bug-239743-20220427142254.patch</filename>
            <type>text/plain</type>
            <size>38825</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzNTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWIwMjM3NDIzMmVhOTJh
NTQwMTJiZGYwNmFlMmNjMmQ1YzY2ZGU3ZS4uOTM4MDhlMjM5ZjYwMmI4OGYyNmMyZjgyYzFiMmNm
ZTJmNDI4ZDdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDIyLTA0LTI3ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBBY3RpdmF0ZSB0ZXh0IHJlbmRlcmluZywgYnkgcmUtdXNpbmcgUmVuZGVyU1ZHVGV4dAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5NzQzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRhcHQgUmVuZGVy
U1ZHVGV4dCB0byBiZSB1c2FibGUgYXQgdGhlIHNhbWUgdGltZSBmcm9tIGxlZ2FjeSBTVkcgZW5n
aW5lIChhcworICAgICAgICBpdCBpcyByaWdodCBub3cpIGFuZCBmcm9tIExCU0UuIFRoaXMgcmVx
dWlyZXMgbWluaW1hbCBlZmZvcnQsIHNpbmNlIFJlbmRlclNWR1RleHQKKyAgICAgICAgYWxyZWFk
eSBpbmhlcml0ZWQgZnJvbSBSZW5kZXJMYXllck1vZGVsT2JqZWN0LCBzbyB0aGVyZSdzIG5vIG5l
ZWQgZm9yIHRoZSBjcmVhdGlvbgorICAgICAgICBvZiBMZWdhY3lSZW5kZXJTVkdUZXh0IC8gUmVu
ZGVyU1ZHVGV4dCBhcyBzZXBhcmF0ZWQgbGVnYWN5L0xCU0UgaW1wbGVtZW50YXRpb25zLgorCisg
ICAgICAgIE1vc3QgU1ZHIDEuMSA8dGV4dD4gdGVzdGNhc2VzIGFscmVhZHkgcGFzcyBvdXQgb2Yg
dGhlIGJveCB3aXRoIHRoaXMgY2hhbmdlLgorICAgICAgICBUaGUgbmV4dCBwYXRjaCBhZnRlciB0
ZXh0IHN1cHBvcnQgd2lsbCBhZGQgYSBuZXcgJ21hY29zLXdrMi1sYnNlLXh4eCcgc3BlY2lmaWMK
KyAgICAgICAgcGxhdGZvcm0gYmFzZWxpbmUsIHNvIHRoYXQgd2UgY2FuIHJ1biB0ZXN0cyBMQlNF
IGFnYWludCBpc2VsZiAoZmluYWxseSB3ZSBjYW4KKyAgICAgICAgaW5jbHVkZSB0aGUgcHJvZ3Jl
c3Npb25zIGluIHRoZSBmb3JtIG9mIFRlc3RFeHBlY3RhdGlvbiBmaWxlIGNoYW5nZXMsIG9uY2Ug
YSBjZXJ0YWluCisgICAgICAgIHBhdGNoIGltcGxlbWVudHMgYSBuZXcgZmVhdHVyZSBpbiBMQlNF
LiBUaGlzIG1ha2VzIHNlbnNlIG5vdyBhcyBlbm91Z2ggaXMgdXBzdHJlYW1lZAorICAgICAgICB0
aGF0IGEgY29uc2lkZXJhYmxlIGFtb3VudCBvZiB0aGUgU1ZHIDEuMSB0ZXN0c3VpdGUgYWxyZWFk
eSBwYXNzZXMgcGl4ZWwgcGVyZmVjdC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRl
c3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3VyLiAoSG93ZXZlciB0ZXN0YWJpbGl0eSBmb3IgTEJT
RSBpcyByZWFkeSBzb29uISkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpj
b21wdXRlVmlzaWJsZVJlY3RJblNWR0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvYmplY3RJc1JlbGF5b3V0
Qm91bmRhcnkpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6YWJzb2x1dGVSZWN0cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6YWJzb2x1dGVRdWFkcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdCbG9jazo6Y2xpcHBlZE92ZXJmbG93UmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6Y29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVGbG9hdFZp
c2libGVSZWN0SW5Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
QmxvY2s6OnB1c2hNYXBwaW5nVG9Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHQmxvY2s6Om9mZnNldEZyb21Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHQmxvY2s6Om5vZGVBdFBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OlJlbmRl
clNWR1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6Om5vZGVBdEZsb2F0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHVGV4dDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4
dDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHVGV4dDo6dXBkYXRlUG9zaXRpb25BbmRPdmVyZmxvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVF1YWRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElu
bGluZUJveDo6cmVuZGVyU1ZHVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290
SW5saW5lQm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94Ojps
YXlvdXRSb290Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OnJlbmRl
clNWR1RleHQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUm9vdElubGlu
ZUJveC5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZVNWR0xheWVyQXdhcmVFbGVtZW50U2V0KToKKwogMjAyMi0wNC0yNyAgTmlrb2xhcyBa
aW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbTEJTRV0gRml4
IG9yaWdpbiBvZiB0cmFuc2Zvcm1hdGlvbnMgaW4gU1ZHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggNjgwY2U1Yzc2Y2E2YWQ2YTM3Y2FhNzNiMGE5YjVj
YTBhMGJlYjJjMy4uZDIwNjhmMGE2MTgzODcxNTAyMWViZDQ5YTgzMDU3ODAxZDFiYjBjYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApAQCAtMTE5MCwyOSAr
MTE5MCwzNSBAQCBib29sIFJlbmRlckVsZW1lbnQ6OnJlcGFpbnRBZnRlckxheW91dElmTmVlZGVk
KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcAogICAgIGlmIChuZXdCb3VuZHMgPT0g
b2xkQm91bmRzICYmIG5ld091dGxpbmVCb3ggPT0gb2xkT3V0bGluZUJveCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgTGF5b3V0VW5pdCBkZWx0YUxlZnQgPSBuZXdCb3VuZHMueCgpIC0g
b2xkQm91bmRzLngoKTsKLSAgICBpZiAoZGVsdGFMZWZ0ID4gMCkKLSAgICAgICAgcmVwYWludFVz
aW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIExheW91dFJlY3Qob2xkQm91bmRzLngoKSwg
b2xkQm91bmRzLnkoKSwgZGVsdGFMZWZ0LCBvbGRCb3VuZHMuaGVpZ2h0KCkpKTsKLSAgICBlbHNl
IGlmIChkZWx0YUxlZnQgPCAwKQotICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWlu
dENvbnRhaW5lciwgTGF5b3V0UmVjdChuZXdCb3VuZHMueCgpLCBuZXdCb3VuZHMueSgpLCAtZGVs
dGFMZWZ0LCBuZXdCb3VuZHMuaGVpZ2h0KCkpKTsKLQotICAgIExheW91dFVuaXQgZGVsdGFSaWdo
dCA9IG5ld0JvdW5kcy5tYXhYKCkgLSBvbGRCb3VuZHMubWF4WCgpOwotICAgIGlmIChkZWx0YVJp
Z2h0ID4gMCkKLSAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIs
IExheW91dFJlY3Qob2xkQm91bmRzLm1heFgoKSwgbmV3Qm91bmRzLnkoKSwgZGVsdGFSaWdodCwg
bmV3Qm91bmRzLmhlaWdodCgpKSk7Ci0gICAgZWxzZSBpZiAoZGVsdGFSaWdodCA8IDApCi0gICAg
ICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBMYXlvdXRSZWN0KG5l
d0JvdW5kcy5tYXhYKCksIG9sZEJvdW5kcy55KCksIC1kZWx0YVJpZ2h0LCBvbGRCb3VuZHMuaGVp
Z2h0KCkpKTsKLQotICAgIExheW91dFVuaXQgZGVsdGFUb3AgPSBuZXdCb3VuZHMueSgpIC0gb2xk
Qm91bmRzLnkoKTsKLSAgICBpZiAoZGVsdGFUb3AgPiAwKQotICAgICAgICByZXBhaW50VXNpbmdD
b250YWluZXIocmVwYWludENvbnRhaW5lciwgTGF5b3V0UmVjdChvbGRCb3VuZHMueCgpLCBvbGRC
b3VuZHMueSgpLCBvbGRCb3VuZHMud2lkdGgoKSwgZGVsdGFUb3ApKTsKLSAgICBlbHNlIGlmIChk
ZWx0YVRvcCA8IDApCi0gICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFp
bmVyLCBMYXlvdXRSZWN0KG5ld0JvdW5kcy54KCksIG5ld0JvdW5kcy55KCksIG5ld0JvdW5kcy53
aWR0aCgpLCAtZGVsdGFUb3ApKTsKLQotICAgIExheW91dFVuaXQgZGVsdGFCb3R0b20gPSBuZXdC
b3VuZHMubWF4WSgpIC0gb2xkQm91bmRzLm1heFkoKTsKLSAgICBpZiAoZGVsdGFCb3R0b20gPiAw
KQotICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgTGF5b3V0
UmVjdChuZXdCb3VuZHMueCgpLCBvbGRCb3VuZHMubWF4WSgpLCBuZXdCb3VuZHMud2lkdGgoKSwg
ZGVsdGFCb3R0b20pKTsKLSAgICBlbHNlIGlmIChkZWx0YUJvdHRvbSA8IDApCi0gICAgICAgIHJl
cGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBMYXlvdXRSZWN0KG9sZEJvdW5k
cy54KCksIG5ld0JvdW5kcy5tYXhZKCksIG9sZEJvdW5kcy53aWR0aCgpLCAtZGVsdGFCb3R0b20p
KTsKKyAgICBpZiAobmV3Qm91bmRzLmlzRW1wdHkoKSAmJiAhb2xkQm91bmRzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIG9sZEJvdW5k
cyk7CisgICAgZWxzZSBpZiAoIW5ld0JvdW5kcy5pc0VtcHR5KCkgJiYgb2xkQm91bmRzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIG5l
d0JvdW5kcyk7CisgICAgZWxzZSB7CisgICAgICAgIExheW91dFVuaXQgZGVsdGFMZWZ0ID0gbmV3
Qm91bmRzLngoKSAtIG9sZEJvdW5kcy54KCk7CisgICAgICAgIGlmIChkZWx0YUxlZnQgPiAwKQor
ICAgICAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIExheW91
dFJlY3Qob2xkQm91bmRzLngoKSwgb2xkQm91bmRzLnkoKSwgZGVsdGFMZWZ0LCBvbGRCb3VuZHMu
aGVpZ2h0KCkpKTsKKyAgICAgICAgZWxzZSBpZiAoZGVsdGFMZWZ0IDwgMCkKKyAgICAgICAgICAg
IHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBMYXlvdXRSZWN0KG5ld0Jv
dW5kcy54KCksIG5ld0JvdW5kcy55KCksIC1kZWx0YUxlZnQsIG5ld0JvdW5kcy5oZWlnaHQoKSkp
OworCisgICAgICAgIExheW91dFVuaXQgZGVsdGFSaWdodCA9IG5ld0JvdW5kcy5tYXhYKCkgLSBv
bGRCb3VuZHMubWF4WCgpOworICAgICAgICBpZiAoZGVsdGFSaWdodCA+IDApCisgICAgICAgICAg
ICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgTGF5b3V0UmVjdChvbGRC
b3VuZHMubWF4WCgpLCBuZXdCb3VuZHMueSgpLCBkZWx0YVJpZ2h0LCBuZXdCb3VuZHMuaGVpZ2h0
KCkpKTsKKyAgICAgICAgZWxzZSBpZiAoZGVsdGFSaWdodCA8IDApCisgICAgICAgICAgICByZXBh
aW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgTGF5b3V0UmVjdChuZXdCb3VuZHMu
bWF4WCgpLCBvbGRCb3VuZHMueSgpLCAtZGVsdGFSaWdodCwgb2xkQm91bmRzLmhlaWdodCgpKSk7
CisKKyAgICAgICAgTGF5b3V0VW5pdCBkZWx0YVRvcCA9IG5ld0JvdW5kcy55KCkgLSBvbGRCb3Vu
ZHMueSgpOworICAgICAgICBpZiAoZGVsdGFUb3AgPiAwKQorICAgICAgICAgICAgcmVwYWludFVz
aW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIExheW91dFJlY3Qob2xkQm91bmRzLngoKSwg
b2xkQm91bmRzLnkoKSwgb2xkQm91bmRzLndpZHRoKCksIGRlbHRhVG9wKSk7CisgICAgICAgIGVs
c2UgaWYgKGRlbHRhVG9wIDwgMCkKKyAgICAgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihy
ZXBhaW50Q29udGFpbmVyLCBMYXlvdXRSZWN0KG5ld0JvdW5kcy54KCksIG5ld0JvdW5kcy55KCks
IG5ld0JvdW5kcy53aWR0aCgpLCAtZGVsdGFUb3ApKTsKKworICAgICAgICBMYXlvdXRVbml0IGRl
bHRhQm90dG9tID0gbmV3Qm91bmRzLm1heFkoKSAtIG9sZEJvdW5kcy5tYXhZKCk7CisgICAgICAg
IGlmIChkZWx0YUJvdHRvbSA+IDApCisgICAgICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIo
cmVwYWludENvbnRhaW5lciwgTGF5b3V0UmVjdChuZXdCb3VuZHMueCgpLCBvbGRCb3VuZHMubWF4
WSgpLCBuZXdCb3VuZHMud2lkdGgoKSwgZGVsdGFCb3R0b20pKTsKKyAgICAgICAgZWxzZSBpZiAo
ZGVsdGFCb3R0b20gPCAwKQorICAgICAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFp
bnRDb250YWluZXIsIExheW91dFJlY3Qob2xkQm91bmRzLngoKSwgbmV3Qm91bmRzLm1heFkoKSwg
b2xkQm91bmRzLndpZHRoKCksIC1kZWx0YUJvdHRvbSkpOworICAgIH0KIAogICAgIGlmIChuZXdP
dXRsaW5lQm94ID09IG9sZE91dGxpbmVCb3gpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcApp
bmRleCBjZWMwNGZhM2IzZmM1NzhmMWY0NWJkZDQ5ZDEzZGMyZmM5OTVhODI1Li5iNmRjOTUyZDhh
MWFkY2U5MzZkNmM2YjU2MjhkNWZlNDc4OWZjMGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgorI2lu
Y2x1ZGUgIlJlbmRlclNWR0Jsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
aCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU1ZHR3JhcGhpY3NFbGVtZW50
LmgiCkBAIC0yNDUsMTAgKzI0Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dXBk
YXRlTGF5ZXJUcmFuc2Zvcm0oKQogI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQog
c3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpjb21wdXRl
VmlzaWJsZVJlY3RJblNWR0NvbnRhaW5lcihjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFJlbmRlck9iamVjdDo6VmlzaWJsZVJl
Y3RDb250ZXh0IGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVh
bSBSZW5kZXJTVkdCbG9jayBjaGFuZ2VzCi0gICAgLy8gQVNTRVJUKGlzPFJlbmRlclNWR01vZGVs
T2JqZWN0Pih0aGlzKSB8fCBpczxSZW5kZXJTVkdCbG9jaz4odGhpcykpOwotICAgIEFTU0VSVChp
czxSZW5kZXJTVkdNb2RlbE9iamVjdD4odGhpcykpOwotCisgICAgQVNTRVJUKGlzPFJlbmRlclNW
R01vZGVsT2JqZWN0Pih0aGlzKSB8fCBpczxSZW5kZXJTVkdCbG9jaz4odGhpcykpOwogICAgIEFT
U0VSVCghc3R5bGUoKS5oYXNJbkZsb3dQb3NpdGlvbigpKTsKICAgICBBU1NFUlQoIXZpZXcoKS5m
cmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNQYWludE9mZnNldENhY2hlRW5hYmxlZCgpKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA2MTkxMWM4
YWM2NjJmYzNjMjNhOTM1NjU2ZDg4MThlZmNjNmM5ZDgyLi4wM2FmNDRiMzg4ZGUwYWZhZDVhZTk5
MDk1NjFkYTNmMWFkNmIxNjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcApAQCAtNTIxLDYgKzUyMSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgb2JqZWN0SXNS
ZWxheW91dEJvdW5kYXJ5KGNvbnN0IFJlbmRlckVsZW1lbnQqIG9iamVjdCkKICAgICBpZiAoIW9i
amVjdC0+aGFzTm9uVmlzaWJsZU92ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAor
I2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChvYmplY3QtPmRvY3Vt
ZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpICYmIG9iamVjdC0+
aXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
CisKICAgICBpZiAob2JqZWN0LT5zdHlsZSgpLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSB8
fCBvYmplY3QtPnN0eWxlKCkuaGVpZ2h0KCkuaXNJbnRyaW5zaWNPckF1dG8oKSB8fCBvYmplY3Qt
PnN0eWxlKCkuaGVpZ2h0KCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Js
b2NrLmNwcAppbmRleCAyZTEwNTcyODFjODgwNGIwZTYxYTdjOGY5ZjA0OTJlNGFjMTcxMDQ1Li42
ODk5YTE4ZTQ1M2YzNDM3ZjQ0MjkxNTI0YjgwNjI0ODBhOWY2OTZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcApAQCAtMjIsNiArMjIsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0Jsb2NrLmgiCiAKKyNp
bmNsdWRlICJSZW5kZXJTVkdCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIlNWR0dyYXBoaWNzRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1Jl
bmRlclN1cHBvcnQuaCIKQEAgLTQyLDYgKzQzLDEzIEBAIHZvaWQgUmVuZGVyU1ZHQmxvY2s6OnVw
ZGF0ZUZyb21TdHlsZSgpCiB7CiAgICAgUmVuZGVyQmxvY2tGbG93Ojp1cGRhdGVGcm9tU3R5bGUo
KTsKIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1bWVu
dCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAgICB1
cGRhdGVIYXNTVkdUcmFuc2Zvcm1GbGFncyhncmFwaGljc0VsZW1lbnQoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIFJlbmRlclNWR2xvY2ssIHVzZWQgYnkgUmVu
ZGVyKFNWR1RleHR8Rm9yZWlnbk9iamVjdCksIGlzIG5vdCBhbGxvd2VkIHRvIGNhbGwgc2V0SGFz
Tm9uVmlzaWJsZU92ZXJmbG93KHRydWUpLgogICAgIC8vIFJlbmRlckJsb2NrIGFzc3VtZXMgYSBs
YXllciB0byBiZSBwcmVzZW50IHdoZW4gdGhlIG92ZXJmbG93IGNsaXAgZnVuY3Rpb25hbGl0eSBp
cyByZXF1ZXN0ZWQuIEJvdGgKICAgICAvLyBSZW5kZXIoU1ZHVGV4dHxGb3JlaWduT2JqZWN0KSBy
ZXR1cm4gJ2ZhbHNlJyBvbiAncmVxdWlyZXNMYXllcicuIEZpbmUgZm9yIFJlbmRlclNWR1RleHQu
CkBAIC01NywxMiArNjUsMjcgQEAgdm9pZCBSZW5kZXJTVkdCbG9jazo6dXBkYXRlRnJvbVN0eWxl
KCkKICAgICBzZXRIYXNOb25WaXNpYmxlT3ZlcmZsb3coZmFsc2UpOwogfQogCi12b2lkIFJlbmRl
clNWR0Jsb2NrOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBv
aW50JikgY29uc3QKK3ZvaWQgUmVuZGVyU1ZHQmxvY2s6OmFic29sdXRlUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25z
dAogeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1bWVu
dCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAgICBy
ZWN0cy5hcHBlbmQoc25hcHBlZEludFJlY3QoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCAr
IGxvY2F0aW9uKCksIHNpemUoKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHJlY3RzKTsKKyAgICBVTlVTRURfUEFSQU0oYWNjdW11bGF0ZWRPZmZz
ZXQpOworI2VuZGlmCisKICAgICAvLyBUaGlzIGNvZGUgcGF0aCBzaG91bGQgbmV2ZXIgYmUgdGFr
ZW4gZm9yIFNWRywgYXMgd2UncmUgYXNzdW1pbmcgdXNlVHJhbnNmb3Jtcz10cnVlIGV2ZXJ5d2hl
cmUsIGFic29sdXRlUXVhZHMgc2hvdWxkIGJlIHVzZWQuCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKK3ZvaWQgUmVuZGVyU1ZHQmxvY2s6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKK3sKKyAgICBxdWFkcy5hcHBlbmQo
bG9jYWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3VuZGluZ0JveCgpLCBVc2VUcmFuc2Zvcm1zLCB3
YXNGaXhlZCkpOworfQorCiB2b2lkIFJlbmRlclNWR0Jsb2NrOjp3aWxsQmVEZXN0cm95ZWQoKQog
ewogICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnREZXN0cm95ZWQoKnRoaXMpOwpAQCAtNzEs
NyArOTQsMTEgQEAgdm9pZCBSZW5kZXJTVkdCbG9jazo6d2lsbEJlRGVzdHJveWVkKCkKIAogdm9p
ZCBSZW5kZXJTVkdCbG9jazo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZH
X0VOR0lORSkKKyAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2U6OkxheW91dCAmJiAhZG9j
dW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpCisjZWxzZQog
ICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZTo6TGF5b3V0KQorI2VuZGlmCiAgICAgICAg
IHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwogICAgIFJlbmRlckJsb2NrRmxvdzo6c3R5bGVE
aWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwogICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRT
dHlsZUNoYW5nZWQoKnRoaXMsIGRpZmYsIHN0eWxlKCkpOwpAQCAtODEsNiArMTA4LDExIEBAIHZv
aWQgUmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyhMYXlvdXRVbml0IG9sZENsaWVudEFm
dGVyRWRnZSwgYm9vbCByZWNvbXB1CiB7CiAgICAgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlT3Zl
cmZsb3cob2xkQ2xpZW50QWZ0ZXJFZGdlLCByZWNvbXB1dGVGbG9hdHMpOwogCisjaWYgRU5BQkxF
KExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5s
YXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwog
ICAgIGNvbnN0IGF1dG8qIHRleHRTaGFkb3cgPSBzdHlsZSgpLnRleHRTaGFkb3coKTsKICAgICBp
ZiAoIXRleHRTaGFkb3cpCiAgICAgICAgIHJldHVybjsKQEAgLTkwLDEzICsxMjIsMzAgQEAgdm9p
ZCBSZW5kZXJTVkdCbG9jazo6Y29tcHV0ZU92ZXJmbG93KExheW91dFVuaXQgb2xkQ2xpZW50QWZ0
ZXJFZGdlLCBib29sIHJlY29tcHUKICAgICBhZGRWaXN1YWxPdmVyZmxvdyhzbmFwcGVkSW50UmVj
dChib3JkZXJSZWN0KSk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyU1ZHQmxvY2s6OmNsaXBwZWRP
dmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJTVkdCbG9jazo6
Y2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQgY29udGV4dCkgY29uc3QKIHsKKyNpZiBFTkFC
TEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygp
LmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKHN0eWxlKCkudmlz
aWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUgJiYgIWVuY2xvc2luZ0xheWVyKCktPmhh
c1Zpc2libGVDb250ZW50KCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIEFT
U0VSVCghdmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2Fj
aGVFbmFibGVkKCkpOworICAgICAgICByZXR1cm4gY29tcHV0ZVJlY3QodmlzdWFsT3ZlcmZsb3dS
ZWN0KCksIHJlcGFpbnRDb250YWluZXIsIGNvbnRleHQpOworICAgIH0KKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGNvbnRleHQpOworI2VuZGlmCisKICAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9y
dDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoKnRoaXMsIHJlcGFpbnRDb250YWluZXIp
OwogfQogCiBzdGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IFJlbmRlclNWR0Jsb2NrOjpjb21wdXRl
VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCBjb250ZXh0
KSBjb25zdAogeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChk
b2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuIGNvbXB1dGVWaXNpYmxlUmVjdEluU1ZHQ29udGFpbmVyKHJlY3QsIGNvbnRhaW5l
ciwgY29udGV4dCk7CisjZW5kaWYKKwogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBhZGp1
c3RlZFJlY3QgPSBjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKHJlY3QsIGNvbnRh
aW5lciwgY29udGV4dCk7CiAgICAgaWYgKGFkanVzdGVkUmVjdCkKICAgICAgICAgcmV0dXJuIGVu
Y2xvc2luZ0xheW91dFJlY3QoKmFkanVzdGVkUmVjdCk7CkBAIC0xMDUsNiArMTU0LDkgQEAgc3Rk
OjpvcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJTVkdCbG9jazo6Y29tcHV0ZVZpc2libGVSZWN0
SW5Db250YWluZXIoY29uc3QgTGEKIAogc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IFJlbmRlclNW
R0Jsb2NrOjpjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyLCBWaXNpYmxl
UmVjdENvbnRleHQgY29udGV4dCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZH
X0VOR0lORSkKKyAgICBBU1NFUlQoIWRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZH
RW5naW5lRW5hYmxlZCgpKTsKKyNlbmRpZgogICAgIHJldHVybiBTVkdSZW5kZXJTdXBwb3J0Ojpj
b21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKCp0aGlzLCByZWN0LCBjb250YWluZXIs
IGNvbnRleHQpOwogfQogCkBAIC0xMTUsMTMgKzE2NywyMyBAQCB2b2lkIFJlbmRlclNWR0Jsb2Nr
OjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2Vz
dG9yQwogCiBjb25zdCBSZW5kZXJPYmplY3QqIFJlbmRlclNWR0Jsb2NrOjpwdXNoTWFwcGluZ1Rv
Q29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQs
IFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoTEFZ
RVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVy
QmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBSZW5kZXJCb3g6OnB1c2hN
YXBwaW5nVG9Db250YWluZXIoYW5jZXN0b3JUb1N0b3BBdCwgZ2VvbWV0cnlNYXApOworI2VuZGlm
CisKICAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcigq
dGhpcywgYW5jZXN0b3JUb1N0b3BBdCwgZ2VvbWV0cnlNYXApOwogfQogCi1ib29sIFJlbmRlclNW
R0Jsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rp
b24pCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCitMYXlvdXRTaXplIFJlbmRl
clNWR0Jsb2NrOjpvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlckVsZW1lbnQmIGNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UG9pbnQmLCBib29sKikgY29uc3QKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUX1VOVVNFRChjb250YWluZXIsICZj
b250YWluZXIgPT0gdGhpcy0+Y29udGFpbmVyKCkpOworICAgIEFTU0VSVCghaXNJbkZsb3dQb3Np
dGlvbmVkKCkpOworICAgIEFTU0VSVCghaXNBYnNvbHV0ZWx5UG9zaXRpb25lZCgpKTsKKyAgICBB
U1NFUlQoIWlzSW5saW5lKCkpOworICAgIHJldHVybiBMYXlvdXRTaXplKCk7CiB9CisjZW5kaWYK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdC
bG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oCmlu
ZGV4IGMxNDZkZGFlZjIwYjUzYzRkNDFhNTk0ODRhOTc0Y2FkZmNkNmYzNTYuLjhlMWQ3YzgxMmU4
NGMyNWY5YTRlYjYwYmVjNTIyZDViYTlhY2NmMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIGlzUmVuZGVyU1ZHQmxvY2soKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAK
ICAgICB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKLQorICAgIHZvaWQgYWJzb2x1
dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKSBmaW5hbDsKIAogI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5H
SU5FKQpAQCAtNTksOCArNTksOSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBtYXBMb2NhbFRvQ29u
dGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBU
cmFuc2Zvcm1TdGF0ZSYsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29sKiB3YXNG
aXhlZCkgY29uc3QgZmluYWw7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1Rv
Q29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQs
IFJlbmRlckdlb21ldHJ5TWFwJikgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBmaW5hbDsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZH
X0VOR0lORSkKKyAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Db250YWluZXIoUmVuZGVyRWxlbWVu
dCYsIGNvbnN0IExheW91dFBvaW50JiwgYm9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQgPSBudWxs
cHRyKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKaW5k
ZXggNTg4YWYxYTFmNzc3Mjk1MzEyOTdlY2Q5MGJjNjBiNjUzMjdmMWVhYi4uM2ViMmM1NmE5OGMw
YTU2YzliZDJmZTFiMWNkZjAyMmMzNzkyYjUzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyU1ZHSW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgog
I2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVscGVycy5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aExp
c3QuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgpAQCAtNTcsMTAgKzU4LDYgQEAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlclNWR1RleHQpOwogCiBSZW5kZXJTVkdU
ZXh0OjpSZW5kZXJTVkdUZXh0KFNWR1RleHRFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYm
IHN0eWxlKQogICAgIDogUmVuZGVyU1ZHQmxvY2soZWxlbWVudCwgV1RGTW92ZShzdHlsZSkpCi0g
ICAgLCBtX25lZWRzUmVvcmRlcmluZyhmYWxzZSkKLSAgICAsIG1fbmVlZHNQb3NpdGlvbmluZ1Zh
bHVlc1VwZGF0ZShmYWxzZSkKLSAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkKLSAg
ICAsIG1fbmVlZHNUZXh0TWV0cmljc1VwZGF0ZShmYWxzZSkKIHsKIH0KIApAQCAtMzExLDE1ICsz
MDgsMjggQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZUZvbnRJbkFsbERlc2NlbmRhbnRzKFJl
bmRlck9iamVjdCogc3RhcnQsIFNWR1RleHRMYXlvdXQKIAogdm9pZCBSZW5kZXJTVkdUZXh0Ojps
YXlvdXQoKQogeworICAgIGF1dG8gaXNMYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCA9IFsmXSgp
IHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICAgICAgcmV0dXJuIGRv
Y3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpOworI2Vsc2UK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgfTsKKwogICAgIFN0YWNrU3RhdHM6
OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBBU1NFUlQobmVlZHNMYXlv
dXQoKSk7Ci0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgU1ZHUmVuZGVyU3Vw
cG9ydDo6Y2hlY2tGb3JTVkdSZXBhaW50RHVyaW5nTGF5b3V0KCp0aGlzKSk7CisgICAgTGF5b3V0
UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgaXNMYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgp
ID8gY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgOiBTVkdSZW5kZXJTdXBwb3J0OjpjaGVj
a0ZvclNWR1JlcGFpbnREdXJpbmdMYXlvdXQoKnRoaXMpKTsKKworICAgIC8vIEZJWE1FOiBbTEJT
RV0gVXBzdHJlYW0gU1ZHTGVuZ3RoQ29udGV4dCBjaGFuZ2VzCisgICAgLy8gdGV4dEVsZW1lbnQo
KS51cGRhdGVMZW5ndGhDb250ZXh0KCk7CiAKICAgICBib29sIHVwZGF0ZUNhY2hlZEJvdW5kYXJp
ZXNJblBhcmVudHMgPSBmYWxzZTsKLSAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgewot
ICAgICAgICBtX2xvY2FsVHJhbnNmb3JtID0gdGV4dEVsZW1lbnQoKS5hbmltYXRlZExvY2FsVHJh
bnNmb3JtKCk7Ci0gICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKLSAgICAg
ICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAgaWYgKCFpc0xh
eWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKG1fbmVlZHNUcmFuc2Zv
cm1VcGRhdGUpIHsKKyAgICAgICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSB0ZXh0RWxlbWVudCgp
LmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1V
cGRhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVu
dHMgPSB0cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFldmVySGFkTGF5b3V0KCkp
IHsKQEAgLTM0Nyw4ICszNTcsMTUgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQogICAg
ICAgICBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUgPSBmYWxzZTsKICAgICAgICAgdXBk
YXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgTGVnYWN5UmVuZGVyU1ZHUm9vdCogcm9vdE9iaiA9IFNWR1JlbmRlclN1cHBvcnQ6OmZpbmRU
cmVlUm9vdE9iamVjdCgqdGhpcyk7Ci0gICAgICAgIGlmIChtX25lZWRzVGV4dE1ldHJpY3NVcGRh
dGUgfHwgKHJvb3RPYmogJiYgcm9vdE9iai0+aXNMYXlvdXRTaXplQ2hhbmdlZCgpKSkgeworICAg
ICAgICBib29sIGlzTGF5b3V0U2l6ZUNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGF1dG8q
IGxlZ2FjeVJvb3RPYmplY3QgPSBsaW5lYWdlT2ZUeXBlPExlZ2FjeVJlbmRlclNWR1Jvb3Q+KCp0
aGlzKS5maXJzdCgpKQorICAgICAgICAgICAgaXNMYXlvdXRTaXplQ2hhbmdlZCA9IGxlZ2FjeVJv
b3RPYmplY3QtPmlzTGF5b3V0U2l6ZUNoYW5nZWQoKTsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURf
U1ZHX0VOR0lORSkKKyAgICAgICAgZWxzZSBpZiAoYXV0byogcm9vdE9iamVjdCA9IGxpbmVhZ2VP
ZlR5cGU8UmVuZGVyU1ZHUm9vdD4oKnRoaXMpLmZpcnN0KCkpCisgICAgICAgICAgICBpc0xheW91
dFNpemVDaGFuZ2VkID0gcm9vdE9iamVjdC0+aXNMYXlvdXRTaXplQ2hhbmdlZCgpOworI2VuZGlm
CisKKyAgICAgICAgaWYgKG1fbmVlZHNUZXh0TWV0cmljc1VwZGF0ZSB8fCBpc0xheW91dFNpemVD
aGFuZ2VkKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcm9vdCBsYXlvdXQgc2l6ZSBjaGFuZ2Vk
IChlZy4gd2luZG93IHNpemUgY2hhbmdlcykgb3IgdGhlIHRyYW5zZm9ybSB0byB0aGUgcm9vdAog
ICAgICAgICAgICAgLy8gY29udGV4dCBoYXMgY2hhbmdlZCB0aGVuIHJlY29tcHV0ZSB0aGUgb24t
c2NyZWVuIGZvbnQgc2l6ZS4KICAgICAgICAgICAgIHVwZGF0ZUZvbnRJbkFsbERlc2NlbmRhbnRz
KHRoaXMsICZtX2xheW91dEF0dHJpYnV0ZXNCdWlsZGVyKTsKQEAgLTM2NSwzMyArMzgyLDQ0IEBA
IHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKICAgICAvLyBSZWR1Y2VkIHZlcnNpb24gb2Yg
UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKCksIHdoaWNoIG9ubHkgdGFrZXMgY2FyZSBvZiBTVkcg
dGV4dC4KICAgICAvLyBBbGwgaWYgYnJhbmNoZXMgdGhhdCBjb3VsZCBjYXVzZSBlYXJseSBleGl0
IGluIFJlbmRlckJsb2NrcyBsYXlvdXRCbG9jaygpIG1ldGhvZCBhcmUgdHVybmVkIGludG8gYXNz
ZXJ0aW9ucy4KICAgICBBU1NFUlQoIWlzSW5saW5lKCkpOwotICAgIEFTU0VSVCghc2ltcGxpZmll
ZExheW91dCgpKTsKICAgICBBU1NFUlQoIXNjcm9sbHNPdmVyZmxvdygpKTsKICAgICBBU1NFUlQo
IWhhc0NvbnRyb2xDbGlwKCkpOwogICAgIEFTU0VSVCghbXVsdGlDb2x1bW5GbG93KCkpOwogICAg
IEFTU0VSVCghcG9zaXRpb25lZE9iamVjdHMoKSk7Ci0gICAgQVNTRVJUKCFtX292ZXJmbG93KTsK
ICAgICBBU1NFUlQoIWlzQW5vbnltb3VzQmxvY2soKSk7CisgICAgaWYgKCFpc0xheWVyQmFzZWRT
VkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgQVNTRVJUKCFzaW1wbGlmaWVkTGF5b3V0KCkp
OworICAgICAgICBBU1NFUlQoIW1fb3ZlcmZsb3cpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBX
ZSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gb25seSBsYXlvdXQgdGhlIGNoaWxkIGJveGVzLCBpZiBu
ZWVkZWQuCisgICAgYXV0byBsYXlvdXRDaGFuZ2VkID0gZXZlckhhZExheW91dCgpICYmIHNlbGZO
ZWVkc0xheW91dCgpOworICAgIGF1dG8gb2xkQm91bmRhcmllcyA9IG9iamVjdEJvdW5kaW5nQm94
KCk7CiAKLSAgICBpZiAoIWZpcnN0Q2hpbGQoKSkKKyAgICBpZiAoIWZpcnN0Q2hpbGQoKSkgewor
ICAgICAgICB1cGRhdGVQb3NpdGlvbkFuZE92ZXJmbG93KHsgfSk7CiAgICAgICAgIHNldENoaWxk
cmVuSW5saW5lKHRydWUpOworICAgIH0KIAotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpbmQg
YSB3YXkgdG8gb25seSBsYXlvdXQgdGhlIGNoaWxkIGJveGVzLCBpZiBuZWVkZWQuCi0gICAgRmxv
YXRSZWN0IG9sZEJvdW5kYXJpZXMgPSBvYmplY3RCb3VuZGluZ0JveCgpOwogICAgIEFTU0VSVChj
aGlsZHJlbklubGluZSgpKTsKKwogICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxUb3A7CiAg
ICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbEJvdHRvbTsKICAgICByZWJ1aWxkRmxvYXRpbmdP
YmplY3RTZXRGcm9tSW50cnVkaW5nRmxvYXRzKCk7CiAgICAgbGF5b3V0SW5saW5lQ2hpbGRyZW4o
dHJ1ZSwgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKIAorICAgIC8v
IHVwZGF0ZVBvc2l0aW9uQW5kT3ZlcmZsb3coKSBpcyBjYWxsZWQgYnkgU1ZHUm9vdElubGluZUJv
eCwgYWZ0ZXIgZm9yY2VMYXlvdXRJbmxpbmVDaGlsZHJlbigpIHJhbiwgYmVmb3JlIHRoaXMgcG9p
bnQgaXMgcmVhY2hlZC4KICAgICBpZiAobV9uZWVkc1Jlb3JkZXJpbmcpCiAgICAgICAgIG1fbmVl
ZHNSZW9yZGVyaW5nID0gZmFsc2U7CiAKLSAgICBpZiAoIXVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJ
blBhcmVudHMpCisgICAgaWYgKGlzTGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAg
ICAgICB1cGRhdGVMYXllclRyYW5zZm9ybSgpOworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFy
aWVzSW5QYXJlbnRzID0gZmFsc2U7IC8vIE5vIGxvbmdlciBuZWVkZWQgZm9yIExCU0UuCisgICAg
fSBlbHNlIGlmICghdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cykKICAgICAgICAgdXBk
YXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IG9sZEJvdW5kYXJpZXMgIT0gb2JqZWN0Qm91
bmRpbmdCb3goKTsKIAogICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNs
aWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCi0gICAgaWYgKGV2ZXJIYWRMYXlvdXQoKSAmJiBz
ZWxmTmVlZHNMYXlvdXQoKSkKKyAgICBpZiAobGF5b3V0Q2hhbmdlZCkKICAgICAgICAgU1ZHUmVz
b3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQoKnRoaXMpOwogCiAgICAgLy8gSWYgb3Vy
IGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMuCkBAIC00MDQsNiArNDMyLDkgQEAg
dm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQogCiBib29sIFJlbmRlclNWR1RleHQ6Om5vZGVB
dEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBo
aXRUZXN0QWN0aW9uKQogeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAg
IEFTU0VSVCghZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVk
KCkpOworI2VuZGlmCiAgICAgUG9pbnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJF
dmVudHNIaXRSdWxlczo6U1ZHX1RFWFRfSElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUoKS5lZmZl
Y3RpdmVQb2ludGVyRXZlbnRzKCkpOwogICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxlKCkudmlz
aWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUpOwogICAgIGlmIChpc1Zpc2libGUgfHwg
IWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7CkBAIC00MTIsNyArNDQzLDcgQEAgYm9vbCBSZW5k
ZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWwKICAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IHZhbHVl
T3JEZWZhdWx0KGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkpLm1hcFBvaW50KHBv
aW50SW5QYXJlbnQpOwogCiAgICAgICAgICAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50
SW5DbGlwcGluZ0FyZWEoKnRoaXMsIGxvY2FsUG9pbnQpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
ICAgICBTVkdIaXRUZXN0Q3ljbGVEZXRlY3Rpb25TY29wZSBoaXRUZXN0U2NvcGUoKnRoaXMpOwog
CkBAIC00MjQsNiArNDU1LDMzIEBAIGJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0RmxvYXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCitib29sIFJl
bmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNv
bnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0
aW9uIGhpdFRlc3RBY3Rpb24pCit7CisgICAgQVNTRVJUKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5s
YXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKTsKKyAgICBhdXRvIGFkanVzdGVkTG9jYXRpb24g
PSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CisKKyAgICBQb2ludGVyRXZlbnRzSGl0
UnVsZXMgaGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfVEVYVF9ISVRURVNUSU5H
LCByZXF1ZXN0LCBzdHlsZSgpLnBvaW50ZXJFdmVudHMoKSk7CisgICAgYm9vbCBpc1Zpc2libGUg
PSAoc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSk7CisgICAgaWYg
KGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKKyAgICAgICAgaWYgKCho
aXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN0eWxlKCkuc3ZnU3R5bGUoKS5oYXNTdHJva2UoKSB8
fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCisgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRG
aWxsICYmIChzdHlsZSgpLnN2Z1N0eWxlKCkuaGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJl
RmlsbCkpKSB7CisgICAgICAgICAgICBhdXRvIGxvY2FsUG9pbnQgPSBsb2NhdGlvbkluQ29udGFp
bmVyLnBvaW50KCk7CisgICAgICAgICAgICBhdXRvIGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFu
c2xhdGlvbiA9IG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpIC0gYWRqdXN0ZWRMb2NhdGlvbjsK
KyAgICAgICAgICAgIGxvY2FsUG9pbnQubW92ZShjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNs
YXRpb24pOworCisgICAgICAgICAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlw
cGluZ0FyZWEoKnRoaXMsIGxvY2FsUG9pbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAgICAgU1ZHSGl0VGVzdEN5Y2xlRGV0ZWN0aW9uU2NvcGUgaGl0VGVzdFNj
b3BlKCp0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQo
cmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwg
aGl0VGVzdEFjdGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisjZW5kaWYKKwogVmlzaWJsZVBvc2l0aW9uIFJlbmRlclNWR1RleHQ6OnBvc2l0aW9uRm9yUG9p
bnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250ZW50cywgY29uc3QgUmVuZGVyRnJhZ21l
bnRDb250YWluZXIqIGZyYWdtZW50KQogewogICAgIExlZ2FjeVJvb3RJbmxpbmVCb3gqIHJvb3RC
b3ggPSBmaXJzdFJvb3RCb3goKTsKQEAgLTQ0MCwxOCArNDk4LDU1IEBAIFZpc2libGVQb3NpdGlv
biBSZW5kZXJTVkdUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2lu
dEluQ29udGVuCiAgICAgcmV0dXJuIGNsb3Nlc3RCb3gtPnJlbmRlcmVyKCkucG9zaXRpb25Gb3JQ
b2ludCh7IHBvaW50SW5Db250ZW50cy54KCksIExheW91dFVuaXQoY2xvc2VzdEJveC0+eSgpKSB9
LCBmcmFnbWVudCk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVRdWFkcyhWZWN0
b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdAotewotICAgIHF1YWRz
LmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKHN0cm9rZUJvdW5kaW5nQm94KCksIFVzZVRyYW5z
Zm9ybXMsIHdhc0ZpeGVkKSk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHVGV4dDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JikKK3ZvaWQgUmVuZGVyU1ZHVGV4dDo6
cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCkKIHsKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQoKS5wYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6
Rm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKQot
ICAgICAgICAgcmV0dXJuOworICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6
Q2xpcHBpbmdNYXNrICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpNYXNrICYmIHBh
aW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kICYmIHBhaW50SW5mby5waGFz
ZSAhPSBQYWludFBoYXNlOjpPdXRsaW5lICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNl
OjpTZWxmT3V0bGluZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFwYWludEluZm8uc2hv
dWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgRU5BQkxF
KExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5s
YXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChzdHlsZSgpLnZpc2li
aWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpIaWRkZW4gfHwgc3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlz
cGxheVR5cGU6Ok5vbmUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gRklYTUU6
IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAgICAgLy8gaWYg
KCFTVkdSZW5kZXJTdXBwb3J0OjpzaG91bGRQYWludEhpZGRlblJlbmRlcmVyKCp0aGlzKSkKKyAg
ICAgICAgLy8gICAgIHJldHVybjsKKworICAgICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2U6OkNsaXBwaW5nTWFzaykgeworICAgICAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBV
cHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAgICAgICAgIC8vIFNWR1JlbmRl
clN1cHBvcnQ6OnBhaW50U1ZHQ2xpcHBpbmdNYXNrKCp0aGlzLCBwYWludEluZm8pOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBhZGp1c3RlZFBhaW50T2Zm
c2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgICAgICBpZiAocGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2U6Ok1hc2spIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0g
VXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgICAgICAgICAvLyBTVkdSZW5k
ZXJTdXBwb3J0OjpwYWludFNWR01hc2soKnRoaXMsIHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9m
ZnNldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFp
bnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6Ok91dGxpbmUgfHwgcGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2U6OlNlbGZPdXRsaW5lKSB7CisgICAgICAgICAgICBSZW5kZXJCbG9jazo6cGFp
bnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRJ
bmZvLmNvbnRleHQoKSk7CisKKyAgICAgICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJh
bnNsYXRpb24gPSBhZGp1c3RlZFBhaW50T2Zmc2V0IC0gbm9taW5hbFNWR0xheW91dExvY2F0aW9u
KCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkudHJhbnNsYXRlKGNvb3JkaW5hdGVTeXN0
ZW1PcmlnaW5UcmFuc2xhdGlvbi53aWR0aCgpLCBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNs
YXRpb24uaGVpZ2h0KCkpOworCisgICAgICAgIFJlbmRlckJsb2NrOjpwYWludChwYWludEluZm8s
IHBhaW50T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHBhaW50T2Zmc2V0KTsKKyNlbmRpZgogCiAgICAgUGFpbnRJbmZvIGJsb2NrSW5mbyhw
YWludEluZm8pOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihibG9j
a0luZm8uY29udGV4dCgpKTsKQEAgLTQ3OSw2ICs1NzQsMTEgQEAgRmxvYXRSZWN0IFJlbmRlclNW
R1RleHQ6OnN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKIAogRmxvYXRSZWN0IFJlbmRlclNWR1Rl
eHQ6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QKIHsKKyNpZiBFTkFCTEUo
TEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxh
eWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5nQm94KCp0aGlzKTsKKyNlbmRpZgor
CiAgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gc3Ryb2tlQm91bmRpbmdCb3goKTsKICAgICBT
VkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXMoKnRoaXMs
IHJlcGFpbnRSZWN0KTsKIApAQCAtNDg4LDQgKzU4OCwzMiBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZH
VGV4dDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdAogICAgIHJldHVybiBy
ZXBhaW50UmVjdDsKIH0KIAordm9pZCBSZW5kZXJTVkdUZXh0Ojp1cGRhdGVQb3NpdGlvbkFuZE92
ZXJmbG93KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRhcmllcykKK3sKKyNpZiBFTkFCTEUoTEFZRVJf
QkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFz
ZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgY2xlYXJPdmVyZmxvdygpOworCisgICAg
ICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBib3VuZGFyaWVzOworCisgICAgICAgIGF1dG8gYm91
bmRpbmdSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChtX29iamVjdEJvdW5kaW5nQm94KTsKKyAg
ICAgICAgc2V0TG9jYXRpb24oYm91bmRpbmdSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICBzZXRT
aXplKGJvdW5kaW5nUmVjdC5zaXplKCkpOworCisgICAgICAgIGF1dG8gb3ZlcmZsb3dSZWN0ID0g
dmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpOworICAgICAgICBpZiAoY29uc3QgYXV0byog
dGV4dFNoYWRvdyA9IHN0eWxlKCkudGV4dFNoYWRvdygpKQorICAgICAgICAgICAgdGV4dFNoYWRv
dy0+YWRqdXN0UmVjdEZvclNoYWRvdyhvdmVyZmxvd1JlY3QpOworCisgICAgICAgIGFkZFZpc3Vh
bE92ZXJmbG93KG92ZXJmbG93UmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYK
KworICAgIGF1dG8gYm91bmRpbmdSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChib3VuZGFyaWVz
KTsKKyAgICBzZXRMb2NhdGlvbihib3VuZGluZ1JlY3QubG9jYXRpb24oKSk7CisgICAgc2V0U2l6
ZShib3VuZGluZ1JlY3Quc2l6ZSgpKTsKKyAgICBtX29iamVjdEJvdW5kaW5nQm94ID0gYm91bmRp
bmdSZWN0OworICAgIEFTU0VSVChtX29iamVjdEJvdW5kaW5nQm94ID09IGZyYW1lUmVjdCgpKTsK
K30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaApp
bmRleCA0NDEyNjk4ODU3OTEzMDI0MjgyZmZmMGE4ZTY2NTFiNmI3ZjFjZGM2Li4zYWIzNjYzZTZk
MmNlMjllODVjMWE1NWMyOTZmNGQ0ZTM1YjUyZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQmxvY2suaCIKKyNpbmNsdWRl
ICJTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dExheW91dEF0
dHJpYnV0ZXNCdWlsZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDkgKzQzLDEw
IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldE5lZWRz
UG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUoKSB7IG1fbmVlZHNQb3NpdGlvbmluZ1ZhbHVlc1VwZGF0
ZSA9IHRydWU7IH0KLSAgICB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgb3ZlcnJpZGUg
eyBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQogICAgIHZvaWQgc2V0TmVlZHNUZXh0
TWV0cmljc1VwZGF0ZSgpIHsgbV9uZWVkc1RleHRNZXRyaWNzVXBkYXRlID0gdHJ1ZTsgfQotICAg
IEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgLy8gRklYTUU6IFtMQlNFXSBPbmx5IG5lZWRlZCBmb3IgbGVnYWN5IFNWRyBlbmdp
bmUuCisgICAgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIG92ZXJyaWRlIHsgbV9uZWVk
c1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KIAogICAgIHN0YXRpYyBSZW5kZXJTVkdUZXh0KiBs
b2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoUmVuZGVyT2JqZWN0Jik7CiAgICAgc3RhdGljIGNv
bnN0IFJlbmRlclNWR1RleHQqIGxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3Rvcihjb25zdCBSZW5k
ZXJPYmplY3QmKTsKQEAgLTU4LDggKzYwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHN1YnRyZWVT
dHlsZURpZENoYW5nZShSZW5kZXJTVkdJbmxpbmVUZXh0Kik7CiAgICAgdm9pZCBzdWJ0cmVlVGV4
dERpZENoYW5nZShSZW5kZXJTVkdJbmxpbmVUZXh0Kik7CiAKLSAgICBGbG9hdFJlY3Qgb2JqZWN0
Qm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmcmFtZVJlY3QoKTsgfQotICAg
IEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0
UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb2JqZWN0Qm91
bmRpbmdCb3g7IH0KKyAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCBmaW5h
bDsKKyAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBm
aW5hbDsKKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIExheW91dFJl
Y3QgdmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIFNWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVWaXN1YWxPdmVyZmxvd1JlY3QoKnRoaXMpOyB9Cisj
ZW5kaWYKKyAgICB2b2lkIHVwZGF0ZVBvc2l0aW9uQW5kT3ZlcmZsb3coY29uc3QgRmxvYXRSZWN0
Jik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBncmFwaGljc0VsZW1lbnQoKSBjb25zdCA9IGRlbGV0
ZTsKQEAgLTY4LDI4ICs3Niw0MCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNTVkdUZXh0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCBwYWludChQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlOwotICAgIGJvb2wgbm9kZUF0RmxvYXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoTEFZ
RVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25J
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0
QWN0aW9uKSBvdmVycmlkZTsKKyNlbmRpZgogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZv
clBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
KSBvdmVycmlkZTsKIAotICAgIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKKyAgICBib29sIHJl
cXVpcmVzTGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFT
RURfU1ZHX0VOR0lORSkKKyAgICAgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJh
c2VkU1ZHRW5naW5lRW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIHZvaWQgYWJzb2x1dGVRdWFkcyhW
ZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIGxheW91dCgpIG92ZXJyaWRlOwogCiAgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKSBvdmVy
cmlkZTsKIAorICAgIC8vIEZJWE1FOiBbTEJTRV0gQmVnaW4gY29kZSBvbmx5IG5lZWRlZCBmb3Ig
bGVnYWN5IFNWRyBlbmdpbmUuCisgICAgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJl
bnQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fbG9jYWxU
cmFuc2Zvcm07IH0KICAgICBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisgICAgLy8gRklYTUU6IFtMQlNF
XSBFbmQgY29kZSBvbmx5IG5lZWRlZCBmb3IgbGVnYWN5IFNWRyBlbmdpbmUuCiAKICAgICBib29s
IHNob3VsZEhhbmRsZVN1YnRyZWVNdXRhdGlvbnMoKSBjb25zdDsKIAotICAgIGJvb2wgbV9uZWVk
c1Jlb3JkZXJpbmcgOiAxOwotICAgIGJvb2wgbV9uZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRl
IDogMTsKLSAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwotICAgIGJvb2wgbV9u
ZWVkc1RleHRNZXRyaWNzVXBkYXRlIDogMTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRy
YW5zZm9ybTsKKyAgICBib29sIG1fbmVlZHNSZW9yZGVyaW5nIDogMSB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUgOiAxIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxIHsgdHJ1ZSB9OyAvLyBGSVhNRTogW0xCU0Vd
IE9ubHkgbmVlZGVkIGZvciBsZWdhY3kgU1ZHIGVuZ2luZS4KKyAgICBib29sIG1fbmVlZHNUZXh0
TWV0cmljc1VwZGF0ZSA6IDEgeyBmYWxzZSB9OworICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2Fs
VHJhbnNmb3JtOyAvLyBGSVhNRTogW0xCU0VdIE9ubHkgbmVlZGVkIGZvciBsZWdhY3kgU1ZHIGVu
Z2luZS4KICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIgbV9sYXlvdXRBdHRyaWJ1
dGVzQnVpbGRlcjsKICAgICBWZWN0b3I8U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqPiBtX2xheW91
dEF0dHJpYnV0ZXM7CisgICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSb290SW5saW5lQm94LmNwcAppbmRleCA5YzZjMDk4MDEzNzZiY2QzN2RkZmY5YTM5MGEz
ZWIwMzY2OTQzOWYzLi4xYzBjYThiZmMwMjYzODMwYWFiOTg3OTk2OTY0ZDRlM2E5MmFlY2RkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3gu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5j
cHAKQEAgLTQ2LDIxICs0NiwzNyBAQCBTVkdSb290SW5saW5lQm94OjpTVkdSb290SW5saW5lQm94
KFJlbmRlclNWR1RleHQmIHJlbmRlclNWR1RleHQpCiB7CiB9CiAKLVJlbmRlclNWR1RleHQmIFNW
R1Jvb3RJbmxpbmVCb3g6OnJlbmRlclNWR1RleHQoKQorUmVuZGVyU1ZHVGV4dCYgU1ZHUm9vdElu
bGluZUJveDo6cmVuZGVyU1ZHVGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvd25jYXN0PFJl
bmRlclNWR1RleHQ+KGJsb2NrRmxvdygpKTsKIH0KIAotdm9pZCBTVkdSb290SW5saW5lQm94Ojpw
YWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
LCBMYXlvdXRVbml0LCBMYXlvdXRVbml0KQordm9pZCBTVkdSb290SW5saW5lQm94OjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBMYXlv
dXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKIHsKICAgICBBU1NFUlQocGFp
bnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2U6OlNlbGVjdGlvbik7CiAgICAgQVNTRVJUKCFwYWludEluZm8uY29udGV4
dCgpLnBhaW50aW5nRGlzYWJsZWQoKSk7CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VO
R0lORSkKKyAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNl
ZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAgICBhdXRvIG92ZXJmbG93UmVjdCh2aXN1YWxP
dmVyZmxvd1JlY3QobGluZVRvcCwgbGluZUJvdHRvbSkpOworICAgICAgICBmbGlwRm9yV3JpdGlu
Z01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICAgICAgb3ZlcmZsb3dSZWN0Lm1vdmVCeShwYWludE9m
ZnNldCk7CisKKyAgICAgICAgaWYgKCFwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKG92ZXJmbG93
UmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0obGluZVRvcCk7CisgICAgVU5VU0VEX1BBUkFNKGxpbmVCb3R0b20pOworI2VuZGlmCisKICAg
ICBib29sIGlzUHJpbnRpbmcgPSByZW5kZXJTVkdUZXh0KCkuZG9jdW1lbnQoKS5wcmludGluZygp
OwogICAgIGJvb2wgaGFzU2VsZWN0aW9uID0gIWlzUHJpbnRpbmcgJiYgc2VsZWN0aW9uU3RhdGUo
KSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lOwogICAgIGJvb2wgc2hvdWxk
UGFpbnRTZWxlY3Rpb25IaWdobGlnaHQgPSAhKHBhaW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRh
aW5zKFBhaW50QmVoYXZpb3I6OlNraXBTZWxlY3Rpb25IaWdobGlnaHQpKTsKIAogICAgIFBhaW50
SW5mbyBjaGlsZFBhaW50SW5mbyhwYWludEluZm8pOworICAgIGNoaWxkUGFpbnRJbmZvLnVwZGF0
ZVN1YnRyZWVQYWludFJvb3RGb3JDaGlsZHJlbigmcmVuZGVyZXIoKSk7CisKICAgICBpZiAoaGFz
U2VsZWN0aW9uICYmIHNob3VsZFBhaW50U2VsZWN0aW9uSGlnaGxpZ2h0KSB7CiAgICAgICAgIGZv
ciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
T25MaW5lKCkpIHsKICAgICAgICAgICAgIGlmIChpczxTVkdJbmxpbmVUZXh0Qm94PigqY2hpbGQp
KQpAQCAtNzAsNiArODYsMTcgQEAgdm9pZCBTVkdSb290SW5saW5lQm94OjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2UKICAgICAgICAgfQog
ICAgIH0KIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChyZW5k
ZXJlcigpLmRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgp
KSB7CisgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVy
ZXIoKS5pc1RleHQoKSB8fCAhY2hpbGQtPmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWludGlu
Z0xheWVyKCkpCisgICAgICAgICAgICAgICAgY2hpbGQtPnBhaW50KGNoaWxkUGFpbnRJbmZvLCBw
YWludE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm47CisgICAgfQorI2VuZGlmCisKICAgICBTVkdSZW5kZXJpbmdDb250ZXh0IHJlbmRlcmlu
Z0NvbnRleHQocmVuZGVyU1ZHVGV4dCgpLCBwYWludEluZm8sIFNWR1JlbmRlcmluZ0NvbnRleHQ6
OlNhdmVHcmFwaGljc0NvbnRleHQpOwogICAgIGlmIChyZW5kZXJpbmdDb250ZXh0LmlzUmVuZGVy
aW5nUHJlcGFyZWQoKSkgewogICAgICAgICBmb3IgKGF1dG8qIGNoaWxkID0gZmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKQpAQCAtMTcwLDkgKzE5Nyw3IEBA
IHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0Um9vdEJveChjb25zdCBGbG9hdFJlY3QmIGNo
aWxkUmVjdCkKICAgICBSZW5kZXJTVkdUZXh0JiBwYXJlbnRCbG9jayA9IHJlbmRlclNWR1RleHQo
KTsKIAogICAgIC8vIEZpbmFsbHksIGFzc2lnbiB0aGUgcm9vdCBibG9jayBwb3NpdGlvbiwgbm93
IHRoYXQgYWxsIGNvbnRlbnQgaXMgbGFpZCBvdXQuCi0gICAgTGF5b3V0UmVjdCBib3VuZGluZ1Jl
Y3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KGNoaWxkUmVjdCk7Ci0gICAgcGFyZW50QmxvY2suc2V0
TG9jYXRpb24oYm91bmRpbmdSZWN0LmxvY2F0aW9uKCkpOwotICAgIHBhcmVudEJsb2NrLnNldFNp
emUoYm91bmRpbmdSZWN0LnNpemUoKSk7CisgICAgcGFyZW50QmxvY2sudXBkYXRlUG9zaXRpb25B
bmRPdmVyZmxvdyhjaGlsZFJlY3QpOwogCiAgICAgLy8gUG9zaXRpb24gYWxsIGNoaWxkcmVuIHJl
bGF0aXZlIHRvIHRoZSBwYXJlbnQgYmxvY2suCiAgICAgZm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewpAQCAtMTg3LDYg
KzIxMiw4IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0Um9vdEJveChjb25zdCBGbG9h
dFJlY3QmIGNoaWxkUmVjdCkKICAgICBzZXRZKDApOwogICAgIHNldExvZ2ljYWxXaWR0aChjaGls
ZFJlY3Qud2lkdGgoKSk7CiAgICAgc2V0TG9naWNhbEhlaWdodChjaGlsZFJlY3QuaGVpZ2h0KCkp
OworCisgICAgYXV0byBib3VuZGluZ1JlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KGNoaWxkUmVj
dCk7CiAgICAgc2V0TGluZVRvcEJvdHRvbVBvc2l0aW9ucygwLCBib3VuZGluZ1JlY3QuaGVpZ2h0
KCksIDAsIGJvdW5kaW5nUmVjdC5oZWlnaHQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmgKaW5kZXggMGQxNjI2OWViNWMxNzM3YTBm
MzEyYzdkZWFhNDkyOTg3MWE0NjFkNi4uYWYxYjEzZWFkNWRhYjExNGYxMGYwNmZiYTZlZTJlN2E3
ZDU5YzQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290
SW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5s
aW5lQm94LmgKQEAgLTM1LDggKzM1LDYgQEAgY2xhc3MgU1ZHUm9vdElubGluZUJveCBmaW5hbCA6
IHB1YmxpYyBMZWdhY3lSb290SW5saW5lQm94IHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBTVkdS
b290SW5saW5lQm94KFJlbmRlclNWR1RleHQmKTsKIAotICAgIFJlbmRlclNWR1RleHQmIHJlbmRl
clNWR1RleHQoKTsKLQogICAgIGZsb2F0IHZpcnR1YWxMb2dpY2FsSGVpZ2h0KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9sb2dpY2FsSGVpZ2h0OyB9CiAgICAgdm9pZCBzZXRMb2dpY2FsSGVp
Z2h0KGZsb2F0IGhlaWdodCkgeyBtX2xvZ2ljYWxIZWlnaHQgPSBoZWlnaHQ7IH0KIApAQCAtNDks
NiArNDcsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5p
dCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIEhpdFRlc3RBY3Rpb24pIGZpbmFsOwog
CiBwcml2YXRlOgorICAgIFJlbmRlclNWR1RleHQmIHJlbmRlclNWR1RleHQoKSBjb25zdDsKKwog
ICAgIGJvb2wgaXNTVkdSb290SW5saW5lQm94KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIHZvaWQgcmVvcmRlclZhbHVlTGlzdHNUb0xvZ2ljYWxPcmRlcihWZWN0b3I8U1ZH
VGV4dExheW91dEF0dHJpYnV0ZXMqPiYpOwogICAgIHZvaWQgbGF5b3V0Q2hhcmFjdGVyc0luVGV4
dEJveGVzKExlZ2FjeUlubGluZUZsb3dCb3gqLCBTVkdUZXh0TGF5b3V0RW5naW5lJik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5kZXggNDE0ODE1MDg1ZGJjYWEzOTRkYzExZjkwNTBlZDM4
YzcwYjgxNGI1My4uMjg2MmQzNjA4OTEwMzAyZjFkZGVlZTdmZTFiMmM4YWRkOTdkNGQwMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApAQCAtNTMxLDcgKzUzMSw3IEBAIHN0YXRpYyBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gY3JlYXRlU1ZH
TGF5ZXJBd2FyZUVsCiAgICAgLy8gTGlzdCBvZiBhbGwgU1ZHIGVsZW1lbnRzIHdob3NlIHJlbmRl
cmVycyBzdXBwb3J0IHRoZSBsYXllciBhd2FyZSBsYXlvdXQgLyBwYWludGluZyAvIGhpdC10ZXN0
aW5nIG1vZGUgKCdMQlNFLW1vZGUnKS4KICAgICB1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CiAg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHNl
dDsKLSAgICBmb3IgKGF1dG8mIHRhZyA6IHsgZ1RhZy5nZXQoKSwgcmVjdFRhZy5nZXQoKSB9KQor
ICAgIGZvciAoYXV0byYgdGFnIDogeyBnVGFnLmdldCgpLCByZWN0VGFnLmdldCgpLCB0ZXh0VGFn
LmdldCgpIH0pCiAgICAgICAgIHNldC5hZGQodGFnLmxvY2FsTmFtZSgpKTsKICAgICByZXR1cm4g
c2V0OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459413</attachid>
            <date>2022-05-16 04:11:21 -0700</date>
            <delta_ts>2022-05-17 10:51:42 -0700</delta_ts>
            <desc>Patch, v5</desc>
            <filename>bug-239743-20220516041112.patch</filename>
            <type>text/plain</type>
            <size>41686</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">RnJvbSBmNTMxOTc3MDUwY2ZjZWQ5Zjg4MTljMGI2N2VmNjJhYzE2N2VjMjQ5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtvbGFzIFppbW1lcm1hbm4gPG56aW1tZXJtYW5uQGlnYWxp
YS5jb20+CkRhdGU6IFRodSwgMTQgQXByIDIwMjIgMDQ6MzM6MDUgLTA3MDAKU3ViamVjdDogW1BB
VENIXSBbTEJTRV0gQWN0aXZhdGUgdGV4dCByZW5kZXJpbmcsIGJ5IHJlLXVzaW5nIFJlbmRlclNW
R1RleHQKIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzk3NDMKClJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKQWRhcHQgUmVuZGVyU1ZHVGV4dCB0byBiZSB1c2Fi
bGUgYXQgdGhlIHNhbWUgdGltZSBmcm9tIGxlZ2FjeSBTVkcgZW5naW5lIChhcwppdCBpcyByaWdo
dCBub3cpIGFuZCBmcm9tIExCU0UuIFRoaXMgcmVxdWlyZXMgbWluaW1hbCBlZmZvcnQsIHNpbmNl
IFJlbmRlclNWR1RleHQKYWxyZWFkeSBpbmhlcml0ZWQgZnJvbSBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0LCBzbyB0aGVyZSdzIG5vIG5lZWQgZm9yIHRoZSBjcmVhdGlvbgpvZiBMZWdhY3lSZW5kZXJT
VkdUZXh0IC8gUmVuZGVyU1ZHVGV4dCBhcyBzZXBhcmF0ZWQgbGVnYWN5L0xCU0UgaW1wbGVtZW50
YXRpb25zLgoKTW9zdCBTVkcgMS4xIDx0ZXh0PiB0ZXN0Y2FzZXMgYWxyZWFkeSBwYXNzIG91dCBv
ZiB0aGUgYm94IHdpdGggdGhpcyBjaGFuZ2UuClRoZSBuZXh0IHBhdGNoIGFmdGVyIHRleHQgc3Vw
cG9ydCB3aWxsIGFkZCBhIG5ldyAnbWFjb3Mtd2syLWxic2UteHh4JyBzcGVjaWZpYwpwbGF0Zm9y
bSBiYXNlbGluZSwgc28gdGhhdCB3ZSBjYW4gcnVuIHRlc3RzIExCU0UgYWdhaW50IGlzZWxmIChm
aW5hbGx5IHdlIGNhbgppbmNsdWRlIHRoZSBwcm9ncmVzc2lvbnMgaW4gdGhlIGZvcm0gb2YgVGVz
dEV4cGVjdGF0aW9uIGZpbGUgY2hhbmdlcywgb25jZSBhIGNlcnRhaW4KcGF0Y2ggaW1wbGVtZW50
cyBhIG5ldyBmZWF0dXJlIGluIExCU0UuIFRoaXMgbWFrZXMgc2Vuc2Ugbm93IGFzIGVub3VnaCBp
cyB1cHN0cmVhbWVkCnRoYXQgYSBjb25zaWRlcmFibGUgYW1vdW50IG9mIHRoZSBTVkcgMS4xIHRl
c3RzdWl0ZSBhbHJlYWR5IHBhc3NlcyBwaXhlbCBwZXJmZWN0LgoKQ292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cywgbm8gY2hhbmdlIGluIGJlaGF2aW91ci4gKEhvd2V2ZXIgdGVzdGFiaWxpdHkgZm9y
IExCU0UgaXMgcmVhZHkgc29vbiEpLgoKKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5jcHA6CihXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJl
Y3RJblNWR0NvbnRhaW5lciBjb25zdCk6CiogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CihX
ZWJDb3JlOjpvYmplY3RJc1JlbGF5b3V0Qm91bmRhcnkpOgoqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHQmxvY2suY3BwOgooV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OnVwZGF0ZUZyb21TdHlsZSk6
CihXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6YWJzb2x1dGVSZWN0cyBjb25zdCk6CihXZWJDb3Jl
OjpSZW5kZXJTVkdCbG9jazo6YWJzb2x1dGVRdWFkcyBjb25zdCk6CihXZWJDb3JlOjpSZW5kZXJT
VkdCbG9jazo6c3R5bGVEaWRDaGFuZ2UpOgooV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmNvbXB1
dGVPdmVyZmxvdyk6CihXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6Y2xpcHBlZE92ZXJmbG93UmVj
dCBjb25zdCk6CihXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6Y29tcHV0ZVZpc2libGVSZWN0SW5D
b250YWluZXIgY29uc3QpOgooV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVGbG9hdFZp
c2libGVSZWN0SW5Db250YWluZXIgY29uc3QpOgooV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OnB1
c2hNYXBwaW5nVG9Db250YWluZXIgY29uc3QpOgooV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6Om9m
ZnNldEZyb21Db250YWluZXIgY29uc3QpOgooV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6Om5vZGVB
dFBvaW50KTogRGVsZXRlZC4KKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmg6CiogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcDoKKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OlJl
bmRlclNWR1RleHQpOgooV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bGF5b3V0KToKKFdlYkNvcmU6
OlJlbmRlclNWR1RleHQ6Om5vZGVBdEZsb2F0UG9pbnQpOgooV2ViQ29yZTo6UmVuZGVyU1ZHVGV4
dDo6bm9kZUF0UG9pbnQpOgooV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6cGFpbnQpOgooV2ViQ29y
ZTo6UmVuZGVyU1ZHVGV4dDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMgY29uc3QpOgoo
V2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6dXBkYXRlUG9zaXRpb25BbmRPdmVyZmxvdyk6CihXZWJD
b3JlOjpSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVF1YWRzIGNvbnN0KTogRGVsZXRlZC4KKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaDoKKiByZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVC
b3guY3BwOgooV2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6cmVuZGVyU1ZHVGV4dCBjb25zdCk6
CihXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpwYWludCk6CihXZWJDb3JlOjpTVkdSb290SW5s
aW5lQm94OjpsYXlvdXRSb290Qm94KToKKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OnJlbmRl
clNWR1RleHQpOiBEZWxldGVkLgoqIHJlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5oOgoq
IHN2Zy9TVkdFbGVtZW50LmNwcDoKKFdlYkNvcmU6OmNyZWF0ZVNWR0xheWVyQXdhcmVFbGVtZW50
U2V0KToKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
fCAgNTcgKysrKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAg
ICAgfCAgNTIgKystLS0KIC4uLi9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAg
ICAgICB8ICAgNiArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAg
ICAgIHwgICA1ICsKIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3Bw
ICB8ICA3MiArKysrKystCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Js
b2NrLmggfCAgIDcgKy0KIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5j
cHAgICB8IDE4MiArKysrKysrKysrKysrKystLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVGV4dC5oICB8ICA0NiArKystLQogLi4uL3JlbmRlcmluZy9zdmcvU1ZHUm9v
dElubGluZUJveC5jcHAgICAgICAgIHwgIDM3ICsrKy0KIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUm9vdElubGluZUJveC5oICB8ICAgNCArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnQuY3BwICAgICAgICAgICAgIHwgICAyICstCiAxMSBmaWxlcyBjaGFuZ2VkLCAzODcgaW5z
ZXJ0aW9ucygrKSwgODMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDhjNDdhY2E2YjZjZC4u
ZjEyNTZjZmVjNzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMjItMDUtMTYgIE5p
a29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0xC
U0VdIEFjdGl2YXRlIHRleHQgcmVuZGVyaW5nLCBieSByZS11c2luZyBSZW5kZXJTVkdUZXh0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzk3NDMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGFwdCBSZW5k
ZXJTVkdUZXh0IHRvIGJlIHVzYWJsZSBhdCB0aGUgc2FtZSB0aW1lIGZyb20gbGVnYWN5IFNWRyBl
bmdpbmUgKGFzCisgICAgICAgIGl0IGlzIHJpZ2h0IG5vdykgYW5kIGZyb20gTEJTRS4gVGhpcyBy
ZXF1aXJlcyBtaW5pbWFsIGVmZm9ydCwgc2luY2UgUmVuZGVyU1ZHVGV4dAorICAgICAgICBhbHJl
YWR5IGluaGVyaXRlZCBmcm9tIFJlbmRlckxheWVyTW9kZWxPYmplY3QsIHNvIHRoZXJlJ3Mgbm8g
bmVlZCBmb3IgdGhlIGNyZWF0aW9uCisgICAgICAgIG9mIExlZ2FjeVJlbmRlclNWR1RleHQgLyBS
ZW5kZXJTVkdUZXh0IGFzIHNlcGFyYXRlZCBsZWdhY3kvTEJTRSBpbXBsZW1lbnRhdGlvbnMuCisK
KyAgICAgICAgTW9zdCBTVkcgMS4xIDx0ZXh0PiB0ZXN0Y2FzZXMgYWxyZWFkeSBwYXNzIG91dCBv
ZiB0aGUgYm94IHdpdGggdGhpcyBjaGFuZ2UuCisgICAgICAgIFRoZSBuZXh0IHBhdGNoIGFmdGVy
IHRleHQgc3VwcG9ydCB3aWxsIGFkZCBhIG5ldyAnbWFjb3Mtd2syLWxic2UteHh4JyBzcGVjaWZp
YworICAgICAgICBwbGF0Zm9ybSBiYXNlbGluZSwgc28gdGhhdCB3ZSBjYW4gcnVuIHRlc3RzIExC
U0UgYWdhaW50IGlzZWxmIChmaW5hbGx5IHdlIGNhbgorICAgICAgICBpbmNsdWRlIHRoZSBwcm9n
cmVzc2lvbnMgaW4gdGhlIGZvcm0gb2YgVGVzdEV4cGVjdGF0aW9uIGZpbGUgY2hhbmdlcywgb25j
ZSBhIGNlcnRhaW4KKyAgICAgICAgcGF0Y2ggaW1wbGVtZW50cyBhIG5ldyBmZWF0dXJlIGluIExC
U0UuIFRoaXMgbWFrZXMgc2Vuc2Ugbm93IGFzIGVub3VnaCBpcyB1cHN0cmVhbWVkCisgICAgICAg
IHRoYXQgYSBjb25zaWRlcmFibGUgYW1vdW50IG9mIHRoZSBTVkcgMS4xIHRlc3RzdWl0ZSBhbHJl
YWR5IHBhc3NlcyBwaXhlbCBwZXJmZWN0LgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3Rpbmcg
dGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuIChIb3dldmVyIHRlc3RhYmlsaXR5IGZvciBM
QlNFIGlzIHJlYWR5IHNvb24hKS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6
OmNvbXB1dGVWaXNpYmxlUmVjdEluU1ZHQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9iamVjdElzUmVsYXlv
dXRCb3VuZGFyeSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6dXBkYXRlRnJvbVN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jsb2NrOjphYnNvbHV0ZVJlY3RzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jsb2NrOjphYnNvbHV0ZVF1YWRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jsb2NrOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6Y29tcHV0ZU92ZXJmbG93KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR0Jsb2NrOjpjbGlwcGVkT3ZlcmZsb3dSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jsb2NrOjpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5l
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6Y29tcHV0ZUZsb2F0
VmlzaWJsZVJlY3RJbkNvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdCbG9jazo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdCbG9jazo6b2Zmc2V0RnJvbUNvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdCbG9jazo6bm9kZUF0UG9pbnQpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6UmVu
ZGVyU1ZHVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpsYXlvdXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bm9kZUF0RmxvYXRQb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdUZXh0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdU
ZXh0OjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdUZXh0Ojp1cGRhdGVQb3NpdGlvbkFuZE92ZXJmbG93KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmFic29sdXRlUXVhZHMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290
SW5saW5lQm94OjpyZW5kZXJTVkdUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jv
b3RJbmxpbmVCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6
OmxheW91dFJvb3RCb3gpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6cmVu
ZGVyU1ZHVGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5s
aW5lQm94Lmg6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlU1ZHTGF5ZXJBd2FyZUVsZW1lbnRTZXQpOgorCiAyMDIyLTA1LTE2ICBUaW0gTmd1
eWVuICA8bnRpbUBhcHBsZS5jb20+CiAKICAgICAgICAgW2Nzcy11aV0gTWFrZSBpbm5lci1zcGlu
LWJ1dHRvbi9zbGlkZXJ0aHVtYi1ob3Jpem9udGFsL3NsaWRlcnRodW1iLXZlcnRpY2FsIGFwcGVh
cmFuY2UgdmFsdWVzIGludGVybmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHAKaW5kZXggZGE0ODI1NjJlYjEzLi4zNWRmZmRlOTg4OWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKQEAgLTExODcsMjkgKzExODcsMzUgQEAg
Ym9vbCBSZW5kZXJFbGVtZW50OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiByZXAKICAgICBpZiAobmV3Qm91bmRzID09IG9sZEJvdW5kcyAm
JiBuZXdPdXRsaW5lQm94ID09IG9sZE91dGxpbmVCb3gpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIExheW91dFVuaXQgZGVsdGFMZWZ0ID0gbmV3Qm91bmRzLngoKSAtIG9sZEJvdW5kcy54
KCk7Ci0gICAgaWYgKGRlbHRhTGVmdCA+IDApCi0gICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5l
cihyZXBhaW50Q29udGFpbmVyLCBMYXlvdXRSZWN0KG9sZEJvdW5kcy54KCksIG9sZEJvdW5kcy55
KCksIGRlbHRhTGVmdCwgb2xkQm91bmRzLmhlaWdodCgpKSk7Ci0gICAgZWxzZSBpZiAoZGVsdGFM
ZWZ0IDwgMCkKLSAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIs
IExheW91dFJlY3QobmV3Qm91bmRzLngoKSwgbmV3Qm91bmRzLnkoKSwgLWRlbHRhTGVmdCwgbmV3
Qm91bmRzLmhlaWdodCgpKSk7Ci0KLSAgICBMYXlvdXRVbml0IGRlbHRhUmlnaHQgPSBuZXdCb3Vu
ZHMubWF4WCgpIC0gb2xkQm91bmRzLm1heFgoKTsKLSAgICBpZiAoZGVsdGFSaWdodCA+IDApCi0g
ICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBMYXlvdXRSZWN0
KG9sZEJvdW5kcy5tYXhYKCksIG5ld0JvdW5kcy55KCksIGRlbHRhUmlnaHQsIG5ld0JvdW5kcy5o
ZWlnaHQoKSkpOwotICAgIGVsc2UgaWYgKGRlbHRhUmlnaHQgPCAwKQotICAgICAgICByZXBhaW50
VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgTGF5b3V0UmVjdChuZXdCb3VuZHMubWF4
WCgpLCBvbGRCb3VuZHMueSgpLCAtZGVsdGFSaWdodCwgb2xkQm91bmRzLmhlaWdodCgpKSk7Ci0K
LSAgICBMYXlvdXRVbml0IGRlbHRhVG9wID0gbmV3Qm91bmRzLnkoKSAtIG9sZEJvdW5kcy55KCk7
Ci0gICAgaWYgKGRlbHRhVG9wID4gMCkKLSAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJl
cGFpbnRDb250YWluZXIsIExheW91dFJlY3Qob2xkQm91bmRzLngoKSwgb2xkQm91bmRzLnkoKSwg
b2xkQm91bmRzLndpZHRoKCksIGRlbHRhVG9wKSk7Ci0gICAgZWxzZSBpZiAoZGVsdGFUb3AgPCAw
KQotICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgTGF5b3V0
UmVjdChuZXdCb3VuZHMueCgpLCBuZXdCb3VuZHMueSgpLCBuZXdCb3VuZHMud2lkdGgoKSwgLWRl
bHRhVG9wKSk7Ci0KLSAgICBMYXlvdXRVbml0IGRlbHRhQm90dG9tID0gbmV3Qm91bmRzLm1heFko
KSAtIG9sZEJvdW5kcy5tYXhZKCk7Ci0gICAgaWYgKGRlbHRhQm90dG9tID4gMCkKLSAgICAgICAg
cmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIExheW91dFJlY3QobmV3Qm91
bmRzLngoKSwgb2xkQm91bmRzLm1heFkoKSwgbmV3Qm91bmRzLndpZHRoKCksIGRlbHRhQm90dG9t
KSk7Ci0gICAgZWxzZSBpZiAoZGVsdGFCb3R0b20gPCAwKQotICAgICAgICByZXBhaW50VXNpbmdD
b250YWluZXIocmVwYWludENvbnRhaW5lciwgTGF5b3V0UmVjdChvbGRCb3VuZHMueCgpLCBuZXdC
b3VuZHMubWF4WSgpLCBvbGRCb3VuZHMud2lkdGgoKSwgLWRlbHRhQm90dG9tKSk7CisgICAgaWYg
KG5ld0JvdW5kcy5pc0VtcHR5KCkgJiYgIW9sZEJvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJl
cGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBvbGRCb3VuZHMpOworICAgIGVs
c2UgaWYgKCFuZXdCb3VuZHMuaXNFbXB0eSgpICYmIG9sZEJvdW5kcy5pc0VtcHR5KCkpCisgICAg
ICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBuZXdCb3VuZHMpOwor
ICAgIGVsc2UgeworICAgICAgICBMYXlvdXRVbml0IGRlbHRhTGVmdCA9IG5ld0JvdW5kcy54KCkg
LSBvbGRCb3VuZHMueCgpOworICAgICAgICBpZiAoZGVsdGFMZWZ0ID4gMCkKKyAgICAgICAgICAg
IHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBMYXlvdXRSZWN0KG9sZEJv
dW5kcy54KCksIG9sZEJvdW5kcy55KCksIGRlbHRhTGVmdCwgb2xkQm91bmRzLmhlaWdodCgpKSk7
CisgICAgICAgIGVsc2UgaWYgKGRlbHRhTGVmdCA8IDApCisgICAgICAgICAgICByZXBhaW50VXNp
bmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgTGF5b3V0UmVjdChuZXdCb3VuZHMueCgpLCBu
ZXdCb3VuZHMueSgpLCAtZGVsdGFMZWZ0LCBuZXdCb3VuZHMuaGVpZ2h0KCkpKTsKKworICAgICAg
ICBMYXlvdXRVbml0IGRlbHRhUmlnaHQgPSBuZXdCb3VuZHMubWF4WCgpIC0gb2xkQm91bmRzLm1h
eFgoKTsKKyAgICAgICAgaWYgKGRlbHRhUmlnaHQgPiAwKQorICAgICAgICAgICAgcmVwYWludFVz
aW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIExheW91dFJlY3Qob2xkQm91bmRzLm1heFgo
KSwgbmV3Qm91bmRzLnkoKSwgZGVsdGFSaWdodCwgbmV3Qm91bmRzLmhlaWdodCgpKSk7CisgICAg
ICAgIGVsc2UgaWYgKGRlbHRhUmlnaHQgPCAwKQorICAgICAgICAgICAgcmVwYWludFVzaW5nQ29u
dGFpbmVyKHJlcGFpbnRDb250YWluZXIsIExheW91dFJlY3QobmV3Qm91bmRzLm1heFgoKSwgb2xk
Qm91bmRzLnkoKSwgLWRlbHRhUmlnaHQsIG9sZEJvdW5kcy5oZWlnaHQoKSkpOworCisgICAgICAg
IExheW91dFVuaXQgZGVsdGFUb3AgPSBuZXdCb3VuZHMueSgpIC0gb2xkQm91bmRzLnkoKTsKKyAg
ICAgICAgaWYgKGRlbHRhVG9wID4gMCkKKyAgICAgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5l
cihyZXBhaW50Q29udGFpbmVyLCBMYXlvdXRSZWN0KG9sZEJvdW5kcy54KCksIG9sZEJvdW5kcy55
KCksIG9sZEJvdW5kcy53aWR0aCgpLCBkZWx0YVRvcCkpOworICAgICAgICBlbHNlIGlmIChkZWx0
YVRvcCA8IDApCisgICAgICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRh
aW5lciwgTGF5b3V0UmVjdChuZXdCb3VuZHMueCgpLCBuZXdCb3VuZHMueSgpLCBuZXdCb3VuZHMu
d2lkdGgoKSwgLWRlbHRhVG9wKSk7CisKKyAgICAgICAgTGF5b3V0VW5pdCBkZWx0YUJvdHRvbSA9
IG5ld0JvdW5kcy5tYXhZKCkgLSBvbGRCb3VuZHMubWF4WSgpOworICAgICAgICBpZiAoZGVsdGFC
b3R0b20gPiAwKQorICAgICAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250
YWluZXIsIExheW91dFJlY3QobmV3Qm91bmRzLngoKSwgb2xkQm91bmRzLm1heFkoKSwgbmV3Qm91
bmRzLndpZHRoKCksIGRlbHRhQm90dG9tKSk7CisgICAgICAgIGVsc2UgaWYgKGRlbHRhQm90dG9t
IDwgMCkKKyAgICAgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVy
LCBMYXlvdXRSZWN0KG9sZEJvdW5kcy54KCksIG5ld0JvdW5kcy5tYXhZKCksIG9sZEJvdW5kcy53
aWR0aCgpLCAtZGVsdGFCb3R0b20pKTsKKyAgICB9CiAKICAgICBpZiAobmV3T3V0bGluZUJveCA9
PSBvbGRPdXRsaW5lQm94KQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5kZXggY2VjMDRm
YTNiM2ZjLi5iNmRjOTUyZDhhMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3Iu
aCIKICNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgogI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKQEAgLTI0
NSwxMCArMjQ2LDcgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp1cGRhdGVMYXllclRy
YW5zZm9ybSgpCiAjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCiBzdGQ6Om9wdGlv
bmFsPExheW91dFJlY3Q+IFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmNvbXB1dGVWaXNpYmxlUmVj
dEluU1ZHQ29udGFpbmVyKGNvbnN0IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0OjpWaXNpYmxlUmVjdENvbnRleHQg
Y29udGV4dCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFJlbmRlclNW
R0Jsb2NrIGNoYW5nZXMKLSAgICAvLyBBU1NFUlQoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHRo
aXMpIHx8IGlzPFJlbmRlclNWR0Jsb2NrPih0aGlzKSk7Ci0gICAgQVNTRVJUKGlzPFJlbmRlclNW
R01vZGVsT2JqZWN0Pih0aGlzKSk7Ci0KKyAgICBBU1NFUlQoaXM8UmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q+KHRoaXMpIHx8IGlzPFJlbmRlclNWR0Jsb2NrPih0aGlzKSk7CiAgICAgQVNTRVJUKCFzdHls
ZSgpLmhhc0luRmxvd1Bvc2l0aW9uKCkpOwogICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmlldygp
LmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDhiZDhjMGMyM2ZjNS4uNWVh
NzNlY2UzYTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApA
QCAtNTIxLDYgKzUyMSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgb2JqZWN0SXNSZWxheW91dEJv
dW5kYXJ5KGNvbnN0IFJlbmRlckVsZW1lbnQqIG9iamVjdCkKICAgICBpZiAoIW9iamVjdC0+aGFz
Tm9uVmlzaWJsZU92ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorI2lmIEVOQUJM
RShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChvYmplY3QtPmRvY3VtZW50KCkuc2V0
dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpICYmIG9iamVjdC0+aXNTVkdMYXll
ckF3YXJlUmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKICAgICBp
ZiAob2JqZWN0LT5zdHlsZSgpLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSB8fCBvYmplY3Qt
PnN0eWxlKCkuaGVpZ2h0KCkuaXNJbnRyaW5zaWNPckF1dG8oKSB8fCBvYmplY3QtPnN0eWxlKCku
aGVpZ2h0KCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9j
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcApp
bmRleCAyZTEwNTcyODFjODguLjEyYjhiNDI4NGM3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdCbG9jay5oIgogCisjaW5jbHVkZSAi
UmVuZGVyU1ZHQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIK
ICNpbmNsdWRlICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBw
b3J0LmgiCkBAIC00Miw2ICs0MywxMyBAQCB2b2lkIFJlbmRlclNWR0Jsb2NrOjp1cGRhdGVGcm9t
U3R5bGUoKQogewogICAgIFJlbmRlckJsb2NrRmxvdzo6dXBkYXRlRnJvbVN0eWxlKCk7CiAKKyNp
ZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0
aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgdXBkYXRlSGFz
U1ZHVHJhbnNmb3JtRmxhZ3MoZ3JhcGhpY3NFbGVtZW50KCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmCisKICAgICAvLyBSZW5kZXJTVkdsb2NrLCB1c2VkIGJ5IFJlbmRlcihTVkdU
ZXh0fEZvcmVpZ25PYmplY3QpLCBpcyBub3QgYWxsb3dlZCB0byBjYWxsIHNldEhhc05vblZpc2li
bGVPdmVyZmxvdyh0cnVlKS4KICAgICAvLyBSZW5kZXJCbG9jayBhc3N1bWVzIGEgbGF5ZXIgdG8g
YmUgcHJlc2VudCB3aGVuIHRoZSBvdmVyZmxvdyBjbGlwIGZ1bmN0aW9uYWxpdHkgaXMgcmVxdWVz
dGVkLiBCb3RoCiAgICAgLy8gUmVuZGVyKFNWR1RleHR8Rm9yZWlnbk9iamVjdCkgcmV0dXJuICdm
YWxzZScgb24gJ3JlcXVpcmVzTGF5ZXInLiBGaW5lIGZvciBSZW5kZXJTVkdUZXh0LgpAQCAtNTcs
MTIgKzY1LDI3IEBAIHZvaWQgUmVuZGVyU1ZHQmxvY2s6OnVwZGF0ZUZyb21TdHlsZSgpCiAgICAg
c2V0SGFzTm9uVmlzaWJsZU92ZXJmbG93KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdCbG9j
azo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpIGNv
bnN0Cit2b2lkIFJlbmRlclNWR0Jsb2NrOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYg
cmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3QKIHsKKyNp
ZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0
aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgcmVjdHMuYXBw
ZW5kKHNuYXBwZWRJbnRSZWN0KExheW91dFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlv
bigpLCBzaXplKCkpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShyZWN0cyk7CisgICAgVU5VU0VEX1BBUkFNKGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyNl
bmRpZgorCiAgICAgLy8gVGhpcyBjb2RlIHBhdGggc2hvdWxkIG5ldmVyIGJlIHRha2VuIGZvciBT
VkcsIGFzIHdlJ3JlIGFzc3VtaW5nIHVzZVRyYW5zZm9ybXM9dHJ1ZSBldmVyeXdoZXJlLCBhYnNv
bHV0ZVF1YWRzIHNob3VsZCBiZSB1c2VkLgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
Cit2b2lkIFJlbmRlclNWR0Jsb2NrOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBx
dWFkcywgYm9vbCogd2FzRml4ZWQpIGNvbnN0Cit7CisgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9B
YnNvbHV0ZVF1YWQoc3Ryb2tlQm91bmRpbmdCb3goKSwgVXNlVHJhbnNmb3Jtcywgd2FzRml4ZWQp
KTsKK30KKwogdm9pZCBSZW5kZXJTVkdCbG9jazo6d2lsbEJlRGVzdHJveWVkKCkKIHsKICAgICBT
VkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50RGVzdHJveWVkKCp0aGlzKTsKQEAgLTcxLDcgKzk0LDEx
IEBAIHZvaWQgUmVuZGVyU1ZHQmxvY2s6OndpbGxCZURlc3Ryb3llZCgpCiAKIHZvaWQgUmVuZGVy
U1ZHQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUpCiB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUp
CisgICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlOjpMYXlvdXQgJiYgIWRvY3VtZW50KCku
c2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKQorI2Vsc2UKICAgICBpZiAo
ZGlmZiA9PSBTdHlsZURpZmZlcmVuY2U6OkxheW91dCkKKyNlbmRpZgogICAgICAgICBzZXROZWVk
c0JvdW5kYXJpZXNVcGRhdGUoKTsKICAgICBSZW5kZXJCbG9ja0Zsb3c6OnN0eWxlRGlkQ2hhbmdl
KGRpZmYsIG9sZFN0eWxlKTsKICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFu
Z2VkKCp0aGlzLCBkaWZmLCBzdHlsZSgpKTsKQEAgLTgxLDYgKzEwOCwxMSBAQCB2b2lkIFJlbmRl
clNWR0Jsb2NrOjpjb21wdXRlT3ZlcmZsb3coTGF5b3V0VW5pdCBvbGRDbGllbnRBZnRlckVkZ2Us
IGJvb2wgcmVjb21wdQogewogICAgIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZU92ZXJmbG93KG9s
ZENsaWVudEFmdGVyRWRnZSwgcmVjb21wdXRlRmxvYXRzKTsKIAorI2lmIEVOQUJMRShMQVlFUl9C
QVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNl
ZFNWR0VuZ2luZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICBjb25z
dCBhdXRvKiB0ZXh0U2hhZG93ID0gc3R5bGUoKS50ZXh0U2hhZG93KCk7CiAgICAgaWYgKCF0ZXh0
U2hhZG93KQogICAgICAgICByZXR1cm47CkBAIC05MCwxMyArMTIyLDMwIEBAIHZvaWQgUmVuZGVy
U1ZHQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyhMYXlvdXRVbml0IG9sZENsaWVudEFmdGVyRWRnZSwg
Ym9vbCByZWNvbXB1CiAgICAgYWRkVmlzdWFsT3ZlcmZsb3coc25hcHBlZEludFJlY3QoYm9yZGVy
UmVjdCkpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlclNWR0Jsb2NrOjpjbGlwcGVkT3ZlcmZsb3dS
ZWN0KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFZpc2li
bGVSZWN0Q29udGV4dCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyU1ZHQmxvY2s6OmNsaXBwZWRP
dmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgVmlzaWJsZVJlY3RDb250ZXh0IGNvbnRleHQpIGNvbnN0CiB7CisjaWYgRU5BQkxFKExBWUVS
X0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJh
c2VkU1ZHRW5naW5lRW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChpc0luc2lkZUVudGlyZWx5SGlk
ZGVuTGF5ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgQVNTRVJUKCF2
aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJs
ZWQoKSk7CisgICAgICAgIHJldHVybiBjb21wdXRlUmVjdCh2aXN1YWxPdmVyZmxvd1JlY3QoKSwg
cmVwYWludENvbnRhaW5lciwgY29udGV4dCk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oY29udGV4dCk7CisjZW5kaWYKKwogICAgIHJldHVybiBTVkdSZW5kZXJTdXBwb3J0OjpjbGlw
cGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCgqdGhpcywgcmVwYWludENvbnRhaW5lcik7CiB9CiAK
IHN0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gUmVuZGVyU1ZHQmxvY2s6OmNvbXB1dGVWaXNpYmxl
UmVjdEluQ29udGFpbmVyKGNvbnN0IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIGNvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0IGNvbnRleHQpIGNvbnN0
CiB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGRvY3VtZW50
KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKQorICAgICAgICByZXR1
cm4gY29tcHV0ZVZpc2libGVSZWN0SW5TVkdDb250YWluZXIocmVjdCwgY29udGFpbmVyLCBjb250
ZXh0KTsKKyNlbmRpZgorCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGFkanVzdGVkUmVj
dCA9IGNvbXB1dGVGbG9hdFZpc2libGVSZWN0SW5Db250YWluZXIocmVjdCwgY29udGFpbmVyLCBj
b250ZXh0KTsKICAgICBpZiAoYWRqdXN0ZWRSZWN0KQogICAgICAgICByZXR1cm4gZW5jbG9zaW5n
TGF5b3V0UmVjdCgqYWRqdXN0ZWRSZWN0KTsKQEAgLTEwNSw2ICsxNTQsOSBAQCBzdGQ6Om9wdGlv
bmFsPExheW91dFJlY3Q+IFJlbmRlclNWR0Jsb2NrOjpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRh
aW5lcihjb25zdCBMYQogCiBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gUmVuZGVyU1ZHQmxvY2s6
OmNvbXB1dGVGbG9hdFZpc2libGVSZWN0SW5Db250YWluZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29u
dGV4dCBjb250ZXh0KSBjb25zdAogeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5F
KQorICAgIEFTU0VSVCghZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVF
bmFibGVkKCkpOworI2VuZGlmCiAgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVG
bG9hdFZpc2libGVSZWN0SW5Db250YWluZXIoKnRoaXMsIHJlY3QsIGNvbnRhaW5lciwgY29udGV4
dCk7CiB9CiAKQEAgLTExNSwxMyArMTY3LDIzIEBAIHZvaWQgUmVuZGVyU1ZHQmxvY2s6Om1hcExv
Y2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JDCiAK
IGNvbnN0IFJlbmRlck9iamVjdCogUmVuZGVyU1ZHQmxvY2s6OnB1c2hNYXBwaW5nVG9Db250YWlu
ZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVy
R2VvbWV0cnlNYXAmIGdlb21ldHJ5TWFwKSBjb25zdAogeworI2lmIEVOQUJMRShMQVlFUl9CQVNF
RF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNW
R0VuZ2luZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6cHVzaE1hcHBpbmdU
b0NvbnRhaW5lcihhbmNlc3RvclRvU3RvcEF0LCBnZW9tZXRyeU1hcCk7CisjZW5kaWYKKwogICAg
IHJldHVybiBTVkdSZW5kZXJTdXBwb3J0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKCp0aGlzLCBh
bmNlc3RvclRvU3RvcEF0LCBnZW9tZXRyeU1hcCk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHQmxvY2s6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IExheW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikKKyNp
ZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKK0xheW91dFNpemUgUmVuZGVyU1ZHQmxv
Y2s6Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyRWxlbWVudCYgY29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYsIGJvb2wqKSBjb25zdAogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRhaW5lciwgJmNvbnRhaW5l
ciA9PSB0aGlzLT5jb250YWluZXIoKSk7CisgICAgQVNTRVJUKCFpc0luRmxvd1Bvc2l0aW9uZWQo
KSk7CisgICAgQVNTRVJUKCFpc0Fic29sdXRlbHlQb3NpdGlvbmVkKCkpOworICAgIEFTU0VSVCgh
aXNJbmxpbmUoKSk7CisgICAgcmV0dXJuIExheW91dFNpemUoKTsKIH0KKyNlbmRpZgogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmgKaW5kZXggYzE0
NmRkYWVmMjBiLi44ZTFkN2M4MTJlODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0Jsb2NrLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHJpdmF0ZToKICAgICBib29s
IGlzUmVuZGVyU1ZHQmxvY2soKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2
b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKLQorICAgIHZvaWQgYWJzb2x1dGVRdWFk
cyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBvdmVycmlkZTsKICAg
ICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKSBmaW5hbDsKIAogI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQpA
QCAtNTksOCArNTksOSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVy
KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFuc2Zv
cm1TdGF0ZSYsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29sKiB3YXNGaXhlZCkg
Y29uc3QgZmluYWw7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFp
bmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRl
ckdlb21ldHJ5TWFwJikgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
bG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBIaXRUZXN0QWN0aW9uKSBmaW5hbDsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lO
RSkKKyAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Db250YWluZXIoUmVuZGVyRWxlbWVudCYsIGNv
bnN0IExheW91dFBvaW50JiwgYm9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQgPSBudWxscHRyKSBj
b25zdCBvdmVycmlkZTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKaW5kZXggNTg4
YWYxYTFmNzc3Li4zZWIyYzU2YTk4YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0LmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIlJlbmRl
clNWR0lubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNs
dWRlICJTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCIKICNpbmNsdWRlICJTVkdMZW5ndGhMaXN0Lmgi
CiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKQEAgLTU3LDEwICs1OCw2IEBAIFdURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5kZXJTVkdUZXh0KTsKIAogUmVuZGVyU1ZHVGV4dDo6
UmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHls
ZSkKICAgICA6IFJlbmRlclNWR0Jsb2NrKGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQotICAgICwg
bV9uZWVkc1Jlb3JkZXJpbmcoZmFsc2UpCi0gICAgLCBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNV
cGRhdGUoZmFsc2UpCi0gICAgLCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlKHRydWUpCi0gICAgLCBt
X25lZWRzVGV4dE1ldHJpY3NVcGRhdGUoZmFsc2UpCiB7CiB9CiAKQEAgLTMxMSwxNSArMzA4LDI4
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVGb250SW5BbGxEZXNjZW5kYW50cyhSZW5kZXJP
YmplY3QqIHN0YXJ0LCBTVkdUZXh0TGF5b3V0CiAKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0
KCkKIHsKKyAgICBhdXRvIGlzTGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQgPSBbJl0oKSB7Cisj
aWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgIHJldHVybiBkb2N1bWVu
dCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKTsKKyNlbHNlCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIH07CisKICAgICBTdGFja1N0YXRzOjpMYXlv
dXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkp
OwotICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIFNWR1JlbmRlclN1cHBvcnQ6
OmNoZWNrRm9yU1ZHUmVwYWludER1cmluZ0xheW91dCgqdGhpcykpOworICAgIExheW91dFJlcGFp
bnRlciByZXBhaW50ZXIoKnRoaXMsIGlzTGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSA/IGNo
ZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpIDogU1ZHUmVuZGVyU3VwcG9ydDo6Y2hlY2tGb3JT
VkdSZXBhaW50RHVyaW5nTGF5b3V0KCp0aGlzKSk7CisKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVw
c3RyZWFtIFNWR0xlbmd0aENvbnRleHQgY2hhbmdlcworICAgIC8vIHRleHRFbGVtZW50KCkudXBk
YXRlTGVuZ3RoQ29udGV4dCgpOwogCiAgICAgYm9vbCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5Q
YXJlbnRzID0gZmFsc2U7Ci0gICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKLSAgICAg
ICAgbV9sb2NhbFRyYW5zZm9ybSA9IHRleHRFbGVtZW50KCkuYW5pbWF0ZWRMb2NhbFRyYW5zZm9y
bSgpOwotICAgICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHVw
ZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOworICAgIGlmICghaXNMYXllckJh
c2VkU1ZHRW5naW5lRW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBk
YXRlKSB7CisgICAgICAgICAgICBtX2xvY2FsVHJhbnNmb3JtID0gdGV4dEVsZW1lbnQoKS5hbmlt
YXRlZExvY2FsVHJhbnNmb3JtKCk7CisgICAgICAgICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRl
ID0gZmFsc2U7CisgICAgICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0g
dHJ1ZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghZXZlckhhZExheW91dCgpKSB7CkBA
IC0zNDcsOCArMzU3LDE1IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKICAgICAgICAg
bV9uZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlID0gZmFsc2U7CiAgICAgICAgIHVwZGF0ZUNh
Y2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIExl
Z2FjeVJlbmRlclNWR1Jvb3QqIHJvb3RPYmogPSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVHJlZVJv
b3RPYmplY3QoKnRoaXMpOwotICAgICAgICBpZiAobV9uZWVkc1RleHRNZXRyaWNzVXBkYXRlIHx8
IChyb290T2JqICYmIHJvb3RPYmotPmlzTGF5b3V0U2l6ZUNoYW5nZWQoKSkpIHsKKyAgICAgICAg
Ym9vbCBpc0xheW91dFNpemVDaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGlmIChhdXRvKiBsZWdh
Y3lSb290T2JqZWN0ID0gbGluZWFnZU9mVHlwZTxMZWdhY3lSZW5kZXJTVkdSb290PigqdGhpcyku
Zmlyc3QoKSkKKyAgICAgICAgICAgIGlzTGF5b3V0U2l6ZUNoYW5nZWQgPSBsZWdhY3lSb290T2Jq
ZWN0LT5pc0xheW91dFNpemVDaGFuZ2VkKCk7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19F
TkdJTkUpCisgICAgICAgIGVsc2UgaWYgKGF1dG8qIHJvb3RPYmplY3QgPSBsaW5lYWdlT2ZUeXBl
PFJlbmRlclNWR1Jvb3Q+KCp0aGlzKS5maXJzdCgpKQorICAgICAgICAgICAgaXNMYXlvdXRTaXpl
Q2hhbmdlZCA9IHJvb3RPYmplY3QtPmlzTGF5b3V0U2l6ZUNoYW5nZWQoKTsKKyNlbmRpZgorCisg
ICAgICAgIGlmIChtX25lZWRzVGV4dE1ldHJpY3NVcGRhdGUgfHwgaXNMYXlvdXRTaXplQ2hhbmdl
ZCkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHJvb3QgbGF5b3V0IHNpemUgY2hhbmdlZCAoZWcu
IHdpbmRvdyBzaXplIGNoYW5nZXMpIG9yIHRoZSB0cmFuc2Zvcm0gdG8gdGhlIHJvb3QKICAgICAg
ICAgICAgIC8vIGNvbnRleHQgaGFzIGNoYW5nZWQgdGhlbiByZWNvbXB1dGUgdGhlIG9uLXNjcmVl
biBmb250IHNpemUuCiAgICAgICAgICAgICB1cGRhdGVGb250SW5BbGxEZXNjZW5kYW50cyh0aGlz
LCAmbV9sYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcik7CkBAIC0zNjUsMzMgKzM4Miw0NCBAQCB2b2lk
IFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiAgICAgLy8gUmVkdWNlZCB2ZXJzaW9uIG9mIFJlbmRl
ckJsb2NrOjpsYXlvdXRCbG9jaygpLCB3aGljaCBvbmx5IHRha2VzIGNhcmUgb2YgU1ZHIHRleHQu
CiAgICAgLy8gQWxsIGlmIGJyYW5jaGVzIHRoYXQgY291bGQgY2F1c2UgZWFybHkgZXhpdCBpbiBS
ZW5kZXJCbG9ja3MgbGF5b3V0QmxvY2soKSBtZXRob2QgYXJlIHR1cm5lZCBpbnRvIGFzc2VydGlv
bnMuCiAgICAgQVNTRVJUKCFpc0lubGluZSgpKTsKLSAgICBBU1NFUlQoIXNpbXBsaWZpZWRMYXlv
dXQoKSk7CiAgICAgQVNTRVJUKCFzY3JvbGxzT3ZlcmZsb3coKSk7CiAgICAgQVNTRVJUKCFoYXND
b250cm9sQ2xpcCgpKTsKICAgICBBU1NFUlQoIW11bHRpQ29sdW1uRmxvdygpKTsKICAgICBBU1NF
UlQoIXBvc2l0aW9uZWRPYmplY3RzKCkpOwotICAgIEFTU0VSVCghbV9vdmVyZmxvdyk7CiAgICAg
QVNTRVJUKCFpc0Fub255bW91c0Jsb2NrKCkpOworICAgIGlmICghaXNMYXllckJhc2VkU1ZHRW5n
aW5lRW5hYmxlZCgpKSB7CisgICAgICAgIEFTU0VSVCghc2ltcGxpZmllZExheW91dCgpKTsKKyAg
ICAgICAgQVNTRVJUKCFtX292ZXJmbG93KTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2UgbmVl
ZCB0byBmaW5kIGEgd2F5IHRvIG9ubHkgbGF5b3V0IHRoZSBjaGlsZCBib3hlcywgaWYgbmVlZGVk
LgorICAgIGF1dG8gbGF5b3V0Q2hhbmdlZCA9IGV2ZXJIYWRMYXlvdXQoKSAmJiBzZWxmTmVlZHNM
YXlvdXQoKTsKKyAgICBhdXRvIG9sZEJvdW5kYXJpZXMgPSBvYmplY3RCb3VuZGluZ0JveCgpOwog
Ci0gICAgaWYgKCFmaXJzdENoaWxkKCkpCisgICAgaWYgKCFmaXJzdENoaWxkKCkpIHsKKyAgICAg
ICAgdXBkYXRlUG9zaXRpb25BbmRPdmVyZmxvdyh7IH0pOwogICAgICAgICBzZXRDaGlsZHJlbklu
bGluZSh0cnVlKTsKKyAgICB9CiAKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBmaW5kIGEgd2F5
IHRvIG9ubHkgbGF5b3V0IHRoZSBjaGlsZCBib3hlcywgaWYgbmVlZGVkLgotICAgIEZsb2F0UmVj
dCBvbGRCb3VuZGFyaWVzID0gb2JqZWN0Qm91bmRpbmdCb3goKTsKICAgICBBU1NFUlQoY2hpbGRy
ZW5JbmxpbmUoKSk7CisKICAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsVG9wOwogICAgIExh
eW91dFVuaXQgcmVwYWludExvZ2ljYWxCb3R0b207CiAgICAgcmVidWlsZEZsb2F0aW5nT2JqZWN0
U2V0RnJvbUludHJ1ZGluZ0Zsb2F0cygpOwogICAgIGxheW91dElubGluZUNoaWxkcmVuKHRydWUs
IHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7CiAKKyAgICAvLyB1cGRh
dGVQb3NpdGlvbkFuZE92ZXJmbG93KCkgaXMgY2FsbGVkIGJ5IFNWR1Jvb3RJbmxpbmVCb3gsIGFm
dGVyIGZvcmNlTGF5b3V0SW5saW5lQ2hpbGRyZW4oKSByYW4sIGJlZm9yZSB0aGlzIHBvaW50IGlz
IHJlYWNoZWQuCiAgICAgaWYgKG1fbmVlZHNSZW9yZGVyaW5nKQogICAgICAgICBtX25lZWRzUmVv
cmRlcmluZyA9IGZhbHNlOwogCi0gICAgaWYgKCF1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJl
bnRzKQorICAgIGlmIChpc0xheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAg
dXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0lu
UGFyZW50cyA9IGZhbHNlOyAvLyBObyBsb25nZXIgbmVlZGVkIGZvciBMQlNFLgorICAgIH0gZWxz
ZSBpZiAoIXVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCiAgICAgICAgIHVwZGF0ZUNh
Y2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSBvbGRCb3VuZGFyaWVzICE9IG9iamVjdEJvdW5kaW5n
Qm94KCk7CiAKICAgICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQg
aWYgb3VyIGxheW91dCBjaGFuZ2VkLgotICAgIGlmIChldmVySGFkTGF5b3V0KCkgJiYgc2VsZk5l
ZWRzTGF5b3V0KCkpCisgICAgaWYgKGxheW91dENoYW5nZWQpCiAgICAgICAgIFNWR1Jlc291cmNl
c0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKCp0aGlzKTsKIAogICAgIC8vIElmIG91ciBib3Vu
ZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgpAQCAtNDA0LDYgKzQzMiw5IEBAIHZvaWQg
UmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKIAogYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRGbG9h
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVz
dEFjdGlvbikKIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBBU1NF
UlQoIWRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKTsK
KyNlbmRpZgogICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRz
SGl0UnVsZXM6OlNWR19URVhUX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxlKCkuZWZmZWN0aXZl
UG9pbnRlckV2ZW50cygpKTsKICAgICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgpLnZpc2liaWxp
dHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlKTsKICAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRS
dWxlcy5yZXF1aXJlVmlzaWJsZSkgewpAQCAtNDEyLDcgKzQ0Myw3IEBAIGJvb2wgUmVuZGVyU1ZH
VGV4dDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsCiAgICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSB2YWx1ZU9yRGVm
YXVsdChsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpKS5tYXBQb2ludChwb2ludElu
UGFyZW50KTsKIAogICAgICAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xp
cHBpbmdBcmVhKCp0aGlzLCBsb2NhbFBvaW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7ICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAg
U1ZHSGl0VGVzdEN5Y2xlRGV0ZWN0aW9uU2NvcGUgaGl0VGVzdFNjb3BlKCp0aGlzKTsKIApAQCAt
NDI0LDYgKzQ1NSwzMyBAQCBib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdEZsb2F0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorYm9vbCBSZW5kZXJT
VkdUZXh0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBo
aXRUZXN0QWN0aW9uKQoreworICAgIEFTU0VSVChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJC
YXNlZFNWR0VuZ2luZUVuYWJsZWQoKSk7CisgICAgYXV0byBhZGp1c3RlZExvY2F0aW9uID0gYWNj
dW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOworCisgICAgUG9pbnRlckV2ZW50c0hpdFJ1bGVz
IGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1RFWFRfSElUVEVTVElORywgcmVx
dWVzdCwgc3R5bGUoKS5wb2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0
eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUpOworICAgIGlmIChpc1Zp
c2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7CisgICAgICAgIGlmICgoaGl0UnVs
ZXMuY2FuSGl0U3Ryb2tlICYmIChzdHlsZSgpLnN2Z1N0eWxlKCkuaGFzU3Ryb2tlKCkgfHwgIWhp
dFJ1bGVzLnJlcXVpcmVTdHJva2UpKQorICAgICAgICB8fCAoaGl0UnVsZXMuY2FuSGl0RmlsbCAm
JiAoc3R5bGUoKS5zdmdTdHlsZSgpLmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWlyZUZpbGwp
KSkgeworICAgICAgICAgICAgYXV0byBsb2NhbFBvaW50ID0gbG9jYXRpb25JbkNvbnRhaW5lci5w
b2ludCgpOworICAgICAgICAgICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRp
b24gPSBub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKSAtIGFkanVzdGVkTG9jYXRpb247CisgICAg
ICAgICAgICBsb2NhbFBvaW50Lm1vdmUoY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9u
KTsKKworICAgICAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdB
cmVhKCp0aGlzLCBsb2NhbFBvaW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgICAgIFNWR0hpdFRlc3RDeWNsZURldGVjdGlvblNjb3BlIGhpdFRlc3RTY29wZSgq
dGhpcyk7CisgICAgICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVl
c3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRl
c3RBY3Rpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorI2Vu
ZGlmCisKIFZpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNv
bnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGVudHMsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyKiBmcmFnbWVudCkKIHsKICAgICBMZWdhY3lSb290SW5saW5lQm94KiByb290Qm94ID0g
Zmlyc3RSb290Qm94KCk7CkBAIC00NDAsMTggKzQ5OCw1NSBAQCBWaXNpYmxlUG9zaXRpb24gUmVu
ZGVyU1ZHVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNv
bnRlbgogICAgIHJldHVybiBjbG9zZXN0Qm94LT5yZW5kZXJlcigpLnBvc2l0aW9uRm9yUG9pbnQo
eyBwb2ludEluQ29udGVudHMueCgpLCBMYXlvdXRVbml0KGNsb3Nlc3RCb3gtPnkoKSkgfSwgZnJh
Z21lbnQpOwogfQogCi12b2lkIFJlbmRlclNWR1RleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZs
b2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKLXsKLSAgICBxdWFkcy5hcHBl
bmQobG9jYWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3VuZGluZ0JveCgpLCBVc2VUcmFuc2Zvcm1z
LCB3YXNGaXhlZCkpOwotfQotCi12b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYpCit2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7
CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OkZvcmVn
cm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGVjdGlvbikKLSAgICAg
ICAgIHJldHVybjsKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OkNsaXBw
aW5nTWFzayAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6TWFzayAmJiBwYWludElu
Zm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZTo6T3V0bGluZSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6U2Vs
Zk91dGxpbmUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBh
aW50V2l0aGluUm9vdCgqdGhpcykpCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShMQVlF
Ul9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJC
YXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAgICBpZiAoc3R5bGUoKS52aXNpYmlsaXR5
KCkgPT0gVmlzaWJpbGl0eTo6SGlkZGVuIHx8IHN0eWxlKCkuZGlzcGxheSgpID09IERpc3BsYXlU
eXBlOjpOb25lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIEZJWE1FOiBbTEJT
RV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgICAgIC8vIGlmICghU1ZH
UmVuZGVyU3VwcG9ydDo6c2hvdWxkUGFpbnRIaWRkZW5SZW5kZXJlcigqdGhpcykpCisgICAgICAg
IC8vICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBo
YXNlOjpDbGlwcGluZ01hc2spIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJl
YW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgICAgICAgICAvLyBTVkdSZW5kZXJTdXBw
b3J0OjpwYWludFNWR0NsaXBwaW5nTWFzaygqdGhpcywgcGFpbnRJbmZvKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gYWRqdXN0ZWRQYWludE9mZnNldCA9
IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAgICAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlOjpNYXNrKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3Ry
ZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcworICAgICAgICAgICAgLy8gU1ZHUmVuZGVyU3Vw
cG9ydDo6cGFpbnRTVkdNYXNrKCp0aGlzLCBwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlOjpPdXRsaW5lIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlOjpTZWxmT3V0bGluZSkgeworICAgICAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50KHBh
aW50SW5mbywgcGFpbnRPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBhaW50SW5mby5j
b250ZXh0KCkpOworCisgICAgICAgIGF1dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0
aW9uID0gYWRqdXN0ZWRQYWludE9mZnNldCAtIG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpOwor
ICAgICAgICBwYWludEluZm8uY29udGV4dCgpLnRyYW5zbGF0ZShjb29yZGluYXRlU3lzdGVtT3Jp
Z2luVHJhbnNsYXRpb24ud2lkdGgoKSwgY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9u
LmhlaWdodCgpKTsKKworICAgICAgICBSZW5kZXJCbG9jazo6cGFpbnQocGFpbnRJbmZvLCBwYWlu
dE9mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShwYWludE9mZnNldCk7CisjZW5kaWYKIAogICAgIFBhaW50SW5mbyBibG9ja0luZm8ocGFpbnRJ
bmZvKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoYmxvY2tJbmZv
LmNvbnRleHQoKSk7CkBAIC00NzksNiArNTc0LDExIEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0
OjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0Ojpy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0CiB7CisjaWYgRU5BQkxFKExBWUVS
X0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJh
c2VkU1ZHRW5naW5lRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbjo6Y29tcHV0ZVJlcGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7CisjZW5kaWYKKwogICAg
IEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IHN0cm9rZUJvdW5kaW5nQm94KCk7CiAgICAgU1ZHUmVu
ZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKCp0aGlzLCByZXBh
aW50UmVjdCk7CiAKQEAgLTQ4OCw0ICs1ODgsMzIgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1RleHQ6
OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QKICAgICByZXR1cm4gcmVwYWlu
dFJlY3Q7CiB9CiAKK3ZvaWQgUmVuZGVyU1ZHVGV4dDo6dXBkYXRlUG9zaXRpb25BbmRPdmVyZmxv
dyhjb25zdCBGbG9hdFJlY3QmIGJvdW5kYXJpZXMpCit7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VE
X1NWR19FTkdJTkUpCisgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZH
RW5naW5lRW5hYmxlZCgpKSB7CisgICAgICAgIGNsZWFyT3ZlcmZsb3coKTsKKworICAgICAgICBt
X29iamVjdEJvdW5kaW5nQm94ID0gYm91bmRhcmllczsKKworICAgICAgICBhdXRvIGJvdW5kaW5n
UmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QobV9vYmplY3RCb3VuZGluZ0JveCk7CisgICAgICAg
IHNldExvY2F0aW9uKGJvdW5kaW5nUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgc2V0U2l6ZShi
b3VuZGluZ1JlY3Quc2l6ZSgpKTsKKworICAgICAgICBhdXRvIG92ZXJmbG93UmVjdCA9IHZpc3Vh
bE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKTsKKyAgICAgICAgaWYgKGNvbnN0IGF1dG8qIHRleHRT
aGFkb3cgPSBzdHlsZSgpLnRleHRTaGFkb3coKSkKKyAgICAgICAgICAgIHRleHRTaGFkb3ctPmFk
anVzdFJlY3RGb3JTaGFkb3cob3ZlcmZsb3dSZWN0KTsKKworICAgICAgICBhZGRWaXN1YWxPdmVy
ZmxvdyhvdmVyZmxvd1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAg
ICBhdXRvIGJvdW5kaW5nUmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QoYm91bmRhcmllcyk7Cisg
ICAgc2V0TG9jYXRpb24oYm91bmRpbmdSZWN0LmxvY2F0aW9uKCkpOworICAgIHNldFNpemUoYm91
bmRpbmdSZWN0LnNpemUoKSk7CisgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IGJvdW5kaW5nUmVj
dDsKKyAgICBBU1NFUlQobV9vYmplY3RCb3VuZGluZ0JveCA9PSBmcmFtZVJlY3QoKSk7Cit9CisK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKaW5kZXgg
NDQxMjY5ODg1NzkxLi4zYWIzNjYzZTZkMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVGV4dC5oCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJSZW5kZXJTVkdCbG9jay5oIgorI2luY2x1ZGUgIlNW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCIKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0QXR0cmli
dXRlc0J1aWxkZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDIsOSArNDMsMTAgQEAg
cHVibGljOgogICAgIGJvb2wgaXNDaGlsZEFsbG93ZWQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0TmVlZHNQb3Np
dGlvbmluZ1ZhbHVlc1VwZGF0ZSgpIHsgbV9uZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlID0g
dHJ1ZTsgfQotICAgIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSBvdmVycmlkZSB7IG1f
bmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CiAgICAgdm9pZCBzZXROZWVkc1RleHRNZXRy
aWNzVXBkYXRlKCkgeyBtX25lZWRzVGV4dE1ldHJpY3NVcGRhdGUgPSB0cnVlOyB9Ci0gICAgRmxv
YXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICAvLyBGSVhNRTogW0xCU0VdIE9ubHkgbmVlZGVkIGZvciBsZWdhY3kgU1ZHIGVuZ2luZS4K
KyAgICB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgb3ZlcnJpZGUgeyBtX25lZWRzVHJh
bnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQogCiAgICAgc3RhdGljIFJlbmRlclNWR1RleHQqIGxvY2F0
ZVJlbmRlclNWR1RleHRBbmNlc3RvcihSZW5kZXJPYmplY3QmKTsKICAgICBzdGF0aWMgY29uc3Qg
UmVuZGVyU1ZHVGV4dCogbG9jYXRlUmVuZGVyU1ZHVGV4dEFuY2VzdG9yKGNvbnN0IFJlbmRlck9i
amVjdCYpOwpAQCAtNTgsOCArNjAsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc3VidHJlZVN0eWxl
RGlkQ2hhbmdlKFJlbmRlclNWR0lubGluZVRleHQqKTsKICAgICB2b2lkIHN1YnRyZWVUZXh0RGlk
Q2hhbmdlKFJlbmRlclNWR0lubGluZVRleHQqKTsKIAotICAgIEZsb2F0UmVjdCBvYmplY3RCb3Vu
ZGluZ0JveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZyYW1lUmVjdCgpOyB9Ci0gICAgRmxv
YXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0
IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vYmplY3RCb3VuZGlu
Z0JveDsgfQorICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsOwor
ICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IGZpbmFs
OworCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgTGF5b3V0UmVjdCB2
aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gU1ZHQm91bmRpbmdC
b3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCgqdGhpcyk7IH0KKyNlbmRp
ZgorICAgIHZvaWQgdXBkYXRlUG9zaXRpb25BbmRPdmVyZmxvdyhjb25zdCBGbG9hdFJlY3QmKTsK
IAogcHJpdmF0ZToKICAgICB2b2lkIGdyYXBoaWNzRWxlbWVudCgpIGNvbnN0ID0gZGVsZXRlOwpA
QCAtNjgsMjggKzc2LDQwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1NWR1RleHQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOworI2lmIEVOQUJMRShMQVlFUl9C
QVNFRF9TVkdfRU5HSU5FKQorICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rp
b24pIG92ZXJyaWRlOworI2VuZGlmCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9p
bnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopIG92
ZXJyaWRlOwogCi0gICAgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2b2lkIGxheW91dCgpIG92ZXJyaWRlOworICAgIGJvb2wgcmVxdWly
ZXNMYXllcigpIGNvbnN0IG92ZXJyaWRlCisgICAgeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9T
VkdfRU5HSU5FKQorICAgICAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRT
VkdFbmdpbmVFbmFibGVkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3Rv
cjxGbG9hdFF1YWQ+JiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
bGF5b3V0KCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIG92ZXJyaWRl
OwogCisgICAgLy8gRklYTUU6IFtMQlNFXSBCZWdpbiBjb2RlIG9ubHkgbmVlZGVkIGZvciBsZWdh
Y3kgU1ZHIGVuZ2luZS4KKyAgICBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwg
SGl0VGVzdEFjdGlvbikgb3ZlcnJpZGU7CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2Nh
bFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9sb2NhbFRyYW5z
Zm9ybTsgfQogICAgIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKyAgICAvLyBGSVhNRTogW0xCU0VdIEVu
ZCBjb2RlIG9ubHkgbmVlZGVkIGZvciBsZWdhY3kgU1ZHIGVuZ2luZS4KIAogICAgIGJvb2wgc2hv
dWxkSGFuZGxlU3VidHJlZU11dGF0aW9ucygpIGNvbnN0OwogCi0gICAgYm9vbCBtX25lZWRzUmVv
cmRlcmluZyA6IDE7Ci0gICAgYm9vbCBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUgOiAx
OwotICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRz
VGV4dE1ldHJpY3NVcGRhdGUgOiAxOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNm
b3JtOworICAgIGJvb2wgbV9uZWVkc1Jlb3JkZXJpbmcgOiAxIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fbmVlZHNQb3NpdGlvbmluZ1ZhbHVlc1VwZGF0ZSA6IDEgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDEgeyB0cnVlIH07IC8vIEZJWE1FOiBbTEJTRV0gT25s
eSBuZWVkZWQgZm9yIGxlZ2FjeSBTVkcgZW5naW5lLgorICAgIGJvb2wgbV9uZWVkc1RleHRNZXRy
aWNzVXBkYXRlIDogMSB7IGZhbHNlIH07CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFu
c2Zvcm07IC8vIEZJWE1FOiBbTEJTRV0gT25seSBuZWVkZWQgZm9yIGxlZ2FjeSBTVkcgZW5naW5l
LgogICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlciBtX2xheW91dEF0dHJpYnV0ZXNC
dWlsZGVyOwogICAgIFZlY3RvcjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyo+IG1fbGF5b3V0QXR0
cmlidXRlczsKKyAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGluZ0JveDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1Jvb3RJbmxpbmVCb3guY3BwCmluZGV4IDljNmMwOTgwMTM3Ni4uMWMwY2E4YmZjMDI2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAK
QEAgLTQ2LDIxICs0NiwzNyBAQCBTVkdSb290SW5saW5lQm94OjpTVkdSb290SW5saW5lQm94KFJl
bmRlclNWR1RleHQmIHJlbmRlclNWR1RleHQpCiB7CiB9CiAKLVJlbmRlclNWR1RleHQmIFNWR1Jv
b3RJbmxpbmVCb3g6OnJlbmRlclNWR1RleHQoKQorUmVuZGVyU1ZHVGV4dCYgU1ZHUm9vdElubGlu
ZUJveDo6cmVuZGVyU1ZHVGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
clNWR1RleHQ+KGJsb2NrRmxvdygpKTsKIH0KIAotdm9pZCBTVkdSb290SW5saW5lQm94OjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBM
YXlvdXRVbml0LCBMYXlvdXRVbml0KQordm9pZCBTVkdSb290SW5saW5lQm94OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBMYXlvdXRV
bml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKIHsKICAgICBBU1NFUlQocGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2U6OlNlbGVjdGlvbik7CiAgICAgQVNTRVJUKCFwYWludEluZm8uY29udGV4dCgp
LnBhaW50aW5nRGlzYWJsZWQoKSk7CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lO
RSkKKyAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNW
R0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAgICBhdXRvIG92ZXJmbG93UmVjdCh2aXN1YWxPdmVy
Zmxvd1JlY3QobGluZVRvcCwgbGluZUJvdHRvbSkpOworICAgICAgICBmbGlwRm9yV3JpdGluZ01v
ZGUob3ZlcmZsb3dSZWN0KTsKKyAgICAgICAgb3ZlcmZsb3dSZWN0Lm1vdmVCeShwYWludE9mZnNl
dCk7CisKKyAgICAgICAgaWYgKCFwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKG92ZXJmbG93UmVj
dCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
bGluZVRvcCk7CisgICAgVU5VU0VEX1BBUkFNKGxpbmVCb3R0b20pOworI2VuZGlmCisKICAgICBi
b29sIGlzUHJpbnRpbmcgPSByZW5kZXJTVkdUZXh0KCkuZG9jdW1lbnQoKS5wcmludGluZygpOwog
ICAgIGJvb2wgaGFzU2VsZWN0aW9uID0gIWlzUHJpbnRpbmcgJiYgc2VsZWN0aW9uU3RhdGUoKSAh
PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lOwogICAgIGJvb2wgc2hvdWxkUGFp
bnRTZWxlY3Rpb25IaWdobGlnaHQgPSAhKHBhaW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRhaW5z
KFBhaW50QmVoYXZpb3I6OlNraXBTZWxlY3Rpb25IaWdobGlnaHQpKTsKIAogICAgIFBhaW50SW5m
byBjaGlsZFBhaW50SW5mbyhwYWludEluZm8pOworICAgIGNoaWxkUGFpbnRJbmZvLnVwZGF0ZVN1
YnRyZWVQYWludFJvb3RGb3JDaGlsZHJlbigmcmVuZGVyZXIoKSk7CisKICAgICBpZiAoaGFzU2Vs
ZWN0aW9uICYmIHNob3VsZFBhaW50U2VsZWN0aW9uSGlnaGxpZ2h0KSB7CiAgICAgICAgIGZvciAo
YXV0byogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25M
aW5lKCkpIHsKICAgICAgICAgICAgIGlmIChpczxTVkdJbmxpbmVUZXh0Qm94PigqY2hpbGQpKQpA
QCAtNzAsNiArODYsMTcgQEAgdm9pZCBTVkdSb290SW5saW5lQm94OjpwYWludChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2UKICAgICAgICAgfQogICAg
IH0KIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChyZW5kZXJl
cigpLmRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKSB7
CisgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIo
KS5pc1RleHQoKSB8fCAhY2hpbGQtPmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWludGluZ0xh
eWVyKCkpCisgICAgICAgICAgICAgICAgY2hpbGQtPnBhaW50KGNoaWxkUGFpbnRJbmZvLCBwYWlu
dE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCisKICAgICBTVkdSZW5kZXJpbmdDb250ZXh0IHJlbmRlcmluZ0Nv
bnRleHQocmVuZGVyU1ZHVGV4dCgpLCBwYWludEluZm8sIFNWR1JlbmRlcmluZ0NvbnRleHQ6OlNh
dmVHcmFwaGljc0NvbnRleHQpOwogICAgIGlmIChyZW5kZXJpbmdDb250ZXh0LmlzUmVuZGVyaW5n
UHJlcGFyZWQoKSkgewogICAgICAgICBmb3IgKGF1dG8qIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKQpAQCAtMTcwLDkgKzE5Nyw3IEBAIHZv
aWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0Um9vdEJveChjb25zdCBGbG9hdFJlY3QmIGNoaWxk
UmVjdCkKICAgICBSZW5kZXJTVkdUZXh0JiBwYXJlbnRCbG9jayA9IHJlbmRlclNWR1RleHQoKTsK
IAogICAgIC8vIEZpbmFsbHksIGFzc2lnbiB0aGUgcm9vdCBibG9jayBwb3NpdGlvbiwgbm93IHRo
YXQgYWxsIGNvbnRlbnQgaXMgbGFpZCBvdXQuCi0gICAgTGF5b3V0UmVjdCBib3VuZGluZ1JlY3Qg
PSBlbmNsb3NpbmdMYXlvdXRSZWN0KGNoaWxkUmVjdCk7Ci0gICAgcGFyZW50QmxvY2suc2V0TG9j
YXRpb24oYm91bmRpbmdSZWN0LmxvY2F0aW9uKCkpOwotICAgIHBhcmVudEJsb2NrLnNldFNpemUo
Ym91bmRpbmdSZWN0LnNpemUoKSk7CisgICAgcGFyZW50QmxvY2sudXBkYXRlUG9zaXRpb25BbmRP
dmVyZmxvdyhjaGlsZFJlY3QpOwogCiAgICAgLy8gUG9zaXRpb24gYWxsIGNoaWxkcmVuIHJlbGF0
aXZlIHRvIHRoZSBwYXJlbnQgYmxvY2suCiAgICAgZm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewpAQCAtMTg3LDYgKzIx
Miw4IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0Um9vdEJveChjb25zdCBGbG9hdFJl
Y3QmIGNoaWxkUmVjdCkKICAgICBzZXRZKDApOwogICAgIHNldExvZ2ljYWxXaWR0aChjaGlsZFJl
Y3Qud2lkdGgoKSk7CiAgICAgc2V0TG9naWNhbEhlaWdodChjaGlsZFJlY3QuaGVpZ2h0KCkpOwor
CisgICAgYXV0byBib3VuZGluZ1JlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KGNoaWxkUmVjdCk7
CiAgICAgc2V0TGluZVRvcEJvdHRvbVBvc2l0aW9ucygwLCBib3VuZGluZ1JlY3QuaGVpZ2h0KCks
IDAsIGJvdW5kaW5nUmVjdC5oZWlnaHQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmgKaW5kZXggMGQxNjI2OWViNWMxLi5hZjFiMTNl
YWQ1ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElu
bGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGlu
ZUJveC5oCkBAIC0zNSw4ICszNSw2IEBAIGNsYXNzIFNWR1Jvb3RJbmxpbmVCb3ggZmluYWwgOiBw
dWJsaWMgTGVnYWN5Um9vdElubGluZUJveCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU1ZHUm9v
dElubGluZUJveChSZW5kZXJTVkdUZXh0Jik7CiAKLSAgICBSZW5kZXJTVkdUZXh0JiByZW5kZXJT
VkdUZXh0KCk7Ci0KICAgICBmbG9hdCB2aXJ0dWFsTG9naWNhbEhlaWdodCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fbG9naWNhbEhlaWdodDsgfQogICAgIHZvaWQgc2V0TG9naWNhbEhlaWdo
dChmbG9hdCBoZWlnaHQpIHsgbV9sb2dpY2FsSGVpZ2h0ID0gaGVpZ2h0OyB9CiAKQEAgLTQ5LDYg
KzQ3LDggQEAgcHVibGljOgogICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQg
bGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tLCBIaXRUZXN0QWN0aW9uKSBmaW5hbDsKIAog
cHJpdmF0ZToKKyAgICBSZW5kZXJTVkdUZXh0JiByZW5kZXJTVkdUZXh0KCkgY29uc3Q7CisKICAg
ICBib29sIGlzU1ZHUm9vdElubGluZUJveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KICAgICB2b2lkIHJlb3JkZXJWYWx1ZUxpc3RzVG9Mb2dpY2FsT3JkZXIoVmVjdG9yPFNWR1Rl
eHRMYXlvdXRBdHRyaWJ1dGVzKj4mKTsKICAgICB2b2lkIGxheW91dENoYXJhY3RlcnNJblRleHRC
b3hlcyhMZWdhY3lJbmxpbmVGbG93Qm94KiwgU1ZHVGV4dExheW91dEVuZ2luZSYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IDQzMGQ2ZTJkNzJjNC4uNmJiYTIwYzYxNTJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCkBAIC01MzEsNyArNTMxLDcgQEAgc3RhdGljIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBjcmVhdGVTVkdM
YXllckF3YXJlRWwKICAgICAvLyBMaXN0IG9mIGFsbCBTVkcgZWxlbWVudHMgd2hvc2UgcmVuZGVy
ZXJzIHN1cHBvcnQgdGhlIGxheWVyIGF3YXJlIGxheW91dCAvIHBhaW50aW5nIC8gaGl0LXRlc3Rp
bmcgbW9kZSAoJ0xCU0UtbW9kZScpLgogICAgIHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKICAg
ICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0
OwotICAgIGZvciAoYXV0byYgdGFnIDogeyBnVGFnLmdldCgpLCByZWN0VGFnLmdldCgpIH0pCisg
ICAgZm9yIChhdXRvJiB0YWcgOiB7IGdUYWcuZ2V0KCksIHJlY3RUYWcuZ2V0KCksIHRleHRUYWcu
Z2V0KCkgfSkKICAgICAgICAgc2V0LmFkZCh0YWcubG9jYWxOYW1lKCkpOwogICAgIHJldHVybiBz
ZXQ7CiB9Ci0tIAoyLjM1LjEKCg==
</data>
<flag name="review"
          id="488508"
          type_id="1"
          status="+"
          setter="rbuis"
    />
          </attachment>
      

    </bug>

</bugzilla>