<?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>208776</bug_id>
          
          <creation_ts>2020-03-07 15:56:28 -0800</creation_ts>
          <short_desc>Make PDF range requests to the network</short_desc>
          <delta_ts>2020-03-08 00:38:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>rniwa</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1627338</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-07 15:56:28 -0800</bug_when>
    <thetext>Make PDF range requests to the network</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627352</commentid>
    <comment_count>1</comment_count>
      <attachid>392909</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-07 16:21:33 -0800</bug_when>
    <thetext>Created attachment 392909
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627367</commentid>
    <comment_count>2</comment_count>
      <attachid>392909</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-07 16:43:13 -0800</bug_when>
    <thetext>Comment on attachment 392909
Patch

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

This patch looks good so far. I haven&apos;t finished reading it. If someone else wants to finish reviewing go for it do NOT wait for me. I have to run, but I will finish reading later.

&gt; Source/WebKit/ChangeLog:18
&gt; +        While it is now entirely mis-named, NetscapePlugInStreamLoader is a perfect fit for this.

This is ok as-is. No change is needed. mis-named =&gt; misnamed

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:339
&gt; +        WebCore::NetscapePlugInStreamLoader* streamLoader() const { return m_streamLoader; }

This is ok as-is. No change is needed. Optimal solution is to either return const NetscapePlugInStreamLoader*  because:

1. Prevents m_streamLoader from being mutated out from under this object.

OR make this function non-const because:

1. Acknowledge m_streamLoader can mutate out from under this object so long as caller holds non-const ref to this object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627391</commentid>
    <comment_count>3</comment_count>
      <attachid>392920</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-07 17:45:11 -0800</bug_when>
    <thetext>Created attachment 392920
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627392</commentid>
    <comment_count>4</comment_count>
      <attachid>392921</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-07 17:48:55 -0800</bug_when>
    <thetext>Created attachment 392921
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627393</commentid>
    <comment_count>5</comment_count>
      <attachid>392920</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-03-07 17:52:10 -0800</bug_when>
    <thetext>Comment on attachment 392920
Patch

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

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:326
&gt; +    // WebCore::NetscapePlugInStreamLoaderClient

Ouch @ the name

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:336
&gt; +        ByteRangeRequest(off_t position, size_t count, CompletionHandler&lt;void(const uint8_t*, size_t count)&gt;&amp;&amp; completionHandler)

off_t or uint64_t? why both?

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:770
&gt; +    TextStream stream;
&gt; +    stream &lt;&lt; &quot;bytes=&quot; &lt;&lt; position &lt;&lt; &quot;-&quot; &lt;&lt; position + count - 1;

Is this really how we compose headers? Also, shouldn&apos;t this use WTF::makeString?

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:817
&gt; +    m_completionHandler(data, count);

Do you need to clear the completion handler? Is there any chance of a cycle here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627397</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-07 18:07:31 -0800</bug_when>
    <thetext>(In reply to Tim Horton from comment #5)
&gt; Comment on attachment 392920 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=392920&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:326
&gt; &gt; +    // WebCore::NetscapePlugInStreamLoaderClient
&gt; 
&gt; Ouch @ the name
&gt; 
&gt; &gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:336
&gt; &gt; +        ByteRangeRequest(off_t position, size_t count, CompletionHandler&lt;void(const uint8_t*, size_t count)&gt;&amp;&amp; completionHandler)
&gt; 
&gt; off_t or uint64_t? why both?

Comes in to CGDataProvider as off_t

We know it&apos;s always positive and therefore go uint64_t.

I can make that switch when creating the request I guess.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:770
&gt; &gt; +    TextStream stream;
&gt; &gt; +    stream &lt;&lt; &quot;bytes=&quot; &lt;&lt; position &lt;&lt; &quot;-&quot; &lt;&lt; position + count - 1;
&gt; 
&gt; Is this really how we compose headers? 

When it&apos;s a rare header WebKit has never set before? Sure.

&gt; Also, shouldn&apos;t this use WTF::makeString?

I can never keep track.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:817
&gt; &gt; +    m_completionHandler(data, count);
&gt; 
&gt; Do you need to clear the completion handler? Is there any chance of a cycle
&gt; here?

WTF::CompletionHandlers can only be called once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627398</commentid>
    <comment_count>7</comment_count>
      <attachid>392921</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-03-07 18:10:10 -0800</bug_when>
    <thetext>Comment on attachment 392921
Patch

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

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:770
&gt; +    TextStream stream;
&gt; +    stream &lt;&lt; &quot;bytes=&quot; &lt;&lt; position &lt;&lt; &quot;-&quot; &lt;&lt; position + count - 1;

makeString can be used for this if StringConcatenateNumbers.h is included.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627404</commentid>
    <comment_count>8</comment_count>
      <attachid>392925</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-07 18:35:02 -0800</bug_when>
    <thetext>Created attachment 392925
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627407</commentid>
    <comment_count>9</comment_count>
      <attachid>392925</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-03-07 18:39:59 -0800</bug_when>
    <thetext>Comment on attachment 392925
Patch

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

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:77
&gt; +, private WebCore::NetscapePlugInStreamLoaderClient

Indent

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:327
&gt; +    void willSendRequest(WebCore::NetscapePlugInStreamLoader*, WebCore::ResourceRequest&amp;&amp;, const WebCore::ResourceResponse&amp; redirectResponse, CompletionHandler&lt;void(WebCore::ResourceRequest&amp;&amp;)&gt;&amp;&amp;) final;

These won&apos;t override anything if HAVE(INCREMENTAL_PDF_APIS) is false.

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:335
&gt; +        ByteRangeRequest() = default;

Do we need a default constructor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627409</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-07 18:49:06 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #9)
&gt; Comment on attachment 392925 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=392925&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:77
&gt; &gt; +, private WebCore::NetscapePlugInStreamLoaderClient
&gt; 
&gt; Indent
&gt; 
&gt; &gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:327
&gt; &gt; +    void willSendRequest(WebCore::NetscapePlugInStreamLoader*, WebCore::ResourceRequest&amp;&amp;, const WebCore::ResourceResponse&amp; redirectResponse, CompletionHandler&lt;void(WebCore::ResourceRequest&amp;&amp;)&gt;&amp;&amp;) final;
&gt; 
&gt; These won&apos;t override anything if HAVE(INCREMENTAL_PDF_APIS) is false.

The class only implements NetscapePlugInStreamLoaderClient if HAVE(INCREMENTAL_PDF_APIS) is true, and these overrides are in a HAVE(INCREMENTAL_PDF_APIS) block.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:335
&gt; &gt; +        ByteRangeRequest() = default;
&gt; 
&gt; Do we need a default constructor?

Yes for the HashMap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627411</commentid>
    <comment_count>11</comment_count>
      <attachid>392928</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-07 18:50:18 -0800</bug_when>
    <thetext>Created attachment 392928
Patch (fixed the indent)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627442</commentid>
    <comment_count>12</comment_count>
      <attachid>392928</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-07 20:19:43 -0800</bug_when>
    <thetext>Comment on attachment 392928
Patch (fixed the indent)

Clearing flags on attachment: 392928

Committed r258096: &lt;https://trac.webkit.org/changeset/258096&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627443</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-07 20:19:44 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627444</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-07 20:20:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/60195730&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627480</commentid>
    <comment_count>15</comment_count>
      <attachid>392928</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-08 00:38:25 -0800</bug_when>
    <thetext>Comment on attachment 392928
Patch (fixed the indent)

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

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:351
&gt; +        bool maybeComplete(PDFPlugin&amp;);

This is ok as-is. A better solution is to make this a const function because it does not modify the state of this object.

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:352
&gt; +        void completeUnconditionally(PDFPlugin&amp;);

Ditto.

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:824
&gt; +bool PDFPlugin::ByteRangeRequest::maybeComplete(PDFPlugin&amp; plugin)

This is ok as-is. No change needed. Slightly better to take plug-in  by const lvalue ref because this function does not modify it.

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:833
&gt; +void PDFPlugin::ByteRangeRequest::completeUnconditionally(PDFPlugin&amp; plugin)

Ditto

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:858
&gt; +    ASSERT(request-&gt;streamLoader() == loader);

Nullptr deref here when request is nullptr

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:883
&gt; +    request-&gt;addData(reinterpret_cast&lt;const uint8_t*&gt;(data), count);

This is ok as-is. No change is needed. The optimal solution is to not use an early return, just write:

If (auto* request = byteRangeRequestForLoader(*loader))
    ....
Because 
1, Scopes request closer to its use
2. Less lines of code.
3. Because of (2) improves readability

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:918
&gt; +}

This ok as-is. No change needed. The parentheses are not needed because

1. -&gt; has higher precedence than &amp;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392909</attachid>
            <date>2020-03-07 16:21:33 -0800</date>
            <delta_ts>2020-03-07 17:45:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>15416</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYTVlYTM3ZWMwM2MuLjE3OTVmMzI0YmVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQzIEBACisyMDIwLTAzLTA3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBNYWtlIFBERiByYW5nZSByZXF1ZXN0cyB0byB0aGUgbmV0d29yay4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODc3NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFscmVhZHkgaGFuZGxl
IGEgc2V0IG9mIHJhbmdlIHJlcXVlc3RzIGZyb20gb3VyIGRhdGEgcHJvdmlkZXIgY2FsbGJhY2tz
LgorICAgICAgICBUaGUgY3VycmVudCBzdHJhdGVneSBpcyAid2FpdCB1bnRpbCB3ZSd2ZSBzdHJl
YW1lZCBlbm91Z2ggb2YgdGhlIGVudGlyZSByZXNvdXJjZSwgCisgICAgICAgIHBlcmZvcm0gdGhh
dCByZXF1ZXN0J3MgY2FsbGJhY2siCisgICAgICAgIAorICAgICAgICBGb3IgbGluZWFyaXplZCBQ
REZzIHRoZSBzZWNvbmQgcmVxdWVzdCBldmVyIG1hZGUgaXMgZm9yIHRoZSB2ZXJ5IGVuZCBvZiB0
aGUgUERGIGRvY3VtZW50LAorICAgICAgICBzbyB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBlbnRp
cmUgZG9jdW1lbnQgdG8gbG9hZCAod2hpY2ggaXMgd2hhdCB3ZSBhbHJlYWR5IGRvIGluIG5vbi1p
bmNyZW1lbnRhbCBtb2RlKQorICAgICAgICAKKyAgICAgICAgTm93LCB3ZSdsbCBhY3R1YWxseSBt
YWtlIHRoZSByZXF1ZXN0cyBmb3IgbWlzc2luZyBkYXRhIGNodW5rcyBmcm9tIHRoZSBuZXR3b3Jr
IGJ5IHVzaW5nIHRoZSBkb2N1bWVudCdzIHJlcXVlc3QKKyAgICAgICAgYW5kIGFkZGluZyByYW5n
ZSBoZWFkZXJzLgorICAgICAgICAKKyAgICAgICAgV2hpbGUgaXQgaXMgbm93IGVudGlyZWx5IG1p
cy1uYW1lZCwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIgaXMgYSBwZXJmZWN0IGZpdCBmb3Ig
dGhpcy4KKyAgICAgICAgCisgICAgICAgIE9uY2UgdGhlIHJhbmdlIHJlcXVlc3QgY29tcGxldGVz
IGZyb20gdGhlIG5ldHdvcmsgd2UgY2FuIHVuYmxvY2sgdGhlIFBERiB0aHJlYWQgYW5kIGdvIHRv
IHRoZSBuZXh0IHJlcXVlc3QuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1t
OgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnVuY29uZGl0aW9uYWxDb21wbGV0ZU91dHN0
YW5kaW5nUmFuZ2VSZXF1ZXN0cyk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Z2V0UmVz
b3VyY2VCeXRlc0F0UG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OkJ5dGVS
YW5nZVJlcXVlc3Q6OmNsZWFyU3RyZWFtTG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1
Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0Ojpjb21wbGV0ZVdpdGhCeXRlcyk6CisgICAgICAgIChXZWJL
aXQ6OlBERlBsdWdpbjo6Qnl0ZVJhbmdlUmVxdWVzdDo6Y29tcGxldGVXaXRoQWNjdW11bGF0ZWRE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0OjptYXli
ZUNvbXBsZXRlKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0
Ojpjb21wbGV0ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6
d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpkaWRSZWNlaXZl
UmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmRpZFJlY2VpdmVEYXRhKToK
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6
UERGUGx1Z2luOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2lu
OjpieXRlUmFuZ2VSZXF1ZXN0Rm9yTG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2lu
OjpjYW5jZWxBbmRGb3JnZXRMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om1h
bnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp1
bmNvbmRpdGlvbmFsQ29tcGxldGVSYW5nZVJlcXVlc3QpOiBEZWxldGVkLgorCiAyMDIwLTAzLTA3
ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgcnVudGlt
ZSBmbGFnIGZvciBpbmNyZW1lbnRhbCBQREYgbG9hZGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAppbmRleCAzNzRjZjM3NTRjMC4uZTlj
YjFiNzI1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9QREZQbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYv
UERGUGx1Z2luLmgKQEAgLTM0LDcgKzM0LDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9BWE9iamVj
dENhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVUcmFuc2Zvcm0uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ZpbmRPcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9JZGVudGlmaWVkLmg+CiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAt
NjksNyArNzIsNyBAQCBjbGFzcyBQREZQbHVnaW5QYXNzd29yZEZpZWxkOwogY2xhc3MgUGx1Z2lu
VmlldzsKIGNsYXNzIFdlYkZyYW1lOwogCi1jbGFzcyBQREZQbHVnaW4gZmluYWwgOiBwdWJsaWMg
UGx1Z2luLCBwcml2YXRlIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhIHsKK2NsYXNzIFBERlBsdWdp
biBmaW5hbCA6IHB1YmxpYyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEs
IHByaXZhdGUgV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQgewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8UERGUGx1Z2luPiBjcmVhdGUoV2ViRnJhbWUmKTsKICAgICB+
UERGUGx1Z2luKCk7CkBAIC0zMTYsMTcgKzMxOSw1MCBAQCBwcml2YXRlOgogICAgIHZvaWQgdGhy
ZWFkRW50cnkoUmVmPFBERlBsdWdpbj4mJik7CiAgICAgdm9pZCBhZG9wdEJhY2tncm91bmRUaHJl
YWREb2N1bWVudCgpOwogCi0gICAgc3RydWN0IEJ5dGVSYW5nZVJlcXVlc3QgewotICAgICAgICBv
ZmZfdCBwb3NpdGlvbiB7IDAgfTsKLSAgICAgICAgc2l6ZV90IGNvdW50IHsgMCB9OwotICAgICAg
ICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QgY291bnQpPiBj
b21wbGV0aW9uSGFuZGxlcjsKLSAgICB9OwotICAgIHZvaWQgdW5jb25kaXRpb25hbENvbXBsZXRl
UmFuZ2VSZXF1ZXN0KEJ5dGVSYW5nZVJlcXVlc3QmKTsKKyAgICAvLyBXZWJDb3JlOjpOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudAorICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFdlYkNv
cmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYpPiYmKSBmaW5h
bDsKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBmaW5hbDsKKyAg
ICB2b2lkIGRpZFJlY2VpdmVEYXRhKFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
KiwgY29uc3QgY2hhciosIGludCkgZmluYWw7CisgICAgdm9pZCBkaWRGYWlsKFdlYkNvcmU6Ok5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYp
IGZpbmFsOworICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZyhXZWJDb3JlOjpOZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlciopIGZpbmFsOworCisgICAgY2xhc3MgQnl0ZVJhbmdlUmVxdWVzdCA6IHB1
YmxpYyBJZGVudGlmaWVkPEJ5dGVSYW5nZVJlcXVlc3Q+IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IEJ5dGVSYW5nZVJlcXVlc3QoKSA9IGRlZmF1bHQ7CisgICAgICAgIEJ5dGVSYW5nZVJlcXVlc3Qo
b2ZmX3QgcG9zaXRpb24sIHNpemVfdCBjb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCB1aW50OF90Kiwgc2l6ZV90IGNvdW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAg
ICAgIDogbV9wb3NpdGlvbihwb3NpdGlvbikKKyAgICAgICAgICAgICwgbV9jb3VudChjb3VudCkK
KyAgICAgICAgICAgICwgbV9jb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgV2ViQ29yZTo6TmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXIqIHN0cmVhbUxvYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RyZWFt
TG9hZGVyOyB9CisgICAgICAgIHZvaWQgc2V0U3RyZWFtTG9hZGVyKFdlYkNvcmU6Ok5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIpIHsgbV9zdHJlYW1Mb2FkZXIgPSBsb2FkZXI7IH0K
KyAgICAgICAgdm9pZCBjbGVhclN0cmVhbUxvYWRlcigpOworICAgICAgICB2b2lkIGFkZERhdGEo
Y29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGNvdW50KSB7IG1fYWNjdW11bGF0ZWREYXRhLmFw
cGVuZChkYXRhLCBjb3VudCk7IH0KKworICAgICAgICB2b2lkIGNvbXBsZXRlV2l0aEJ5dGVzKGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgICAgICB2b2lkIGNvbXBsZXRlV2l0aEFjY3VtdWxh
dGVkRGF0YSgpOworCisgICAgICAgIGJvb2wgbWF5YmVDb21wbGV0ZShQREZQbHVnaW4mKTsKKyAg
ICAgICAgdm9pZCBjb21wbGV0ZVVuY29uZGl0aW9uYWxseShQREZQbHVnaW4mKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIHVpbnQ2NF90IG1fcG9zaXRpb24geyAwIH07CisgICAgICAgIHNpemVf
dCBtX2NvdW50IHsgMCB9OworICAgICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IHVp
bnQ4X3QqLCBzaXplX3QgY291bnQpPiBtX2NvbXBsZXRpb25IYW5kbGVyOworICAgICAgICBWZWN0
b3I8dWludDhfdD4gbV9hY2N1bXVsYXRlZERhdGE7CisgICAgICAgIFdlYkNvcmU6Ok5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyKiBtX3N0cmVhbUxvYWRlciB7IG51bGxwdHIgfTsKKyAgICAgfTsK
ICAgICB2b2lkIHVuY29uZGl0aW9uYWxDb21wbGV0ZU91dHN0YW5kaW5nUmFuZ2VSZXF1ZXN0cygp
OwogCisgICAgQnl0ZVJhbmdlUmVxdWVzdCogYnl0ZVJhbmdlUmVxdWVzdEZvckxvYWRlcihXZWJD
b3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciYpOworICAgIHZvaWQgY2FuY2VsQW5kRm9y
Z2V0TG9hZGVyKFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyJik7CisKICAgICBS
ZXRhaW5QdHI8UERGRG9jdW1lbnQ+IG1fYmFja2dyb3VuZFRocmVhZERvY3VtZW50OwogICAgIFJl
ZlB0cjxUaHJlYWQ+IG1fcGRmVGhyZWFkOwotICAgIFZlY3RvcjxCeXRlUmFuZ2VSZXF1ZXN0PiBt
X291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHM7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgQnl0
ZVJhbmdlUmVxdWVzdD4gbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzOworICAgIEhhc2hN
YXA8UmVmUHRyPFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiwgdWludDY0X3Q+
IG1fc3RyZWFtTG9hZGVyTWFwOwogICAgIGJvb2wgbV9pbmNyZW1lbnRhbFBERkxvYWRpbmdFbmFi
bGVkOwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1Bs
dWdpbnMvUERGL1BERlBsdWdpbi5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZQbHVnaW4ubW0KaW5kZXggZTU0NjllNTVjMDIuLjJlZDM3NmQ0YjVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KQEAg
LTQzLDYgKzQzLDcgQEAKICNpbXBvcnQgIldlYkV2ZW50LmgiCiAjaW1wb3J0ICJXZWJFdmVudENv
bnZlcnNpb24uaCIKICNpbXBvcnQgIldlYkZpbmRPcHRpb25zLmgiCisjaW1wb3J0ICJXZWJMb2Fk
ZXJTdHJhdGVneS5oIgogI2ltcG9ydCAiV2ViUGFnZS5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5
TWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VzLmgiCkBAIC03
MzUsNDEgKzczNiw1MSBAQCB2b2lkIFBERlBsdWdpbjo6dGhyZWFkRW50cnkoUmVmPFBERlBsdWdp
bj4mJiBwcm90ZWN0ZWRQbHVnaW4pCiAKIHZvaWQgUERGUGx1Z2luOjp1bmNvbmRpdGlvbmFsQ29t
cGxldGVPdXRzdGFuZGluZ1JhbmdlUmVxdWVzdHMoKQogewotICAgIGZvciAoYXV0byYgcmVxdWVz
dCA6IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cykKLSAgICAgICAgdW5jb25kaXRpb25h
bENvbXBsZXRlUmFuZ2VSZXF1ZXN0KHJlcXVlc3QpOworICAgIGZvciAoYXV0byYgcmVxdWVzdCA6
IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy52YWx1ZXMoKSkKKyAgICAgICAgcmVxdWVz
dC5jb21wbGV0ZVVuY29uZGl0aW9uYWxseSgqdGhpcyk7CiAgICAgbV9vdXRzdGFuZGluZ0J5dGVS
YW5nZVJlcXVlc3RzLmNsZWFyKCk7CiB9CiAKLXZvaWQgUERGUGx1Z2luOjp1bmNvbmRpdGlvbmFs
Q29tcGxldGVSYW5nZVJlcXVlc3QoQnl0ZVJhbmdlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBp
ZiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJlcXVlc3QucG9zaXRpb24pID49IG1fc3RyZWFtZWRC
eXRlcykgewotICAgICAgICByZXF1ZXN0LmNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIDApOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fZGF0YSk7Ci0KLSAgICBhdXRv
IGNvdW50ID0gcmVxdWVzdC5wb3NpdGlvbiArIHJlcXVlc3QuY291bnQgPiBtX3N0cmVhbWVkQnl0
ZXMgPyBtX3N0cmVhbWVkQnl0ZXMgLSByZXF1ZXN0LnBvc2l0aW9uIDogcmVxdWVzdC5jb3VudDsK
LSAgICByZXF1ZXN0LmNvbXBsZXRpb25IYW5kbGVyKENGRGF0YUdldEJ5dGVQdHIobV9kYXRhLmdl
dCgpKSArIHJlcXVlc3QucG9zaXRpb24sIGNvdW50KTsKLX0KLQogdm9pZCBQREZQbHVnaW46Omdl
dFJlc291cmNlQnl0ZXNBdFBvc2l0aW9uKHNpemVfdCBjb3VudCwgb2ZmX3QgcG9zaXRpb24sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgdWludDhfdCosIHNpemVfdCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgCiAKLSAgICBpZiAobV9z
dHJlYW1lZEJ5dGVzID49IHBvc2l0aW9uICsgY291bnQpIHsKLSAgICAgICAgQVNTRVJUKG1fZGF0
YSk7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENGRGF0YUdldEJ5dGVQdHIobV9kYXRhLmdl
dCgpKSArIHBvc2l0aW9uLCBjb3VudCk7CisgICAgQnl0ZVJhbmdlUmVxdWVzdCByZXF1ZXN0ID0g
eyBwb3NpdGlvbiwgY291bnQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpIH07CisgICAgaWYg
KHJlcXVlc3QubWF5YmVDb21wbGV0ZSgqdGhpcykpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAK
LSAgICBCeXRlUmFuZ2VSZXF1ZXN0IHJlcXVlc3QgPSB7IHBvc2l0aW9uLCBjb3VudCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikgfTsKICAgICBpZiAobV9kb2N1bWVudEZpbmlzaGVkTG9hZGlu
ZykgewotICAgICAgICB1bmNvbmRpdGlvbmFsQ29tcGxldGVSYW5nZVJlcXVlc3QocmVxdWVzdCk7
CisgICAgICAgIHJlcXVlc3QuY29tcGxldGVVbmNvbmRpdGlvbmFsbHkoKnRoaXMpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLmFw
cGVuZChXVEZNb3ZlKHJlcXVlc3QpKTsKKyAgICBhdXRvIGlkZW50aWZpZXIgPSByZXF1ZXN0Lmlk
ZW50aWZpZXIoKTsKKyAgICBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMuc2V0KGlkZW50
aWZpZXIsIFdURk1vdmUocmVxdWVzdCkpOworCisgICAgYXV0byogY29yZUZyYW1lID0gbV9mcmFt
ZS5jb3JlRnJhbWUoKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byogZG9jdW1lbnRMb2FkZXIgPSBjb3JlRnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9h
ZGVyKCk7CisgICAgaWYgKCFkb2N1bWVudExvYWRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byByZXNvdXJjZVJlcXVlc3QgPSBkb2N1bWVudExvYWRlci0+cmVxdWVzdCgpOworICAgIFRl
eHRTdHJlYW0gc3RyZWFtOworICAgIHN0cmVhbSA8PCAiYnl0ZXM9IiA8PCBwb3NpdGlvbiA8PCAi
LSIgPDwgcG9zaXRpb24gKyBjb3VudCAtIDE7CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldEhUVFBI
ZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6UmFuZ2UsIHN0cmVhbS5yZWxlYXNlKCkpOworICAg
IHJlc291cmNlUmVxdWVzdC5zZXRDYWNoZVBvbGljeShSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGlj
eTo6RG9Ob3RVc2VBbnlDYWNoZSk7CisKKyAgICBMT0coUERGLCAiU2NoZWR1bGluZyBhIHN0cmVh
bSBsb2FkZXIgZm9yIHJlcXVlc3QgJWxsdSAoJWx1IGJ5dGVzIGF0ICVsbHUpXG4iLCBpZGVudGlm
aWVyLCBjb3VudCwgcG9zaXRpb24pOworCisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2Vi
TG9hZGVyU3RyYXRlZ3koKS5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoKmNvcmVGcmFtZSwgKnRo
aXMsIFdURk1vdmUocmVzb3VyY2VSZXF1ZXN0KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgaWRlbnRpZmllcl0gKFJlZlB0cjxXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlcj4mJiBsb2FkZXIpIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fb3V0c3Rh
bmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5maW5kKGlkZW50aWZpZXIpOworICAgICAgICBpZiAoaXRl
cmF0b3IgPT0gbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLmVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS5zZXRTdHJlYW1Mb2FkZXIobG9h
ZGVyLmdldCgpKTsKKyAgICAgICAgbV9zdHJlYW1Mb2FkZXJNYXAuc2V0KFdURk1vdmUobG9hZGVy
KSwgaWRlbnRpZmllcik7CisgICAgfSk7CiB9CiAKIHZvaWQgUERGUGx1Z2luOjphZG9wdEJhY2tn
cm91bmRUaHJlYWREb2N1bWVudCgpCkBAIC03OTIsNiArODAzLDEzNCBAQCB2b2lkIFBERlBsdWdp
bjo6YWRvcHRCYWNrZ3JvdW5kVGhyZWFkRG9jdW1lbnQoKQogCiAgICAgaW5zdGFsbFBERkRvY3Vt
ZW50KCk7CiB9CisKK3ZvaWQgUERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0OjpjbGVhclN0cmVh
bUxvYWRlcigpCit7CisgICAgQVNTRVJUKG1fc3RyZWFtTG9hZGVyKTsKKyAgICBtX3N0cmVhbUxv
YWRlciA9IG51bGxwdHI7CisgICAgbV9hY2N1bXVsYXRlZERhdGEuY2xlYXIoKTsKK30KKwordm9p
ZCBQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6OmNvbXBsZXRlV2l0aEJ5dGVzKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBjb3VudCkKK3sKKyAgICBMT0coUERGLCAiQ29tcGxldGluZyBy
YW5nZSByZXF1ZXN0ICVsbHUgKCVsdSBieXRlcyBhdCAlbGx1KSB3aXRoICVsdSBieXRlcyBmcm9t
IHRoZSBtYWluIFBERiBidWZmZXIiLCBpZGVudGlmaWVyKCksIG1fY291bnQsIG1fcG9zaXRpb24s
IGNvdW50KTsKKyAgICBtX2NvbXBsZXRpb25IYW5kbGVyKGRhdGEsIGNvdW50KTsKK30KKwordm9p
ZCBQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6OmNvbXBsZXRlV2l0aEFjY3VtdWxhdGVkRGF0
YSgpCit7CisgICAgTE9HKFBERiwgIkNvbXBsZXRpbmcgcmFuZ2UgcmVxdWVzdCAlbGx1ICglbHUg
Ynl0ZXMgYXQgJWxsdSkgd2l0aCAlbHUgYnl0ZXMgZnJvbSB0aGUgbmV0d29yayIsIGlkZW50aWZp
ZXIoKSwgbV9jb3VudCwgbV9wb3NpdGlvbiwgbV9hY2N1bXVsYXRlZERhdGEuc2l6ZSgpKTsKKyAg
ICBtX2NvbXBsZXRpb25IYW5kbGVyKG1fYWNjdW11bGF0ZWREYXRhLmRhdGEoKSwgbV9hY2N1bXVs
YXRlZERhdGEuc2l6ZSgpKTsKK30KKworYm9vbCBQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6
Om1heWJlQ29tcGxldGUoUERGUGx1Z2luJiBwbHVnaW4pCit7CisgICAgaWYgKHBsdWdpbi5tX3N0
cmVhbWVkQnl0ZXMgPj0gbV9wb3NpdGlvbiArIG1fY291bnQpIHsKKyAgICAgICAgY29tcGxldGVX
aXRoQnl0ZXMoQ0ZEYXRhR2V0Qnl0ZVB0cihwbHVnaW4ubV9kYXRhLmdldCgpKSArIG1fcG9zaXRp
b24sIG1fY291bnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFBERlBsdWdpbjo6Qnl0ZVJhbmdlUmVxdWVzdDo6Y29tcGxldGVVbmNv
bmRpdGlvbmFsbHkoUERGUGx1Z2luJiBwbHVnaW4pCit7CisgICAgaWYgKG1fcG9zaXRpb24gPj0g
cGx1Z2luLm1fc3RyZWFtZWRCeXRlcykgeworICAgICAgICBjb21wbGV0ZVdpdGhCeXRlcyhudWxs
cHRyLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChwbHVnaW4ubV9k
YXRhKTsKKworICAgIGF1dG8gY291bnQgPSBtX3Bvc2l0aW9uICsgbV9jb3VudCA+IHBsdWdpbi5t
X3N0cmVhbWVkQnl0ZXMgPyBwbHVnaW4ubV9zdHJlYW1lZEJ5dGVzIC0gbV9wb3NpdGlvbiA6IG1f
Y291bnQ7CisgICAgY29tcGxldGVXaXRoQnl0ZXMoQ0ZEYXRhR2V0Qnl0ZVB0cihwbHVnaW4ubV9k
YXRhLmdldCgpKSArIG1fcG9zaXRpb24sIGNvdW50KTsKK30KKwordm9pZCBQREZQbHVnaW46Ondp
bGxTZW5kUmVxdWVzdChOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBSZXNvdXJj
ZVJlcXVlc3QmJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoUmVzb3VyY2VSZXF1ZXN0JiYpPiYmKQoreworICAgIC8vIFJlZGlyZWN0aW9ucyBmb3IgcmFu
Z2UgcmVxdWVzdHMgYXJlIHVuZXhwZWN0ZWQuCisgICAgY2FuY2VsQW5kRm9yZ2V0TG9hZGVyKCps
b2FkZXIpOworfQorCit2b2lkIFBERlBsdWdpbjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQoreworICAgIGF1dG8qIHJlcXVlc3QgPSBieXRlUmFuZ2VSZXF1ZXN0Rm9yTG9hZGVyKCps
b2FkZXIpOworICAgIGlmICghcmVxdWVzdCkKKyAgICAgICAgY2FuY2VsQW5kRm9yZ2V0TG9hZGVy
KCpsb2FkZXIpOworCisgICAgQVNTRVJUKHJlcXVlc3QtPnN0cmVhbUxvYWRlcigpID09IGxvYWRl
cik7CisKKyAgICAvLyBSYW5nZSBzdWNjZXNzISBXZSdsbCBleHBlY3QgdG8gcmVjZWl2ZSB0aGUg
ZGF0YSBpbiBmdXR1cmUgZGlkUmVjZWl2ZURhdGEgY2FsbGJhY2tzLgorICAgIGlmIChyZXNwb25z
ZS5odHRwU3RhdHVzQ29kZSgpID09IDIwNikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYg
dGhlIHJlc3BvbnNlIHdhc24ndCBhIHN1Y2Nlc3NmdWwgcmFuZ2UgcmVzcG9uc2UsIHdlIGRvbid0
IG5lZWQgdGhpcyBzdHJlYW0gbG9hZGVyIGFueW1vcmUuCisgICAgLy8gVGhpcyBjYW4gaGFwcGVu
LCBmb3IgZXhhbXBsZSwgaWYgdGhlIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgcmFuZ2UgcmVxdWVz
dHMuCisgICAgLy8gV2UnbGwgc3RpbGwgcmVzb2x2ZSB0aGUgQnl0ZVJhbmdlUmVxdWVzdCBsYXRl
ciBvbmNlIGVub3VnaCBvZiB0aGUgZnVsbCByZXNvdXJjZSBoYXMgbG9hZGVkLgorICAgIGNhbmNl
bEFuZEZvcmdldExvYWRlcigqbG9hZGVyKTsKKworICAgIC8vIFRoZSBzZXJ2ZXIgbWlnaHQgc3Vw
cG9ydCByYW5nZSByZXF1ZXN0cyBhbmQgZXhwbGljaXRseSB0b2xkIHVzIHRoaXMgcmFuZ2Ugd2Fz
IG5vdCBzYXRpc2ZpYWJsZS4KKyAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIGNhbiByZWplY3QgdGhl
IEJ5dGVSYW5nZVJlcXVlc3QgcmlnaHQgYXdheS4KKyAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1
c0NvZGUoKSA9PSA0MTYgJiYgcmVxdWVzdCkgeworICAgICAgICByZXF1ZXN0LT5jb21wbGV0ZVdp
dGhBY2N1bXVsYXRlZERhdGEoKTsKKyAgICAgICAgbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVl
c3RzLnJlbW92ZShyZXF1ZXN0LT5pZGVudGlmaWVyKCkpOworICAgIH0KK30KKwordm9pZCBQREZQ
bHVnaW46OmRpZFJlY2VpdmVEYXRhKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIs
IGNvbnN0IGNoYXIqIGRhdGEsIGludCBjb3VudCkKK3sKKyAgICBhdXRvKiByZXF1ZXN0ID0gYnl0
ZVJhbmdlUmVxdWVzdEZvckxvYWRlcigqbG9hZGVyKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAg
ICAgIHJldHVybjsKKworICAgIHJlcXVlc3QtPmFkZERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YSksIGNvdW50KTsKK30KKwordm9pZCBQREZQbHVnaW46OmRpZEZhaWwo
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYp
Cit7CisgICAgaWYgKG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcpIHsKKyAgICAgICAgYXV0byBp
ZGVudGlmaWVyID0gbV9zdHJlYW1Mb2FkZXJNYXAuZ2V0KGxvYWRlcik7CisgICAgICAgIGlmIChp
ZGVudGlmaWVyKQorICAgICAgICAgICAgbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLnJl
bW92ZShpZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBjYW5jZWxBbmRGb3JnZXRMb2FkZXIoKmxv
YWRlcik7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIpCit7CisgICAgYXV0byogcmVxdWVzdCA9IGJ5dGVSYW5n
ZVJlcXVlc3RGb3JMb2FkZXIoKmxvYWRlcik7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICByZXF1ZXN0LT5jb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEoKTsKKyAg
ICBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMucmVtb3ZlKHJlcXVlc3QtPmlkZW50aWZp
ZXIoKSk7Cit9CisKK1BERlBsdWdpbjo6Qnl0ZVJhbmdlUmVxdWVzdCogUERGUGx1Z2luOjpieXRl
UmFuZ2VSZXF1ZXN0Rm9yTG9hZGVyKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyJiBsb2FkZXIp
Cit7CisgICAgdWludDY0X3QgaWRlbnRpZmllciA9IG1fc3RyZWFtTG9hZGVyTWFwLmdldCgmbG9h
ZGVyKTsKKyAgICBpZiAoIWlkZW50aWZpZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byByZXF1ZXN0ID0gbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLmZpbmQoaWRl
bnRpZmllcik7CisgICAgaWYgKHJlcXVlc3QgPT0gbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVl
c3RzLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiAmKHJlcXVl
c3QtPnZhbHVlKTsKK30KKwordm9pZCBQREZQbHVnaW46OmNhbmNlbEFuZEZvcmdldExvYWRlcihO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciYgbG9hZGVyKQoreworICAgIGlmIChhdXRvKiByZXF1
ZXN0ID0gYnl0ZVJhbmdlUmVxdWVzdEZvckxvYWRlcihsb2FkZXIpKSB7CisgICAgICAgIGlmIChy
ZXF1ZXN0LT5zdHJlYW1Mb2FkZXIoKSkgeworICAgICAgICAgICAgQVNTRVJUKHJlcXVlc3QtPnN0
cmVhbUxvYWRlcigpID09ICZsb2FkZXIpOworICAgICAgICAgICAgcmVxdWVzdC0+Y2xlYXJTdHJl
YW1Mb2FkZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxvYWRlci5jYW5jZWwobG9hZGVy
LmNhbmNlbGxlZEVycm9yKCkpOworICAgIG1fc3RyZWFtTG9hZGVyTWFwLnJlbW92ZSgmbG9hZGVy
KTsKK30KICNlbmRpZiAvLyBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQogCiBQbHVnaW5JbmZv
IFBERlBsdWdpbjo6cGx1Z2luSW5mbygpCkBAIC0xMjM1LDE1ICsxMzc0LDE2IEBAIHZvaWQgUERG
UGx1Z2luOjptYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBieXRlcywgaW50
IGxlbmd0aCkKIAogI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCiAgICAgaWYgKG1faW5j
cmVtZW50YWxQREZMb2FkaW5nRW5hYmxlZCkgewotICAgICAgICBzaXplX3QgaW5kZXggPSAwOwot
ICAgICAgICB3aGlsZSAoaW5kZXggPCBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMuc2l6
ZSgpKSB7Ci0gICAgICAgICAgICBhdXRvJiByZXF1ZXN0ID0gbV9vdXRzdGFuZGluZ0J5dGVSYW5n
ZVJlcXVlc3RzW2luZGV4XTsKLSAgICAgICAgICAgIGlmIChtX3N0cmVhbWVkQnl0ZXMgPj0gcmVx
dWVzdC5wb3NpdGlvbiArIHJlcXVlc3QuY291bnQpIHsKLSAgICAgICAgICAgICAgICByZXF1ZXN0
LmNvbXBsZXRpb25IYW5kbGVyKENGRGF0YUdldEJ5dGVQdHIobV9kYXRhLmdldCgpKSArIHJlcXVl
c3QucG9zaXRpb24sIHJlcXVlc3QuY291bnQpOwotICAgICAgICAgICAgICAgIG1fb3V0c3RhbmRp
bmdCeXRlUmFuZ2VSZXF1ZXN0cy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgSGFzaFNl
dDx1aW50NjRfdD4gaGFuZGxlZFJlcXVlc3RzOworICAgICAgICBmb3IgKGF1dG8mIHJlcXVlc3Qg
OiBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMudmFsdWVzKCkpIHsKKyAgICAgICAgICAg
IGlmIChyZXF1ZXN0Lm1heWJlQ29tcGxldGUoKnRoaXMpKQorICAgICAgICAgICAgICAgIGhhbmRs
ZWRSZXF1ZXN0cy5hZGQocmVxdWVzdC5pZGVudGlmaWVyKCkpOworICAgICAgICB9CisKKyAgICAg
ICAgZm9yIChhdXRvIGlkZW50aWZpZXIgOiBoYW5kbGVkUmVxdWVzdHMpIHsKKyAgICAgICAgICAg
IGF1dG8gcmVxdWVzdCA9IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy50YWtlKGlkZW50
aWZpZXIpOworICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RyZWFtTG9hZGVyKCkpCisgICAgICAg
ICAgICAgICAgY2FuY2VsQW5kRm9yZ2V0TG9hZGVyKCpyZXF1ZXN0LnN0cmVhbUxvYWRlcigpKTsK
ICAgICAgICAgfQogICAgIH0KICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392920</attachid>
            <date>2020-03-07 17:45:11 -0800</date>
            <delta_ts>2020-03-07 18:35:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>15453</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYTVlYTM3ZWMwM2MuLjk1YmU0MWZiNGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQzIEBACisyMDIwLTAzLTA3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBNYWtlIFBERiByYW5nZSByZXF1ZXN0cyB0byB0aGUgbmV0d29yay4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODc3NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFscmVhZHkgaGFuZGxl
IGEgc2V0IG9mIHJhbmdlIHJlcXVlc3RzIGZyb20gb3VyIGRhdGEgcHJvdmlkZXIgY2FsbGJhY2tz
LgorICAgICAgICBUaGUgY3VycmVudCBzdHJhdGVneSBpcyAid2FpdCB1bnRpbCB3ZSd2ZSBzdHJl
YW1lZCBlbm91Z2ggb2YgdGhlIGVudGlyZSByZXNvdXJjZSwgCisgICAgICAgIHBlcmZvcm0gdGhh
dCByZXF1ZXN0J3MgY2FsbGJhY2siCisgICAgICAgIAorICAgICAgICBGb3IgbGluZWFyaXplZCBQ
REZzIHRoZSBzZWNvbmQgcmVxdWVzdCBldmVyIG1hZGUgaXMgZm9yIHRoZSB2ZXJ5IGVuZCBvZiB0
aGUgUERGIGRvY3VtZW50LAorICAgICAgICBzbyB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBlbnRp
cmUgZG9jdW1lbnQgdG8gbG9hZCAod2hpY2ggaXMgd2hhdCB3ZSBhbHJlYWR5IGRvIGluIG5vbi1p
bmNyZW1lbnRhbCBtb2RlKQorICAgICAgICAKKyAgICAgICAgTm93LCB3ZSdsbCBhY3R1YWxseSBt
YWtlIHRoZSByZXF1ZXN0cyBmb3IgbWlzc2luZyBkYXRhIGNodW5rcyBmcm9tIHRoZSBuZXR3b3Jr
IGJ5IHVzaW5nIHRoZSBkb2N1bWVudCdzIHJlcXVlc3QKKyAgICAgICAgYW5kIGFkZGluZyByYW5n
ZSBoZWFkZXJzLgorICAgICAgICAKKyAgICAgICAgV2hpbGUgaXQgaXMgbm93IGVudGlyZWx5IG1p
c25hbWVkLCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciBpcyBhIHBlcmZlY3QgZml0IGZvciB0
aGlzLgorICAgICAgICAKKyAgICAgICAgT25jZSB0aGUgcmFuZ2UgcmVxdWVzdCBjb21wbGV0ZXMg
ZnJvbSB0aGUgbmV0d29yayB3ZSBjYW4gdW5ibG9jayB0aGUgUERGIHRocmVhZCBhbmQgZ28gdG8g
dGhlIG5leHQgcmVxdWVzdC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06
CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dW5jb25kaXRpb25hbENvbXBsZXRlT3V0c3Rh
bmRpbmdSYW5nZVJlcXVlc3RzKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpnZXRSZXNv
dXJjZUJ5dGVzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Qnl0ZVJh
bmdlUmVxdWVzdDo6Y2xlYXJTdHJlYW1Mb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OkJ5dGVSYW5nZVJlcXVlc3Q6OmNvbXBsZXRlV2l0aEJ5dGVzKToKKyAgICAgICAgKFdlYktp
dDo6UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0Ojpjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERh
dGEpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6Om1heWJl
Q29tcGxldGUpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6
OmNvbXBsZXRlVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp3
aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmRpZFJlY2VpdmVS
ZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZGlkUmVjZWl2ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmRpZEZhaWwpOgorICAgICAgICAoV2ViS2l0OjpQ
REZQbHVnaW46OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
OmJ5dGVSYW5nZVJlcXVlc3RGb3JMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
OmNhbmNlbEFuZEZvcmdldExvYWRlcik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6bWFu
dWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnVu
Y29uZGl0aW9uYWxDb21wbGV0ZVJhbmdlUmVxdWVzdCk6IERlbGV0ZWQuCisKIDIwMjAtMDMtMDcg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBydW50aW1l
IGZsYWcgZm9yIGluY3JlbWVudGFsIFBERiBsb2FkaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCmluZGV4IDM3NGNmMzc1NGMwLi4wMGY2
MDFjZTMyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW4uaApAQCAtMzQsNyArMzQsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0FYT2JqZWN0
Q2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRmluZE9wdGlvbnMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxhYmxlQXJlYS5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0lkZW50aWZpZWQuaD4KICNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCkBAIC02
OSw3ICs3MiwxMSBAQCBjbGFzcyBQREZQbHVnaW5QYXNzd29yZEZpZWxkOwogY2xhc3MgUGx1Z2lu
VmlldzsKIGNsYXNzIFdlYkZyYW1lOwogCi1jbGFzcyBQREZQbHVnaW4gZmluYWwgOiBwdWJsaWMg
UGx1Z2luLCBwcml2YXRlIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhIHsKK2NsYXNzIFBERlBsdWdp
biBmaW5hbCA6IHB1YmxpYyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEK
KyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorLCBwcml2YXRlIFdlYkNvcmU6Ok5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50CisjZW5kaWYKK3sKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPFBERlBsdWdpbj4gY3JlYXRlKFdlYkZyYW1lJik7CiAgICAgflBERlBsdWdpbigpOwpA
QCAtMzE2LDE3ICszMjMsNTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRocmVhZEVudHJ5KFJlZjxQ
REZQbHVnaW4+JiYpOwogICAgIHZvaWQgYWRvcHRCYWNrZ3JvdW5kVGhyZWFkRG9jdW1lbnQoKTsK
IAotICAgIHN0cnVjdCBCeXRlUmFuZ2VSZXF1ZXN0IHsKLSAgICAgICAgb2ZmX3QgcG9zaXRpb24g
eyAwIH07Ci0gICAgICAgIHNpemVfdCBjb3VudCB7IDAgfTsKLSAgICAgICAgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCB1aW50OF90Kiwgc2l6ZV90IGNvdW50KT4gY29tcGxldGlvbkhhbmRs
ZXI7Ci0gICAgfTsKLSAgICB2b2lkIHVuY29uZGl0aW9uYWxDb21wbGV0ZVJhbmdlUmVxdWVzdChC
eXRlUmFuZ2VSZXF1ZXN0Jik7CisgICAgLy8gV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXJDbGllbnQKKyAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlciosIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKT4mJikgZmluYWw7CisgICAgdm9pZCBk
aWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNl
aXZlRGF0YShXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IGNoYXIq
LCBpbnQpIGZpbmFsOworICAgIHZvaWQgZGlkRmFpbChXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBmaW5hbDsKKyAgICB2
b2lkIGRpZEZpbmlzaExvYWRpbmcoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIq
KSBmaW5hbDsKKworICAgIGNsYXNzIEJ5dGVSYW5nZVJlcXVlc3QgOiBwdWJsaWMgSWRlbnRpZmll
ZDxCeXRlUmFuZ2VSZXF1ZXN0PiB7CisgICAgcHVibGljOgorICAgICAgICBCeXRlUmFuZ2VSZXF1
ZXN0KCkgPSBkZWZhdWx0OworICAgICAgICBCeXRlUmFuZ2VSZXF1ZXN0KG9mZl90IHBvc2l0aW9u
LCBzaXplX3QgY291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgdWludDhfdCosIHNp
emVfdCBjb3VudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgICAgICA6IG1fcG9zaXRp
b24ocG9zaXRpb24pCisgICAgICAgICAgICAsIG1fY291bnQoY291bnQpCisgICAgICAgICAgICAs
IG1fY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyKiBzdHJlYW1Mb2FkZXIoKSB7IHJldHVybiBtX3N0cmVhbUxvYWRlcjsgfQorICAgICAgICB2
b2lkIHNldFN0cmVhbUxvYWRlcihXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciog
bG9hZGVyKSB7IG1fc3RyZWFtTG9hZGVyID0gbG9hZGVyOyB9CisgICAgICAgIHZvaWQgY2xlYXJT
dHJlYW1Mb2FkZXIoKTsKKyAgICAgICAgdm9pZCBhZGREYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBjb3VudCkgeyBtX2FjY3VtdWxhdGVkRGF0YS5hcHBlbmQoZGF0YSwgY291bnQpOyB9
CisKKyAgICAgICAgdm9pZCBjb21wbGV0ZVdpdGhCeXRlcyhjb25zdCB1aW50OF90Kiwgc2l6ZV90
KTsKKyAgICAgICAgdm9pZCBjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEoKTsKKworICAgICAg
ICBib29sIG1heWJlQ29tcGxldGUoUERGUGx1Z2luJik7CisgICAgICAgIHZvaWQgY29tcGxldGVV
bmNvbmRpdGlvbmFsbHkoUERGUGx1Z2luJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB1aW50
NjRfdCBtX3Bvc2l0aW9uIHsgMCB9OworICAgICAgICBzaXplX3QgbV9jb3VudCB7IDAgfTsKKyAg
ICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCB1aW50OF90Kiwgc2l6ZV90IGNvdW50
KT4gbV9jb21wbGV0aW9uSGFuZGxlcjsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fYWNjdW11
bGF0ZWREYXRhOworICAgICAgICBXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciog
bV9zdHJlYW1Mb2FkZXIgeyBudWxscHRyIH07CisgICAgIH07CiAgICAgdm9pZCB1bmNvbmRpdGlv
bmFsQ29tcGxldGVPdXRzdGFuZGluZ1JhbmdlUmVxdWVzdHMoKTsKIAorICAgIEJ5dGVSYW5nZVJl
cXVlc3QqIGJ5dGVSYW5nZVJlcXVlc3RGb3JMb2FkZXIoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXImKTsKKyAgICB2b2lkIGNhbmNlbEFuZEZvcmdldExvYWRlcihXZWJDb3JlOjpO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciYpOworCiAgICAgUmV0YWluUHRyPFBERkRvY3VtZW50
PiBtX2JhY2tncm91bmRUaHJlYWREb2N1bWVudDsKICAgICBSZWZQdHI8VGhyZWFkPiBtX3BkZlRo
cmVhZDsKLSAgICBWZWN0b3I8Qnl0ZVJhbmdlUmVxdWVzdD4gbV9vdXRzdGFuZGluZ0J5dGVSYW5n
ZVJlcXVlc3RzOworICAgIEhhc2hNYXA8dWludDY0X3QsIEJ5dGVSYW5nZVJlcXVlc3Q+IG1fb3V0
c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0czsKKyAgICBIYXNoTWFwPFJlZlB0cjxXZWJDb3JlOjpO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4sIHVpbnQ2NF90PiBtX3N0cmVhbUxvYWRlck1hcDsK
ICAgICBib29sIG1faW5jcmVtZW50YWxQREZMb2FkaW5nRW5hYmxlZDsKICNlbmRpZgogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4u
bW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCmlu
ZGV4IGU1NDY5ZTU1YzAyLi4yZWQzNzZkNGI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCkBAIC00Myw2ICs0Myw3IEBACiAjaW1w
b3J0ICJXZWJFdmVudC5oIgogI2ltcG9ydCAiV2ViRXZlbnRDb252ZXJzaW9uLmgiCiAjaW1wb3J0
ICJXZWJGaW5kT3B0aW9ucy5oIgorI2ltcG9ydCAiV2ViTG9hZGVyU3RyYXRlZ3kuaCIKICNpbXBv
cnQgIldlYlBhZ2UuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAjaW1wb3J0
ICJXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlcy5oIgpAQCAtNzM1LDQxICs3MzYsNTEgQEAgdm9p
ZCBQREZQbHVnaW46OnRocmVhZEVudHJ5KFJlZjxQREZQbHVnaW4+JiYgcHJvdGVjdGVkUGx1Z2lu
KQogCiB2b2lkIFBERlBsdWdpbjo6dW5jb25kaXRpb25hbENvbXBsZXRlT3V0c3RhbmRpbmdSYW5n
ZVJlcXVlc3RzKCkKIHsKLSAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX291dHN0YW5kaW5nQnl0
ZVJhbmdlUmVxdWVzdHMpCi0gICAgICAgIHVuY29uZGl0aW9uYWxDb21wbGV0ZVJhbmdlUmVxdWVz
dChyZXF1ZXN0KTsKKyAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX291dHN0YW5kaW5nQnl0ZVJh
bmdlUmVxdWVzdHMudmFsdWVzKCkpCisgICAgICAgIHJlcXVlc3QuY29tcGxldGVVbmNvbmRpdGlv
bmFsbHkoKnRoaXMpOwogICAgIG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5jbGVhcigp
OwogfQogCi12b2lkIFBERlBsdWdpbjo6dW5jb25kaXRpb25hbENvbXBsZXRlUmFuZ2VSZXF1ZXN0
KEJ5dGVSYW5nZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2
NF90PihyZXF1ZXN0LnBvc2l0aW9uKSA+PSBtX3N0cmVhbWVkQnl0ZXMpIHsKLSAgICAgICAgcmVx
dWVzdC5jb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChtX2RhdGEpOwotCi0gICAgYXV0byBjb3VudCA9IHJlcXVlc3QucG9z
aXRpb24gKyByZXF1ZXN0LmNvdW50ID4gbV9zdHJlYW1lZEJ5dGVzID8gbV9zdHJlYW1lZEJ5dGVz
IC0gcmVxdWVzdC5wb3NpdGlvbiA6IHJlcXVlc3QuY291bnQ7Ci0gICAgcmVxdWVzdC5jb21wbGV0
aW9uSGFuZGxlcihDRkRhdGFHZXRCeXRlUHRyKG1fZGF0YS5nZXQoKSkgKyByZXF1ZXN0LnBvc2l0
aW9uLCBjb3VudCk7Ci19Ci0KIHZvaWQgUERGUGx1Z2luOjpnZXRSZXNvdXJjZUJ5dGVzQXRQb3Np
dGlvbihzaXplX3QgY291bnQsIG9mZl90IHBvc2l0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7IAogCi0gICAgaWYgKG1fc3RyZWFtZWRCeXRlcyA+PSBwb3Np
dGlvbiArIGNvdW50KSB7Ci0gICAgICAgIEFTU0VSVChtX2RhdGEpOwotICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDRkRhdGFHZXRCeXRlUHRyKG1fZGF0YS5nZXQoKSkgKyBwb3NpdGlvbiwgY291
bnQpOworICAgIEJ5dGVSYW5nZVJlcXVlc3QgcmVxdWVzdCA9IHsgcG9zaXRpb24sIGNvdW50LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSB9OworICAgIGlmIChyZXF1ZXN0Lm1heWJlQ29tcGxl
dGUoKnRoaXMpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQnl0ZVJhbmdlUmVxdWVz
dCByZXF1ZXN0ID0geyBwb3NpdGlvbiwgY291bnQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
IH07CiAgICAgaWYgKG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcpIHsKLSAgICAgICAgdW5jb25k
aXRpb25hbENvbXBsZXRlUmFuZ2VSZXF1ZXN0KHJlcXVlc3QpOworICAgICAgICByZXF1ZXN0LmNv
bXBsZXRlVW5jb25kaXRpb25hbGx5KCp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5hcHBlbmQoV1RGTW92ZShyZXF1ZXN0
KSk7CisgICAgYXV0byBpZGVudGlmaWVyID0gcmVxdWVzdC5pZGVudGlmaWVyKCk7CisgICAgbV9v
dXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLnNldChpZGVudGlmaWVyLCBXVEZNb3ZlKHJlcXVl
c3QpKTsKKworICAgIGF1dG8qIGNvcmVGcmFtZSA9IG1fZnJhbWUuY29yZUZyYW1lKCk7CisgICAg
aWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGRvY3VtZW50TG9h
ZGVyID0gY29yZUZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOworICAgIGlmICghZG9j
dW1lbnRMb2FkZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVzb3VyY2VSZXF1ZXN0
ID0gZG9jdW1lbnRMb2FkZXItPnJlcXVlc3QoKTsKKyAgICBUZXh0U3RyZWFtIHN0cmVhbTsKKyAg
ICBzdHJlYW0gPDwgImJ5dGVzPSIgPDwgcG9zaXRpb24gPDwgIi0iIDw8IHBvc2l0aW9uICsgY291
bnQgLSAxOworICAgIHJlc291cmNlUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRl
ck5hbWU6OlJhbmdlLCBzdHJlYW0ucmVsZWFzZSgpKTsKKyAgICByZXNvdXJjZVJlcXVlc3Quc2V0
Q2FjaGVQb2xpY3koUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6OkRvTm90VXNlQW55Q2FjaGUp
OworCisgICAgTE9HKFBERiwgIlNjaGVkdWxpbmcgYSBzdHJlYW0gbG9hZGVyIGZvciByZXF1ZXN0
ICVsbHUgKCVsdSBieXRlcyBhdCAlbGx1KVxuIiwgaWRlbnRpZmllciwgY291bnQsIHBvc2l0aW9u
KTsKKworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkxvYWRlclN0cmF0ZWd5KCkuc2No
ZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKCpjb3JlRnJhbWUsICp0aGlzLCBXVEZNb3ZlKHJlc291cmNl
UmVxdWVzdCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZp
ZXJdIChSZWZQdHI8V2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+JiYgbG9hZGVy
KSB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVz
dHMuZmluZChpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fb3V0c3RhbmRp
bmdCeXRlUmFuZ2VSZXF1ZXN0cy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBpdGVyYXRvci0+dmFsdWUuc2V0U3RyZWFtTG9hZGVyKGxvYWRlci5nZXQoKSk7CisgICAgICAg
IG1fc3RyZWFtTG9hZGVyTWFwLnNldChXVEZNb3ZlKGxvYWRlciksIGlkZW50aWZpZXIpOworICAg
IH0pOwogfQogCiB2b2lkIFBERlBsdWdpbjo6YWRvcHRCYWNrZ3JvdW5kVGhyZWFkRG9jdW1lbnQo
KQpAQCAtNzkyLDYgKzgwMywxMzQgQEAgdm9pZCBQREZQbHVnaW46OmFkb3B0QmFja2dyb3VuZFRo
cmVhZERvY3VtZW50KCkKIAogICAgIGluc3RhbGxQREZEb2N1bWVudCgpOwogfQorCit2b2lkIFBE
RlBsdWdpbjo6Qnl0ZVJhbmdlUmVxdWVzdDo6Y2xlYXJTdHJlYW1Mb2FkZXIoKQoreworICAgIEFT
U0VSVChtX3N0cmVhbUxvYWRlcik7CisgICAgbV9zdHJlYW1Mb2FkZXIgPSBudWxscHRyOworICAg
IG1fYWNjdW11bGF0ZWREYXRhLmNsZWFyKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpCeXRlUmFu
Z2VSZXF1ZXN0Ojpjb21wbGV0ZVdpdGhCeXRlcyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qg
Y291bnQpCit7CisgICAgTE9HKFBERiwgIkNvbXBsZXRpbmcgcmFuZ2UgcmVxdWVzdCAlbGx1ICgl
bHUgYnl0ZXMgYXQgJWxsdSkgd2l0aCAlbHUgYnl0ZXMgZnJvbSB0aGUgbWFpbiBQREYgYnVmZmVy
IiwgaWRlbnRpZmllcigpLCBtX2NvdW50LCBtX3Bvc2l0aW9uLCBjb3VudCk7CisgICAgbV9jb21w
bGV0aW9uSGFuZGxlcihkYXRhLCBjb3VudCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpCeXRlUmFu
Z2VSZXF1ZXN0Ojpjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEoKQoreworICAgIExPRyhQREYs
ICJDb21wbGV0aW5nIHJhbmdlIHJlcXVlc3QgJWxsdSAoJWx1IGJ5dGVzIGF0ICVsbHUpIHdpdGgg
JWx1IGJ5dGVzIGZyb20gdGhlIG5ldHdvcmsiLCBpZGVudGlmaWVyKCksIG1fY291bnQsIG1fcG9z
aXRpb24sIG1fYWNjdW11bGF0ZWREYXRhLnNpemUoKSk7CisgICAgbV9jb21wbGV0aW9uSGFuZGxl
cihtX2FjY3VtdWxhdGVkRGF0YS5kYXRhKCksIG1fYWNjdW11bGF0ZWREYXRhLnNpemUoKSk7Cit9
CisKK2Jvb2wgUERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0OjptYXliZUNvbXBsZXRlKFBERlBs
dWdpbiYgcGx1Z2luKQoreworICAgIGlmIChwbHVnaW4ubV9zdHJlYW1lZEJ5dGVzID49IG1fcG9z
aXRpb24gKyBtX2NvdW50KSB7CisgICAgICAgIGNvbXBsZXRlV2l0aEJ5dGVzKENGRGF0YUdldEJ5
dGVQdHIocGx1Z2luLm1fZGF0YS5nZXQoKSkgKyBtX3Bvc2l0aW9uLCBtX2NvdW50KTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQREZQ
bHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6OmNvbXBsZXRlVW5jb25kaXRpb25hbGx5KFBERlBsdWdp
biYgcGx1Z2luKQoreworICAgIGlmIChtX3Bvc2l0aW9uID49IHBsdWdpbi5tX3N0cmVhbWVkQnl0
ZXMpIHsKKyAgICAgICAgY29tcGxldGVXaXRoQnl0ZXMobnVsbHB0ciwgMCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQocGx1Z2luLm1fZGF0YSk7CisKKyAgICBhdXRvIGNv
dW50ID0gbV9wb3NpdGlvbiArIG1fY291bnQgPiBwbHVnaW4ubV9zdHJlYW1lZEJ5dGVzID8gcGx1
Z2luLm1fc3RyZWFtZWRCeXRlcyAtIG1fcG9zaXRpb24gOiBtX2NvdW50OworICAgIGNvbXBsZXRl
V2l0aEJ5dGVzKENGRGF0YUdldEJ5dGVQdHIocGx1Z2luLm1fZGF0YS5nZXQoKSkgKyBtX3Bvc2l0
aW9uLCBjb3VudCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp3aWxsU2VuZFJlcXVlc3QoTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlc291cmNlUmVxdWVzdCYm
KT4mJikKK3sKKyAgICAvLyBSZWRpcmVjdGlvbnMgZm9yIHJhbmdlIHJlcXVlc3RzIGFyZSB1bmV4
cGVjdGVkLgorICAgIGNhbmNlbEFuZEZvcmdldExvYWRlcigqbG9hZGVyKTsKK30KKwordm9pZCBQ
REZQbHVnaW46OmRpZFJlY2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciog
bG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBhdXRvKiBy
ZXF1ZXN0ID0gYnl0ZVJhbmdlUmVxdWVzdEZvckxvYWRlcigqbG9hZGVyKTsKKyAgICBpZiAoIXJl
cXVlc3QpCisgICAgICAgIGNhbmNlbEFuZEZvcmdldExvYWRlcigqbG9hZGVyKTsKKworICAgIEFT
U0VSVChyZXF1ZXN0LT5zdHJlYW1Mb2FkZXIoKSA9PSBsb2FkZXIpOworCisgICAgLy8gUmFuZ2Ug
c3VjY2VzcyEgV2UnbGwgZXhwZWN0IHRvIHJlY2VpdmUgdGhlIGRhdGEgaW4gZnV0dXJlIGRpZFJl
Y2VpdmVEYXRhIGNhbGxiYWNrcy4KKyAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9
PSAyMDYpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSByZXNwb25zZSB3YXNuJ3Qg
YSBzdWNjZXNzZnVsIHJhbmdlIHJlc3BvbnNlLCB3ZSBkb24ndCBuZWVkIHRoaXMgc3RyZWFtIGxv
YWRlciBhbnltb3JlLgorICAgIC8vIFRoaXMgY2FuIGhhcHBlbiwgZm9yIGV4YW1wbGUsIGlmIHRo
ZSBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHJhbmdlIHJlcXVlc3RzLgorICAgIC8vIFdlJ2xsIHN0
aWxsIHJlc29sdmUgdGhlIEJ5dGVSYW5nZVJlcXVlc3QgbGF0ZXIgb25jZSBlbm91Z2ggb2YgdGhl
IGZ1bGwgcmVzb3VyY2UgaGFzIGxvYWRlZC4KKyAgICBjYW5jZWxBbmRGb3JnZXRMb2FkZXIoKmxv
YWRlcik7CisKKyAgICAvLyBUaGUgc2VydmVyIG1pZ2h0IHN1cHBvcnQgcmFuZ2UgcmVxdWVzdHMg
YW5kIGV4cGxpY2l0bHkgdG9sZCB1cyB0aGlzIHJhbmdlIHdhcyBub3Qgc2F0aXNmaWFibGUuCisg
ICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBjYW4gcmVqZWN0IHRoZSBCeXRlUmFuZ2VSZXF1ZXN0IHJp
Z2h0IGF3YXkuCisgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gNDE2ICYmIHJl
cXVlc3QpIHsKKyAgICAgICAgcmVxdWVzdC0+Y29tcGxldGVXaXRoQWNjdW11bGF0ZWREYXRhKCk7
CisgICAgICAgIG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdC0+
aWRlbnRpZmllcigpKTsKKyAgICB9Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpkaWRSZWNlaXZlRGF0
YShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBp
bnQgY291bnQpCit7CisgICAgYXV0byogcmVxdWVzdCA9IGJ5dGVSYW5nZVJlcXVlc3RGb3JMb2Fk
ZXIoKmxvYWRlcik7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBy
ZXF1ZXN0LT5hZGREYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBj
b3VudCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpkaWRGYWlsKE5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIGlmIChtX2RvY3Vt
ZW50RmluaXNoZWRMb2FkaW5nKSB7CisgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1fc3RyZWFt
TG9hZGVyTWFwLmdldChsb2FkZXIpOworICAgICAgICBpZiAoaWRlbnRpZmllcikKKyAgICAgICAg
ICAgIG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5yZW1vdmUoaWRlbnRpZmllcik7Cisg
ICAgfQorCisgICAgY2FuY2VsQW5kRm9yZ2V0TG9hZGVyKCpsb2FkZXIpOworfQorCit2b2lkIFBE
RlBsdWdpbjo6ZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9h
ZGVyKQoreworICAgIGF1dG8qIHJlcXVlc3QgPSBieXRlUmFuZ2VSZXF1ZXN0Rm9yTG9hZGVyKCps
b2FkZXIpOworICAgIGlmICghcmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVxdWVz
dC0+Y29tcGxldGVXaXRoQWNjdW11bGF0ZWREYXRhKCk7CisgICAgbV9vdXRzdGFuZGluZ0J5dGVS
YW5nZVJlcXVlc3RzLnJlbW92ZShyZXF1ZXN0LT5pZGVudGlmaWVyKCkpOworfQorCitQREZQbHVn
aW46OkJ5dGVSYW5nZVJlcXVlc3QqIFBERlBsdWdpbjo6Ynl0ZVJhbmdlUmVxdWVzdEZvckxvYWRl
cihOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciYgbG9hZGVyKQoreworICAgIHVpbnQ2NF90IGlk
ZW50aWZpZXIgPSBtX3N0cmVhbUxvYWRlck1hcC5nZXQoJmxvYWRlcik7CisgICAgaWYgKCFpZGVu
dGlmaWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcmVxdWVzdCA9IG1f
b3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5maW5kKGlkZW50aWZpZXIpOworICAgIGlmIChy
ZXF1ZXN0ID09IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gJihyZXF1ZXN0LT52YWx1ZSk7Cit9CisKK3Zv
aWQgUERGUGx1Z2luOjpjYW5jZWxBbmRGb3JnZXRMb2FkZXIoTmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXImIGxvYWRlcikKK3sKKyAgICBpZiAoYXV0byogcmVxdWVzdCA9IGJ5dGVSYW5nZVJlcXVl
c3RGb3JMb2FkZXIobG9hZGVyKSkgeworICAgICAgICBpZiAocmVxdWVzdC0+c3RyZWFtTG9hZGVy
KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXF1ZXN0LT5zdHJlYW1Mb2FkZXIoKSA9PSAmbG9h
ZGVyKTsKKyAgICAgICAgICAgIHJlcXVlc3QtPmNsZWFyU3RyZWFtTG9hZGVyKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBsb2FkZXIuY2FuY2VsKGxvYWRlci5jYW5jZWxsZWRFcnJvcigpKTsK
KyAgICBtX3N0cmVhbUxvYWRlck1hcC5yZW1vdmUoJmxvYWRlcik7Cit9CiAjZW5kaWYgLy8gSEFW
RShJTkNSRU1FTlRBTF9QREZfQVBJUykKIAogUGx1Z2luSW5mbyBQREZQbHVnaW46OnBsdWdpbklu
Zm8oKQpAQCAtMTIzNSwxNSArMTM3NCwxNiBAQCB2b2lkIFBERlBsdWdpbjo6bWFudWFsU3RyZWFt
RGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpCiAKICNpZiBIQVZF
KElOQ1JFTUVOVEFMX1BERl9BUElTKQogICAgIGlmIChtX2luY3JlbWVudGFsUERGTG9hZGluZ0Vu
YWJsZWQpIHsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKLSAgICAgICAgd2hpbGUgKGluZGV4
IDwgbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLnNpemUoKSkgewotICAgICAgICAgICAg
YXV0byYgcmVxdWVzdCA9IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0c1tpbmRleF07Ci0g
ICAgICAgICAgICBpZiAobV9zdHJlYW1lZEJ5dGVzID49IHJlcXVlc3QucG9zaXRpb24gKyByZXF1
ZXN0LmNvdW50KSB7Ci0gICAgICAgICAgICAgICAgcmVxdWVzdC5jb21wbGV0aW9uSGFuZGxlcihD
RkRhdGFHZXRCeXRlUHRyKG1fZGF0YS5nZXQoKSkgKyByZXF1ZXN0LnBvc2l0aW9uLCByZXF1ZXN0
LmNvdW50KTsKLSAgICAgICAgICAgICAgICBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMu
cmVtb3ZlKGluZGV4KTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgIEhhc2hTZXQ8dWludDY0X3Q+IGhhbmRsZWRS
ZXF1ZXN0czsKKyAgICAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9vdXRzdGFuZGluZ0J5dGVS
YW5nZVJlcXVlc3RzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdC5tYXliZUNv
bXBsZXRlKCp0aGlzKSkKKyAgICAgICAgICAgICAgICBoYW5kbGVkUmVxdWVzdHMuYWRkKHJlcXVl
c3QuaWRlbnRpZmllcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoYXV0byBpZGVudGlm
aWVyIDogaGFuZGxlZFJlcXVlc3RzKSB7CisgICAgICAgICAgICBhdXRvIHJlcXVlc3QgPSBtX291
dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMudGFrZShpZGVudGlmaWVyKTsKKyAgICAgICAgICAg
IGlmIChyZXF1ZXN0LnN0cmVhbUxvYWRlcigpKQorICAgICAgICAgICAgICAgIGNhbmNlbEFuZEZv
cmdldExvYWRlcigqcmVxdWVzdC5zdHJlYW1Mb2FkZXIoKSk7CiAgICAgICAgIH0KICAgICB9CiAj
ZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392921</attachid>
            <date>2020-03-07 17:48:55 -0800</date>
            <delta_ts>2020-03-07 18:35:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>15444</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYTVlYTM3ZWMwM2MuLjk1YmU0MWZiNGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQzIEBACisyMDIwLTAzLTA3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBNYWtlIFBERiByYW5nZSByZXF1ZXN0cyB0byB0aGUgbmV0d29yay4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODc3NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFscmVhZHkgaGFuZGxl
IGEgc2V0IG9mIHJhbmdlIHJlcXVlc3RzIGZyb20gb3VyIGRhdGEgcHJvdmlkZXIgY2FsbGJhY2tz
LgorICAgICAgICBUaGUgY3VycmVudCBzdHJhdGVneSBpcyAid2FpdCB1bnRpbCB3ZSd2ZSBzdHJl
YW1lZCBlbm91Z2ggb2YgdGhlIGVudGlyZSByZXNvdXJjZSwgCisgICAgICAgIHBlcmZvcm0gdGhh
dCByZXF1ZXN0J3MgY2FsbGJhY2siCisgICAgICAgIAorICAgICAgICBGb3IgbGluZWFyaXplZCBQ
REZzIHRoZSBzZWNvbmQgcmVxdWVzdCBldmVyIG1hZGUgaXMgZm9yIHRoZSB2ZXJ5IGVuZCBvZiB0
aGUgUERGIGRvY3VtZW50LAorICAgICAgICBzbyB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBlbnRp
cmUgZG9jdW1lbnQgdG8gbG9hZCAod2hpY2ggaXMgd2hhdCB3ZSBhbHJlYWR5IGRvIGluIG5vbi1p
bmNyZW1lbnRhbCBtb2RlKQorICAgICAgICAKKyAgICAgICAgTm93LCB3ZSdsbCBhY3R1YWxseSBt
YWtlIHRoZSByZXF1ZXN0cyBmb3IgbWlzc2luZyBkYXRhIGNodW5rcyBmcm9tIHRoZSBuZXR3b3Jr
IGJ5IHVzaW5nIHRoZSBkb2N1bWVudCdzIHJlcXVlc3QKKyAgICAgICAgYW5kIGFkZGluZyByYW5n
ZSBoZWFkZXJzLgorICAgICAgICAKKyAgICAgICAgV2hpbGUgaXQgaXMgbm93IGVudGlyZWx5IG1p
c25hbWVkLCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciBpcyBhIHBlcmZlY3QgZml0IGZvciB0
aGlzLgorICAgICAgICAKKyAgICAgICAgT25jZSB0aGUgcmFuZ2UgcmVxdWVzdCBjb21wbGV0ZXMg
ZnJvbSB0aGUgbmV0d29yayB3ZSBjYW4gdW5ibG9jayB0aGUgUERGIHRocmVhZCBhbmQgZ28gdG8g
dGhlIG5leHQgcmVxdWVzdC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06
CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dW5jb25kaXRpb25hbENvbXBsZXRlT3V0c3Rh
bmRpbmdSYW5nZVJlcXVlc3RzKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpnZXRSZXNv
dXJjZUJ5dGVzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Qnl0ZVJh
bmdlUmVxdWVzdDo6Y2xlYXJTdHJlYW1Mb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OkJ5dGVSYW5nZVJlcXVlc3Q6OmNvbXBsZXRlV2l0aEJ5dGVzKToKKyAgICAgICAgKFdlYktp
dDo6UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0Ojpjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERh
dGEpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6Om1heWJl
Q29tcGxldGUpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6
OmNvbXBsZXRlVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp3
aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmRpZFJlY2VpdmVS
ZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZGlkUmVjZWl2ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmRpZEZhaWwpOgorICAgICAgICAoV2ViS2l0OjpQ
REZQbHVnaW46OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
OmJ5dGVSYW5nZVJlcXVlc3RGb3JMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
OmNhbmNlbEFuZEZvcmdldExvYWRlcik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6bWFu
dWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnVu
Y29uZGl0aW9uYWxDb21wbGV0ZVJhbmdlUmVxdWVzdCk6IERlbGV0ZWQuCisKIDIwMjAtMDMtMDcg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBydW50aW1l
IGZsYWcgZm9yIGluY3JlbWVudGFsIFBERiBsb2FkaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCmluZGV4IDM3NGNmMzc1NGMwLi4zNzRh
MGM4OWJjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW4uaApAQCAtMzQsNyArMzQsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0FYT2JqZWN0
Q2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRmluZE9wdGlvbnMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxhYmxlQXJlYS5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0lkZW50aWZpZWQuaD4KICNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCkBAIC02
OSw3ICs3MiwxMSBAQCBjbGFzcyBQREZQbHVnaW5QYXNzd29yZEZpZWxkOwogY2xhc3MgUGx1Z2lu
VmlldzsKIGNsYXNzIFdlYkZyYW1lOwogCi1jbGFzcyBQREZQbHVnaW4gZmluYWwgOiBwdWJsaWMg
UGx1Z2luLCBwcml2YXRlIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhIHsKK2NsYXNzIFBERlBsdWdp
biBmaW5hbCA6IHB1YmxpYyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEK
KyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorLCBwcml2YXRlIFdlYkNvcmU6Ok5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50CisjZW5kaWYKK3sKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPFBERlBsdWdpbj4gY3JlYXRlKFdlYkZyYW1lJik7CiAgICAgflBERlBsdWdpbigpOwpA
QCAtMzE2LDE3ICszMjMsNTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRocmVhZEVudHJ5KFJlZjxQ
REZQbHVnaW4+JiYpOwogICAgIHZvaWQgYWRvcHRCYWNrZ3JvdW5kVGhyZWFkRG9jdW1lbnQoKTsK
IAotICAgIHN0cnVjdCBCeXRlUmFuZ2VSZXF1ZXN0IHsKLSAgICAgICAgb2ZmX3QgcG9zaXRpb24g
eyAwIH07Ci0gICAgICAgIHNpemVfdCBjb3VudCB7IDAgfTsKLSAgICAgICAgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCB1aW50OF90Kiwgc2l6ZV90IGNvdW50KT4gY29tcGxldGlvbkhhbmRs
ZXI7CisgICAgLy8gV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKKyAg
ICB2b2lkIHdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
ciosIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYmKT4mJikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJDb3Jl
OjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpIGZpbmFsOwor
ICAgIHZvaWQgZGlkRmFpbChXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRpZEZpbmlzaExv
YWRpbmcoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqKSBmaW5hbDsKKworICAg
IGNsYXNzIEJ5dGVSYW5nZVJlcXVlc3QgOiBwdWJsaWMgSWRlbnRpZmllZDxCeXRlUmFuZ2VSZXF1
ZXN0PiB7CisgICAgcHVibGljOgorICAgICAgICBCeXRlUmFuZ2VSZXF1ZXN0KCkgPSBkZWZhdWx0
OworICAgICAgICBCeXRlUmFuZ2VSZXF1ZXN0KG9mZl90IHBvc2l0aW9uLCBzaXplX3QgY291bnQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgdWludDhfdCosIHNpemVfdCBjb3VudCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgICAgICA6IG1fcG9zaXRpb24ocG9zaXRpb24pCisg
ICAgICAgICAgICAsIG1fY291bnQoY291bnQpCisgICAgICAgICAgICAsIG1fY29tcGxldGlvbkhh
bmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBzdHJlYW1Mb2Fk
ZXIoKSB7IHJldHVybiBtX3N0cmVhbUxvYWRlcjsgfQorICAgICAgICB2b2lkIHNldFN0cmVhbUxv
YWRlcihXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyKSB7IG1fc3Ry
ZWFtTG9hZGVyID0gbG9hZGVyOyB9CisgICAgICAgIHZvaWQgY2xlYXJTdHJlYW1Mb2FkZXIoKTsK
KyAgICAgICAgdm9pZCBhZGREYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBjb3VudCkg
eyBtX2FjY3VtdWxhdGVkRGF0YS5hcHBlbmQoZGF0YSwgY291bnQpOyB9CisKKyAgICAgICAgdm9p
ZCBjb21wbGV0ZVdpdGhCeXRlcyhjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICAgICAgdm9p
ZCBjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEoKTsKKworICAgICAgICBib29sIG1heWJlQ29t
cGxldGUoUERGUGx1Z2luJik7CisgICAgICAgIHZvaWQgY29tcGxldGVVbmNvbmRpdGlvbmFsbHko
UERGUGx1Z2luJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB1aW50NjRfdCBtX3Bvc2l0aW9u
IHsgMCB9OworICAgICAgICBzaXplX3QgbV9jb3VudCB7IDAgfTsKKyAgICAgICAgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCB1aW50OF90Kiwgc2l6ZV90IGNvdW50KT4gbV9jb21wbGV0aW9u
SGFuZGxlcjsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fYWNjdW11bGF0ZWREYXRhOworICAg
ICAgICBXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbV9zdHJlYW1Mb2FkZXIg
eyBudWxscHRyIH07CiAgICAgfTsKLSAgICB2b2lkIHVuY29uZGl0aW9uYWxDb21wbGV0ZVJhbmdl
UmVxdWVzdChCeXRlUmFuZ2VSZXF1ZXN0Jik7CiAgICAgdm9pZCB1bmNvbmRpdGlvbmFsQ29tcGxl
dGVPdXRzdGFuZGluZ1JhbmdlUmVxdWVzdHMoKTsKIAorICAgIEJ5dGVSYW5nZVJlcXVlc3QqIGJ5
dGVSYW5nZVJlcXVlc3RGb3JMb2FkZXIoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXImKTsKKyAgICB2b2lkIGNhbmNlbEFuZEZvcmdldExvYWRlcihXZWJDb3JlOjpOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlciYpOworCiAgICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBtX2JhY2tn
cm91bmRUaHJlYWREb2N1bWVudDsKICAgICBSZWZQdHI8VGhyZWFkPiBtX3BkZlRocmVhZDsKLSAg
ICBWZWN0b3I8Qnl0ZVJhbmdlUmVxdWVzdD4gbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3Rz
OworICAgIEhhc2hNYXA8dWludDY0X3QsIEJ5dGVSYW5nZVJlcXVlc3Q+IG1fb3V0c3RhbmRpbmdC
eXRlUmFuZ2VSZXF1ZXN0czsKKyAgICBIYXNoTWFwPFJlZlB0cjxXZWJDb3JlOjpOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlcj4sIHVpbnQ2NF90PiBtX3N0cmVhbUxvYWRlck1hcDsKICAgICBib29s
IG1faW5jcmVtZW50YWxQREZMb2FkaW5nRW5hYmxlZDsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCmluZGV4IGU1NDY5
ZTU1YzAyLi4yZWQzNzZkNGI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCkBAIC00Myw2ICs0Myw3IEBACiAjaW1wb3J0ICJXZWJF
dmVudC5oIgogI2ltcG9ydCAiV2ViRXZlbnRDb252ZXJzaW9uLmgiCiAjaW1wb3J0ICJXZWJGaW5k
T3B0aW9ucy5oIgorI2ltcG9ydCAiV2ViTG9hZGVyU3RyYXRlZ3kuaCIKICNpbXBvcnQgIldlYlBh
Z2UuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQYXN0
ZWJvYXJkUHJveHlNZXNzYWdlcy5oIgpAQCAtNzM1LDQxICs3MzYsNTEgQEAgdm9pZCBQREZQbHVn
aW46OnRocmVhZEVudHJ5KFJlZjxQREZQbHVnaW4+JiYgcHJvdGVjdGVkUGx1Z2luKQogCiB2b2lk
IFBERlBsdWdpbjo6dW5jb25kaXRpb25hbENvbXBsZXRlT3V0c3RhbmRpbmdSYW5nZVJlcXVlc3Rz
KCkKIHsKLSAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVx
dWVzdHMpCi0gICAgICAgIHVuY29uZGl0aW9uYWxDb21wbGV0ZVJhbmdlUmVxdWVzdChyZXF1ZXN0
KTsKKyAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVz
dHMudmFsdWVzKCkpCisgICAgICAgIHJlcXVlc3QuY29tcGxldGVVbmNvbmRpdGlvbmFsbHkoKnRo
aXMpOwogICAgIG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5jbGVhcigpOwogfQogCi12
b2lkIFBERlBsdWdpbjo6dW5jb25kaXRpb25hbENvbXBsZXRlUmFuZ2VSZXF1ZXN0KEJ5dGVSYW5n
ZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZXF1
ZXN0LnBvc2l0aW9uKSA+PSBtX3N0cmVhbWVkQnl0ZXMpIHsKLSAgICAgICAgcmVxdWVzdC5jb21w
bGV0aW9uSGFuZGxlcihudWxscHRyLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEFTU0VSVChtX2RhdGEpOwotCi0gICAgYXV0byBjb3VudCA9IHJlcXVlc3QucG9zaXRpb24gKyBy
ZXF1ZXN0LmNvdW50ID4gbV9zdHJlYW1lZEJ5dGVzID8gbV9zdHJlYW1lZEJ5dGVzIC0gcmVxdWVz
dC5wb3NpdGlvbiA6IHJlcXVlc3QuY291bnQ7Ci0gICAgcmVxdWVzdC5jb21wbGV0aW9uSGFuZGxl
cihDRkRhdGFHZXRCeXRlUHRyKG1fZGF0YS5nZXQoKSkgKyByZXF1ZXN0LnBvc2l0aW9uLCBjb3Vu
dCk7Ci19Ci0KIHZvaWQgUERGUGx1Z2luOjpnZXRSZXNvdXJjZUJ5dGVzQXRQb3NpdGlvbihzaXpl
X3QgY291bnQsIG9mZl90IHBvc2l0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IHVp
bnQ4X3QqLCBzaXplX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7IAogCi0gICAgaWYgKG1fc3RyZWFtZWRCeXRlcyA+PSBwb3NpdGlvbiArIGNv
dW50KSB7Ci0gICAgICAgIEFTU0VSVChtX2RhdGEpOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDRkRhdGFHZXRCeXRlUHRyKG1fZGF0YS5nZXQoKSkgKyBwb3NpdGlvbiwgY291bnQpOworICAg
IEJ5dGVSYW5nZVJlcXVlc3QgcmVxdWVzdCA9IHsgcG9zaXRpb24sIGNvdW50LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSB9OworICAgIGlmIChyZXF1ZXN0Lm1heWJlQ29tcGxldGUoKnRoaXMp
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQnl0ZVJhbmdlUmVxdWVzdCByZXF1ZXN0
ID0geyBwb3NpdGlvbiwgY291bnQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpIH07CiAgICAg
aWYgKG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcpIHsKLSAgICAgICAgdW5jb25kaXRpb25hbENv
bXBsZXRlUmFuZ2VSZXF1ZXN0KHJlcXVlc3QpOworICAgICAgICByZXF1ZXN0LmNvbXBsZXRlVW5j
b25kaXRpb25hbGx5KCp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fb3V0
c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5hcHBlbmQoV1RGTW92ZShyZXF1ZXN0KSk7CisgICAg
YXV0byBpZGVudGlmaWVyID0gcmVxdWVzdC5pZGVudGlmaWVyKCk7CisgICAgbV9vdXRzdGFuZGlu
Z0J5dGVSYW5nZVJlcXVlc3RzLnNldChpZGVudGlmaWVyLCBXVEZNb3ZlKHJlcXVlc3QpKTsKKwor
ICAgIGF1dG8qIGNvcmVGcmFtZSA9IG1fZnJhbWUuY29yZUZyYW1lKCk7CisgICAgaWYgKCFjb3Jl
RnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGRvY3VtZW50TG9hZGVyID0gY29y
ZUZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOworICAgIGlmICghZG9jdW1lbnRMb2Fk
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVzb3VyY2VSZXF1ZXN0ID0gZG9jdW1l
bnRMb2FkZXItPnJlcXVlc3QoKTsKKyAgICBUZXh0U3RyZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0g
PDwgImJ5dGVzPSIgPDwgcG9zaXRpb24gPDwgIi0iIDw8IHBvc2l0aW9uICsgY291bnQgLSAxOwor
ICAgIHJlc291cmNlUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlJh
bmdlLCBzdHJlYW0ucmVsZWFzZSgpKTsKKyAgICByZXNvdXJjZVJlcXVlc3Quc2V0Q2FjaGVQb2xp
Y3koUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6OkRvTm90VXNlQW55Q2FjaGUpOworCisgICAg
TE9HKFBERiwgIlNjaGVkdWxpbmcgYSBzdHJlYW0gbG9hZGVyIGZvciByZXF1ZXN0ICVsbHUgKCVs
dSBieXRlcyBhdCAlbGx1KVxuIiwgaWRlbnRpZmllciwgY291bnQsIHBvc2l0aW9uKTsKKworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkxvYWRlclN0cmF0ZWd5KCkuc2NoZWR1bGVQbHVn
aW5TdHJlYW1Mb2FkKCpjb3JlRnJhbWUsICp0aGlzLCBXVEZNb3ZlKHJlc291cmNlUmVxdWVzdCks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXJdIChSZWZQ
dHI8V2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+JiYgbG9hZGVyKSB7CisgICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMuZmluZChp
ZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fb3V0c3RhbmRpbmdCeXRlUmFu
Z2VSZXF1ZXN0cy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpdGVyYXRv
ci0+dmFsdWUuc2V0U3RyZWFtTG9hZGVyKGxvYWRlci5nZXQoKSk7CisgICAgICAgIG1fc3RyZWFt
TG9hZGVyTWFwLnNldChXVEZNb3ZlKGxvYWRlciksIGlkZW50aWZpZXIpOworICAgIH0pOwogfQog
CiB2b2lkIFBERlBsdWdpbjo6YWRvcHRCYWNrZ3JvdW5kVGhyZWFkRG9jdW1lbnQoKQpAQCAtNzky
LDYgKzgwMywxMzQgQEAgdm9pZCBQREZQbHVnaW46OmFkb3B0QmFja2dyb3VuZFRocmVhZERvY3Vt
ZW50KCkKIAogICAgIGluc3RhbGxQREZEb2N1bWVudCgpOwogfQorCit2b2lkIFBERlBsdWdpbjo6
Qnl0ZVJhbmdlUmVxdWVzdDo6Y2xlYXJTdHJlYW1Mb2FkZXIoKQoreworICAgIEFTU0VSVChtX3N0
cmVhbUxvYWRlcik7CisgICAgbV9zdHJlYW1Mb2FkZXIgPSBudWxscHRyOworICAgIG1fYWNjdW11
bGF0ZWREYXRhLmNsZWFyKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0
Ojpjb21wbGV0ZVdpdGhCeXRlcyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgY291bnQpCit7
CisgICAgTE9HKFBERiwgIkNvbXBsZXRpbmcgcmFuZ2UgcmVxdWVzdCAlbGx1ICglbHUgYnl0ZXMg
YXQgJWxsdSkgd2l0aCAlbHUgYnl0ZXMgZnJvbSB0aGUgbWFpbiBQREYgYnVmZmVyIiwgaWRlbnRp
ZmllcigpLCBtX2NvdW50LCBtX3Bvc2l0aW9uLCBjb3VudCk7CisgICAgbV9jb21wbGV0aW9uSGFu
ZGxlcihkYXRhLCBjb3VudCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0
Ojpjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEoKQoreworICAgIExPRyhQREYsICJDb21wbGV0
aW5nIHJhbmdlIHJlcXVlc3QgJWxsdSAoJWx1IGJ5dGVzIGF0ICVsbHUpIHdpdGggJWx1IGJ5dGVz
IGZyb20gdGhlIG5ldHdvcmsiLCBpZGVudGlmaWVyKCksIG1fY291bnQsIG1fcG9zaXRpb24sIG1f
YWNjdW11bGF0ZWREYXRhLnNpemUoKSk7CisgICAgbV9jb21wbGV0aW9uSGFuZGxlcihtX2FjY3Vt
dWxhdGVkRGF0YS5kYXRhKCksIG1fYWNjdW11bGF0ZWREYXRhLnNpemUoKSk7Cit9CisKK2Jvb2wg
UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0OjptYXliZUNvbXBsZXRlKFBERlBsdWdpbiYgcGx1
Z2luKQoreworICAgIGlmIChwbHVnaW4ubV9zdHJlYW1lZEJ5dGVzID49IG1fcG9zaXRpb24gKyBt
X2NvdW50KSB7CisgICAgICAgIGNvbXBsZXRlV2l0aEJ5dGVzKENGRGF0YUdldEJ5dGVQdHIocGx1
Z2luLm1fZGF0YS5nZXQoKSkgKyBtX3Bvc2l0aW9uLCBtX2NvdW50KTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQREZQbHVnaW46OkJ5
dGVSYW5nZVJlcXVlc3Q6OmNvbXBsZXRlVW5jb25kaXRpb25hbGx5KFBERlBsdWdpbiYgcGx1Z2lu
KQoreworICAgIGlmIChtX3Bvc2l0aW9uID49IHBsdWdpbi5tX3N0cmVhbWVkQnl0ZXMpIHsKKyAg
ICAgICAgY29tcGxldGVXaXRoQnl0ZXMobnVsbHB0ciwgMCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlQocGx1Z2luLm1fZGF0YSk7CisKKyAgICBhdXRvIGNvdW50ID0gbV9w
b3NpdGlvbiArIG1fY291bnQgPiBwbHVnaW4ubV9zdHJlYW1lZEJ5dGVzID8gcGx1Z2luLm1fc3Ry
ZWFtZWRCeXRlcyAtIG1fcG9zaXRpb24gOiBtX2NvdW50OworICAgIGNvbXBsZXRlV2l0aEJ5dGVz
KENGRGF0YUdldEJ5dGVQdHIocGx1Z2luLm1fZGF0YS5nZXQoKSkgKyBtX3Bvc2l0aW9uLCBjb3Vu
dCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp3aWxsU2VuZFJlcXVlc3QoTmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlc291cmNlUmVxdWVzdCYmKT4mJikKK3sK
KyAgICAvLyBSZWRpcmVjdGlvbnMgZm9yIHJhbmdlIHJlcXVlc3RzIGFyZSB1bmV4cGVjdGVkLgor
ICAgIGNhbmNlbEFuZEZvcmdldExvYWRlcigqbG9hZGVyKTsKK30KKwordm9pZCBQREZQbHVnaW46
OmRpZFJlY2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBhdXRvKiByZXF1ZXN0ID0g
Ynl0ZVJhbmdlUmVxdWVzdEZvckxvYWRlcigqbG9hZGVyKTsKKyAgICBpZiAoIXJlcXVlc3QpCisg
ICAgICAgIGNhbmNlbEFuZEZvcmdldExvYWRlcigqbG9hZGVyKTsKKworICAgIEFTU0VSVChyZXF1
ZXN0LT5zdHJlYW1Mb2FkZXIoKSA9PSBsb2FkZXIpOworCisgICAgLy8gUmFuZ2Ugc3VjY2VzcyEg
V2UnbGwgZXhwZWN0IHRvIHJlY2VpdmUgdGhlIGRhdGEgaW4gZnV0dXJlIGRpZFJlY2VpdmVEYXRh
IGNhbGxiYWNrcy4KKyAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAyMDYpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSByZXNwb25zZSB3YXNuJ3QgYSBzdWNjZXNz
ZnVsIHJhbmdlIHJlc3BvbnNlLCB3ZSBkb24ndCBuZWVkIHRoaXMgc3RyZWFtIGxvYWRlciBhbnlt
b3JlLgorICAgIC8vIFRoaXMgY2FuIGhhcHBlbiwgZm9yIGV4YW1wbGUsIGlmIHRoZSBzZXJ2ZXIg
ZG9lc24ndCBzdXBwb3J0IHJhbmdlIHJlcXVlc3RzLgorICAgIC8vIFdlJ2xsIHN0aWxsIHJlc29s
dmUgdGhlIEJ5dGVSYW5nZVJlcXVlc3QgbGF0ZXIgb25jZSBlbm91Z2ggb2YgdGhlIGZ1bGwgcmVz
b3VyY2UgaGFzIGxvYWRlZC4KKyAgICBjYW5jZWxBbmRGb3JnZXRMb2FkZXIoKmxvYWRlcik7CisK
KyAgICAvLyBUaGUgc2VydmVyIG1pZ2h0IHN1cHBvcnQgcmFuZ2UgcmVxdWVzdHMgYW5kIGV4cGxp
Y2l0bHkgdG9sZCB1cyB0aGlzIHJhbmdlIHdhcyBub3Qgc2F0aXNmaWFibGUuCisgICAgLy8gSW4g
dGhpcyBjYXNlLCB3ZSBjYW4gcmVqZWN0IHRoZSBCeXRlUmFuZ2VSZXF1ZXN0IHJpZ2h0IGF3YXku
CisgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gNDE2ICYmIHJlcXVlc3QpIHsK
KyAgICAgICAgcmVxdWVzdC0+Y29tcGxldGVXaXRoQWNjdW11bGF0ZWREYXRhKCk7CisgICAgICAg
IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdC0+aWRlbnRpZmll
cigpKTsKKyAgICB9Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpkaWRSZWNlaXZlRGF0YShOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgY291bnQp
Cit7CisgICAgYXV0byogcmVxdWVzdCA9IGJ5dGVSYW5nZVJlcXVlc3RGb3JMb2FkZXIoKmxvYWRl
cik7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICByZXF1ZXN0LT5h
ZGREYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBjb3VudCk7Cit9
CisKK3ZvaWQgUERGUGx1Z2luOjpkaWRGYWlsKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBs
b2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIGlmIChtX2RvY3VtZW50RmluaXNo
ZWRMb2FkaW5nKSB7CisgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1fc3RyZWFtTG9hZGVyTWFw
LmdldChsb2FkZXIpOworICAgICAgICBpZiAoaWRlbnRpZmllcikKKyAgICAgICAgICAgIG1fb3V0
c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5yZW1vdmUoaWRlbnRpZmllcik7CisgICAgfQorCisg
ICAgY2FuY2VsQW5kRm9yZ2V0TG9hZGVyKCpsb2FkZXIpOworfQorCit2b2lkIFBERlBsdWdpbjo6
ZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyKQorewor
ICAgIGF1dG8qIHJlcXVlc3QgPSBieXRlUmFuZ2VSZXF1ZXN0Rm9yTG9hZGVyKCpsb2FkZXIpOwor
ICAgIGlmICghcmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVxdWVzdC0+Y29tcGxl
dGVXaXRoQWNjdW11bGF0ZWREYXRhKCk7CisgICAgbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVl
c3RzLnJlbW92ZShyZXF1ZXN0LT5pZGVudGlmaWVyKCkpOworfQorCitQREZQbHVnaW46OkJ5dGVS
YW5nZVJlcXVlc3QqIFBERlBsdWdpbjo6Ynl0ZVJhbmdlUmVxdWVzdEZvckxvYWRlcihOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlciYgbG9hZGVyKQoreworICAgIHVpbnQ2NF90IGlkZW50aWZpZXIg
PSBtX3N0cmVhbUxvYWRlck1hcC5nZXQoJmxvYWRlcik7CisgICAgaWYgKCFpZGVudGlmaWVyKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcmVxdWVzdCA9IG1fb3V0c3RhbmRp
bmdCeXRlUmFuZ2VSZXF1ZXN0cy5maW5kKGlkZW50aWZpZXIpOworICAgIGlmIChyZXF1ZXN0ID09
IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gJihyZXF1ZXN0LT52YWx1ZSk7Cit9CisKK3ZvaWQgUERGUGx1
Z2luOjpjYW5jZWxBbmRGb3JnZXRMb2FkZXIoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXImIGxv
YWRlcikKK3sKKyAgICBpZiAoYXV0byogcmVxdWVzdCA9IGJ5dGVSYW5nZVJlcXVlc3RGb3JMb2Fk
ZXIobG9hZGVyKSkgeworICAgICAgICBpZiAocmVxdWVzdC0+c3RyZWFtTG9hZGVyKCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChyZXF1ZXN0LT5zdHJlYW1Mb2FkZXIoKSA9PSAmbG9hZGVyKTsKKyAg
ICAgICAgICAgIHJlcXVlc3QtPmNsZWFyU3RyZWFtTG9hZGVyKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBsb2FkZXIuY2FuY2VsKGxvYWRlci5jYW5jZWxsZWRFcnJvcigpKTsKKyAgICBtX3N0
cmVhbUxvYWRlck1hcC5yZW1vdmUoJmxvYWRlcik7Cit9CiAjZW5kaWYgLy8gSEFWRShJTkNSRU1F
TlRBTF9QREZfQVBJUykKIAogUGx1Z2luSW5mbyBQREZQbHVnaW46OnBsdWdpbkluZm8oKQpAQCAt
MTIzNSwxNSArMTM3NCwxNiBAQCB2b2lkIFBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkUmVjZWl2
ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpCiAKICNpZiBIQVZFKElOQ1JFTUVO
VEFMX1BERl9BUElTKQogICAgIGlmIChtX2luY3JlbWVudGFsUERGTG9hZGluZ0VuYWJsZWQpIHsK
LSAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKLSAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9vdXRz
dGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLnNpemUoKSkgewotICAgICAgICAgICAgYXV0byYgcmVx
dWVzdCA9IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0c1tpbmRleF07Ci0gICAgICAgICAg
ICBpZiAobV9zdHJlYW1lZEJ5dGVzID49IHJlcXVlc3QucG9zaXRpb24gKyByZXF1ZXN0LmNvdW50
KSB7Ci0gICAgICAgICAgICAgICAgcmVxdWVzdC5jb21wbGV0aW9uSGFuZGxlcihDRkRhdGFHZXRC
eXRlUHRyKG1fZGF0YS5nZXQoKSkgKyByZXF1ZXN0LnBvc2l0aW9uLCByZXF1ZXN0LmNvdW50KTsK
LSAgICAgICAgICAgICAgICBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMucmVtb3ZlKGlu
ZGV4KTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICsraW5kZXg7CisgICAgICAgIEhhc2hTZXQ8dWludDY0X3Q+IGhhbmRsZWRSZXF1ZXN0czsK
KyAgICAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVl
c3RzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdC5tYXliZUNvbXBsZXRlKCp0
aGlzKSkKKyAgICAgICAgICAgICAgICBoYW5kbGVkUmVxdWVzdHMuYWRkKHJlcXVlc3QuaWRlbnRp
ZmllcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogaGFu
ZGxlZFJlcXVlc3RzKSB7CisgICAgICAgICAgICBhdXRvIHJlcXVlc3QgPSBtX291dHN0YW5kaW5n
Qnl0ZVJhbmdlUmVxdWVzdHMudGFrZShpZGVudGlmaWVyKTsKKyAgICAgICAgICAgIGlmIChyZXF1
ZXN0LnN0cmVhbUxvYWRlcigpKQorICAgICAgICAgICAgICAgIGNhbmNlbEFuZEZvcmdldExvYWRl
cigqcmVxdWVzdC5zdHJlYW1Mb2FkZXIoKSk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392925</attachid>
            <date>2020-03-07 18:35:02 -0800</date>
            <delta_ts>2020-03-07 18:50:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>15642</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYTVlYTM3ZWMwM2MuLjk1YmU0MWZiNGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQzIEBACisyMDIwLTAzLTA3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBNYWtlIFBERiByYW5nZSByZXF1ZXN0cyB0byB0aGUgbmV0d29yay4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODc3NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFscmVhZHkgaGFuZGxl
IGEgc2V0IG9mIHJhbmdlIHJlcXVlc3RzIGZyb20gb3VyIGRhdGEgcHJvdmlkZXIgY2FsbGJhY2tz
LgorICAgICAgICBUaGUgY3VycmVudCBzdHJhdGVneSBpcyAid2FpdCB1bnRpbCB3ZSd2ZSBzdHJl
YW1lZCBlbm91Z2ggb2YgdGhlIGVudGlyZSByZXNvdXJjZSwgCisgICAgICAgIHBlcmZvcm0gdGhh
dCByZXF1ZXN0J3MgY2FsbGJhY2siCisgICAgICAgIAorICAgICAgICBGb3IgbGluZWFyaXplZCBQ
REZzIHRoZSBzZWNvbmQgcmVxdWVzdCBldmVyIG1hZGUgaXMgZm9yIHRoZSB2ZXJ5IGVuZCBvZiB0
aGUgUERGIGRvY3VtZW50LAorICAgICAgICBzbyB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBlbnRp
cmUgZG9jdW1lbnQgdG8gbG9hZCAod2hpY2ggaXMgd2hhdCB3ZSBhbHJlYWR5IGRvIGluIG5vbi1p
bmNyZW1lbnRhbCBtb2RlKQorICAgICAgICAKKyAgICAgICAgTm93LCB3ZSdsbCBhY3R1YWxseSBt
YWtlIHRoZSByZXF1ZXN0cyBmb3IgbWlzc2luZyBkYXRhIGNodW5rcyBmcm9tIHRoZSBuZXR3b3Jr
IGJ5IHVzaW5nIHRoZSBkb2N1bWVudCdzIHJlcXVlc3QKKyAgICAgICAgYW5kIGFkZGluZyByYW5n
ZSBoZWFkZXJzLgorICAgICAgICAKKyAgICAgICAgV2hpbGUgaXQgaXMgbm93IGVudGlyZWx5IG1p
c25hbWVkLCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciBpcyBhIHBlcmZlY3QgZml0IGZvciB0
aGlzLgorICAgICAgICAKKyAgICAgICAgT25jZSB0aGUgcmFuZ2UgcmVxdWVzdCBjb21wbGV0ZXMg
ZnJvbSB0aGUgbmV0d29yayB3ZSBjYW4gdW5ibG9jayB0aGUgUERGIHRocmVhZCBhbmQgZ28gdG8g
dGhlIG5leHQgcmVxdWVzdC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06
CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dW5jb25kaXRpb25hbENvbXBsZXRlT3V0c3Rh
bmRpbmdSYW5nZVJlcXVlc3RzKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpnZXRSZXNv
dXJjZUJ5dGVzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Qnl0ZVJh
bmdlUmVxdWVzdDo6Y2xlYXJTdHJlYW1Mb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OkJ5dGVSYW5nZVJlcXVlc3Q6OmNvbXBsZXRlV2l0aEJ5dGVzKToKKyAgICAgICAgKFdlYktp
dDo6UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0Ojpjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERh
dGEpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6Om1heWJl
Q29tcGxldGUpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6
OmNvbXBsZXRlVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp3
aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmRpZFJlY2VpdmVS
ZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZGlkUmVjZWl2ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmRpZEZhaWwpOgorICAgICAgICAoV2ViS2l0OjpQ
REZQbHVnaW46OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
OmJ5dGVSYW5nZVJlcXVlc3RGb3JMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
OmNhbmNlbEFuZEZvcmdldExvYWRlcik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6bWFu
dWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnVu
Y29uZGl0aW9uYWxDb21wbGV0ZVJhbmdlUmVxdWVzdCk6IERlbGV0ZWQuCisKIDIwMjAtMDMtMDcg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBydW50aW1l
IGZsYWcgZm9yIGluY3JlbWVudGFsIFBERiBsb2FkaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCmluZGV4IDM3NGNmMzc1NGMwLi42ZGVl
ZTFkOTM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW4uaApAQCAtMzQsNyArMzQsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0FYT2JqZWN0
Q2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRmluZE9wdGlvbnMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxhYmxlQXJlYS5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0lkZW50aWZpZWQuaD4KICNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCkBAIC02
OSw3ICs3MiwxMSBAQCBjbGFzcyBQREZQbHVnaW5QYXNzd29yZEZpZWxkOwogY2xhc3MgUGx1Z2lu
VmlldzsKIGNsYXNzIFdlYkZyYW1lOwogCi1jbGFzcyBQREZQbHVnaW4gZmluYWwgOiBwdWJsaWMg
UGx1Z2luLCBwcml2YXRlIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhIHsKK2NsYXNzIFBERlBsdWdp
biBmaW5hbCA6IHB1YmxpYyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEK
KyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorLCBwcml2YXRlIFdlYkNvcmU6Ok5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50CisjZW5kaWYKK3sKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPFBERlBsdWdpbj4gY3JlYXRlKFdlYkZyYW1lJik7CiAgICAgflBERlBsdWdpbigpOwpA
QCAtMzE2LDE3ICszMjMsNTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRocmVhZEVudHJ5KFJlZjxQ
REZQbHVnaW4+JiYpOwogICAgIHZvaWQgYWRvcHRCYWNrZ3JvdW5kVGhyZWFkRG9jdW1lbnQoKTsK
IAotICAgIHN0cnVjdCBCeXRlUmFuZ2VSZXF1ZXN0IHsKLSAgICAgICAgb2ZmX3QgcG9zaXRpb24g
eyAwIH07Ci0gICAgICAgIHNpemVfdCBjb3VudCB7IDAgfTsKLSAgICAgICAgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCB1aW50OF90Kiwgc2l6ZV90IGNvdW50KT4gY29tcGxldGlvbkhhbmRs
ZXI7CisgICAgLy8gV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKKyAg
ICB2b2lkIHdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
ciosIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYmKT4mJikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJDb3Jl
OjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpIGZpbmFsOwor
ICAgIHZvaWQgZGlkRmFpbChXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRpZEZpbmlzaExv
YWRpbmcoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqKSBmaW5hbDsKKworICAg
IGNsYXNzIEJ5dGVSYW5nZVJlcXVlc3QgOiBwdWJsaWMgSWRlbnRpZmllZDxCeXRlUmFuZ2VSZXF1
ZXN0PiB7CisgICAgcHVibGljOgorICAgICAgICBCeXRlUmFuZ2VSZXF1ZXN0KCkgPSBkZWZhdWx0
OworICAgICAgICBCeXRlUmFuZ2VSZXF1ZXN0KHVpbnQ2NF90IHBvc2l0aW9uLCBzaXplX3QgY291
bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgdWludDhfdCosIHNpemVfdCBjb3VudCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgICAgICA6IG1fcG9zaXRpb24ocG9zaXRpb24p
CisgICAgICAgICAgICAsIG1fY291bnQoY291bnQpCisgICAgICAgICAgICAsIG1fY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBzdHJlYW1M
b2FkZXIoKSB7IHJldHVybiBtX3N0cmVhbUxvYWRlcjsgfQorICAgICAgICB2b2lkIHNldFN0cmVh
bUxvYWRlcihXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyKSB7IG1f
c3RyZWFtTG9hZGVyID0gbG9hZGVyOyB9CisgICAgICAgIHZvaWQgY2xlYXJTdHJlYW1Mb2FkZXIo
KTsKKyAgICAgICAgdm9pZCBhZGREYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBjb3Vu
dCkgeyBtX2FjY3VtdWxhdGVkRGF0YS5hcHBlbmQoZGF0YSwgY291bnQpOyB9CisKKyAgICAgICAg
dm9pZCBjb21wbGV0ZVdpdGhCeXRlcyhjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICAgICAg
dm9pZCBjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEoKTsKKworICAgICAgICBib29sIG1heWJl
Q29tcGxldGUoUERGUGx1Z2luJik7CisgICAgICAgIHZvaWQgY29tcGxldGVVbmNvbmRpdGlvbmFs
bHkoUERGUGx1Z2luJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB1aW50NjRfdCBtX3Bvc2l0
aW9uIHsgMCB9OworICAgICAgICBzaXplX3QgbV9jb3VudCB7IDAgfTsKKyAgICAgICAgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCB1aW50OF90Kiwgc2l6ZV90IGNvdW50KT4gbV9jb21wbGV0
aW9uSGFuZGxlcjsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fYWNjdW11bGF0ZWREYXRhOwor
ICAgICAgICBXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbV9zdHJlYW1Mb2Fk
ZXIgeyBudWxscHRyIH07CiAgICAgfTsKLSAgICB2b2lkIHVuY29uZGl0aW9uYWxDb21wbGV0ZVJh
bmdlUmVxdWVzdChCeXRlUmFuZ2VSZXF1ZXN0Jik7CiAgICAgdm9pZCB1bmNvbmRpdGlvbmFsQ29t
cGxldGVPdXRzdGFuZGluZ1JhbmdlUmVxdWVzdHMoKTsKIAorICAgIEJ5dGVSYW5nZVJlcXVlc3Qq
IGJ5dGVSYW5nZVJlcXVlc3RGb3JMb2FkZXIoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXImKTsKKyAgICB2b2lkIGNhbmNlbEFuZEZvcmdldExvYWRlcihXZWJDb3JlOjpOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlciYpOworCiAgICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBtX2Jh
Y2tncm91bmRUaHJlYWREb2N1bWVudDsKICAgICBSZWZQdHI8VGhyZWFkPiBtX3BkZlRocmVhZDsK
LSAgICBWZWN0b3I8Qnl0ZVJhbmdlUmVxdWVzdD4gbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVl
c3RzOworICAgIEhhc2hNYXA8dWludDY0X3QsIEJ5dGVSYW5nZVJlcXVlc3Q+IG1fb3V0c3RhbmRp
bmdCeXRlUmFuZ2VSZXF1ZXN0czsKKyAgICBIYXNoTWFwPFJlZlB0cjxXZWJDb3JlOjpOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlcj4sIHVpbnQ2NF90PiBtX3N0cmVhbUxvYWRlck1hcDsKICAgICBi
b29sIG1faW5jcmVtZW50YWxQREZMb2FkaW5nRW5hYmxlZDsKICNlbmRpZgogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0gYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCmluZGV4IGU1
NDY5ZTU1YzAyLi5jNzIxNzNhMzZiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCkBAIC00Myw2ICs0Myw3IEBACiAjaW1wb3J0ICJX
ZWJFdmVudC5oIgogI2ltcG9ydCAiV2ViRXZlbnRDb252ZXJzaW9uLmgiCiAjaW1wb3J0ICJXZWJG
aW5kT3B0aW9ucy5oIgorI2ltcG9ydCAiV2ViTG9hZGVyU3RyYXRlZ3kuaCIKICNpbXBvcnQgIldl
YlBhZ2UuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQ
YXN0ZWJvYXJkUHJveHlNZXNzYWdlcy5oIgpAQCAtOTEsNyArOTIsNiBAQAogI2ltcG9ydCA8d3Rm
L1VVSUQuaD4KICNpbXBvcnQgPHd0Zi9XVEZTZW1hcGhvcmUuaD4KICNpbXBvcnQgPHd0Zi9Xb3Jr
UXVldWUuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIEhBVkUoSU5D
UkVNRU5UQUxfUERGX0FQSVMpCiBAaW50ZXJmYWNlIFBERkRvY3VtZW50ICgpCkBAIC03MzUsNDEg
KzczNSw1MCBAQCB2b2lkIFBERlBsdWdpbjo6dGhyZWFkRW50cnkoUmVmPFBERlBsdWdpbj4mJiBw
cm90ZWN0ZWRQbHVnaW4pCiAKIHZvaWQgUERGUGx1Z2luOjp1bmNvbmRpdGlvbmFsQ29tcGxldGVP
dXRzdGFuZGluZ1JhbmdlUmVxdWVzdHMoKQogewotICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IG1f
b3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cykKLSAgICAgICAgdW5jb25kaXRpb25hbENvbXBs
ZXRlUmFuZ2VSZXF1ZXN0KHJlcXVlc3QpOworICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IG1fb3V0
c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy52YWx1ZXMoKSkKKyAgICAgICAgcmVxdWVzdC5jb21w
bGV0ZVVuY29uZGl0aW9uYWxseSgqdGhpcyk7CiAgICAgbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJl
cXVlc3RzLmNsZWFyKCk7CiB9CiAKLXZvaWQgUERGUGx1Z2luOjp1bmNvbmRpdGlvbmFsQ29tcGxl
dGVSYW5nZVJlcXVlc3QoQnl0ZVJhbmdlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBpZiAoc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHJlcXVlc3QucG9zaXRpb24pID49IG1fc3RyZWFtZWRCeXRlcykg
ewotICAgICAgICByZXF1ZXN0LmNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIDApOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fZGF0YSk7Ci0KLSAgICBhdXRvIGNvdW50
ID0gcmVxdWVzdC5wb3NpdGlvbiArIHJlcXVlc3QuY291bnQgPiBtX3N0cmVhbWVkQnl0ZXMgPyBt
X3N0cmVhbWVkQnl0ZXMgLSByZXF1ZXN0LnBvc2l0aW9uIDogcmVxdWVzdC5jb3VudDsKLSAgICBy
ZXF1ZXN0LmNvbXBsZXRpb25IYW5kbGVyKENGRGF0YUdldEJ5dGVQdHIobV9kYXRhLmdldCgpKSAr
IHJlcXVlc3QucG9zaXRpb24sIGNvdW50KTsKLX0KLQogdm9pZCBQREZQbHVnaW46OmdldFJlc291
cmNlQnl0ZXNBdFBvc2l0aW9uKHNpemVfdCBjb3VudCwgb2ZmX3QgcG9zaXRpb24sIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgdWludDhfdCosIHNpemVfdCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgCisgICAgQVNTRVJUKHBvc2l0aW9u
ID49IDApOwogCi0gICAgaWYgKG1fc3RyZWFtZWRCeXRlcyA+PSBwb3NpdGlvbiArIGNvdW50KSB7
Ci0gICAgICAgIEFTU0VSVChtX2RhdGEpOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDRkRh
dGFHZXRCeXRlUHRyKG1fZGF0YS5nZXQoKSkgKyBwb3NpdGlvbiwgY291bnQpOworICAgIEJ5dGVS
YW5nZVJlcXVlc3QgcmVxdWVzdCA9IHsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHBvc2l0aW9uKSwg
Y291bnQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpIH07CisgICAgaWYgKHJlcXVlc3QubWF5
YmVDb21wbGV0ZSgqdGhpcykpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBCeXRlUmFu
Z2VSZXF1ZXN0IHJlcXVlc3QgPSB7IHBvc2l0aW9uLCBjb3VudCwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikgfTsKICAgICBpZiAobV9kb2N1bWVudEZpbmlzaGVkTG9hZGluZykgewotICAgICAg
ICB1bmNvbmRpdGlvbmFsQ29tcGxldGVSYW5nZVJlcXVlc3QocmVxdWVzdCk7CisgICAgICAgIHJl
cXVlc3QuY29tcGxldGVVbmNvbmRpdGlvbmFsbHkoKnRoaXMpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLmFwcGVuZChXVEZNb3Zl
KHJlcXVlc3QpKTsKKyAgICBhdXRvIGlkZW50aWZpZXIgPSByZXF1ZXN0LmlkZW50aWZpZXIoKTsK
KyAgICBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMuc2V0KGlkZW50aWZpZXIsIFdURk1v
dmUocmVxdWVzdCkpOworCisgICAgYXV0byogY29yZUZyYW1lID0gbV9mcmFtZS5jb3JlRnJhbWUo
KTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogZG9j
dW1lbnRMb2FkZXIgPSBjb3JlRnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCk7CisgICAg
aWYgKCFkb2N1bWVudExvYWRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZXNvdXJj
ZVJlcXVlc3QgPSBkb2N1bWVudExvYWRlci0+cmVxdWVzdCgpOworICAgIHJlc291cmNlUmVxdWVz
dC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlJhbmdlLCBtYWtlU3RyaW5nKCJi
eXRlcz0iX3MsIHBvc2l0aW9uLCAiLSJfcywgcG9zaXRpb24gKyBjb3VudCAtIDEpKTsKKyAgICBy
ZXNvdXJjZVJlcXVlc3Quc2V0Q2FjaGVQb2xpY3koUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6
OkRvTm90VXNlQW55Q2FjaGUpOworCisgICAgTE9HKFBERiwgIlNjaGVkdWxpbmcgYSBzdHJlYW0g
bG9hZGVyIGZvciByZXF1ZXN0ICVsbHUgKCVsdSBieXRlcyBhdCAlbGx1KVxuIiwgaWRlbnRpZmll
ciwgY291bnQsIHBvc2l0aW9uKTsKKworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkxv
YWRlclN0cmF0ZWd5KCkuc2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKCpjb3JlRnJhbWUsICp0aGlz
LCBXVEZNb3ZlKHJlc291cmNlUmVxdWVzdCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGlkZW50aWZpZXJdIChSZWZQdHI8V2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJl
YW1Mb2FkZXI+JiYgbG9hZGVyKSB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX291dHN0YW5k
aW5nQnl0ZVJhbmdlUmVxdWVzdHMuZmluZChpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGl0ZXJh
dG9yID09IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5lbmQoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpdGVyYXRvci0+dmFsdWUuc2V0U3RyZWFtTG9hZGVyKGxvYWRl
ci5nZXQoKSk7CisgICAgICAgIG1fc3RyZWFtTG9hZGVyTWFwLnNldChXVEZNb3ZlKGxvYWRlciks
IGlkZW50aWZpZXIpOworICAgIH0pOwogfQogCiB2b2lkIFBERlBsdWdpbjo6YWRvcHRCYWNrZ3Jv
dW5kVGhyZWFkRG9jdW1lbnQoKQpAQCAtNzkyLDYgKzgwMSwxMzQgQEAgdm9pZCBQREZQbHVnaW46
OmFkb3B0QmFja2dyb3VuZFRocmVhZERvY3VtZW50KCkKIAogICAgIGluc3RhbGxQREZEb2N1bWVu
dCgpOwogfQorCit2b2lkIFBERlBsdWdpbjo6Qnl0ZVJhbmdlUmVxdWVzdDo6Y2xlYXJTdHJlYW1M
b2FkZXIoKQoreworICAgIEFTU0VSVChtX3N0cmVhbUxvYWRlcik7CisgICAgbV9zdHJlYW1Mb2Fk
ZXIgPSBudWxscHRyOworICAgIG1fYWNjdW11bGF0ZWREYXRhLmNsZWFyKCk7Cit9CisKK3ZvaWQg
UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0Ojpjb21wbGV0ZVdpdGhCeXRlcyhjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3QgY291bnQpCit7CisgICAgTE9HKFBERiwgIkNvbXBsZXRpbmcgcmFu
Z2UgcmVxdWVzdCAlbGx1ICglbHUgYnl0ZXMgYXQgJWxsdSkgd2l0aCAlbHUgYnl0ZXMgZnJvbSB0
aGUgbWFpbiBQREYgYnVmZmVyIiwgaWRlbnRpZmllcigpLCBtX2NvdW50LCBtX3Bvc2l0aW9uLCBj
b3VudCk7CisgICAgbV9jb21wbGV0aW9uSGFuZGxlcihkYXRhLCBjb3VudCk7Cit9CisKK3ZvaWQg
UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0Ojpjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEo
KQoreworICAgIExPRyhQREYsICJDb21wbGV0aW5nIHJhbmdlIHJlcXVlc3QgJWxsdSAoJWx1IGJ5
dGVzIGF0ICVsbHUpIHdpdGggJWx1IGJ5dGVzIGZyb20gdGhlIG5ldHdvcmsiLCBpZGVudGlmaWVy
KCksIG1fY291bnQsIG1fcG9zaXRpb24sIG1fYWNjdW11bGF0ZWREYXRhLnNpemUoKSk7CisgICAg
bV9jb21wbGV0aW9uSGFuZGxlcihtX2FjY3VtdWxhdGVkRGF0YS5kYXRhKCksIG1fYWNjdW11bGF0
ZWREYXRhLnNpemUoKSk7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0Ojpt
YXliZUNvbXBsZXRlKFBERlBsdWdpbiYgcGx1Z2luKQoreworICAgIGlmIChwbHVnaW4ubV9zdHJl
YW1lZEJ5dGVzID49IG1fcG9zaXRpb24gKyBtX2NvdW50KSB7CisgICAgICAgIGNvbXBsZXRlV2l0
aEJ5dGVzKENGRGF0YUdldEJ5dGVQdHIocGx1Z2luLm1fZGF0YS5nZXQoKSkgKyBtX3Bvc2l0aW9u
LCBtX2NvdW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6OmNvbXBsZXRlVW5jb25k
aXRpb25hbGx5KFBERlBsdWdpbiYgcGx1Z2luKQoreworICAgIGlmIChtX3Bvc2l0aW9uID49IHBs
dWdpbi5tX3N0cmVhbWVkQnl0ZXMpIHsKKyAgICAgICAgY29tcGxldGVXaXRoQnl0ZXMobnVsbHB0
ciwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQocGx1Z2luLm1fZGF0
YSk7CisKKyAgICBhdXRvIGNvdW50ID0gbV9wb3NpdGlvbiArIG1fY291bnQgPiBwbHVnaW4ubV9z
dHJlYW1lZEJ5dGVzID8gcGx1Z2luLm1fc3RyZWFtZWRCeXRlcyAtIG1fcG9zaXRpb24gOiBtX2Nv
dW50OworICAgIGNvbXBsZXRlV2l0aEJ5dGVzKENGRGF0YUdldEJ5dGVQdHIocGx1Z2luLm1fZGF0
YS5nZXQoKSkgKyBtX3Bvc2l0aW9uLCBjb3VudCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp3aWxs
U2VuZFJlcXVlc3QoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VS
ZXF1ZXN0JiYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFJlc291cmNlUmVxdWVzdCYmKT4mJikKK3sKKyAgICAvLyBSZWRpcmVjdGlvbnMgZm9yIHJhbmdl
IHJlcXVlc3RzIGFyZSB1bmV4cGVjdGVkLgorICAgIGNhbmNlbEFuZEZvcmdldExvYWRlcigqbG9h
ZGVyKTsKK30KKwordm9pZCBQREZQbHVnaW46OmRpZFJlY2VpdmVSZXNwb25zZShOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKK3sKKyAgICBhdXRvKiByZXF1ZXN0ID0gYnl0ZVJhbmdlUmVxdWVzdEZvckxvYWRlcigqbG9h
ZGVyKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAgIGNhbmNlbEFuZEZvcmdldExvYWRlcigq
bG9hZGVyKTsKKworICAgIEFTU0VSVChyZXF1ZXN0LT5zdHJlYW1Mb2FkZXIoKSA9PSBsb2FkZXIp
OworCisgICAgLy8gUmFuZ2Ugc3VjY2VzcyEgV2UnbGwgZXhwZWN0IHRvIHJlY2VpdmUgdGhlIGRh
dGEgaW4gZnV0dXJlIGRpZFJlY2VpdmVEYXRhIGNhbGxiYWNrcy4KKyAgICBpZiAocmVzcG9uc2Uu
aHR0cFN0YXR1c0NvZGUoKSA9PSAyMDYpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRo
ZSByZXNwb25zZSB3YXNuJ3QgYSBzdWNjZXNzZnVsIHJhbmdlIHJlc3BvbnNlLCB3ZSBkb24ndCBu
ZWVkIHRoaXMgc3RyZWFtIGxvYWRlciBhbnltb3JlLgorICAgIC8vIFRoaXMgY2FuIGhhcHBlbiwg
Zm9yIGV4YW1wbGUsIGlmIHRoZSBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHJhbmdlIHJlcXVlc3Rz
LgorICAgIC8vIFdlJ2xsIHN0aWxsIHJlc29sdmUgdGhlIEJ5dGVSYW5nZVJlcXVlc3QgbGF0ZXIg
b25jZSBlbm91Z2ggb2YgdGhlIGZ1bGwgcmVzb3VyY2UgaGFzIGxvYWRlZC4KKyAgICBjYW5jZWxB
bmRGb3JnZXRMb2FkZXIoKmxvYWRlcik7CisKKyAgICAvLyBUaGUgc2VydmVyIG1pZ2h0IHN1cHBv
cnQgcmFuZ2UgcmVxdWVzdHMgYW5kIGV4cGxpY2l0bHkgdG9sZCB1cyB0aGlzIHJhbmdlIHdhcyBu
b3Qgc2F0aXNmaWFibGUuCisgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBjYW4gcmVqZWN0IHRoZSBC
eXRlUmFuZ2VSZXF1ZXN0IHJpZ2h0IGF3YXkuCisgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXND
b2RlKCkgPT0gNDE2ICYmIHJlcXVlc3QpIHsKKyAgICAgICAgcmVxdWVzdC0+Y29tcGxldGVXaXRo
QWNjdW11bGF0ZWREYXRhKCk7CisgICAgICAgIG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0
cy5yZW1vdmUocmVxdWVzdC0+aWRlbnRpZmllcigpKTsKKyAgICB9Cit9CisKK3ZvaWQgUERGUGx1
Z2luOjpkaWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBj
b25zdCBjaGFyKiBkYXRhLCBpbnQgY291bnQpCit7CisgICAgYXV0byogcmVxdWVzdCA9IGJ5dGVS
YW5nZVJlcXVlc3RGb3JMb2FkZXIoKmxvYWRlcik7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAg
ICByZXR1cm47CisKKyAgICByZXF1ZXN0LT5hZGREYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEpLCBjb3VudCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpkaWRGYWlsKE5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKQor
eworICAgIGlmIChtX2RvY3VtZW50RmluaXNoZWRMb2FkaW5nKSB7CisgICAgICAgIGF1dG8gaWRl
bnRpZmllciA9IG1fc3RyZWFtTG9hZGVyTWFwLmdldChsb2FkZXIpOworICAgICAgICBpZiAoaWRl
bnRpZmllcikKKyAgICAgICAgICAgIG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5yZW1v
dmUoaWRlbnRpZmllcik7CisgICAgfQorCisgICAgY2FuY2VsQW5kRm9yZ2V0TG9hZGVyKCpsb2Fk
ZXIpOworfQorCit2b2lkIFBERlBsdWdpbjo6ZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlciogbG9hZGVyKQoreworICAgIGF1dG8qIHJlcXVlc3QgPSBieXRlUmFuZ2VS
ZXF1ZXN0Rm9yTG9hZGVyKCpsb2FkZXIpOworICAgIGlmICghcmVxdWVzdCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcmVxdWVzdC0+Y29tcGxldGVXaXRoQWNjdW11bGF0ZWREYXRhKCk7CisgICAg
bV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLnJlbW92ZShyZXF1ZXN0LT5pZGVudGlmaWVy
KCkpOworfQorCitQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3QqIFBERlBsdWdpbjo6Ynl0ZVJh
bmdlUmVxdWVzdEZvckxvYWRlcihOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciYgbG9hZGVyKQor
eworICAgIHVpbnQ2NF90IGlkZW50aWZpZXIgPSBtX3N0cmVhbUxvYWRlck1hcC5nZXQoJmxvYWRl
cik7CisgICAgaWYgKCFpZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8gcmVxdWVzdCA9IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5maW5kKGlkZW50
aWZpZXIpOworICAgIGlmIChyZXF1ZXN0ID09IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0
cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gJihyZXF1ZXN0
LT52YWx1ZSk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpjYW5jZWxBbmRGb3JnZXRMb2FkZXIoTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXImIGxvYWRlcikKK3sKKyAgICBpZiAoYXV0byogcmVxdWVz
dCA9IGJ5dGVSYW5nZVJlcXVlc3RGb3JMb2FkZXIobG9hZGVyKSkgeworICAgICAgICBpZiAocmVx
dWVzdC0+c3RyZWFtTG9hZGVyKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXF1ZXN0LT5zdHJl
YW1Mb2FkZXIoKSA9PSAmbG9hZGVyKTsKKyAgICAgICAgICAgIHJlcXVlc3QtPmNsZWFyU3RyZWFt
TG9hZGVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsb2FkZXIuY2FuY2VsKGxvYWRlci5j
YW5jZWxsZWRFcnJvcigpKTsKKyAgICBtX3N0cmVhbUxvYWRlck1hcC5yZW1vdmUoJmxvYWRlcik7
Cit9CiAjZW5kaWYgLy8gSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKIAogUGx1Z2luSW5mbyBQ
REZQbHVnaW46OnBsdWdpbkluZm8oKQpAQCAtMTIzNSwxNSArMTM3MiwxNiBAQCB2b2lkIFBERlBs
dWdpbjo6bWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBs
ZW5ndGgpCiAKICNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQogICAgIGlmIChtX2luY3Jl
bWVudGFsUERGTG9hZGluZ0VuYWJsZWQpIHsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKLSAg
ICAgICAgd2hpbGUgKGluZGV4IDwgbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLnNpemUo
KSkgewotICAgICAgICAgICAgYXV0byYgcmVxdWVzdCA9IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VS
ZXF1ZXN0c1tpbmRleF07Ci0gICAgICAgICAgICBpZiAobV9zdHJlYW1lZEJ5dGVzID49IHJlcXVl
c3QucG9zaXRpb24gKyByZXF1ZXN0LmNvdW50KSB7Ci0gICAgICAgICAgICAgICAgcmVxdWVzdC5j
b21wbGV0aW9uSGFuZGxlcihDRkRhdGFHZXRCeXRlUHRyKG1fZGF0YS5nZXQoKSkgKyByZXF1ZXN0
LnBvc2l0aW9uLCByZXF1ZXN0LmNvdW50KTsKLSAgICAgICAgICAgICAgICBtX291dHN0YW5kaW5n
Qnl0ZVJhbmdlUmVxdWVzdHMucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgIEhhc2hTZXQ8
dWludDY0X3Q+IGhhbmRsZWRSZXF1ZXN0czsKKyAgICAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDog
bV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBp
ZiAocmVxdWVzdC5tYXliZUNvbXBsZXRlKCp0aGlzKSkKKyAgICAgICAgICAgICAgICBoYW5kbGVk
UmVxdWVzdHMuYWRkKHJlcXVlc3QuaWRlbnRpZmllcigpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZvciAoYXV0byBpZGVudGlmaWVyIDogaGFuZGxlZFJlcXVlc3RzKSB7CisgICAgICAgICAgICBh
dXRvIHJlcXVlc3QgPSBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMudGFrZShpZGVudGlm
aWVyKTsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LnN0cmVhbUxvYWRlcigpKQorICAgICAgICAg
ICAgICAgIGNhbmNlbEFuZEZvcmdldExvYWRlcigqcmVxdWVzdC5zdHJlYW1Mb2FkZXIoKSk7CiAg
ICAgICAgIH0KICAgICB9CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392928</attachid>
            <date>2020-03-07 18:50:18 -0800</date>
            <delta_ts>2020-03-07 20:19:43 -0800</delta_ts>
            <desc>Patch (fixed the indent)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>15646</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYTVlYTM3ZWMwM2MuLjk1YmU0MWZiNGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQzIEBACisyMDIwLTAzLTA3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBNYWtlIFBERiByYW5nZSByZXF1ZXN0cyB0byB0aGUgbmV0d29yay4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODc3NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFscmVhZHkgaGFuZGxl
IGEgc2V0IG9mIHJhbmdlIHJlcXVlc3RzIGZyb20gb3VyIGRhdGEgcHJvdmlkZXIgY2FsbGJhY2tz
LgorICAgICAgICBUaGUgY3VycmVudCBzdHJhdGVneSBpcyAid2FpdCB1bnRpbCB3ZSd2ZSBzdHJl
YW1lZCBlbm91Z2ggb2YgdGhlIGVudGlyZSByZXNvdXJjZSwgCisgICAgICAgIHBlcmZvcm0gdGhh
dCByZXF1ZXN0J3MgY2FsbGJhY2siCisgICAgICAgIAorICAgICAgICBGb3IgbGluZWFyaXplZCBQ
REZzIHRoZSBzZWNvbmQgcmVxdWVzdCBldmVyIG1hZGUgaXMgZm9yIHRoZSB2ZXJ5IGVuZCBvZiB0
aGUgUERGIGRvY3VtZW50LAorICAgICAgICBzbyB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBlbnRp
cmUgZG9jdW1lbnQgdG8gbG9hZCAod2hpY2ggaXMgd2hhdCB3ZSBhbHJlYWR5IGRvIGluIG5vbi1p
bmNyZW1lbnRhbCBtb2RlKQorICAgICAgICAKKyAgICAgICAgTm93LCB3ZSdsbCBhY3R1YWxseSBt
YWtlIHRoZSByZXF1ZXN0cyBmb3IgbWlzc2luZyBkYXRhIGNodW5rcyBmcm9tIHRoZSBuZXR3b3Jr
IGJ5IHVzaW5nIHRoZSBkb2N1bWVudCdzIHJlcXVlc3QKKyAgICAgICAgYW5kIGFkZGluZyByYW5n
ZSBoZWFkZXJzLgorICAgICAgICAKKyAgICAgICAgV2hpbGUgaXQgaXMgbm93IGVudGlyZWx5IG1p
c25hbWVkLCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciBpcyBhIHBlcmZlY3QgZml0IGZvciB0
aGlzLgorICAgICAgICAKKyAgICAgICAgT25jZSB0aGUgcmFuZ2UgcmVxdWVzdCBjb21wbGV0ZXMg
ZnJvbSB0aGUgbmV0d29yayB3ZSBjYW4gdW5ibG9jayB0aGUgUERGIHRocmVhZCBhbmQgZ28gdG8g
dGhlIG5leHQgcmVxdWVzdC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06
CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dW5jb25kaXRpb25hbENvbXBsZXRlT3V0c3Rh
bmRpbmdSYW5nZVJlcXVlc3RzKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpnZXRSZXNv
dXJjZUJ5dGVzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Qnl0ZVJh
bmdlUmVxdWVzdDo6Y2xlYXJTdHJlYW1Mb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OkJ5dGVSYW5nZVJlcXVlc3Q6OmNvbXBsZXRlV2l0aEJ5dGVzKToKKyAgICAgICAgKFdlYktp
dDo6UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0Ojpjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERh
dGEpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6Om1heWJl
Q29tcGxldGUpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6
OmNvbXBsZXRlVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp3
aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmRpZFJlY2VpdmVS
ZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZGlkUmVjZWl2ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmRpZEZhaWwpOgorICAgICAgICAoV2ViS2l0OjpQ
REZQbHVnaW46OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
OmJ5dGVSYW5nZVJlcXVlc3RGb3JMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
OmNhbmNlbEFuZEZvcmdldExvYWRlcik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6bWFu
dWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnVu
Y29uZGl0aW9uYWxDb21wbGV0ZVJhbmdlUmVxdWVzdCk6IERlbGV0ZWQuCisKIDIwMjAtMDMtMDcg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBydW50aW1l
IGZsYWcgZm9yIGluY3JlbWVudGFsIFBERiBsb2FkaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCmluZGV4IDM3NGNmMzc1NGMwLi45ZmU1
NmM5YTAxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW4uaApAQCAtMzQsNyArMzQsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0FYT2JqZWN0
Q2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRmluZE9wdGlvbnMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxhYmxlQXJlYS5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0lkZW50aWZpZWQuaD4KICNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCkBAIC02
OSw3ICs3MiwxMSBAQCBjbGFzcyBQREZQbHVnaW5QYXNzd29yZEZpZWxkOwogY2xhc3MgUGx1Z2lu
VmlldzsKIGNsYXNzIFdlYkZyYW1lOwogCi1jbGFzcyBQREZQbHVnaW4gZmluYWwgOiBwdWJsaWMg
UGx1Z2luLCBwcml2YXRlIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhIHsKK2NsYXNzIFBERlBsdWdp
biBmaW5hbCA6IHB1YmxpYyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEK
KyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorICAgICwgcHJpdmF0ZSBXZWJDb3JlOjpO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudAorI2VuZGlmCit7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxQREZQbHVnaW4+IGNyZWF0ZShXZWJGcmFtZSYpOwogICAgIH5QREZQbHVnaW4o
KTsKQEAgLTMxNiwxNyArMzIzLDUwIEBAIHByaXZhdGU6CiAgICAgdm9pZCB0aHJlYWRFbnRyeShS
ZWY8UERGUGx1Z2luPiYmKTsKICAgICB2b2lkIGFkb3B0QmFja2dyb3VuZFRocmVhZERvY3VtZW50
KCk7CiAKLSAgICBzdHJ1Y3QgQnl0ZVJhbmdlUmVxdWVzdCB7Ci0gICAgICAgIG9mZl90IHBvc2l0
aW9uIHsgMCB9OwotICAgICAgICBzaXplX3QgY291bnQgeyAwIH07Ci0gICAgICAgIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgdWludDhfdCosIHNpemVfdCBjb3VudCk+IGNvbXBsZXRpb25I
YW5kbGVyOworICAgIC8vIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50
CisgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXIqLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmJik+JiYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZVJl
c3BvbnNlKFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoV2Vi
Q29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KSBmaW5h
bDsKKyAgICB2b2lkIGRpZEZhaWwoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIq
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgZmluYWw7CisgICAgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKikgZmluYWw7CisK
KyAgICBjbGFzcyBCeXRlUmFuZ2VSZXF1ZXN0IDogcHVibGljIElkZW50aWZpZWQ8Qnl0ZVJhbmdl
UmVxdWVzdD4geworICAgIHB1YmxpYzoKKyAgICAgICAgQnl0ZVJhbmdlUmVxdWVzdCgpID0gZGVm
YXVsdDsKKyAgICAgICAgQnl0ZVJhbmdlUmVxdWVzdCh1aW50NjRfdCBwb3NpdGlvbiwgc2l6ZV90
IGNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QgY291
bnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICAgICAgOiBtX3Bvc2l0aW9uKHBvc2l0
aW9uKQorICAgICAgICAgICAgLCBtX2NvdW50KGNvdW50KQorICAgICAgICAgICAgLCBtX2NvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogc3Ry
ZWFtTG9hZGVyKCkgeyByZXR1cm4gbV9zdHJlYW1Mb2FkZXI7IH0KKyAgICAgICAgdm9pZCBzZXRT
dHJlYW1Mb2FkZXIoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlcikg
eyBtX3N0cmVhbUxvYWRlciA9IGxvYWRlcjsgfQorICAgICAgICB2b2lkIGNsZWFyU3RyZWFtTG9h
ZGVyKCk7CisgICAgICAgIHZvaWQgYWRkRGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qg
Y291bnQpIHsgbV9hY2N1bXVsYXRlZERhdGEuYXBwZW5kKGRhdGEsIGNvdW50KTsgfQorCisgICAg
ICAgIHZvaWQgY29tcGxldGVXaXRoQnl0ZXMoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAg
ICAgIHZvaWQgY29tcGxldGVXaXRoQWNjdW11bGF0ZWREYXRhKCk7CisKKyAgICAgICAgYm9vbCBt
YXliZUNvbXBsZXRlKFBERlBsdWdpbiYpOworICAgICAgICB2b2lkIGNvbXBsZXRlVW5jb25kaXRp
b25hbGx5KFBERlBsdWdpbiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdWludDY0X3QgbV9w
b3NpdGlvbiB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1fY291bnQgeyAwIH07CisgICAgICAgIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgdWludDhfdCosIHNpemVfdCBjb3VudCk+IG1fY29t
cGxldGlvbkhhbmRsZXI7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBtX2FjY3VtdWxhdGVkRGF0
YTsKKyAgICAgICAgV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIG1fc3RyZWFt
TG9hZGVyIHsgbnVsbHB0ciB9OwogICAgIH07Ci0gICAgdm9pZCB1bmNvbmRpdGlvbmFsQ29tcGxl
dGVSYW5nZVJlcXVlc3QoQnl0ZVJhbmdlUmVxdWVzdCYpOwogICAgIHZvaWQgdW5jb25kaXRpb25h
bENvbXBsZXRlT3V0c3RhbmRpbmdSYW5nZVJlcXVlc3RzKCk7CiAKKyAgICBCeXRlUmFuZ2VSZXF1
ZXN0KiBieXRlUmFuZ2VSZXF1ZXN0Rm9yTG9hZGVyKFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyJik7CisgICAgdm9pZCBjYW5jZWxBbmRGb3JnZXRMb2FkZXIoV2ViQ29yZTo6TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXImKTsKKwogICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4g
bV9iYWNrZ3JvdW5kVGhyZWFkRG9jdW1lbnQ7CiAgICAgUmVmUHRyPFRocmVhZD4gbV9wZGZUaHJl
YWQ7Ci0gICAgVmVjdG9yPEJ5dGVSYW5nZVJlcXVlc3Q+IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VS
ZXF1ZXN0czsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBCeXRlUmFuZ2VSZXF1ZXN0PiBtX291dHN0
YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHM7CisgICAgSGFzaE1hcDxSZWZQdHI8V2ViQ29yZTo6TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+LCB1aW50NjRfdD4gbV9zdHJlYW1Mb2FkZXJNYXA7CiAg
ICAgYm9vbCBtX2luY3JlbWVudGFsUERGTG9hZGluZ0VuYWJsZWQ7CiAjZW5kaWYKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1t
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQppbmRl
eCBlNTQ2OWU1NWMwMi4uYzcyMTczYTM2YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQpAQCAtNDMsNiArNDMsNyBAQAogI2ltcG9y
dCAiV2ViRXZlbnQuaCIKICNpbXBvcnQgIldlYkV2ZW50Q29udmVyc2lvbi5oIgogI2ltcG9ydCAi
V2ViRmluZE9wdGlvbnMuaCIKKyNpbXBvcnQgIldlYkxvYWRlclN0cmF0ZWd5LmgiCiAjaW1wb3J0
ICJXZWJQYWdlLmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgogI2ltcG9ydCAi
V2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZXMuaCIKQEAgLTkxLDcgKzkyLDYgQEAKICNpbXBvcnQg
PHd0Zi9VVUlELmg+CiAjaW1wb3J0IDx3dGYvV1RGU2VtYXBob3JlLmg+CiAjaW1wb3J0IDx3dGYv
V29ya1F1ZXVlLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBIQVZF
KElOQ1JFTUVOVEFMX1BERl9BUElTKQogQGludGVyZmFjZSBQREZEb2N1bWVudCAoKQpAQCAtNzM1
LDQxICs3MzUsNTAgQEAgdm9pZCBQREZQbHVnaW46OnRocmVhZEVudHJ5KFJlZjxQREZQbHVnaW4+
JiYgcHJvdGVjdGVkUGx1Z2luKQogCiB2b2lkIFBERlBsdWdpbjo6dW5jb25kaXRpb25hbENvbXBs
ZXRlT3V0c3RhbmRpbmdSYW5nZVJlcXVlc3RzKCkKIHsKLSAgICBmb3IgKGF1dG8mIHJlcXVlc3Qg
OiBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMpCi0gICAgICAgIHVuY29uZGl0aW9uYWxD
b21wbGV0ZVJhbmdlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBt
X291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMudmFsdWVzKCkpCisgICAgICAgIHJlcXVlc3Qu
Y29tcGxldGVVbmNvbmRpdGlvbmFsbHkoKnRoaXMpOwogICAgIG1fb3V0c3RhbmRpbmdCeXRlUmFu
Z2VSZXF1ZXN0cy5jbGVhcigpOwogfQogCi12b2lkIFBERlBsdWdpbjo6dW5jb25kaXRpb25hbENv
bXBsZXRlUmFuZ2VSZXF1ZXN0KEJ5dGVSYW5nZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgaWYg
KHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZXF1ZXN0LnBvc2l0aW9uKSA+PSBtX3N0cmVhbWVkQnl0
ZXMpIHsKLSAgICAgICAgcmVxdWVzdC5jb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCAwKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChtX2RhdGEpOwotCi0gICAgYXV0byBj
b3VudCA9IHJlcXVlc3QucG9zaXRpb24gKyByZXF1ZXN0LmNvdW50ID4gbV9zdHJlYW1lZEJ5dGVz
ID8gbV9zdHJlYW1lZEJ5dGVzIC0gcmVxdWVzdC5wb3NpdGlvbiA6IHJlcXVlc3QuY291bnQ7Ci0g
ICAgcmVxdWVzdC5jb21wbGV0aW9uSGFuZGxlcihDRkRhdGFHZXRCeXRlUHRyKG1fZGF0YS5nZXQo
KSkgKyByZXF1ZXN0LnBvc2l0aW9uLCBjb3VudCk7Ci19Ci0KIHZvaWQgUERGUGx1Z2luOjpnZXRS
ZXNvdXJjZUJ5dGVzQXRQb3NpdGlvbihzaXplX3QgY291bnQsIG9mZl90IHBvc2l0aW9uLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7IAorICAgIEFTU0VSVChwb3Np
dGlvbiA+PSAwKTsKIAotICAgIGlmIChtX3N0cmVhbWVkQnl0ZXMgPj0gcG9zaXRpb24gKyBjb3Vu
dCkgewotICAgICAgICBBU1NFUlQobV9kYXRhKTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Q0ZEYXRhR2V0Qnl0ZVB0cihtX2RhdGEuZ2V0KCkpICsgcG9zaXRpb24sIGNvdW50KTsKKyAgICBC
eXRlUmFuZ2VSZXF1ZXN0IHJlcXVlc3QgPSB7IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihwb3NpdGlv
biksIGNvdW50LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSB9OworICAgIGlmIChyZXF1ZXN0
Lm1heWJlQ29tcGxldGUoKnRoaXMpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQnl0
ZVJhbmdlUmVxdWVzdCByZXF1ZXN0ID0geyBwb3NpdGlvbiwgY291bnQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpIH07CiAgICAgaWYgKG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcpIHsKLSAg
ICAgICAgdW5jb25kaXRpb25hbENvbXBsZXRlUmFuZ2VSZXF1ZXN0KHJlcXVlc3QpOworICAgICAg
ICByZXF1ZXN0LmNvbXBsZXRlVW5jb25kaXRpb25hbGx5KCp0aGlzKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5hcHBlbmQoV1RG
TW92ZShyZXF1ZXN0KSk7CisgICAgYXV0byBpZGVudGlmaWVyID0gcmVxdWVzdC5pZGVudGlmaWVy
KCk7CisgICAgbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLnNldChpZGVudGlmaWVyLCBX
VEZNb3ZlKHJlcXVlc3QpKTsKKworICAgIGF1dG8qIGNvcmVGcmFtZSA9IG1fZnJhbWUuY29yZUZy
YW1lKCk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8q
IGRvY3VtZW50TG9hZGVyID0gY29yZUZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOwor
ICAgIGlmICghZG9jdW1lbnRMb2FkZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVz
b3VyY2VSZXF1ZXN0ID0gZG9jdW1lbnRMb2FkZXItPnJlcXVlc3QoKTsKKyAgICByZXNvdXJjZVJl
cXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpSYW5nZSwgbWFrZVN0cmlu
ZygiYnl0ZXM9Il9zLCBwb3NpdGlvbiwgIi0iX3MsIHBvc2l0aW9uICsgY291bnQgLSAxKSk7Cisg
ICAgcmVzb3VyY2VSZXF1ZXN0LnNldENhY2hlUG9saWN5KFJlc291cmNlUmVxdWVzdENhY2hlUG9s
aWN5OjpEb05vdFVzZUFueUNhY2hlKTsKKworICAgIExPRyhQREYsICJTY2hlZHVsaW5nIGEgc3Ry
ZWFtIGxvYWRlciBmb3IgcmVxdWVzdCAlbGx1ICglbHUgYnl0ZXMgYXQgJWxsdSlcbiIsIGlkZW50
aWZpZXIsIGNvdW50LCBwb3NpdGlvbik7CisKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53
ZWJMb2FkZXJTdHJhdGVneSgpLnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZCgqY29yZUZyYW1lLCAq
dGhpcywgV1RGTW92ZShyZXNvdXJjZVJlcXVlc3QpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBpZGVudGlmaWVyXSAoUmVmUHRyPFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyPiYmIGxvYWRlcikgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9vdXRz
dGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLmZpbmQoaWRlbnRpZmllcik7CisgICAgICAgIGlmIChp
dGVyYXRvciA9PSBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMuZW5kKCkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgaXRlcmF0b3ItPnZhbHVlLnNldFN0cmVhbUxvYWRlcihs
b2FkZXIuZ2V0KCkpOworICAgICAgICBtX3N0cmVhbUxvYWRlck1hcC5zZXQoV1RGTW92ZShsb2Fk
ZXIpLCBpZGVudGlmaWVyKTsKKyAgICB9KTsKIH0KIAogdm9pZCBQREZQbHVnaW46OmFkb3B0QmFj
a2dyb3VuZFRocmVhZERvY3VtZW50KCkKQEAgLTc5Miw2ICs4MDEsMTM0IEBAIHZvaWQgUERGUGx1
Z2luOjphZG9wdEJhY2tncm91bmRUaHJlYWREb2N1bWVudCgpCiAKICAgICBpbnN0YWxsUERGRG9j
dW1lbnQoKTsKIH0KKwordm9pZCBQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6OmNsZWFyU3Ry
ZWFtTG9hZGVyKCkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1Mb2FkZXIpOworICAgIG1fc3RyZWFt
TG9hZGVyID0gbnVsbHB0cjsKKyAgICBtX2FjY3VtdWxhdGVkRGF0YS5jbGVhcigpOworfQorCit2
b2lkIFBERlBsdWdpbjo6Qnl0ZVJhbmdlUmVxdWVzdDo6Y29tcGxldGVXaXRoQnl0ZXMoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IGNvdW50KQoreworICAgIExPRyhQREYsICJDb21wbGV0aW5n
IHJhbmdlIHJlcXVlc3QgJWxsdSAoJWx1IGJ5dGVzIGF0ICVsbHUpIHdpdGggJWx1IGJ5dGVzIGZy
b20gdGhlIG1haW4gUERGIGJ1ZmZlciIsIGlkZW50aWZpZXIoKSwgbV9jb3VudCwgbV9wb3NpdGlv
biwgY291bnQpOworICAgIG1fY29tcGxldGlvbkhhbmRsZXIoZGF0YSwgY291bnQpOworfQorCit2
b2lkIFBERlBsdWdpbjo6Qnl0ZVJhbmdlUmVxdWVzdDo6Y29tcGxldGVXaXRoQWNjdW11bGF0ZWRE
YXRhKCkKK3sKKyAgICBMT0coUERGLCAiQ29tcGxldGluZyByYW5nZSByZXF1ZXN0ICVsbHUgKCVs
dSBieXRlcyBhdCAlbGx1KSB3aXRoICVsdSBieXRlcyBmcm9tIHRoZSBuZXR3b3JrIiwgaWRlbnRp
ZmllcigpLCBtX2NvdW50LCBtX3Bvc2l0aW9uLCBtX2FjY3VtdWxhdGVkRGF0YS5zaXplKCkpOwor
ICAgIG1fY29tcGxldGlvbkhhbmRsZXIobV9hY2N1bXVsYXRlZERhdGEuZGF0YSgpLCBtX2FjY3Vt
dWxhdGVkRGF0YS5zaXplKCkpOworfQorCitib29sIFBERlBsdWdpbjo6Qnl0ZVJhbmdlUmVxdWVz
dDo6bWF5YmVDb21wbGV0ZShQREZQbHVnaW4mIHBsdWdpbikKK3sKKyAgICBpZiAocGx1Z2luLm1f
c3RyZWFtZWRCeXRlcyA+PSBtX3Bvc2l0aW9uICsgbV9jb3VudCkgeworICAgICAgICBjb21wbGV0
ZVdpdGhCeXRlcyhDRkRhdGFHZXRCeXRlUHRyKHBsdWdpbi5tX2RhdGEuZ2V0KCkpICsgbV9wb3Np
dGlvbiwgbV9jb3VudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0Ojpjb21wbGV0ZVVu
Y29uZGl0aW9uYWxseShQREZQbHVnaW4mIHBsdWdpbikKK3sKKyAgICBpZiAobV9wb3NpdGlvbiA+
PSBwbHVnaW4ubV9zdHJlYW1lZEJ5dGVzKSB7CisgICAgICAgIGNvbXBsZXRlV2l0aEJ5dGVzKG51
bGxwdHIsIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKHBsdWdpbi5t
X2RhdGEpOworCisgICAgYXV0byBjb3VudCA9IG1fcG9zaXRpb24gKyBtX2NvdW50ID4gcGx1Z2lu
Lm1fc3RyZWFtZWRCeXRlcyA/IHBsdWdpbi5tX3N0cmVhbWVkQnl0ZXMgLSBtX3Bvc2l0aW9uIDog
bV9jb3VudDsKKyAgICBjb21wbGV0ZVdpdGhCeXRlcyhDRkRhdGFHZXRCeXRlUHRyKHBsdWdpbi5t
X2RhdGEuZ2V0KCkpICsgbV9wb3NpdGlvbiwgY291bnQpOworfQorCit2b2lkIFBERlBsdWdpbjo6
d2lsbFNlbmRSZXF1ZXN0KE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIFJlc291
cmNlUmVxdWVzdCYmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChSZXNvdXJjZVJlcXVlc3QmJik+JiYpCit7CisgICAgLy8gUmVkaXJlY3Rpb25zIGZvciBy
YW5nZSByZXF1ZXN0cyBhcmUgdW5leHBlY3RlZC4KKyAgICBjYW5jZWxBbmRGb3JnZXRMb2FkZXIo
KmxvYWRlcik7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpkaWRSZWNlaXZlUmVzcG9uc2UoTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCit7CisgICAgYXV0byogcmVxdWVzdCA9IGJ5dGVSYW5nZVJlcXVlc3RGb3JMb2FkZXIo
KmxvYWRlcik7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICBjYW5jZWxBbmRGb3JnZXRMb2Fk
ZXIoKmxvYWRlcik7CisKKyAgICBBU1NFUlQocmVxdWVzdC0+c3RyZWFtTG9hZGVyKCkgPT0gbG9h
ZGVyKTsKKworICAgIC8vIFJhbmdlIHN1Y2Nlc3MhIFdlJ2xsIGV4cGVjdCB0byByZWNlaXZlIHRo
ZSBkYXRhIGluIGZ1dHVyZSBkaWRSZWNlaXZlRGF0YSBjYWxsYmFja3MuCisgICAgaWYgKHJlc3Bv
bnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMjA2KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJ
ZiB0aGUgcmVzcG9uc2Ugd2Fzbid0IGEgc3VjY2Vzc2Z1bCByYW5nZSByZXNwb25zZSwgd2UgZG9u
J3QgbmVlZCB0aGlzIHN0cmVhbSBsb2FkZXIgYW55bW9yZS4KKyAgICAvLyBUaGlzIGNhbiBoYXBw
ZW4sIGZvciBleGFtcGxlLCBpZiB0aGUgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCByYW5nZSByZXF1
ZXN0cy4KKyAgICAvLyBXZSdsbCBzdGlsbCByZXNvbHZlIHRoZSBCeXRlUmFuZ2VSZXF1ZXN0IGxh
dGVyIG9uY2UgZW5vdWdoIG9mIHRoZSBmdWxsIHJlc291cmNlIGhhcyBsb2FkZWQuCisgICAgY2Fu
Y2VsQW5kRm9yZ2V0TG9hZGVyKCpsb2FkZXIpOworCisgICAgLy8gVGhlIHNlcnZlciBtaWdodCBz
dXBwb3J0IHJhbmdlIHJlcXVlc3RzIGFuZCBleHBsaWNpdGx5IHRvbGQgdXMgdGhpcyByYW5nZSB3
YXMgbm90IHNhdGlzZmlhYmxlLgorICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgY2FuIHJlamVjdCB0
aGUgQnl0ZVJhbmdlUmVxdWVzdCByaWdodCBhd2F5LgorICAgIGlmIChyZXNwb25zZS5odHRwU3Rh
dHVzQ29kZSgpID09IDQxNiAmJiByZXF1ZXN0KSB7CisgICAgICAgIHJlcXVlc3QtPmNvbXBsZXRl
V2l0aEFjY3VtdWxhdGVkRGF0YSgpOworICAgICAgICBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVx
dWVzdHMucmVtb3ZlKHJlcXVlc3QtPmlkZW50aWZpZXIoKSk7CisgICAgfQorfQorCit2b2lkIFBE
RlBsdWdpbjo6ZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRl
ciwgY29uc3QgY2hhciogZGF0YSwgaW50IGNvdW50KQoreworICAgIGF1dG8qIHJlcXVlc3QgPSBi
eXRlUmFuZ2VSZXF1ZXN0Rm9yTG9hZGVyKCpsb2FkZXIpOworICAgIGlmICghcmVxdWVzdCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgcmVxdWVzdC0+YWRkRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihkYXRhKSwgY291bnQpOworfQorCit2b2lkIFBERlBsdWdpbjo6ZGlkRmFp
bChOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9y
JikKK3sKKyAgICBpZiAobV9kb2N1bWVudEZpbmlzaGVkTG9hZGluZykgeworICAgICAgICBhdXRv
IGlkZW50aWZpZXIgPSBtX3N0cmVhbUxvYWRlck1hcC5nZXQobG9hZGVyKTsKKyAgICAgICAgaWYg
KGlkZW50aWZpZXIpCisgICAgICAgICAgICBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMu
cmVtb3ZlKGlkZW50aWZpZXIpOworICAgIH0KKworICAgIGNhbmNlbEFuZEZvcmdldExvYWRlcigq
bG9hZGVyKTsKK30KKwordm9pZCBQREZQbHVnaW46OmRpZEZpbmlzaExvYWRpbmcoTmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlcikKK3sKKyAgICBhdXRvKiByZXF1ZXN0ID0gYnl0ZVJh
bmdlUmVxdWVzdEZvckxvYWRlcigqbG9hZGVyKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAg
IHJldHVybjsKKworICAgIHJlcXVlc3QtPmNvbXBsZXRlV2l0aEFjY3VtdWxhdGVkRGF0YSgpOwor
ICAgIG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdC0+aWRlbnRp
ZmllcigpKTsKK30KKworUERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0KiBQREZQbHVnaW46OmJ5
dGVSYW5nZVJlcXVlc3RGb3JMb2FkZXIoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXImIGxvYWRl
cikKK3sKKyAgICB1aW50NjRfdCBpZGVudGlmaWVyID0gbV9zdHJlYW1Mb2FkZXJNYXAuZ2V0KCZs
b2FkZXIpOworICAgIGlmICghaWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvIHJlcXVlc3QgPSBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMuZmluZChp
ZGVudGlmaWVyKTsKKyAgICBpZiAocmVxdWVzdCA9PSBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVx
dWVzdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuICYocmVx
dWVzdC0+dmFsdWUpOworfQorCit2b2lkIFBERlBsdWdpbjo6Y2FuY2VsQW5kRm9yZ2V0TG9hZGVy
KE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyJiBsb2FkZXIpCit7CisgICAgaWYgKGF1dG8qIHJl
cXVlc3QgPSBieXRlUmFuZ2VSZXF1ZXN0Rm9yTG9hZGVyKGxvYWRlcikpIHsKKyAgICAgICAgaWYg
KHJlcXVlc3QtPnN0cmVhbUxvYWRlcigpKSB7CisgICAgICAgICAgICBBU1NFUlQocmVxdWVzdC0+
c3RyZWFtTG9hZGVyKCkgPT0gJmxvYWRlcik7CisgICAgICAgICAgICByZXF1ZXN0LT5jbGVhclN0
cmVhbUxvYWRlcigpOworICAgICAgICB9CisgICAgfQorCisgICAgbG9hZGVyLmNhbmNlbChsb2Fk
ZXIuY2FuY2VsbGVkRXJyb3IoKSk7CisgICAgbV9zdHJlYW1Mb2FkZXJNYXAucmVtb3ZlKCZsb2Fk
ZXIpOworfQogI2VuZGlmIC8vIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCiAKIFBsdWdpbklu
Zm8gUERGUGx1Z2luOjpwbHVnaW5JbmZvKCkKQEAgLTEyMzUsMTUgKzEzNzIsMTYgQEAgdm9pZCBQ
REZQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGJ5dGVzLCBp
bnQgbGVuZ3RoKQogCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKICAgICBpZiAobV9p
bmNyZW1lbnRhbFBERkxvYWRpbmdFbmFibGVkKSB7Ci0gICAgICAgIHNpemVfdCBpbmRleCA9IDA7
Ci0gICAgICAgIHdoaWxlIChpbmRleCA8IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5z
aXplKCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHJlcXVlc3QgPSBtX291dHN0YW5kaW5nQnl0ZVJh
bmdlUmVxdWVzdHNbaW5kZXhdOwotICAgICAgICAgICAgaWYgKG1fc3RyZWFtZWRCeXRlcyA+PSBy
ZXF1ZXN0LnBvc2l0aW9uICsgcmVxdWVzdC5jb3VudCkgewotICAgICAgICAgICAgICAgIHJlcXVl
c3QuY29tcGxldGlvbkhhbmRsZXIoQ0ZEYXRhR2V0Qnl0ZVB0cihtX2RhdGEuZ2V0KCkpICsgcmVx
dWVzdC5wb3NpdGlvbiwgcmVxdWVzdC5jb3VudCk7Ci0gICAgICAgICAgICAgICAgbV9vdXRzdGFu
ZGluZ0J5dGVSYW5nZVJlcXVlc3RzLnJlbW92ZShpbmRleCk7Ci0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICArK2luZGV4OworICAgICAgICBIYXNo
U2V0PHVpbnQ2NF90PiBoYW5kbGVkUmVxdWVzdHM7CisgICAgICAgIGZvciAoYXV0byYgcmVxdWVz
dCA6IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy52YWx1ZXMoKSkgeworICAgICAgICAg
ICAgaWYgKHJlcXVlc3QubWF5YmVDb21wbGV0ZSgqdGhpcykpCisgICAgICAgICAgICAgICAgaGFu
ZGxlZFJlcXVlc3RzLmFkZChyZXF1ZXN0LmlkZW50aWZpZXIoKSk7CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKGF1dG8gaWRlbnRpZmllciA6IGhhbmRsZWRSZXF1ZXN0cykgeworICAgICAgICAg
ICAgYXV0byByZXF1ZXN0ID0gbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLnRha2UoaWRl
bnRpZmllcik7CisgICAgICAgICAgICBpZiAocmVxdWVzdC5zdHJlYW1Mb2FkZXIoKSkKKyAgICAg
ICAgICAgICAgICBjYW5jZWxBbmRGb3JnZXRMb2FkZXIoKnJlcXVlc3Quc3RyZWFtTG9hZGVyKCkp
OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>