<?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>66661</bug_id>
          
          <creation_ts>2011-08-22 04:14:36 -0700</creation_ts>
          <short_desc>Replace some usages of Vector&lt;UChar&gt; to StringBuilder</short_desc>
          <delta_ts>2011-08-31 16:53:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>UNCONFIRMED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>67082</dependson>
    
    <dependson>67083</dependson>
    
    <dependson>67084</dependson>
    
    <dependson>67079</dependson>
    
    <dependson>67081</dependson>
    
    <dependson>67340</dependson>
    
    <dependson>67342</dependson>
          <blocked>66161</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Xianzhu Wang">wangxianzhu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>darin</cc>
    
    <cc>jamesr</cc>
    
    <cc>msaboff</cc>
    
    <cc>rniwa</cc>
    
    <cc>sullivan</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>454529</commentid>
    <comment_count>0</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-22 04:14:36 -0700</bug_when>
    <thetext>Many places using Vector&lt;UChar&gt; actually using it as StringBuilder to build a string. They should be changed to use StringBuilder to support 8-bit string buffers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456676</commentid>
    <comment_count>1</comment_count>
      <attachid>105137</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-24 23:44:07 -0700</bug_when>
    <thetext>Created attachment 105137
First patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456677</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-24 23:45:32 -0700</bug_when>
    <thetext>Attachment 105137 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Source/WebCore/rendering/mathml/RenderMathMLFenced.cpp:37:  wtf includes should be &lt;wtf/file.h&gt; instead of &quot;wtf/file.h&quot;.  [build/include] [4]
Source/WebCore/editing/MarkupAccumulator.h:115:  The parameter name &quot;entityMask&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/editing/markup.cpp:136:  The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/tests/StringBuilderTest.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/chromium/tests/StringBuilderTest.cpp:51:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/css/CSSOMUtils.h:48:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/rendering/InlineTextBox.h:40:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Source/WebKit/chromium/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Source/WebCore/xml/parser/MarkupTokenBase.h:81:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 11 in 77 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456679</commentid>
    <comment_count>3</comment_count>
      <attachid>105137</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-24 23:58:36 -0700</bug_when>
    <thetext>Comment on attachment 105137
First patch

Attachment 105137 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9509220</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456685</commentid>
    <comment_count>4</comment_count>
      <attachid>105139</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-25 00:28:31 -0700</bug_when>
    <thetext>Created attachment 105139
patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456693</commentid>
    <comment_count>5</comment_count>
      <attachid>105139</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-25 00:44:10 -0700</bug_when>
    <thetext>Comment on attachment 105139
patch v2

Attachment 105139 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9513271</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457459</commentid>
    <comment_count>6</comment_count>
      <attachid>105330</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-26 01:21:44 -0700</bug_when>
    <thetext>Created attachment 105330
patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457478</commentid>
    <comment_count>7</comment_count>
      <attachid>105335</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-26 02:16:46 -0700</bug_when>
    <thetext>Created attachment 105335
patch v4 (trying to fix windows build break)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457510</commentid>
    <comment_count>8</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-26 04:33:07 -0700</bug_when>
    <thetext>Haven&apos;t request review because of the failure on win-ews, but you can have a preview and comments are welcomed.

Could anyone who has Windows building environment help resolve the problem Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457552</commentid>
    <comment_count>9</comment_count>
      <attachid>105335</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-26 07:49:29 -0700</bug_when>
    <thetext>Comment on attachment 105335
patch v4 (trying to fix windows build break)

Attachment 105335 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9541057</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457554</commentid>
    <comment_count>10</comment_count>
      <attachid>105335</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-26 07:52:59 -0700</bug_when>
    <thetext>Comment on attachment 105335
patch v4 (trying to fix windows build break)

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

This patch has far too many changes all at once. This could and should be done in smaller pieces. Adding lots of new functions and using them in lots of new places all in one patch is unnecessary for a refactoring patch. Especially because these functions do pointer arithmetic. We need to carefully think about overflow in all the new code.

A good approach is to start with a large patch like this one in your tree and try to do only the parts of it that are obviously correct and easy to review. That first patch could have a lot of changes, but all super-straightforward ones. Then the trickier parts, such as adding new functions, can be done carefully with one function at a time.

I’d suggest posting a first patch that uses StringBuilder more in various places where that can be done without even modifying it, for example.

&gt; Source/JavaScriptCore/JavaScriptCore.order:-326
&gt; -__ZN3WTF13StringBuilder6appendEPKtj

There is no need to try to update the order file. There is no harm having old functions in there, and no benefit to trying to update it manually. It will be regenerated eventually.

&gt; Source/JavaScriptCore/wtf/text/StringBuilder.cpp:126
&gt; +        memcpy(m_bufferCharacters + insertPosition + insertLength, currentCharacters + insertPosition, static_cast&lt;size_t&gt;(m_length - insertPosition) * sizeof(UChar));

Adding insertPosition to insertLength can lead to overflow. This code has to be written in a way that deals with that possibility.

&gt; Source/JavaScriptCore/wtf/text/StringBuilder.cpp:152
&gt; +                memmove(m_bufferCharacters + position + length, m_bufferCharacters + position, static_cast&lt;size_t&gt;(m_length - position) * sizeof(UChar));

Adding position to length can lead to overflow. This code has to be written in a way that deals with that possibility.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457781</commentid>
    <comment_count>11</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-08-26 14:32:51 -0700</bug_when>
    <thetext>(In reply to comment #10)

Thanks for the advice about how to better split up the patch, Darin. Xianzhu, please let me know if you&apos;d like any help with the smaller patches.

&gt; Especially because these functions do pointer arithmetic. We need to carefully think about overflow in all the new code.

In addition to thinking carefully about overflow when writing the code, it seems like unit tests would be helpful to make sure everything is correct. I couldn&apos;t find documentation on this, but it looks like:

1. Tests for these classes Tools/TestWebKitAPI/Tests/WTF/
2. You can run the tests using the script Tools/Scripts/run-api-tests

Is that correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457903</commentid>
    <comment_count>12</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-26 20:36:03 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; 
&gt; Thanks for the advice about how to better split up the patch, Darin. Xianzhu, please let me know if you&apos;d like any help with the smaller patches.
&gt;

I&apos;ll file some sub-bugs to track the smaller patches and take some of them.
 
&gt; 
&gt; In addition to thinking carefully about overflow when writing the code, it seems like unit tests would be helpful to make sure everything is correct. I couldn&apos;t find documentation on this, but it looks like:
&gt; 
&gt; 1. Tests for these classes Tools/TestWebKitAPI/Tests/WTF/
&gt; 2. You can run the tests using the script Tools/Scripts/run-api-tests
&gt; 
&gt; Is that correct?

I&apos;ve included a unit test in the patch, but only for chromium (Source/WebKit/tests/StringBuilderTest.cpp).
I think it should be moved to under Tools/TestWebKitAPI/Tests/WTF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457907</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-08-26 20:45:52 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; Thanks for the advice about how to better split up the patch, Darin. Xianzhu, please let me know if you&apos;d like any help with the smaller patches.
&gt; &gt;
&gt; 
&gt; I&apos;ll file some sub-bugs to track the smaller patches and take some of them.

Yes, the current patch is way too big.  Please cc me on the bug where you touch any file in Source/WebCore/editing especially ones related to MarkupAccumulator.cpp and markup.cpp.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105137</attachid>
            <date>2011-08-24 23:44:07 -0700</date>
            <delta_ts>2011-08-25 00:28:31 -0700</delta_ts>
            <desc>First patch</desc>
            <filename>patch-66661</filename>
            <type>text/plain</type>
            <size>194450</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM3NjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAK
KzIwMTEtMDgtMjQgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXBsYWNlIHNvbWUgdXNhZ2VzIG9mIFZlY3RvcjxVQ2hhcj4gdG8gU3RyaW5nQnVp
bGRlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvcHJvY2Vzc19idWcuY2dpCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBw
YXJ0IG9mIHdvcmsgdG8gc3VwcG9ydCA4LWJpdCBzdHJpbmcgYnVmZmVycy4KKyAgICAgICAgVGhl
IGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG9yaWduYWwgU3RyaW5nQnVpbGRlciBhcmUgZXh0ZW5kZWQg
dG8gc3VwcG9ydAorICAgICAgICB0aGUgb3JpZ2luYWwgdXNhZ2VzIG9mIFZlY3RvcjxVQ2hhcj4u
CisKKyAgICAgICAgKiB3dGYvRm9yd2FyZC5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZyk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlbW92ZSk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0J1aWxkZXI6OnNocmluayk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6Omdyb3cpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkpOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6OlN0cmlu
Z0J1aWxkZXI6Omluc2VydFVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWls
ZGVyOjppbnNlcnQpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpzaHJpbmtUb0ZpdCk6
CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oOgorICAgICAgICAoV1RGOjpTdHJp
bmdCdWlsZGVyOjpTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6
YXBwZW5kKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kTnVtYmVyKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6cHJlcGVuZCk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0J1aWxkZXI6Omluc2VydCk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnRvU3RyaW5n
UHJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlbGVhc2VT
dHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpsZW5ndGgpOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNpemUpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVy
OjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmNoYXJhY3RlcnMpOgorICAgICAgICAoV1RG
OjpTdHJpbmdCdWlsZGVyOjpjbGVhcik6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnN3
YXApOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjYXBhY2l0eSk6CisgICAgICAgIChX
VEY6OlN0cmluZ0J1aWxkZXI6OnRyeVJldGFpbik6CisgICAgICAgICogd3RmL3RleHQvV1RGU3Ry
aW5nLmg6CisKIDIwMTEtMDgtMjQgIEp1YW4gQy4gTW9udGVtYXlvciAgPGptb250QGFwcGxlLmNv
bT4KIAogICAgICAgICBLZWVwIHRyYWNrIG9mIHRvcENhbGxGcmFtZSBmb3IgU3RhY2sgdHJhY2Vz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0ZvcndhcmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0ZvcndhcmQuaAkocmV2aXNpb24gOTM3MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0ZvcndhcmQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBjbGFzcyBFbmNvZGVyOwogICAgIGNs
YXNzIFN0cmluZzsKICAgICBjbGFzcyBTdHJpbmdCdWZmZXI7CisgICAgY2xhc3MgU3RyaW5nQnVp
bGRlcjsKICAgICBjbGFzcyBTdHJpbmdJbXBsOwogfQogCkBAIC01OSw2ICs2MCw3IEBAIHVzaW5n
IFdURjo6RW5jb2RlcjsKIHVzaW5nIFdURjo6RGVjb2RlcjsKIHVzaW5nIFdURjo6U3RyaW5nOwog
dXNpbmcgV1RGOjpTdHJpbmdCdWZmZXI7Cit1c2luZyBXVEY6OlN0cmluZ0J1aWxkZXI7CiB1c2lu
ZyBXVEY6OlN0cmluZ0ltcGw7CiAKICNlbmRpZiAvLyBXVEZfRm9yd2FyZF9oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCShyZXZp
c2lvbiA5MzcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOSBAQAogCiBuYW1lc3BhY2UgV1RG
IHsKIAotdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygpCitzdGF0aWMgY29uc3QgdW5z
aWduZWQgbWluaW11bUNhcGFjaXR5ID0gMTY7CisKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6cmVpZnlT
dHJpbmcoKSBjb25zdAogewogICAgIC8vIENoZWNrIGlmIHRoZSBzdHJpbmcgYWxyZWFkeSBleGlz
dHMuCiAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkgewpAQCAtNTEsNyArNTMsMjEgQEAgdm9p
ZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygpCiAgICAgICAgIDogU3RyaW5nSW1wbDo6Y3Jl
YXRlKG1fYnVmZmVyLCAwLCBtX2xlbmd0aCk7CiB9CiAKLXZvaWQgU3RyaW5nQnVpbGRlcjo6cmVz
aXplKHVuc2lnbmVkIG5ld1NpemUpCit2b2lkIFN0cmluZ0J1aWxkZXI6OnJlbW92ZSh1bnNpZ25l
ZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChwb3NpdGlvbiA8IG1f
bGVuZ3RoKTsKKyAgICBBU1NFUlQocG9zaXRpb24gKyBsZW5ndGggPD0gbV9sZW5ndGgpOworICAg
IGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocG9zaXRpb24gKyBsZW5n
dGggPCBtX2xlbmd0aCkgeworICAgICAgICBVQ2hhciogYnVmZmVyID0gY2hhcmFjdGVycygpOwor
ICAgICAgICBtZW1tb3ZlKGJ1ZmZlciArIHBvc2l0aW9uLCBidWZmZXIgKyBwb3NpdGlvbiArIGxl
bmd0aCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aCAtIHBvc2l0aW9uIC0gbGVuZ3RoKSAq
IHNpemVvZihVQ2hhcikpOworICAgIH0KKyAgICBtX2xlbmd0aCAtPSBsZW5ndGg7Cit9CisKK3Zv
aWQgU3RyaW5nQnVpbGRlcjo6c2hyaW5rKHVuc2lnbmVkIG5ld1NpemUpCiB7CiAgICAgLy8gQ2hl
Y2sgbmV3U2l6ZSA8IG1fbGVuZ3RoLCBoZW5jZSBtX2xlbmd0aCA+IDAuCiAgICAgQVNTRVJUKG5l
d1NpemUgPD0gbV9sZW5ndGgpOwpAQCAtNjIsNyArNzgsNyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6
OnJlc2l6ZSh1bnNpZ25lZCBuZXdTCiAgICAgLy8gSWYgdGhlcmUgaXMgYSBidWZmZXIsIHdlIG9u
bHkgbmVlZCB0byBkdXBsaWNhdGUgaXQgaWYgaXQgaGFzIG1vcmUgdGhhbiBvbmUgcmVmLgogICAg
IGlmIChtX2J1ZmZlcikgewogICAgICAgICBpZiAoIW1fYnVmZmVyLT5oYXNPbmVSZWYoKSkKLSAg
ICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzKCksIG1fYnVmZmVy
LT5sZW5ndGgoKSk7CisgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFj
dGVycygpLCBtX2J1ZmZlci0+bGVuZ3RoKCksIDAsIDApOwogICAgICAgICBtX2xlbmd0aCA9IG5l
d1NpemU7CiAgICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7CiAgICAgICAgIHJldHVybjsKQEAg
LTc2LDI2ICs5MiwzOCBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2l6ZSh1bnNpZ25lZCBuZXdT
CiAgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGUobV9zdHJpbmcuaW1wbCgpLCAwLCBu
ZXdTaXplKTsKIH0KIAordm9pZCBTdHJpbmdCdWlsZGVyOjpncm93KHVuc2lnbmVkIG5ld1NpemUp
Cit7CisgICAgQVNTRVJUKG5ld1NpemUgPj0gbV9sZW5ndGgpOworICAgIGlmIChuZXdTaXplID09
IG1fbGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnNlcnRVbmluaXRpYWxpemVkKG5l
d1NpemUgLSBtX2xlbmd0aCwgbV9sZW5ndGgpOworfQorCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnJl
c2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0eSkKIHsKICAgICBpZiAobV9idWZmZXIp
IHsKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIGJ1ZmZlciwgdGhlbiBncm93IGlm
IG5lY2Vzc2FyeS4KICAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gbV9idWZmZXItPmxlbmd0aCgp
KQotICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnMoKSwgbmV3
Q2FwYWNpdHkpOworICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3Rl
cnMoKSwgbmV3Q2FwYWNpdHksIDAsIDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEdyb3cg
dGhlIHN0cmluZywgaWYgbmVjZXNzYXJ5LgogICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBtX2xl
bmd0aCkKLSAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJhY3RlcnMoKSwg
bmV3Q2FwYWNpdHkpOworICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFj
dGVycygpLCBuZXdDYXBhY2l0eSwgMCwgMCk7CiAgICAgfQogfQogCiAvLyBBbGxvY2F0ZSBhIG5l
dyBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENoYXJhY3RlcnMgKHRoZXNlIG1heSBjb21lIGZy
b20gZWl0aGVyIG1fc3RyaW5nCiAvLyBvciBtX2J1ZmZlciwgIG5laXRoZXIgd2lsbCBiZSByZWFz
c2lnbmVkIHVudGlsIHRoZSBjb3B5IGhhcyBjb21wbGV0ZWQpLgotdm9pZCBTdHJpbmdCdWlsZGVy
OjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVk
IHJlcXVpcmVkTGVuZ3RoKQordm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihjb25z
dCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHksIHVu
c2lnbmVkIGluc2VydExlbmd0aCwgdW5zaWduZWQgaW5zZXJ0UG9zaXRpb24pCiB7CiAgICAgLy8g
Q29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRvIGEgbmV3IGJ1ZmZlciwgc2V0IHJlc3VsdCB0byBw
b2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBkYXRhLgotICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiBidWZmZXIgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHJlcXVpcmVkTGVu
Z3RoLCBtX2J1ZmZlckNoYXJhY3RlcnMpOwotICAgIG1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnMs
IGN1cnJlbnRDaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVuZ3RoKSAqIHNpemVv
ZihVQ2hhcikpOyAvLyBUaGlzIGNhbid0IG92ZXJmbG93LgorICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBidWZmZXIgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHJlcXVpcmVkQ2FwYWNp
dHksIG1fYnVmZmVyQ2hhcmFjdGVycyk7CisgICAgaWYgKGluc2VydFBvc2l0aW9uID4gMCkKKyAg
ICAgICAgbWVtY3B5KG1fYnVmZmVyQ2hhcmFjdGVycywgY3VycmVudENoYXJhY3RlcnMsIHN0YXRp
Y19jYXN0PHNpemVfdD4oaW5zZXJ0UG9zaXRpb24pICogc2l6ZW9mKFVDaGFyKSk7CisgICAgaWYg
KGluc2VydFBvc2l0aW9uIDwgbV9sZW5ndGgpCisgICAgICAgIG1lbWNweShtX2J1ZmZlckNoYXJh
Y3RlcnMgKyBpbnNlcnRQb3NpdGlvbiArIGluc2VydExlbmd0aCwgY3VycmVudENoYXJhY3RlcnMg
KyBpbnNlcnRQb3NpdGlvbiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aCAtIGluc2VydFBv
c2l0aW9uKSAqIHNpemVvZihVQ2hhcikpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0
YXRlLgogICAgIG1fYnVmZmVyID0gYnVmZmVyLnJlbGVhc2UoKTsKQEAgLTEwNCw3ICsxMzIsNyBA
QCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0CiAKIC8vIE1ha2UgJ2xl
bmd0aCcgYWRkaXRpb25hbCBjYXBhY2l0eSBiZSBhdmFpbGFibGUgaW4gbV9idWZmZXIsIHVwZGF0
ZSBtX3N0cmluZyAmIG1fbGVuZ3RoLAogLy8gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3bHkg
YWxsb2NhdGVkIHN0b3JhZ2UuCi1VQ2hhciogU3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFs
aXplZCh1bnNpZ25lZCBsZW5ndGgpCitVQ2hhciogU3RyaW5nQnVpbGRlcjo6aW5zZXJ0VW5pbml0
aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHBvc2l0aW9uKQogewogICAgIEFTU0VS
VChsZW5ndGgpOwogCkBAIC0xMTksNDAgKzE0Nyw0MiBAQCBVQ2hhciogU3RyaW5nQnVpbGRlcjo6
YXBwZW5kVW5pbml0aWFsaXplCiAKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGJ1ZmZlciBhbHJl
YWR5IGhhcyBzdWZmaWNpZW50IGNhcGFjaXR5LgogICAgICAgICBpZiAocmVxdWlyZWRMZW5ndGgg
PD0gbV9idWZmZXItPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjdXJyZW50TGVu
Z3RoID0gbV9sZW5ndGg7CiAgICAgICAgICAgICBtX3N0cmluZyA9IFN0cmluZygpOworICAgICAg
ICAgICAgaWYgKHBvc2l0aW9uIDwgbV9sZW5ndGgpCisgICAgICAgICAgICAgICAgbWVtbW92ZSht
X2J1ZmZlckNoYXJhY3RlcnMgKyBwb3NpdGlvbiArIGxlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJz
ICsgcG9zaXRpb24sIHN0YXRpY19jYXN0PHNpemVfdD4obV9sZW5ndGggLSBwb3NpdGlvbikgKiBz
aXplb2YoVUNoYXIpKTsKICAgICAgICAgICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5ndGg7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9idWZmZXJDaGFyYWN0ZXJzICsgY3VycmVudExlbmd0aDsKKyAg
ICAgICAgICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnMgKyBwb3NpdGlvbjsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVhbGxvYyB0aGUgYnVmZmVyLgotICAgICAgICBh
bGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVycygpLCBzdGQ6Om1heChyZXF1aXJlZExl
bmd0aCwgbV9idWZmZXItPmxlbmd0aCgpICogMikpOworICAgICAgICBhbGxvY2F0ZUJ1ZmZlciht
X2J1ZmZlckNoYXJhY3RlcnMsIHN0ZDo6bWF4KHJlcXVpcmVkTGVuZ3RoLCBzdGQ6Om1heChtaW5p
bXVtQ2FwYWNpdHksIG1fYnVmZmVyLT5sZW5ndGgoKSAqIDIpKSwgbGVuZ3RoLCBwb3NpdGlvbik7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fc3RyaW5nLmxlbmd0aCgpID09IG1fbGVu
Z3RoKTsKLSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFjdGVycygpLCBzdGQ6
Om1heChyZXF1aXJlZExlbmd0aCwgcmVxdWlyZWRMZW5ndGggKiAyKSk7CisgICAgICAgIGFsbG9j
YXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RkOjptYXgocmVxdWlyZWRMZW5ndGgs
IHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgbV9sZW5ndGggKiAyKSksIGxlbmd0aCwgcG9zaXRp
b24pOwogICAgIH0KIAotICAgIFVDaGFyKiByZXN1bHQgPSBtX2J1ZmZlckNoYXJhY3RlcnMgKyBt
X2xlbmd0aDsKICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOwotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFjdGVycyArIHBvc2l0aW9uOwogfQogCi12b2lk
IFN0cmluZ0J1aWxkZXI6OmFwcGVuZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoKQordm9pZCBTdHJpbmdCdWlsZGVyOjppbnNlcnQoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgcG9zaXRpb24pCiB7CiAgICAgaWYgKCFsZW5n
dGgpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CisgICAgQVNTRVJU
KHBvc2l0aW9uIDw9IG1fbGVuZ3RoKTsKIAotICAgIG1lbWNweShhcHBlbmRVbmluaXRpYWxpemVk
KGxlbmd0aCksIGNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIDIpOwor
ICAgIG1lbWNweShpbnNlcnRVbmluaXRpYWxpemVkKGxlbmd0aCwgcG9zaXRpb24pLCBjaGFyYWN0
ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiAyKTsKIH0KIAotdm9pZCBTdHJpbmdC
dWlsZGVyOjphcHBlbmQoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQor
dm9pZCBTdHJpbmdCdWlsZGVyOjppbnNlcnQoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBwb3NpdGlvbikKIHsKICAgICBpZiAoIWxlbmd0aCkKICAgICAg
ICAgcmV0dXJuOwogICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKKyAgICBBU1NFUlQocG9zaXRpb24g
PD0gbV9sZW5ndGgpOwogCi0gICAgVUNoYXIqIGRlc3QgPSBhcHBlbmRVbmluaXRpYWxpemVkKGxl
bmd0aCk7CisgICAgVUNoYXIqIGRlc3QgPSBpbnNlcnRVbmluaXRpYWxpemVkKGxlbmd0aCwgcG9z
aXRpb24pOwogICAgIGNvbnN0IGNoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7CiAgICAg
d2hpbGUgKGNoYXJhY3RlcnMgPCBlbmQpCiAgICAgICAgICooZGVzdCsrKSA9ICooY29uc3QgdW5z
aWduZWQgY2hhciopKGNoYXJhY3RlcnMrKyk7CkBAIC0xNjQsOCArMTk0LDkgQEAgdm9pZCBTdHJp
bmdCdWlsZGVyOjpzaHJpbmtUb0ZpdCgpCiAgICAgaWYgKG1fYnVmZmVyICYmIG1fYnVmZmVyLT5s
ZW5ndGgoKSA+IChtX2xlbmd0aCArIChtX2xlbmd0aCA+PiAyKSkpIHsKICAgICAgICAgVUNoYXIq
IHJlc3VsdDsKICAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxp
emVkKG1fbGVuZ3RoLCByZXN1bHQpOwotICAgICAgICBtZW1jcHkocmVzdWx0LCBtX2J1ZmZlci0+
Y2hhcmFjdGVycygpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVuZ3RoKSAqIDIpOyAvLyBUaGlz
IGNhbid0IG92ZXJmbG93LgorICAgICAgICBtZW1jcHkocmVzdWx0LCBtX2J1ZmZlckNoYXJhY3Rl
cnMsIHN0YXRpY19jYXN0PHNpemVfdD4obV9sZW5ndGgpICogMik7IC8vIFRoaXMgY2FuJ3Qgb3Zl
cmZsb3cuCiAgICAgICAgIG1fYnVmZmVyID0gMDsKKyAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJz
ID0gMDsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMyAr
MzUsMzYgQEAgY2xhc3MgU3RyaW5nQnVpbGRlciB7CiBwdWJsaWM6CiAgICAgU3RyaW5nQnVpbGRl
cigpCiAgICAgICAgIDogbV9sZW5ndGgoMCkKKyAgICAgICAgLCBtX2J1ZmZlckNoYXJhY3RlcnMo
MCkKICAgICB7CiAgICAgfQorLyoKKyAgICBleHBsaWNpdCBTdHJpbmdCdWlsZGVyKHVuc2lnbmVk
IGxlbmd0aCkKKyAgICAgICAgOiBtX2xlbmd0aCgwKQorICAgIHsKKyAgICAgICAgcmVzaXplKGxl
bmd0aCk7CisgICAgfQorKi8KKyAgICBTdHJpbmdCdWlsZGVyKGNvbnN0IFN0cmluZ0J1aWxkZXIm
IGJ1aWxkZXIpCisgICAgICAgIDogbV9sZW5ndGgoMCkKKyAgICB7CisgICAgICAgIGFwcGVuZChi
dWlsZGVyKTsKKyAgICB9CiAKLSAgICB2b2lkIGFwcGVuZChjb25zdCBVQ2hhciosIHVuc2lnbmVk
KTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiwgdW5zaWduZWQpOworICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAg
ICAgICBpbnNlcnQoY2hhcmFjdGVycywgbGVuZ3RoLCBtX2xlbmd0aCk7CisgICAgfQorCisgICAg
dm9pZCBhcHBlbmQoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorICAg
IHsKKyAgICAgICAgaW5zZXJ0KGNoYXJhY3RlcnMsIGxlbmd0aCwgbV9sZW5ndGgpOworICAgIH0K
IAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAgICAg
Ly8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVtcHR5IHN0cmluZywgYW5kIHRoZXJlIGlzIG5v
dCBidWZmZXIKLSAgICAgICAgLy8gKGluIGNhc2UgcmVzZXJ2ZUNhcGFjaXR5IGhhcyBiZWVuIGNh
bGxlZCkgdGhlbiBqdXN0IHJldGFpbiB0aGUKLSAgICAgICAgLy8gc3RyaW5nLgotICAgICAgICBp
ZiAoIW1fbGVuZ3RoICYmICFtX2J1ZmZlcikgewotICAgICAgICAgICAgbV9zdHJpbmcgPSBzdHJp
bmc7Ci0gICAgICAgICAgICBtX2xlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBhcHBlbmQoc3RyaW5nLmNoYXJhY3RlcnMoKSwg
c3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgaWYgKCF0cnlSZXRhaW4oc3RyaW5nKSkKKyAgICAg
ICAgICAgIGFwcGVuZChzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCkpOwogICAg
IH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMpCkBAIC02OCwxNCAr
ODEsOTIgQEAgcHVibGljOgogICAgICAgICAgICAgYXBwZW5kKCZjLCAxKTsKICAgICB9CiAKLSAg
ICB2b2lkIGFwcGVuZChjaGFyIGMpCisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nQnVpbGRl
ciYgYnVpbGRlcikKICAgICB7Ci0gICAgICAgIGlmIChtX2J1ZmZlciAmJiBtX2xlbmd0aCA8IG1f
YnVmZmVyLT5sZW5ndGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIG1fYnVm
ZmVyQ2hhcmFjdGVyc1ttX2xlbmd0aCsrXSA9ICh1bnNpZ25lZCBjaGFyKWM7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGFwcGVuZCgmYywgMSk7CisgICAgICAgIGlmICghdHJ5UmV0YWluKGJ1
aWxkZXIpKQorICAgICAgICAgICAgYXBwZW5kKGJ1aWxkZXIuY2hhcmFjdGVycygpLCBidWlsZGVy
Lmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZE51bWJlcih1bnNpZ25lZCBjaGFy
IG51bWJlcikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG51bWJlckxlbmd0aCA9IG51bWJlciA+
IDk5ID8gMyA6IChudW1iZXIgPiA5ID8gMiA6IDEpOworICAgICAgICBVQ2hhciogYnVmZmVyID0g
aW5zZXJ0VW5pbml0aWFsaXplZChudW1iZXJMZW5ndGgsIG1fbGVuZ3RoKTsKKworICAgICAgICBz
d2l0Y2ggKG51bWJlckxlbmd0aCkgeworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBidWZm
ZXJbMl0gPSBudW1iZXIgJSAxMCArICcwJzsKKyAgICAgICAgICAgIG51bWJlciAvPSAxMDsKKyAg
ICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBi
dWZmZXJbMV0gPSBudW1iZXIgJSAxMCArICcwJzsKKyAgICAgICAgICAgIG51bWJlciAvPSAxMDsK
KyAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICBidWZmZXJbMF0gPSBudW1iZXIgJSAxMCArICcwJzsKKyAgICAgICAgfQogICAgIH0KIAorICAg
IHZvaWQgcHJlcGVuZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQor
ICAgIHsKKyAgICAgICAgaW5zZXJ0KGNoYXJhY3RlcnMsIGxlbmd0aCwgMCk7CisgICAgfQorCisg
ICAgdm9pZCBwcmVwZW5kKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICB7CisgICAgICAgIGluc2VydChjaGFyYWN0ZXJzLCBsZW5ndGgsIDApOworICAgIH0KKwor
ICAgIHZvaWQgcHJlcGVuZChjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAgIGlm
ICghdHJ5UmV0YWluKHN0cmluZykpCisgICAgICAgICAgICBwcmVwZW5kKHN0cmluZy5jaGFyYWN0
ZXJzKCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgfQorCisgICAgdm9pZCBwcmVwZW5kKGNvbnN0
IGNoYXIqIGNoYXJhY3RlcnMpCisgICAgeworICAgICAgICBpZiAoY2hhcmFjdGVycykKKyAgICAg
ICAgICAgIHByZXBlbmQoY2hhcmFjdGVycywgc3RybGVuKGNoYXJhY3RlcnMpKTsKKyAgICB9CisK
KyAgICB2b2lkIHByZXBlbmQoVUNoYXIgYykKKyAgICB7CisgICAgICAgIHByZXBlbmQoJmMsIDEp
OworICAgIH0KKworICAgIHZvaWQgcHJlcGVuZChjb25zdCBTdHJpbmdCdWlsZGVyJiBidWlsZGVy
KQorICAgIHsKKyAgICAgICAgaWYgKCF0cnlSZXRhaW4oYnVpbGRlcikpCisgICAgICAgICAgICBw
cmVwZW5kKGJ1aWxkZXIuY2hhcmFjdGVycygpLCBidWlsZGVyLmxlbmd0aCgpKTsKKyAgICB9CisK
KyAgICB2b2lkIGluc2VydChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
LCB1bnNpZ25lZCBwb3NpdGlvbik7CisgICAgdm9pZCBpbnNlcnQoY29uc3QgY2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBwb3NpdGlvbik7CisKKyAgICB2b2lkIGlu
c2VydChjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgcG9zaXRpb24pCisgICAgeworICAg
ICAgICBpZiAoIXRyeVJldGFpbihzdHJpbmcpKQorICAgICAgICAgICAgaW5zZXJ0KHN0cmluZy5j
aGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSwgcG9zaXRpb24pOworICAgIH0KKworICAgIHZv
aWQgaW5zZXJ0KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHBvc2l0aW9uKQorICAg
IHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnMpCisgICAgICAgICAgICBpbnNlcnQoY2hhcmFjdGVy
cywgc3RybGVuKGNoYXJhY3RlcnMpLCBwb3NpdGlvbik7CisgICAgfQorCisgICAgdm9pZCBpbnNl
cnQoVUNoYXIgYywgdW5zaWduZWQgcG9zaXRpb24pCisgICAgeworICAgICAgICBpbnNlcnQoJmMs
IDEsIHBvc2l0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIGluc2VydChjb25zdCBTdHJpbmdCdWls
ZGVyJiBidWlsZGVyLCB1bnNpZ25lZCBwb3NpdGlvbikKKyAgICB7CisgICAgICAgIGlmICghdHJ5
UmV0YWluKGJ1aWxkZXIpKQorICAgICAgICAgICAgaW5zZXJ0KGJ1aWxkZXIuY2hhcmFjdGVycygp
LCBidWlsZGVyLmxlbmd0aCgpLCBwb3NpdGlvbik7CisgICAgfQorCisgICAgdm9pZCByZW1vdmUo
dW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7CisKICAgICBTdHJpbmcgdG9TdHJp
bmcoKQogICAgIHsKICAgICAgICAgaWYgKG1fc3RyaW5nLmlzTnVsbCgpKSB7CkBAIC04NSwzMyAr
MTc2LDgyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc3RyaW5nOwogICAgIH0KIAotICAg
IFN0cmluZyB0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKQorICAgIFN0cmluZyB0b1N0cmluZ1By
ZXNlcnZlQ2FwYWNpdHkoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fc3RyaW5nLmlzTnVs
bCgpKQogICAgICAgICAgICAgcmVpZnlTdHJpbmcoKTsKICAgICAgICAgcmV0dXJuIG1fc3RyaW5n
OwogICAgIH0KIAotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0CisgICAgU3RyaW5nIHJlbGVh
c2VTdHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOworICAgICAgICBTdHJp
bmcgcmVzdWx0ID0gdG9TdHJpbmcoKTsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2xlbmd0aDsgfQorCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxlbmd0aCgp
OyB9CiAKICAgICB2b2lkIHJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0eSk7CiAK
LSAgICB2b2lkIHJlc2l6ZSh1bnNpZ25lZCBuZXdTaXplKTsKKyAgICAvLyBTaHJpbmsgdGhlIHNp
emUgdG8gbmV3U2l6ZSB3aXRob3V0IGFmZmVjdGluZyB0aGUgY2FwYWNpdHkuCisgICAgdm9pZCBz
aHJpbmsodW5zaWduZWQgbmV3U2l6ZSk7CisKKyAgICAvLyBHcm93IHRoZSBzaXplIHRvIG5ld1Np
emUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGNhcGFjaXR5LgorICAgIHZvaWQgZ3Jvdyh1bnNpZ25l
ZCBuZXdTaXplKTsKKworICAgIHZvaWQgcmVzaXplKHVuc2lnbmVkIG5ld1NpemUpCisgICAgewor
ICAgICAgICBpZiAobmV3U2l6ZSA+IG1fbGVuZ3RoKQorICAgICAgICAgICAgZ3JvdyhuZXdTaXpl
KTsKKyAgICAgICAgZWxzZSBpZiAobmV3U2l6ZSA8IG1fbGVuZ3RoKQorICAgICAgICAgICAgc2hy
aW5rKG5ld1NpemUpOworICAgIH0KIAorICAgIC8vIFNocmlua3MgdGhlIGJ1ZmZlciB0byB0aGUg
Y3VycmVudCBsZW5ndGguCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogCiAgICAgVUNoYXIgb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBtX2xl
bmd0aCk7CisgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzKClbaV07CisgICAgfQorCisgICAgVUNo
YXImIG9wZXJhdG9yW10odW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9s
ZW5ndGgpOworICAgICAgICByZXR1cm4gY2hhcmFjdGVycygpW2ldOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIHN0cmluZykgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSA9PSBzdHJpbmc7CisgICAgfQorCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gdG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkgPT0gYnVpbGRl
ci50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKTsKKyAgICB9CisKKyAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fbGVuZ3RoKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmICghbV9zdHJpbmcuaXNOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gbV9zdHJpbmdbaV07CisgICAgICAgICAgICByZXR1cm4gbV9zdHJpbmcuY2hh
cmFjdGVycygpOwogICAgICAgICBBU1NFUlQobV9idWZmZXIpOwotICAgICAgICByZXR1cm4gbV9i
dWZmZXItPmNoYXJhY3RlcnMoKVtpXTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0
ZXJzKCk7CisgICAgfQorCisgICAgVUNoYXIqIGNoYXJhY3RlcnMoKQorICAgIHsKKyAgICAgICAg
aWYgKCFtX2xlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoIW1fYnVm
ZmVyQ2hhcmFjdGVycykKKyAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJh
Y3RlcnMoKSwgbV9sZW5ndGgsIDAsIDApOworICAgICAgICByZXR1cm4gbV9idWZmZXJDaGFyYWN0
ZXJzOwogICAgIH0KIAogICAgIHZvaWQgY2xlYXIoKQpAQCAtMTE5LDE1ICsyNTksNTMgQEAgcHVi
bGljOgogICAgICAgICBtX2xlbmd0aCA9IDA7CiAgICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7
CiAgICAgICAgIG1fYnVmZmVyID0gMDsKKyAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzID0gMDsK
KyAgICB9CisKKyAgICB2b2lkIHN3YXAoU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKKyAgICB7Cisg
ICAgICAgIHN0ZDo6c3dhcChtX2xlbmd0aCwgYnVpbGRlci5tX2xlbmd0aCk7CisgICAgICAgIG1f
c3RyaW5nLnN3YXAoYnVpbGRlci5tX3N0cmluZyk7CisgICAgICAgIG1fYnVmZmVyLnN3YXAoYnVp
bGRlci5tX2J1ZmZlcik7CisgICAgICAgIHN0ZDo6c3dhcChtX2J1ZmZlckNoYXJhY3RlcnMsIGJ1
aWxkZXIubV9idWZmZXJDaGFyYWN0ZXJzKTsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBjYXBhY2l0
eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9idWZmZXIgPyBtX2J1ZmZlci0+bGVu
Z3RoKCkgOiBtX2xlbmd0aDsKKyAgICB9CiBwcml2YXRlOgotICAgIHZvaWQgYWxsb2NhdGVCdWZm
ZXIoY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0
aCk7Ci0gICAgVUNoYXIqIGFwcGVuZFVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLSAg
ICB2b2lkIHJlaWZ5U3RyaW5nKCk7CisgICAgYm9vbCB0cnlSZXRhaW4oY29uc3QgU3RyaW5nJiBz
dHJpbmcpCisgICAgeworICAgICAgICAvLyBJZiB3ZSdyZSBhcHBlbmRpbmcvcHJlcGVuZGluZy9p
bnNlcnRpbmcgdG8gYW4gZW1wdHkgc3RyaW5nLCBhbmQgdGhlcmUgaXMgbm90IGJ1ZmZlcgorICAg
ICAgICAvLyAoaW4gY2FzZSByZXNlcnZlQ2FwYWNpdHkgaGFzIGJlZW4gY2FsbGVkKSB0aGVuIGp1
c3QgcmV0YWluIHRoZSBzdHJpbmcuCisgICAgICAgIGlmICghbV9sZW5ndGggJiYgIW1fYnVmZmVy
KSB7CisgICAgICAgICAgICBtX3N0cmluZyA9IHN0cmluZzsKKyAgICAgICAgICAgIG1fbGVuZ3Ro
ID0gc3RyaW5nLmxlbmd0aCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdHJ5UmV0YWluKGNvbnN0
IFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCisgICAgeworICAgICAgICAvLyBJZiB3ZSdyZSBhcHBl
bmRpbmcvcHJlcGVuZGluZy9pbnNlcnRpbmcgdG8gYW4gZW1wdHkgc3RyaW5nLCBhbmQgdGhlcmUg
aXMgbm90IGJ1ZmZlcgorICAgICAgICAvLyAoaW4gY2FzZSByZXNlcnZlQ2FwYWNpdHkgaGFzIGJl
ZW4gY2FsbGVkKSB0aGVuIGp1c3QgcmV0YWluIHRoZSBzdHJpbmcuCisgICAgICAgIGlmICghbV9s
ZW5ndGggJiYgIW1fYnVmZmVyKSB7CisgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gYnVpbGRl
ci50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKTsKKyAgICAgICAgICAgIG1fc3RyaW5nID0gc3Ry
aW5nOworICAgICAgICAgICAgbV9sZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgdm9pZCBhbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMs
IHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHksIHVuc2lnbmVkIGluc2VydExlbmd0aCwgdW5zaWdu
ZWQgaW5zZXJ0UG9zaXRpb24pOworICAgIFVDaGFyKiBpbnNlcnRVbmluaXRpYWxpemVkKHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQgaW5zZXJ0UG9zaXRpb24pOworICAgIHZvaWQgcmVpZnlTdHJp
bmcoKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwotICAgIFN0cmluZyBtX3N0cmlu
ZzsKKyAgICBtdXRhYmxlIFN0cmluZyBtX3N0cmluZzsKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
bV9idWZmZXI7CiAgICAgVUNoYXIqIG1fYnVmZmVyQ2hhcmFjdGVyczsKIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oCShyZXZpc2lvbiA5MzcwMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtNDU2LDMxICs0NTYsNiBAQCBpbmxpbmUgc2l6ZV90IHJldmVyc2VGaW5kKGNvbnN0
IFVDaGFyKiBjCiAgICAgcmV0dXJuIGluZGV4OwogfQogCi1pbmxpbmUgdm9pZCBhcHBlbmQoVmVj
dG9yPFVDaGFyPiYgdmVjdG9yLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICB2ZWN0b3Iu
YXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSk7Ci19Ci0KLWlubGlu
ZSB2b2lkIGFwcGVuZE51bWJlcihWZWN0b3I8VUNoYXI+JiB2ZWN0b3IsIHVuc2lnbmVkIGNoYXIg
bnVtYmVyKQotewotICAgIGludCBudW1iZXJMZW5ndGggPSBudW1iZXIgPiA5OSA/IDMgOiAobnVt
YmVyID4gOSA/IDIgOiAxKTsKLSAgICBzaXplX3QgdmVjdG9yU2l6ZSA9IHZlY3Rvci5zaXplKCk7
Ci0gICAgdmVjdG9yLmdyb3codmVjdG9yU2l6ZSArIG51bWJlckxlbmd0aCk7Ci0KLSAgICBzd2l0
Y2ggKG51bWJlckxlbmd0aCkgewotICAgIGNhc2UgMzoKLSAgICAgICAgdmVjdG9yW3ZlY3RvclNp
emUgKyAyXSA9IG51bWJlciAlIDEwICsgJzAnOwotICAgICAgICBudW1iZXIgLz0gMTA7Ci0KLSAg
ICBjYXNlIDI6Ci0gICAgICAgIHZlY3Rvclt2ZWN0b3JTaXplICsgMV0gPSBudW1iZXIgJSAxMCAr
ICcwJzsKLSAgICAgICAgbnVtYmVyIC89IDEwOwotCi0gICAgY2FzZSAxOgotICAgICAgICB2ZWN0
b3JbdmVjdG9yU2l6ZV0gPSBudW1iZXIgJSAxMCArICcwJzsKLSAgICB9Ci19Ci0KIHRlbXBsYXRl
PGJvb2wgaXNTcGVjaWFsQ2hhcmFjdGVyKFVDaGFyKT4gaW5saW5lIGJvb2wgaXNBbGxTcGVjaWFs
Q2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkBAIC01MTEsOCArNDg2LDYg
QEAgV1RGX0VYUE9SVF9QUklWQVRFIGNvbnN0IFN0cmluZyYgZW1wdHlTdAogdXNpbmcgV1RGOjpD
U3RyaW5nOwogdXNpbmcgV1RGOjpTdHJpbmc7CiB1c2luZyBXVEY6OmVtcHR5U3RyaW5nOwotdXNp
bmcgV1RGOjphcHBlbmQ7Ci11c2luZyBXVEY6OmFwcGVuZE51bWJlcjsKIHVzaW5nIFdURjo6Y2hh
cmFjdGVyc0FyZUFsbEFTQ0lJOwogdXNpbmcgV1RGOjpjaGFyYWN0ZXJzQXJlQWxsTGF0aW4xOwog
dXNpbmcgV1RGOjpjaGFyYWN0ZXJzVG9JbnRTdHJpY3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biA5Mzc2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI0NiBAQAorMjAxMS0wOC0yNCAgWGlhbnpodSBXYW5nICA8d2FuZ3hpYW56aHVAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJlcGxhY2Ugc29tZSB1c2FnZXMgb2YgVmVjdG9yPFVDaGFy
PiB0byBTdHJpbmdCdWlsZGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9wcm9j
ZXNzX2J1Zy5jZ2kKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0byBzdXBwb3J0IDgtYml0IHN0cmluZyBidWZmZXJz
LgorICAgICAgICBObyBuZXcgdGVzdHMuIEFsbCBleGlzdGluZyB1bml0IHRlc3RzIGFuZCBsYXlv
dXQgdGVzdHMgc2hvdWxkIHJ1biBhcworICAgICAgICBiZWZvcmUuCisKKyAgICAgICAgKiBjc3Mv
Q1NTT01VdGlscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRDaGFyYWN0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2VyaWFsaXplQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
cmlhbGl6ZUNoYXJhY3RlckFzQ29kZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6
ZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplU3RyaW5nKToKKyAgICAg
ICAgKiBjc3MvQ1NTT01VdGlscy5oOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCk6CisgICAg
ICAgICogY3NzL0NTU1dyYXBTaGFwZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTV3JhcFNo
YXBlUmVjdDo6Y3NzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NXcmFwU2hhcGVDaXJjbGU6
OmNzc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTV3JhcFNoYXBlRWxsaXBzZTo6Y3NzVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NXcmFwU2hhcGVQb2x5Z29uOjpjc3NUZXh0KToKKyAg
ICAgICAgKiBlZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0KToKKyAgICAgICAgKiBlZGl0aW5nL01h
cmt1cEFjY3VtdWxhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZENoYXJhY3RlcnNS
ZXBsYWNpbmdFbnRpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6
c2VyaWFsaXplTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFN0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRFbmRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmNvbmNhdGVu
YXRlTWFya3VwKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRB
dHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kQ3VzdG9tQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6TWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRDb21tZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmREb2N1bWVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kT3BlblRhZyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kQ2xvc2VUYWcpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cCk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kRW5kTWFya3VwKToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFj
Y3VtdWxhdG9yLmg6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hhcmFjdGVySXRlcmF0b3I6OnN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JkQXdhcmVJdGVyYXRvcjo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmRBd2Fy
ZUl0ZXJhdG9yOjpjaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcm1hbGl6ZUNoYXJh
Y3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjpTZWFyY2hCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VhcmNoQnVmZmVyOjpwcmVwZW5kQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTZWFy
Y2hCdWZmZXI6OmlzQmFkTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjpp
c1dvcmRTdGFydE1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZlcjo6c2VhcmNo
KToKKyAgICAgICAgKFdlYkNvcmU6OnBsYWluVGV4dFRvTWFsbG9jQWxsb2NhdGVkQnVmZmVyKToK
KyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0
ZXNwYWNlKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aFN0eWxlTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3R5bGVOb2RlT3Bl
blRhZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dGFrZVJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6dXJsVG9NYXJrdXApOgorICAgICAgICAqIGVkaXRp
bmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRCb3VuZGFyeSk6CisgICAgICAgICogaHRtbC9ET01U
b2tlbkxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NVG9rZW5MaXN0OjpyZW1vdmVUb2tl
bik6CisgICAgICAgICogaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VGb250U2l6ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
c3RyaXBwZWRQbGFjZWhvbGRlcik6CisgICAgICAgICogaHRtbC9IVE1MVmlld1NvdXJjZURvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OnByb2Nl
c3NUYWdUb2tlbik6CisgICAgICAgICogaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJlbG9hZFNjYW5uZXI6OnNjYW4pOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJlbG9hZFNjYW5uZXI6OmVtaXRSdWxlKToKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxDb25z
dHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjppbnNlcnREb2N0eXBlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVIVE1MRW50aXR5KToKKyAgICAgICAgKiBo
dG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRN
TE1ldGFDaGFyc2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhQ2hhcnNl
dFBhcnNlcjo6cHJvY2Vzc01ldGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGFDaGFyc2V0
UGFyc2VyOjpjaGVja0Zvck1ldGFDaGFyc2V0KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
UGFyc2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSFRNTEludGVnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE5hbWVzOjpQcmVsb2FkVGFzazo6UHJlbG9hZFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE5hbWVzOjpQcmVsb2FkVGFzazo6cHJvY2Vzc0F0dHJpYnV0ZXMpOgorICAgICAgICAqIGh0
bWwvcGFyc2VyL0hUTUxUb2tlbi5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuOjpuYW1l
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ojo6bmFtZUZvckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5p
emVyOjpwcm9jZXNzRW50aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6Om5l
eHRUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjp0ZW1wb3JhcnlCdWZm
ZXJJcyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5oOgorICAgICAgICAq
IGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VHJlZUJ1aWxkZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXI6OkV4dGVybmFsQ2hhcmFj
dGVyVG9rZW5CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpFeHRl
cm5hbENoYXJhY3RlclRva2VuQnVmZmVyOjpnaXZlUmVtYWluaW5nVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyOjp0YWtl
UmVtYWluaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6
OmRlZmF1bHRGb3JJblRhYmxlVGV4dCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVC
dWlsZGVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFZpZXdTb3VyY2VQYXJzZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZXdTb3VyY2VQYXJzZXI6OnVwZGF0ZVRva2VuaXpl
clN0YXRlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Omhhc05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEF0dHJpYnV0ZVdpdGhO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTmFtZU9mSW5saW5lRXZlbnRIYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zSmF2YVNjcmlwdFVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpYU1NBdWRpdG9yOjpmaWx0ZXJQYXJhbVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1
ZGl0b3I6OmVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6dG9K
U09OU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZhbHVlOjp3cml0ZUpTT04p
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvck9iamVjdDo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckFycmF5Ojp3cml0ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaDoKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjY2Vzc0NvbnRyb2xQcmVmbGlnaHRSZXF1ZXN0KToK
KyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAg
ICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OnNldFRvb2xU
aXApOgorICAgICAgICAqIHBhZ2UvRXZlbnRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRTb3VyY2U6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291
cmNlOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpw
YXJzZUV2ZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpwYXJzZUV2
ZW50U3RyZWFtTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6Y3JlYXRlTWVz
c2FnZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50U291cmNlLmg6CisgICAgICAgICogcGFn
ZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplck1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlh
bGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyk6CisgICAgICAg
ICogcGFnZS9TZWN1cml0eU9yaWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbjo6dG9TdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZW5jb2RlRm9yRmlsZU5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL0tV
UkwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6ZGVwcmVjYXRlZFN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL0xpbmtIYXNoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNxdWVlemVPdXROdWxsQ2hhcmFj
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpjbGVhblNsYXNoRG90RG90U2xhc2hlcyk6CisgICAg
ICAgIChXZWJDb3JlOjptZXJnZURvdWJsZVNsYXNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y2xl
YW5TbGFzaERvdFNsYXNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYW5QYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OnZpc2l0ZWRVUkxJbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRl
ZFVSTCk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2gpOgorICAgICAgICAqIHBs
YXRmb3JtL0xpbmtIYXNoLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNlcmlhbGl6ZWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RH
dGs6OnNldFVSTCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q29kZWNJQ1U6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRTdHJlYW06Om9wZXJhdG9yPDwpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFN0cmVhbTo6cmVsZWFzZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9UZXh0U3RyZWFtLmg6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSk6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0Q2hhcmFj
dGVyc0FuZExlbmd0aEZvckh5cGhlbik6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaDoKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbjo6QnVmZmVy
Rm9yQXBwZW5kaW5nSHlwaGVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06Om1hcmtlclRleHRXaXRoU3Vm
Zml4KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp0b1N5bWJvbGljKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJr
ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnN1ZmZpeCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxGZW5jZWQ6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxl
dmVsREJDb2RpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkNvZGluZzo6ZGVj
b2RlU3RyaW5nKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycyk6CisgICAgICAg
ICogeG1sL1hQYXRoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5J
ZDo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNvbmNhdDo6ZXZhbHVh
dGUpOgorICAgICAgICAqIHhtbC9YUGF0aFV0aWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVUb1N0cmluZ0J1aWxkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2F2ZVJlc3VsdFRvU3RyaW5nKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL0NoYXJhY3Rl
clJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OnVuY29u
c3VtZUNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUNoYXJhY3RlclJlZmVy
ZW5jZSk6CisgICAgICAgICogeG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1hcmt1cFRva2VuQmFzZTo6TWFya3VwVG9rZW5CYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1hcmt1cFRva2VuQmFzZTo6YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpNYXJrdXBUb2tlbkJhc2U6OmNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6TWFya3VwVG9rZW5CYXNlOjpjb21tZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cFRv
a2VuQmFzZTo6cHVibGljSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tl
bkJhc2U6OnN5c3RlbUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5C
YXNlOjpwcmludFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tlbkJhc2U6Om5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlOjpBdG9taWNNYXJr
dXBUb2tlbkJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlOjpj
aGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6cHVi
bGljSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNNYXJrdXBUb2tlbkJhc2U6
OnN5c3RlbUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6Ojppbml0aWFsaXplQXR0cmli
dXRlcyk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZVhNTENoYXJhY3RlclJlZmVyZW5jZSk6Cisg
ICAgICAgICogeG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaDoKKyAgICAg
ICAgKiB4bWwvcGFyc2VyL1hNTFRva2VuLmg6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbjo6
bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbjo6dGFyZ2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTFRva2VuOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuOjpwcmVm
aXgpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW46Omhhc1ByZWZpeCk6CisgICAgICAgIChX
ZWJDb3JlOjpBdG9taWNYTUxUb2tlbjo6QXRvbWljWE1MVG9rZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6QXRvbWljWE1MVG9rZW46OnhtbFZlcnNpb24pOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1M
VG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6bmFtZUZvckF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6Om5leHRUb2tlbik6CisgICAgICAgICogeG1s
L3BhcnNlci9YTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1hNTERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzRE9DVFlQRSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0NoYXJhY3Rlcik6CisKIDIwMTEtMDgtMjQgIEphbWVzIFJvYmluc29uICA8amFt
ZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBTb21lIGxheWVyVHJlZUFzVGV4dCBjb21wb3Np
dGluZyB0ZXN0cyBhcmUgZmxha3kKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NPTVV0aWxz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTT01VdGlscy5jcHAJKHJl
dmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU09NVXRpbHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTEgQEAKICNpbmNsdWRlICJDU1NPTVV0aWxzLmgiCiAK
ICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lkIGFwcGVuZENoYXJh
Y3RlcihVQ2hhcjMyIGMsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKQorc3RhdGljIHZvaWQgYXBw
ZW5kQ2hhcmFjdGVyKFVDaGFyMzIgYywgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pCiB7CiAgICAg
aWYgKFUxNl9MRU5HVEgoYykgPT0gMSkKICAgICAgICAgYXBwZW5kVG8uYXBwZW5kKHN0YXRpY19j
YXN0PFVDaGFyPihjKSk7CkBAIC00NSwxMyArNDYsMTMgQEAgc3RhdGljIHZvaWQgYXBwZW5kQ2hh
cmFjdGVyKFVDaGFyMzIgYywgVgogICAgIH0KIH0KIAotdm9pZCBzZXJpYWxpemVDaGFyYWN0ZXIo
VUNoYXIzMiBjLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbykKK3ZvaWQgc2VyaWFsaXplQ2hhcmFj
dGVyKFVDaGFyMzIgYywgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pCiB7CiAgICAgYXBwZW5kVG8u
YXBwZW5kKCdcXCcpOwogICAgIGFwcGVuZENoYXJhY3RlcihjLCBhcHBlbmRUbyk7CiB9CiAKLXZv
aWQgc2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIzMiBjLCBWZWN0b3I8VUNoYXI+
JiBhcHBlbmRUbykKK3ZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIzMiBj
LCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbykKIHsKICAgICBhcHBlbmRUby5hcHBlbmQoJ1xcJyk7
CiAgICAgYXBwZW5kVW5zaWduZWRBc0hleChjLCBhcHBlbmRUbywgTG93ZXJjYXNlKTsKQEAgLTYw
LDEyICs2MSwxMiBAQCB2b2lkIHNlcmlhbGl6ZUNoYXJhY3RlckFzQ29kZVBvaW50KFVDaGFyCiAK
IHZvaWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFN0cmlu
ZyYgYXBwZW5kVG8pCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBhZGRlbmQ7CisgICAgU3RyaW5nQnVp
bGRlciBhZGRlbmQ7CiAgICAgc2VyaWFsaXplSWRlbnRpZmllcihpZGVudGlmaWVyLCBhZGRlbmQp
OwotICAgIGFwcGVuZFRvLmFwcGVuZChTdHJpbmc6OmFkb3B0KGFkZGVuZCkpOworICAgIGFwcGVu
ZFRvLmFwcGVuZChhZGRlbmQudG9TdHJpbmcoKSk7CiB9CiAKLXZvaWQgc2VyaWFsaXplSWRlbnRp
Zmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKQor
dm9pZCBzZXJpYWxpemVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgU3RyaW5n
QnVpbGRlciYgYXBwZW5kVG8pCiB7CiAgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKICAgICBib29s
IGlzU2Vjb25kID0gZmFsc2U7CkBAIC05NiwxMiArOTcsMTIgQEAgdm9pZCBzZXJpYWxpemVJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYgaQogCiB2b2lkIHNlcmlhbGl6ZVN0cmluZyhjb25zdCBTdHJp
bmcmIHN0cmluZywgU3RyaW5nJiBhcHBlbmRUbykKIHsKLSAgICBWZWN0b3I8VUNoYXI+IGFkZGVu
ZDsKKyAgICBTdHJpbmdCdWlsZGVyIGFkZGVuZDsKICAgICBzZXJpYWxpemVTdHJpbmcoc3RyaW5n
LCBhZGRlbmQpOwotICAgIGFwcGVuZFRvLmFwcGVuZChTdHJpbmc6OmFkb3B0KGFkZGVuZCkpOwor
ICAgIGFwcGVuZFRvLmFwcGVuZChhZGRlbmQudG9TdHJpbmcoKSk7CiB9CiAKLXZvaWQgc2VyaWFs
aXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbykK
K3ZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBTdHJpbmdCdWlsZGVy
JiBhcHBlbmRUbykKIHsKICAgICBhcHBlbmRUby5hcHBlbmQoJ1wiJyk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NPTVV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU09NVXRpbHMuaAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTT01VdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogLy8gQ29tbW9uIHNlcmlhbGl6aW5nIG1ldGhvZHMuIFNlZTogaHR0cDov
L2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXMKLXZvaWQg
c2VyaWFsaXplQ2hhcmFjdGVyKFVDaGFyMzIsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKTsKLXZv
aWQgc2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIzMiwgVmVjdG9yPFVDaGFyPiYg
YXBwZW5kVG8pOwordm9pZCBzZXJpYWxpemVDaGFyYWN0ZXIoVUNoYXIzMiwgU3RyaW5nQnVpbGRl
ciYgYXBwZW5kVG8pOwordm9pZCBzZXJpYWxpemVDaGFyYWN0ZXJBc0NvZGVQb2ludChVQ2hhcjMy
LCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbyk7CiB2b2lkIHNlcmlhbGl6ZUlkZW50aWZpZXIoY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyLCBTdHJpbmcmIGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFsaXpl
SWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFZlY3RvcjxVQ2hhcj4mIGFwcGVu
ZFRvKTsKK3ZvaWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIs
IFN0cmluZ0J1aWxkZXImIGFwcGVuZFRvKTsKIHZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBTdHJpbmcmIGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFsaXplU3RyaW5nKGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbyk7Cit2b2lkIHNlcmlh
bGl6ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8p
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ByaW1pdGl2ZVZhbHVlLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBA
CiAjaW5jbHVkZSA8d3RmL0RlY2ltYWxOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVmZmVyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQog
I2luY2x1ZGUgIkRhc2hib2FyZFJlZ2lvbi5oIgpAQCAtNzA4LDE0ICs3MDksMTQgQEAgU3RyaW5n
IENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29ucwogICAgICAgICBjYXNlIENTU19BVFRS
OiB7CiAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgYXR0clBh
cmVuLCAoImF0dHIoIikpOwogCi0gICAgICAgICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAg
ICAgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDYgKyBtX3ZhbHVlLnN0cmlu
Zy0+bGVuZ3RoKCkpOworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgICAg
ICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDYgKyBtX3ZhbHVlLnN0cmluZy0+bGVuZ3RoKCkp
OwogCi0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBhdHRyUGFyZW4pOwotICAgICAgICAgICAg
YXBwZW5kKHJlc3VsdCwgbV92YWx1ZS5zdHJpbmcpOwotICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZCgnKScpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChhdHRyUGFyZW4pOwor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX3ZhbHVlLnN0cmluZyk7CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcpJyk7CiAKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6OmFkb3B0KHJl
c3VsdCk7CisgICAgICAgICAgICB0ZXh0ID0gcmVzdWx0LnRvU3RyaW5nKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU19DT1VOVEVSX05BTUU6CkBAIC03
MzMsMjMgKzczNCwyMyBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmNzc1RleHQoKSBjb25z
CiAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcmVjdFBhcmVu
LCAoInJlY3QoIikpOwogCiAgICAgICAgICAgICBSZWN0KiByZWN0VmFsID0gZ2V0UmVjdFZhbHVl
KCk7Ci0gICAgICAgICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICAgICAgICAgIHJlc3Vs
dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMyKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQs
IHJlY3RQYXJlbik7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICAgICAg
ICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChyZWN0UGFyZW4pOwogCi0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCByZWN0VmFsLT50b3Ao
KS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjdFZhbC0+dG9wKCkt
PmNzc1RleHQoKSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CiAKLSAgICAgICAg
ICAgIGFwcGVuZChyZXN1bHQsIHJlY3RWYWwtPnJpZ2h0KCktPmNzc1RleHQoKSk7CisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHJlY3RWYWwtPnJpZ2h0KCktPmNzc1RleHQoKSk7CiAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CiAKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJl
Y3RWYWwtPmJvdHRvbSgpLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChy
ZWN0VmFsLT5ib3R0b20oKS0+Y3NzVGV4dCgpKTsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAnKTsKIAotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgcmVjdFZhbC0+bGVmdCgpLT5jc3NU
ZXh0KCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZWN0VmFsLT5sZWZ0KCktPmNzc1Rl
eHQoKSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcpJyk7CiAKLSAgICAgICAgICAgIHRl
eHQgPSBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgICAgICAgICB0ZXh0ID0gcmVzdWx0LnRv
U3RyaW5nKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENT
U19SR0JDT0xPUjoKQEAgLTc2MywyNyArNzY0LDI3IEBAIFN0cmluZyBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3NzVGV4dCgpIGNvbnMKICAgICAgICAgICAgICAgICBDb2xvcjo6cGFyc2VIZXhDb2xvciht
X3ZhbHVlLnN0cmluZywgcmdiQ29sb3IpOwogICAgICAgICAgICAgQ29sb3IgY29sb3IocmdiQ29s
b3IpOwogCi0gICAgICAgICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICAgICAgICAgIHJl
c3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMyKTsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxk
ZXIgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgzMik7CiAgICAg
ICAgICAgICBpZiAoY29sb3IuaGFzQWxwaGEoKSkKLSAgICAgICAgICAgICAgICBhcHBlbmQocmVz
dWx0LCByZ2JhUGFyZW4pOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmdiYVBhcmVu
KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhcHBlbmQocmVzdWx0LCByZ2JQ
YXJlbik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZ2JQYXJlbik7CiAKLSAgICAg
ICAgICAgIGFwcGVuZE51bWJlcihyZXN1bHQsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGNv
bG9yLnJlZCgpKSk7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBjb21tYVNwYWNlKTsKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmROdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
Y29sb3IucmVkKCkpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29tbWFTcGFjZSk7CiAK
LSAgICAgICAgICAgIGFwcGVuZE51bWJlcihyZXN1bHQsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KGNvbG9yLmdyZWVuKCkpKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hU3Bh
Y2UpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZE51bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihjb2xvci5ncmVlbigpKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbW1h
U3BhY2UpOwogCi0gICAgICAgICAgICBhcHBlbmROdW1iZXIocmVzdWx0LCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihjb2xvci5ibHVlKCkpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRO
dW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oY29sb3IuYmx1ZSgpKSk7CiAgICAgICAg
ICAgICBpZiAoY29sb3IuaGFzQWxwaGEoKSkgewotICAgICAgICAgICAgICAgIGFwcGVuZChyZXN1
bHQsIGNvbW1hU3BhY2UpOwotICAgICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIFN0cmluZzo6
bnVtYmVyKGNvbG9yLmFscGhhKCkgLyAyNTYuMGYpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKGNvbW1hU3BhY2UpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5n
OjpudW1iZXIoY29sb3IuYWxwaGEoKSAvIDI1Ni4wZikpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjph
ZG9wdChyZXN1bHQpOworICAgICAgICAgICAgdGV4dCA9IHJlc3VsdC50b1N0cmluZygpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NfUEFJUjoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NXcmFwU2hhcGVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTV3JhcFNoYXBlcy5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1dyYXBTaGFwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw4IEBACiAKICNpbmNsdWRlICJDU1NXcmFwU2hhcGVzLmgiCiAKKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQwLDM0ICs0MiwzNCBAQCBTdHJpbmcgQ1NTV3JhcFNoYXBlUmVjdDo6
Y3NzVGV4dCgpIGNvbnN0CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHJl
Y3RQYXJlbiwgKCJyZWN0KCIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmlu
ZywgY29tbWEsICgiLCAiKSk7CiAgICAgCi0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAg
cmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMzIpOwotICAgIGFwcGVuZChyZXN1bHQsIHJl
Y3RQYXJlbik7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVD
YXBhY2l0eSgzMik7CisgICAgcmVzdWx0LmFwcGVuZChyZWN0UGFyZW4pOwogCi0gICAgYXBwZW5k
KHJlc3VsdCwgbV9sZWZ0LT5jc3NUZXh0KCkpOwotICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hKTsK
KyAgICByZXN1bHQuYXBwZW5kKG1fbGVmdC0+Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5k
KGNvbW1hKTsKIAotICAgIGFwcGVuZChyZXN1bHQsIG1fdG9wLT5jc3NUZXh0KCkpOwotICAgIGFw
cGVuZChyZXN1bHQsIGNvbW1hKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fdG9wLT5jc3NUZXh0KCkp
OworICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgbV93aWR0
aC0+Y3NzVGV4dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7CisgICAgcmVzdWx0LmFw
cGVuZChtX3dpZHRoLT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwogCi0g
ICAgYXBwZW5kKHJlc3VsdCwgbV9oZWlnaHQtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVu
ZChtX2hlaWdodC0+Y3NzVGV4dCgpKTsKICAgICAKICAgICBpZiAobV9yYWRpdXNYLmdldCgpKSB7
Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwg
bV9yYWRpdXNYLT5jc3NUZXh0KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChtX3JhZGl1c1gtPmNzc1RleHQoKSk7CiAKICAgICAgICAgaWYg
KG1fcmFkaXVzWS5nZXQoKSkgewotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOwot
ICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgbV9yYWRpdXNZLT5jc3NUZXh0KCkpOworICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1f
cmFkaXVzWS0+Y3NzVGV4dCgpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICByZXN1bHQu
YXBwZW5kKCcpJyk7CiAgICAgICAgICAgICAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogU3RyaW5nIENTU1dyYXBT
aGFwZUNpcmNsZTo6Y3NzVGV4dCgpIGNvbnN0CkBAIC03NSwyMCArNzcsMjAgQEAgU3RyaW5nIENT
U1dyYXBTaGFwZUNpcmNsZTo6Y3NzVGV4dCgpIGNvbgogICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgU3RyaW5nLCBjaXJjbGVQYXJlbiwgKCJjaXJjbGUoIikpOwogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgU3RyaW5nLCBjb21tYSwgKCIsICIpKTsKICAgICAKLSAgICBWZWN0b3I8
VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7Ci0g
ICAgYXBwZW5kKHJlc3VsdCwgY2lyY2xlUGFyZW4pOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0
OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOworICAgIHJlc3VsdC5hcHBlbmQoY2ly
Y2xlUGFyZW4pOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgbV9sZWZ0LT5jc3NUZXh0KCkpOwotICAg
IGFwcGVuZChyZXN1bHQsIGNvbW1hKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fbGVmdC0+Y3NzVGV4
dCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKIAotICAgIGFwcGVuZChyZXN1bHQsIG1f
dG9wLT5jc3NUZXh0KCkpOwotICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hKTsKKyAgICByZXN1bHQu
YXBwZW5kKG1fdG9wLT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwogCi0g
ICAgYXBwZW5kKHJlc3VsdCwgbV9yYWRpdXMtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVu
ZChtX3JhZGl1cy0+Y3NzVGV4dCgpKTsKICAgICByZXN1bHQuYXBwZW5kKCcpJyk7CiAgICAgICAg
ICAgICAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQudG9TdHJpbmcoKTsKIH0KIAogU3RyaW5nIENTU1dyYXBTaGFwZUVsbGlwc2U6OmNzc1RleHQo
KSBjb25zdApAQCAtOTYsMjMgKzk4LDIzIEBAIFN0cmluZyBDU1NXcmFwU2hhcGVFbGxpcHNlOjpj
c3NUZXh0KCkgY28KICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZWxsaXBz
ZVBhcmVuLCAoImVsbGlwc2UoIikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3Ry
aW5nLCBjb21tYSwgKCIsICIpKTsKICAgICAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7Ci0gICAgYXBwZW5kKHJlc3VsdCwg
ZWxsaXBzZVBhcmVuKTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVz
ZXJ2ZUNhcGFjaXR5KDMyKTsKKyAgICByZXN1bHQuYXBwZW5kKGVsbGlwc2VQYXJlbik7CiAKLSAg
ICBhcHBlbmQocmVzdWx0LCBtX2xlZnQtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwg
Y29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV9sZWZ0LT5jc3NUZXh0KCkpOworICAgIHJlc3Vs
dC5hcHBlbmQoY29tbWEpOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgbV90b3AtPmNzc1RleHQoKSk7
Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV90b3AtPmNz
c1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0
LCBtX3JhZGl1c1gtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAg
IHJlc3VsdC5hcHBlbmQobV9yYWRpdXNYLT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQo
Y29tbWEpOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgbV9yYWRpdXNZLT5jc3NUZXh0KCkpOworICAg
IHJlc3VsdC5hcHBlbmQobV9yYWRpdXNZLT5jc3NUZXh0KCkpOwogICAgIHJlc3VsdC5hcHBlbmQo
JyknKTsKICAgICAgICAgICAgIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBTdHJpbmcgQ1NTV3JhcFNoYXBlUG9s
eWdvbjo6Y3NzVGV4dCgpIGNvbnN0CkBAIC0xMjEsMjYgKzEyMywyNiBAQCBTdHJpbmcgQ1NTV3Jh
cFNoYXBlUG9seWdvbjo6Y3NzVGV4dCgpIGNvCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBTdHJpbmcsIHBvbHlnb25QYXJlbk5vblplcm8sICgicG9seWdvbihub256ZXJvLCAiKSk7CiAg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGNvbW1hLCAoIiwgIikpOwogICAg
IAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KDMyKTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2
ZUNhcGFjaXR5KDMyKTsKICAgICBpZiAobV93aW5kUnVsZSA9PSBSVUxFX0VWRU5PREQpCi0gICAg
ICAgIGFwcGVuZChyZXN1bHQsIHBvbHlnb25QYXJlbkV2ZW5PZGQpOworICAgICAgICByZXN1bHQu
YXBwZW5kKHBvbHlnb25QYXJlbkV2ZW5PZGQpOwogICAgIGVsc2UKLSAgICAgICAgYXBwZW5kKHJl
c3VsdCwgcG9seWdvblBhcmVuTm9uWmVybyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocG9seWdv
blBhcmVuTm9uWmVybyk7CiAKICAgICBBU1NFUlQoIShtX3ZhbHVlcy5zaXplKCkgJSAyKSk7CiAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyBpICs9IDIpIHsK
ICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7Ci0gICAgICAg
IGFwcGVuZChyZXN1bHQsIG1fdmFsdWVzLmF0KGkpLT5jc3NUZXh0KCkpOwotICAgICAgICBhcHBl
bmQocmVzdWx0LCBjb21tYSk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIG1fdmFsdWVzLmF0KGkg
KyAxKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtX3ZhbHVlcy5hdChpKS0+
Y3NzVGV4dCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CisgICAgICAgIHJlc3Vs
dC5hcHBlbmQobV92YWx1ZXMuYXQoaSArIDEpLT5jc3NUZXh0KCkpOwogICAgIH0KICAgICAKICAg
ICByZXN1bHQuYXBwZW5kKCcpJyk7CiAgICAgICAgICAgICAKLSAgICByZXR1cm4gU3RyaW5nOjph
ZG9wdChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9IVE1MSW50ZXJj
aGFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSFRNTEludGVy
Y2hhbmdlLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0hU
TUxJbnRlcmNoYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDggQEAgU3RyaW5n
IGNvbnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYQogICAgIGlmIChub2RlLT5yZW5kZXJl
cigpICYmIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKQogICAg
ICAgICByZXR1cm4gaW47CiAKLSAgICBWZWN0b3I8VUNoYXI+IHM7CisgICAgU3RyaW5nQnVpbGRl
ciBzOworICAgIHMucmVzZXJ2ZUNhcGFjaXR5KGluLmxlbmd0aCgpKTsKIAogICAgIHVuc2lnbmVk
IGkgPSAwOwogICAgIHVuc2lnbmVkIGNvbnN1bWVkID0gMDsKQEAgLTc0LDI4ICs3NSwyOCBAQCBT
dHJpbmcgY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hCiAgICAgICAgICAgICAgICAg
dW5zaWduZWQgYWRkID0gY291bnQgJSAzOwogICAgICAgICAgICAgICAgIHN3aXRjaCAoYWRkKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHMuYXBwZW5kKGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgcy5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChzLCBjb252
ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKGNv
bnZlcnRlZFNwYWNlU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYWRkID0gMzsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNl
IDE6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwIHx8IGkgKyAxID09IGluLmxl
bmd0aCgpKSAvLyBhdCBzdGFydCBvciBlbmQgb2Ygc3RyaW5nCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHMuYXBwZW5kKGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBw
ZW5kKCcgJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCBzdGFydCBvZiBzdHJpbmcKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmQocywgY29udmVydGVkU3BhY2VTdHJpbmcoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmco
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoJyAnKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSArIDIgPT0gaW4ubGVuZ3RoKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgZW5kIG9mIHN0cmluZwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQocywgY29udmVydGVkU3BhY2VTdHJpbmcoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJp
bmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3Bh
Y2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmluZygp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZCgnICcpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDcs
NyArMTA4LDcgQEAgU3RyaW5nIGNvbnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYQogICAg
ICAgICBpICs9IGNvbnN1bWVkOwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHMp
OworICAgIHJldHVybiBzLnRvU3RyaW5nKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCShy
ZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsMTQgQEAKICNpbmNsdWRlICJLVVJM
LmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiWE1MTlNO
YW1lcy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3
dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2lu
Z0VudGl0aWVzKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgVUNoYXIqIGNvbnRlbnQsIHNpemVf
dCBsZW5ndGgsIEVudGl0eU1hc2sgZW50aXR5TWFzaykKK3ZvaWQgYXBwZW5kQ2hhcmFjdGVyc1Jl
cGxhY2luZ0VudGl0aWVzKFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgVUNoYXIqIGNvbnRlbnQs
IHNpemVfdCBsZW5ndGgsIEVudGl0eU1hc2sgZW50aXR5TWFzaykKIHsKICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IFN0cmluZywgYW1wUmVmZXJlbmNlLCAoIiZhbXA7IikpOwogICAgIERF
RklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBsdFJlZmVyZW5jZSwgKCImbHQ7IikpOwpA
QCAtNjQsNyArNjUsNyBAQCB2b2lkIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhW
CiAgICAgICAgIGZvciAoc2l6ZV90IG0gPSAwOyBtIDwgV1RGX0FSUkFZX0xFTkdUSChlbnRpdHlN
YXBzKTsgKyttKSB7CiAgICAgICAgICAgICBpZiAoY29udGVudFtpXSA9PSBlbnRpdHlNYXBzW21d
LmVudGl0eSAmJiBlbnRpdHlNYXBzW21dLm1hc2sgJiBlbnRpdHlNYXNrKSB7CiAgICAgICAgICAg
ICAgICAgb3V0LmFwcGVuZChjb250ZW50ICsgcG9zaXRpb25BZnRlckxhc3RFbnRpdHksIGkgLSBw
b3NpdGlvbkFmdGVyTGFzdEVudGl0eSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kKG91dCwgZW50
aXR5TWFwc1ttXS5yZWZlcmVuY2UpOworICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoZW50aXR5
TWFwc1ttXS5yZWZlcmVuY2UpOwogICAgICAgICAgICAgICAgIHBvc2l0aW9uQWZ0ZXJMYXN0RW50
aXR5ID0gaSArIDE7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC04
NiwxMSArODcsMTEgQEAgTWFya3VwQWNjdW11bGF0b3I6On5NYXJrdXBBY2N1bXVsYXRvcigpCiAK
IFN0cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMoTm9kZSogbm9kZSwgTm9k
ZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHkpCiB7Ci0gICAgVmVjdG9y
PFVDaGFyPiBvdXQ7CisgICAgU3RyaW5nQnVpbGRlciBvdXQ7CiAgICAgc2VyaWFsaXplTm9kZXNX
aXRoTmFtZXNwYWNlcyhub2RlLCBub2RlVG9Ta2lwLCBjaGlsZHJlbk9ubHksIDApOwotICAgIG91
dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCgpKTsKKyAgICBvdXQucmVzZXJ2ZUNhcGFj
aXR5KGxlbmd0aCgpKTsKICAgICBjb25jYXRlbmF0ZU1hcmt1cChvdXQpOwotICAgIHJldHVybiBT
dHJpbmc6OmFkb3B0KG91dCk7CisgICAgcmV0dXJuIG91dC50b1N0cmluZygpOwogfQogCiB2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKE5vZGUqIG5v
ZGUsIE5vZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBjb25zdCBO
YW1lc3BhY2VzKiBuYW1lc3BhY2VzKQpAQCAtMTM4LDE4ICsxMzksMTggQEAgdm9pZCBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kU3RyaW5nKGNvbgogCiB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRTdGFydFRhZyhOb2RlKiBub2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewotICAg
IFZlY3RvcjxVQ2hhcj4gbWFya3VwOworICAgIFN0cmluZ0J1aWxkZXIgbWFya3VwOwogICAgIGFw
cGVuZFN0YXJ0TWFya3VwKG1hcmt1cCwgbm9kZSwgbmFtZXNwYWNlcyk7Ci0gICAgYXBwZW5kU3Ry
aW5nKFN0cmluZzo6YWRvcHQobWFya3VwKSk7CisgICAgYXBwZW5kU3RyaW5nKG1hcmt1cC50b1N0
cmluZygpKTsKICAgICBpZiAobV9ub2RlcykKICAgICAgICAgbV9ub2Rlcy0+YXBwZW5kKG5vZGUp
OwogfQogCiB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcoTm9kZSogbm9kZSkK
IHsKLSAgICBWZWN0b3I8VUNoYXI+IG1hcmt1cDsKKyAgICBTdHJpbmdCdWlsZGVyIG1hcmt1cDsK
ICAgICBhcHBlbmRFbmRNYXJrdXAobWFya3VwLCBub2RlKTsKLSAgICBhcHBlbmRTdHJpbmcoU3Ry
aW5nOjphZG9wdChtYXJrdXApKTsKKyAgICBhcHBlbmRTdHJpbmcobWFya3VwLnRvU3RyaW5nKCkp
OwogfQogCiBzaXplX3QgTWFya3VwQWNjdW11bGF0b3I6OnRvdGFsTGVuZ3RoKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBzdHJpbmdzKQpAQCAtMTYxLDI1ICsxNjIsMjUgQEAgc2l6ZV90IE1hcmt1cEFj
Y3VtdWxhdG9yOjp0b3RhbExlbmd0aChjbwogfQogCiAvLyBGSVhNRTogVGhpcyBpcyBhIHZlcnkg
aW5lZmZpY2llbnQgd2F5IG9mIGFjY3VtdWxhdGluZyB0aGUgbWFya3VwLgotLy8gV2UncmUgY29u
dmVydGluZyByZXN1bHRzIG9mIGFwcGVuZFN0YXJ0TWFya3VwIGFuZCBhcHBlbmRFbmRNYXJrdXAg
ZnJvbSBWZWN0b3I8VUNoYXI+IHRvIFN0cmluZwotLy8gYW5kIHRoZW4gYmFjayB0byBWZWN0b3I8
VUNoYXI+IGFuZCBhZ2FpbiB0byBTdHJpbmcgaGVyZS4KLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6
OmNvbmNhdGVuYXRlTWFya3VwKFZlY3RvcjxVQ2hhcj4mIG91dCkKKy8vIFdlJ3JlIGNvbnZlcnRp
bmcgcmVzdWx0cyBvZiBhcHBlbmRTdGFydE1hcmt1cCBhbmQgYXBwZW5kRW5kTWFya3VwIGZyb20g
U3RyaW5nQnVpbGRlciB0byBTdHJpbmcKKy8vIGFuZCB0aGVuIGJhY2sgdG8gU3RyaW5nQnVpbGRl
ciBhbmQgYWdhaW4gdG8gU3RyaW5nIGhlcmUuCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjpjb25j
YXRlbmF0ZU1hcmt1cChTdHJpbmdCdWlsZGVyJiBvdXQpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3N1Y2NlZWRpbmdNYXJrdXAuc2l6ZSgpOyArK2kpCi0gICAgICAgIGFwcGVuZChv
dXQsIG1fc3VjY2VlZGluZ01hcmt1cFtpXSk7CisgICAgICAgIG91dC5hcHBlbmQobV9zdWNjZWVk
aW5nTWFya3VwW2ldKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmli
dXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwg
Ym9vbCBkb2N1bWVudElzSFRNTCkKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJp
YnV0ZVZhbHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUs
IGJvb2wgZG9jdW1lbnRJc0hUTUwpCiB7CiAgICAgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0Vu
dGl0aWVzKHJlc3VsdCwgYXR0cmlidXRlLmNoYXJhY3RlcnMoKSwgYXR0cmlidXRlLmxlbmd0aCgp
LAogICAgICAgICBkb2N1bWVudElzSFRNTCA/IEVudGl0eU1hc2tJbkhUTUxBdHRyaWJ1dGVWYWx1
ZSA6IEVudGl0eU1hc2tJbkF0dHJpYnV0ZVZhbHVlKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiwgRWxlbWVudCosIE5h
bWVzcGFjZXMqKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRl
cyhTdHJpbmdCdWlsZGVyJiwgRWxlbWVudCosIE5hbWVzcGFjZXMqKQogewogfQogCi12b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNo
YXI+JiByZXN1bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYgYXR0
cmlidXRlKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRl
VmFsdWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkKIHsKICAgICBBU1NFUlQoZWxlbWVudC0+aXNVUkxBdHRy
aWJ1dGUoY29uc3RfY2FzdDxBdHRyaWJ1dGUqPigmYXR0cmlidXRlKSkpOwogICAgIGNvbnN0IFN0
cmluZyByZXNvbHZlZFVSTFN0cmluZyA9IHJlc29sdmVVUkxJZk5lZWRlZChlbGVtZW50LCBhdHRy
aWJ1dGUudmFsdWUoKSk7CkBAIC0xOTQsNyArMTk1LDcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kUXVvdGVkVVJMQQogICAgICAgICAgICAgICAgIHF1b3RlQ2hhciA9ICdcJyc7CiAg
ICAgICAgIH0KICAgICAgICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIpOwotICAgICAgICBhcHBl
bmQocmVzdWx0LCBzdHJpcHBlZFVSTFN0cmluZyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoc3Ry
aXBwZWRVUkxTdHJpbmcpOwogICAgICAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hhcik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0yMDUsNyArMjA2LDcgQEAgdm9pZCBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kUXVvdGVkVVJMQQogICAgIHJlc3VsdC5hcHBlbmQocXVvdGVDaGFyKTsKIH0K
IAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTm9kZVZhbHVlKFZlY3RvcjxVQ2hhcj4m
IG91dCwgY29uc3QgTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdlLCBFbnRpdHlNYXNrIGVu
dGl0eU1hc2spCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVmFsdWUoU3RyaW5n
QnVpbGRlciYgb3V0LCBjb25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UsIEVudGl0
eU1hc2sgZW50aXR5TWFzaykKIHsKICAgICBTdHJpbmcgc3RyID0gbm9kZS0+bm9kZVZhbHVlKCk7
CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBzdHIuY2hhcmFjdGVycygpOwpAQCAtMjU1
LDcgKzI1Niw3IEBAIGJvb2wgTWFya3VwQWNjdW11bGF0b3I6OnNob3VsZEFkZE5hbWVzcGEKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTmFtZXNw
YWNlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBOYW1lc3BhY2VzJiBuYW1lc3BhY2VzKQor
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTmFtZXNwYWNlKFN0cmluZ0J1aWxkZXImIHJl
c3VsdCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZXNwYWNlVVJJLCBOYW1lc3BhY2VzJiBuYW1lc3BhY2VzKQogewogICAgIG5hbWVzcGFjZXMuY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgIGlmIChuYW1lc3BhY2VVUkkuaXNFbXB0eSgpKQpAQCAtMjY3
LDEwICsyNjgsMTAgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTmFtZXNwYWNlKAog
ICAgIGlmIChmb3VuZE5TICE9IG5hbWVzcGFjZVVSSS5pbXBsKCkpIHsKICAgICAgICAgbmFtZXNw
YWNlcy5zZXQocHJlLCBuYW1lc3BhY2VVUkkuaW1wbCgpKTsKICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICcpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCB4bWxuc0F0b20uc3RyaW5nKCkpOworICAg
ICAgICByZXN1bHQuYXBwZW5kKHhtbG5zQXRvbS5zdHJpbmcoKSk7CiAgICAgICAgIGlmICghcHJl
Zml4LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnOicpOwotICAgICAg
ICAgICAgYXBwZW5kKHJlc3VsdCwgcHJlZml4KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
cHJlZml4KTsKICAgICAgICAgfQogCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJz0nKTsKQEAgLTI5
Miw1OSArMjkzLDU5IEBAIEVudGl0eU1hc2sgTWFya3VwQWNjdW11bGF0b3I6OmVudGl0eU1hc2sK
ICAgICByZXR1cm4gdGV4dC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSA/IEVudGl0eU1h
c2tJbkhUTUxQQ0RBVEEgOiBFbnRpdHlNYXNrSW5QQ0RBVEE7CiB9CiAKLXZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0KiB0ZXh0KQordm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQq
IHRleHQpCiB7CiAgICAgYXBwZW5kTm9kZVZhbHVlKG91dCwgdGV4dCwgbV9yYW5nZSwgZW50aXR5
TWFza0ZvclRleHQodGV4dCkpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRD
b21tZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBjb21tZW50KQordm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ29tbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0
IFN0cmluZyYgY29tbWVudCkKIHsKICAgICAvLyBGSVhNRTogQ29tbWVudCBjb250ZW50IGlzIG5v
dCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMp
IHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMgIi0tPiIuCi0gICAgYXBw
ZW5kKG91dCwgIjwhLS0iKTsKLSAgICBhcHBlbmQob3V0LCBjb21tZW50KTsKLSAgICBhcHBlbmQo
b3V0LCAiLS0+Iik7CisgICAgb3V0LmFwcGVuZCgiPCEtLSIpOworICAgIG91dC5hcHBlbmQoY29t
bWVudCk7CisgICAgb3V0LmFwcGVuZCgiLS0+Iik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZERvY3VtZW50VHlwZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IERvY3Vt
ZW50VHlwZSogbikKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZERvY3VtZW50VHlwZShT
dHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSogbikKIHsKICAgICBpZiAo
bi0+bmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXBwZW5kKHJlc3Vs
dCwgIjwhRE9DVFlQRSAiKTsKLSAgICBhcHBlbmQocmVzdWx0LCBuLT5uYW1lKCkpOworICAgIHJl
c3VsdC5hcHBlbmQoIjwhRE9DVFlQRSAiKTsKKyAgICByZXN1bHQuYXBwZW5kKG4tPm5hbWUoKSk7
CiAgICAgaWYgKCFuLT5wdWJsaWNJZCgpLmlzRW1wdHkoKSkgewotICAgICAgICBhcHBlbmQocmVz
dWx0LCAiIFBVQkxJQyBcIiIpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBuLT5wdWJsaWNJZCgp
KTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgIlwiIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
IiBQVUJMSUMgXCIiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChuLT5wdWJsaWNJZCgpKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiXCIiKTsKICAgICAgICAgaWYgKCFuLT5zeXN0ZW1JZCgpLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgIiBcIiIpOwotICAgICAgICAg
ICAgYXBwZW5kKHJlc3VsdCwgbi0+c3lzdGVtSWQoKSk7Ci0gICAgICAgICAgICBhcHBlbmQocmVz
dWx0LCAiXCIiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIiBcIiIpOworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChuLT5zeXN0ZW1JZCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoIlwiIik7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKCFuLT5zeXN0ZW1JZCgpLmlzRW1w
dHkoKSkgewotICAgICAgICBhcHBlbmQocmVzdWx0LCAiIFNZU1RFTSBcIiIpOwotICAgICAgICBh
cHBlbmQocmVzdWx0LCBuLT5zeXN0ZW1JZCgpKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgIlwi
Iik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiBTWVNURU0gXCIiKTsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChuLT5zeXN0ZW1JZCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCIiKTsKICAg
ICB9CiAgICAgaWYgKCFuLT5pbnRlcm5hbFN1YnNldCgpLmlzRW1wdHkoKSkgewotICAgICAgICBh
cHBlbmQocmVzdWx0LCAiIFsiKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgbi0+aW50ZXJuYWxT
dWJzZXQoKSk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsICJdIik7CisgICAgICAgIHJlc3VsdC5h
cHBlbmQoIiBbIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobi0+aW50ZXJuYWxTdWJzZXQoKSk7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIl0iKTsKICAgICB9Ci0gICAgYXBwZW5kKHJlc3VsdCwg
Ij4iKTsKKyAgICByZXN1bHQuYXBwZW5kKCI+Iik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpCit2b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oU3RyaW5nQnVpbGRlciYgb3V0LCBjb25z
dCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBkYXRhKQogewogICAgIC8vIEZJWE1FOiBQ
SSBkYXRhIGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90
aGVyIGNhbGxlcnMpIHRoaXMgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRl
cyAiPz4iLgotICAgIGFwcGVuZChvdXQsICI8PyIpOwotICAgIGFwcGVuZChvdXQsIHRhcmdldCk7
Ci0gICAgYXBwZW5kKG91dCwgIiAiKTsKLSAgICBhcHBlbmQob3V0LCBkYXRhKTsKLSAgICBhcHBl
bmQob3V0LCAiPz4iKTsKKyAgICBvdXQuYXBwZW5kKCI8PyIpOworICAgIG91dC5hcHBlbmQodGFy
Z2V0KTsKKyAgICBvdXQuYXBwZW5kKCIgIik7CisgICAgb3V0LmFwcGVuZChkYXRhKTsKKyAgICBv
dXQuYXBwZW5kKCI/PiIpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVt
ZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFt
ZXNwYWNlcykKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVp
bGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewog
ICAgIGFwcGVuZE9wZW5UYWcob3V0LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsKIApAQCAtMzU5LDE1
ICszNjAsMTUgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChWZQogICAg
IGFwcGVuZENsb3NlVGFnKG91dCwgZWxlbWVudCk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZE9wZW5UYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBO
YW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kT3Bl
blRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5h
bWVzcGFjZXMpCiB7CiAgICAgb3V0LmFwcGVuZCgnPCcpOwotICAgIGFwcGVuZChvdXQsIGVsZW1l
bnQtPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CisgICAgb3V0LmFwcGVuZChlbGVtZW50LT5u
b2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOwogICAgIGlmICghZWxlbWVudC0+ZG9jdW1lbnQoKS0+
aXNIVE1MRG9jdW1lbnQoKSAmJiBuYW1lc3BhY2VzICYmIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1l
bnQoZWxlbWVudCkpCiAgICAgICAgIGFwcGVuZE5hbWVzcGFjZShvdXQsIGVsZW1lbnQtPnByZWZp
eCgpLCBlbGVtZW50LT5uYW1lc3BhY2VVUkkoKSwgKm5hbWVzcGFjZXMpOyAgICAKIH0KIAotdm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2xvc2VUYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBF
bGVtZW50KiBlbGVtZW50KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2xvc2VUYWco
U3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIGlmIChzaG91bGRT
ZWxmQ2xvc2UoZWxlbWVudCkpIHsKICAgICAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQo
KSkKQEAgLTM3NywxNiArMzc4LDE2IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENs
b3NlVGFnKFYKICAgICBvdXQuYXBwZW5kKCc+Jyk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZEF0dHJpYnV0ZShWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlKFN0cmluZ0J1aWxkZXImIG91dCwg
RWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIE5hbWVzcGFjZXMq
IG5hbWVzcGFjZXMpCiB7CiAgICAgYm9vbCBkb2N1bWVudElzSFRNTCA9IGVsZW1lbnQtPmRvY3Vt
ZW50KCktPmlzSFRNTERvY3VtZW50KCk7CiAKICAgICBvdXQuYXBwZW5kKCcgJyk7CiAKICAgICBp
ZiAoZG9jdW1lbnRJc0hUTUwpCi0gICAgICAgIGFwcGVuZChvdXQsIGF0dHJpYnV0ZS5uYW1lKCku
bG9jYWxOYW1lKCkpOworICAgICAgICBvdXQuYXBwZW5kKGF0dHJpYnV0ZS5uYW1lKCkubG9jYWxO
YW1lKCkpOwogICAgIGVsc2UKLSAgICAgICAgYXBwZW5kKG91dCwgYXR0cmlidXRlLm5hbWUoKS50
b1N0cmluZygpKTsKKyAgICAgICAgb3V0LmFwcGVuZChhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5n
KCkpOwogCiAgICAgb3V0LmFwcGVuZCgnPScpOwogCkBAIC00MDIsMTUgKzQwMywxNSBAQCB2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGUoCiAgICAgICAgIGFwcGVuZE5hbWVz
cGFjZShvdXQsIGF0dHJpYnV0ZS5wcmVmaXgoKSwgYXR0cmlidXRlLm5hbWVzcGFjZVVSSSgpLCAq
bmFtZXNwYWNlcyk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENEQVRBU2Vj
dGlvbihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgc2VjdGlvbikKK3ZvaWQgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZENEQVRBU2VjdGlvbihTdHJpbmdCdWlsZGVyJiBvdXQsIGNv
bnN0IFN0cmluZyYgc2VjdGlvbikKIHsKICAgICAvLyBGSVhNRTogQ0RBVEEgY29udGVudCBpcyBu
b3QgZXNjYXBlZCwgYnV0IFhNTFNlcmlhbGl6ZXIgKGFuZCBwb3NzaWJseSBvdGhlciBjYWxsZXJz
KSBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVzICJdXT4iLgotICAgIGFw
cGVuZChvdXQsICI8IVtDREFUQVsiKTsKLSAgICBhcHBlbmQob3V0LCBzZWN0aW9uKTsKLSAgICBh
cHBlbmQob3V0LCAiXV0+Iik7CisgICAgb3V0LmFwcGVuZCgiPCFbQ0RBVEFbIik7CisgICAgb3V0
LmFwcGVuZChzZWN0aW9uKTsKKyAgICBvdXQuYXBwZW5kKCJdXT4iKTsKIH0KIAotdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBj
b25zdCBOb2RlKiBub2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBO
b2RlKiBub2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGlmIChuYW1lc3BhY2Vz
KQogICAgICAgICBuYW1lc3BhY2VzLT5jaGVja0NvbnNpc3RlbmN5KCk7CkBAIC00NzYsMTQgKzQ3
NywxNCBAQCBib29sIE1hcmt1cEFjY3VtdWxhdG9yOjplbGVtZW50Q2Fubm90SGF2CiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50Kj4obm9kZSktPmllRm9yYmlkc0luc2Vy
dEhUTUwoKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kTWFya3VwKFZl
Y3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgTm9kZSogbm9kZSkKK3ZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZEVuZE1hcmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUq
IG5vZGUpCiB7CiAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgc2hvdWxkU2VsZkNs
b3NlKG5vZGUpIHx8ICghbm9kZS0+aGFzQ2hpbGROb2RlcygpICYmIGVsZW1lbnRDYW5ub3RIYXZl
RW5kVGFnKG5vZGUpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmVzdWx0LmFwcGVuZCgnPCcp
OwogICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKLSAgICBhcHBlbmQocmVzdWx0LCBzdGF0aWNfY2Fz
dDxjb25zdCBFbGVtZW50Kj4obm9kZSktPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CisgICAg
cmVzdWx0LmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSktPm5vZGVOYW1l
UHJlc2VydmluZ0Nhc2UoKSk7CiAgICAgcmVzdWx0LmFwcGVuZCgnPicpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCShyZXZpc2lvbiA5Mzcw
MykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsMzQgKzc3LDM0IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
YXBwZW5kRW5kVGFnKE5vZGUqKTsKICAgICBzdGF0aWMgc2l6ZV90IHRvdGFsTGVuZ3RoKGNvbnN0
IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHRv
dGFsTGVuZ3RoKG1fc3VjY2VlZGluZ01hcmt1cCk7IH0KLSAgICB2b2lkIGNvbmNhdGVuYXRlTWFy
a3VwKFZlY3RvcjxVQ2hhcj4mIG91dCk7Ci0gICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShW
ZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlLCBib29sIGRvY3Vt
ZW50SXNIVE1MKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhWZWN0
b3I8VUNoYXI+JiwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZE5vZGVW
YWx1ZShWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IE5vZGUqLCBjb25zdCBSYW5nZSosIEVudGl0
eU1hc2spOworICAgIHZvaWQgY29uY2F0ZW5hdGVNYXJrdXAoU3RyaW5nQnVpbGRlciYgb3V0KTsK
KyAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29u
c3QgU3RyaW5nJiBhdHRyaWJ1dGUsIGJvb2wgZG9jdW1lbnRJc0hUTUwpOworICAgIHZpcnR1YWwg
dm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBFbGVtZW50KiwgTmFt
ZXNwYWNlcyopOworICAgIHZvaWQgYXBwZW5kTm9kZVZhbHVlKFN0cmluZ0J1aWxkZXImIG91dCwg
Y29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5TWFzayk7CiAgICAgYm9vbCBzaG91bGRB
ZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqKTsKICAgICBib29sIHNob3VsZEFkZE5h
bWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzJik7Ci0gICAgdm9p
ZCBhcHBlbmROYW1lc3BhY2UoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJp
bmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMm
KTsKKyAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0
IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwg
TmFtZXNwYWNlcyYpOwogICAgIEVudGl0eU1hc2sgZW50aXR5TWFza0ZvclRleHQoVGV4dCopIGNv
bnN0OwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4
dCopOwotICAgIHZvaWQgYXBwZW5kQ29tbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0
cmluZyYgY29tbWVudCk7Ci0gICAgdm9pZCBhcHBlbmREb2N1bWVudFR5cGUoVmVjdG9yPFVDaGFy
PiYgcmVzdWx0LCBjb25zdCBEb2N1bWVudFR5cGUqKTsKLSAgICB2b2lkIGFwcGVuZFByb2Nlc3Np
bmdJbnN0cnVjdGlvbihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBj
b25zdCBTdHJpbmcmIGRhdGEpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3Rv
cjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZE9w
ZW5UYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZv
aWQgYXBwZW5kQ2xvc2VUYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50Kik7Ci0gICAgdm9p
ZCBhcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgY29uc3QgQXR0
cmlidXRlJiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kQ0RBVEFTZWN0aW9uKFZlY3Rv
cjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKTsKLSAgICB2b2lkIGFwcGVuZFN0
YXJ0TWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgTm9kZSosIE5hbWVzcGFjZXMq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQq
KTsKKyAgICB2b2lkIGFwcGVuZENvbW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBTdHJp
bmcmIGNvbW1lbnQpOworICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXIm
IHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKik7CisgICAgdm9pZCBhcHBlbmRQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24oU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29u
c3QgU3RyaW5nJiBkYXRhKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdC
dWlsZGVyJiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAgdm9pZCBhcHBlbmRPcGVu
VGFnKFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lk
IGFwcGVuZENsb3NlVGFnKFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCopOworICAgIHZvaWQg
YXBwZW5kQXR0cmlidXRlKFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCosIGNvbnN0IEF0dHJp
YnV0ZSYsIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZENEQVRBU2VjdGlvbihTdHJpbmdC
dWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgc2VjdGlvbik7CisgICAgdm9pZCBhcHBlbmRTdGFy
dE1hcmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUqLCBOYW1lc3BhY2VzKik7
CiAgICAgYm9vbCBzaG91bGRTZWxmQ2xvc2UoY29uc3QgTm9kZSopOwogICAgIGJvb2wgZWxlbWVu
dENhbm5vdEhhdmVFbmRUYWcoY29uc3QgTm9kZSogbm9kZSk7Ci0gICAgdm9pZCBhcHBlbmRFbmRN
YXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKik7CisgICAgdm9pZCBhcHBl
bmRFbmRNYXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBOb2RlKik7CiAKICAgICBW
ZWN0b3I8Tm9kZSo+KiBjb25zdCBtX25vZGVzOwogICAgIGNvbnN0IFJhbmdlKiBjb25zdCBtX3Jh
bmdlOwogCiBwcml2YXRlOgogICAgIFN0cmluZyByZXNvbHZlVVJMSWZOZWVkZWQoY29uc3QgRWxl
bWVudCosIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdDsKLSAgICB2b2lkIGFwcGVuZFF1
b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgRWxlbWVu
dCosIGNvbnN0IEF0dHJpYnV0ZSYpOworICAgIHZvaWQgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRl
VmFsdWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBFbGVtZW50KiwgY29uc3QgQXR0cmli
dXRlJik7CiAgICAgdm9pZCBzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKE5vZGUqLCBOb2Rl
KiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5LCBjb25zdCBOYW1lc3BhY2VzKik7CiAKICAgICBW
ZWN0b3I8U3RyaW5nPiBtX3N1Y2NlZWRpbmdNYXJrdXA7CkBAIC0xMTIsNyArMTEyLDcgQEAgcHJp
dmF0ZToKIH07CiAKIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgaW50ZWdyYXRlZCB3
aXRoIE1hcmt1cEFjY3VtdWxhdG9yLgotdm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50
aXRpZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBVQ2hhciogY29udGVudCwgc2l6ZV90IGxl
bmd0aCwgRW50aXR5TWFzayBlbnRpdHlNYXNrKTsKK3ZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxh
Y2luZ0VudGl0aWVzKFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgVUNoYXIqIGNvbnRlbnQsIHNp
emVfdCBsZW5ndGgsIEVudGl0eU1hc2sgZW50aXR5TWFzayk7CiAKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5
LDE1ICs4OSwxNSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3RhcmdldDsKICAgICBGaW5kT3B0
aW9ucyBtX29wdGlvbnM7CiAKLSAgICBWZWN0b3I8VUNoYXI+IG1fYnVmZmVyOworICAgIFN0cmlu
Z0J1aWxkZXIgbV9idWZmZXI7CiAgICAgc2l6ZV90IG1fb3ZlcmxhcDsKICAgICBzaXplX3QgbV9w
cmVmaXhMZW5ndGg7CiAgICAgYm9vbCBtX2F0QnJlYWs7CiAgICAgYm9vbCBtX25lZWRzTW9yZUNv
bnRleHQ7CiAKICAgICBib29sIG1fdGFyZ2V0UmVxdWlyZXNLYW5hV29ya2Fyb3VuZDsKLSAgICBW
ZWN0b3I8VUNoYXI+IG1fbm9ybWFsaXplZFRhcmdldDsKLSAgICBtdXRhYmxlIFZlY3RvcjxVQ2hh
cj4gbV9ub3JtYWxpemVkTWF0Y2g7CisgICAgU3RyaW5nQnVpbGRlciBtX25vcm1hbGl6ZWRUYXJn
ZXQ7CisgICAgbXV0YWJsZSBTdHJpbmdCdWlsZGVyIG1fbm9ybWFsaXplZE1hdGNoOwogCiAjZWxz
ZQogCkBAIC0xMDgsNyArMTA4LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV90YXJnZXQ7CiAg
ICAgRmluZE9wdGlvbnMgbV9vcHRpb25zOwogCi0gICAgVmVjdG9yPFVDaGFyPiBtX2J1ZmZlcjsK
KyAgICBTdHJpbmdCdWlsZGVyIG1fYnVmZmVyOwogICAgIFZlY3Rvcjxib29sPiBtX2lzQ2hhcmFj
dGVyU3RhcnRCdWZmZXI7CiAgICAgYm9vbCBtX2lzQnVmZmVyRnVsbDsKICAgICBzaXplX3QgbV9j
dXJzb3I7CkBAIC0xNDI1LDE1ICsxNDI1LDE1IEBAIHZvaWQgQ2hhcmFjdGVySXRlcmF0b3I6OmFk
dmFuY2UoaW50IGNvdW4KIAogU3RyaW5nIENoYXJhY3Rlckl0ZXJhdG9yOjpzdHJpbmcoaW50IG51
bUNoYXJzKQogewotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG51bUNoYXJzKTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAg
ICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KG51bUNoYXJzKTsKICAgICB3aGlsZSAobnVtQ2hhcnMg
PiAwICYmICFhdEVuZCgpKSB7CiAgICAgICAgIGludCBydW5TaXplID0gbWluKG51bUNoYXJzLCBs
ZW5ndGgoKSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVycygpLCBydW5TaXplKTsK
ICAgICAgICAgbnVtQ2hhcnMgLT0gcnVuU2l6ZTsKICAgICAgICAgYWR2YW5jZShydW5TaXplKTsK
ICAgICB9Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0LnRvU3RyaW5nKCk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBjaGFyYWN0ZXJT
dWJyYW5nZShDaGFyYWN0ZXJJdGVyYXRvciYgaXQsIGludCBvZmZzZXQsIGludCBsZW5ndGgpCkBA
IC0xNjA2LDcgKzE2MDYsNyBAQCB2b2lkIFdvcmRBd2FyZUl0ZXJhdG9yOjphZHZhbmNlKCkKIGlu
dCBXb3JkQXdhcmVJdGVyYXRvcjo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICBpZiAoIW1fYnVmZmVy
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsKKyAgICAgICAgcmV0
dXJuIG1fYnVmZmVyLmxlbmd0aCgpOwogICAgIGlmIChtX3ByZXZpb3VzVGV4dCkKICAgICAgICAg
cmV0dXJuIG1fcHJldmlvdXNMZW5ndGg7CiAgICAgcmV0dXJuIG1fdGV4dEl0ZXJhdG9yLmxlbmd0
aCgpOwpAQCAtMTYxNSw3ICsxNjE1LDcgQEAgaW50IFdvcmRBd2FyZUl0ZXJhdG9yOjpsZW5ndGgo
KSBjb25zdAogY29uc3QgVUNoYXIqIFdvcmRBd2FyZUl0ZXJhdG9yOjpjaGFyYWN0ZXJzKCkgY29u
c3QKIHsKICAgICBpZiAoIW1fYnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fYnVm
ZmVyLmRhdGEoKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmNoYXJhY3RlcnMoKTsKICAgICBp
ZiAobV9wcmV2aW91c1RleHQpCiAgICAgICAgIHJldHVybiBtX3ByZXZpb3VzVGV4dDsKICAgICBy
ZXR1cm4gbV90ZXh0SXRlcmF0b3IuY2hhcmFjdGVycygpOwpAQCAtMTg4NSwxNCArMTg4NSwxNCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNLYW5hTGV0dGVycyhjCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1zdGF0aWMgdm9pZCBub3JtYWxpemVDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFZlY3RvcjxVQ2hhcj4mIGJ1ZmZlcikKK3N0YXRp
YyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCwgU3RyaW5nQnVpbGRlciYgYnVmZmVyKQogewogICAgIEFTU0VSVChsZW5ndGgp
OwogCiAgICAgYnVmZmVyLnJlc2l6ZShsZW5ndGgpOwogCiAgICAgVUVycm9yQ29kZSBzdGF0dXMg
PSBVX1pFUk9fRVJST1I7Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSB1bm9ybV9ub3JtYWxpemUo
Y2hhcmFjdGVycywgbGVuZ3RoLCBVTk9STV9ORkMsIDAsIGJ1ZmZlci5kYXRhKCksIGxlbmd0aCwg
JnN0YXR1cyk7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSB1bm9ybV9ub3JtYWxpemUoY2hhcmFj
dGVycywgbGVuZ3RoLCBVTk9STV9ORkMsIDAsIGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGxlbmd0aCwg
JnN0YXR1cyk7CiAgICAgQVNTRVJUKHN0YXR1cyA9PSBVX1pFUk9fRVJST1IgfHwgc3RhdHVzID09
IFVfU1RSSU5HX05PVF9URVJNSU5BVEVEX1dBUk5JTkcgfHwgc3RhdHVzID09IFVfQlVGRkVSX09W
RVJGTE9XX0VSUk9SKTsKICAgICBBU1NFUlQoYnVmZmVyU2l6ZSk7CiAKQEAgLTE5MDIsNyArMTkw
Miw3IEBAIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVUMKICAgICAgICAg
cmV0dXJuOwogCiAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgIHVub3JtX25vcm1hbGl6
ZShjaGFyYWN0ZXJzLCBsZW5ndGgsIFVOT1JNX05GQywgMCwgYnVmZmVyLmRhdGEoKSwgYnVmZmVy
U2l6ZSwgJnN0YXR1cyk7CisgICAgdW5vcm1fbm9ybWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCwg
VU5PUk1fTkZDLCAwLCBidWZmZXIuY2hhcmFjdGVycygpLCBidWZmZXJTaXplLCAmc3RhdHVzKTsK
ICAgICBBU1NFUlQoc3RhdHVzID09IFVfU1RSSU5HX05PVF9URVJNSU5BVEVEX1dBUk5JTkcpOwog
fQogCkBAIC0xOTU2LDcgKzE5NTYsNyBAQCBpbmxpbmUgU2VhcmNoQnVmZmVyOjpTZWFyY2hCdWZm
ZXIoY29uc3QgCiAgICAgZm9sZFF1b3RlTWFya3NBbmRTb2Z0SHlwaGVucyhtX3RhcmdldCk7CiAK
ICAgICBzaXplX3QgdGFyZ2V0TGVuZ3RoID0gbV90YXJnZXQubGVuZ3RoKCk7Ci0gICAgbV9idWZm
ZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtYXgodGFyZ2V0TGVuZ3RoICogOCwgbWluaW11bVNl
YXJjaEJ1ZmZlclNpemUpKTsKKyAgICBtX2J1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobWF4KHRhcmdl
dExlbmd0aCAqIDgsIG1pbmltdW1TZWFyY2hCdWZmZXJTaXplKSk7CiAgICAgbV9vdmVybGFwID0g
bV9idWZmZXIuY2FwYWNpdHkoKSAvIDQ7CiAKICAgICBpZiAoKG1fb3B0aW9ucyAmIEF0V29yZFN0
YXJ0cykgJiYgdGFyZ2V0TGVuZ3RoKSB7CkBAIC0yMDExLDE3ICsyMDExLDE3IEBAIGlubGluZSBz
aXplX3QgU2VhcmNoQnVmZmVyOjphcHBlbmQoY29uc3QKICAgICAgICAgbV9idWZmZXIuc2hyaW5r
KDApOwogICAgICAgICBtX3ByZWZpeExlbmd0aCA9IDA7CiAgICAgICAgIG1fYXRCcmVhayA9IGZh
bHNlOwotICAgIH0gZWxzZSBpZiAobV9idWZmZXIuc2l6ZSgpID09IG1fYnVmZmVyLmNhcGFjaXR5
KCkpIHsKLSAgICAgICAgbWVtY3B5KG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuZGF0YSgpICsg
bV9idWZmZXIuc2l6ZSgpIC0gbV9vdmVybGFwLCBtX292ZXJsYXAgKiBzaXplb2YoVUNoYXIpKTsK
LSAgICAgICAgbV9wcmVmaXhMZW5ndGggLT0gbWluKG1fcHJlZml4TGVuZ3RoLCBtX2J1ZmZlci5z
aXplKCkgLSBtX292ZXJsYXApOworICAgIH0gZWxzZSBpZiAobV9idWZmZXIubGVuZ3RoKCkgPT0g
bV9idWZmZXIuY2FwYWNpdHkoKSkgeworICAgICAgICBtZW1jcHkobV9idWZmZXIuY2hhcmFjdGVy
cygpLCBtX2J1ZmZlci5jaGFyYWN0ZXJzKCkgKyBtX2J1ZmZlci5sZW5ndGgoKSAtIG1fb3Zlcmxh
cCwgbV9vdmVybGFwICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIG1fcHJlZml4TGVuZ3RoIC09
IG1pbihtX3ByZWZpeExlbmd0aCwgbV9idWZmZXIubGVuZ3RoKCkgLSBtX292ZXJsYXApOwogICAg
ICAgICBtX2J1ZmZlci5zaHJpbmsobV9vdmVybGFwKTsKICAgICB9CiAKLSAgICBzaXplX3Qgb2xk
TGVuZ3RoID0gbV9idWZmZXIuc2l6ZSgpOworICAgIHNpemVfdCBvbGRMZW5ndGggPSBtX2J1ZmZl
ci5sZW5ndGgoKTsKICAgICBzaXplX3QgdXNhYmxlTGVuZ3RoID0gbWluKG1fYnVmZmVyLmNhcGFj
aXR5KCkgLSBvbGRMZW5ndGgsIGxlbmd0aCk7CiAgICAgQVNTRVJUKHVzYWJsZUxlbmd0aCk7CiAg
ICAgbV9idWZmZXIuYXBwZW5kKGNoYXJhY3RlcnMsIHVzYWJsZUxlbmd0aCk7Ci0gICAgZm9sZFF1
b3RlTWFya3NBbmRTb2Z0SHlwaGVucyhtX2J1ZmZlci5kYXRhKCkgKyBvbGRMZW5ndGgsIHVzYWJs
ZUxlbmd0aCk7CisgICAgZm9sZFF1b3RlTWFya3NBbmRTb2Z0SHlwaGVucyhtX2J1ZmZlci5jaGFy
YWN0ZXJzKCkgKyBvbGRMZW5ndGgsIHVzYWJsZUxlbmd0aCk7CiAgICAgcmV0dXJuIHVzYWJsZUxl
bmd0aDsKIH0KIApAQCAtMjAzMyw3ICsyMDMzLDcgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVy
OjpuZWVkc01vcmVDb250ZQogaW5saW5lIHZvaWQgU2VhcmNoQnVmZmVyOjpwcmVwZW5kQ29udGV4
dChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBBU1NFUlQo
bV9uZWVkc01vcmVDb250ZXh0KTsKLSAgICBBU1NFUlQobV9wcmVmaXhMZW5ndGggPT0gbV9idWZm
ZXIuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9wcmVmaXhMZW5ndGggPT0gbV9idWZmZXIubGVuZ3Ro
KCkpOwogCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybjsKQEAgLTIwNzUsMTEgKzIw
NzUsMTEgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjppc0JhZE1hdGNoKGNvbgogICAgIC8v
IGNyZWF0aW5nIGEgbmV3IG9uZSBlYWNoIHRpbWUuCiAgICAgbm9ybWFsaXplQ2hhcmFjdGVycyht
YXRjaCwgbWF0Y2hMZW5ndGgsIG1fbm9ybWFsaXplZE1hdGNoKTsKIAotICAgIGNvbnN0IFVDaGFy
KiBhID0gbV9ub3JtYWxpemVkVGFyZ2V0LmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGFFbmQg
PSBtX25vcm1hbGl6ZWRUYXJnZXQuZW5kKCk7CisgICAgY29uc3QgVUNoYXIqIGEgPSBtX25vcm1h
bGl6ZWRUYXJnZXQuY2hhcmFjdGVycygpOworICAgIGNvbnN0IFVDaGFyKiBhRW5kID0gbV9ub3Jt
YWxpemVkVGFyZ2V0LmNoYXJhY3RlcnMoKSArIG1fbm9ybWFsaXplZFRhcmdldC5sZW5ndGgoKTsK
IAotICAgIGNvbnN0IFVDaGFyKiBiID0gbV9ub3JtYWxpemVkTWF0Y2guYmVnaW4oKTsKLSAgICBj
b25zdCBVQ2hhciogYkVuZCA9IG1fbm9ybWFsaXplZE1hdGNoLmVuZCgpOworICAgIGNvbnN0IFVD
aGFyKiBiID0gbV9ub3JtYWxpemVkTWF0Y2guY2hhcmFjdGVycygpOworICAgIGNvbnN0IFVDaGFy
KiBiRW5kID0gbV9ub3JtYWxpemVkTWF0Y2guY2hhcmFjdGVycygpICsgbV9ub3JtYWxpemVkTWF0
Y2gubGVuZ3RoKCk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBTa2lwIHJ1bnMg
b2Ygbm9uLWthbmEtbGV0dGVyIGNoYXJhY3RlcnMuIFRoaXMgaXMgbmVjZXNzYXJ5IHNvIHdlIGNh
bgpAQCAtMjEzMSwxNCArMjEzMSwxNCBAQCBpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzV29y
ZFN0YXJ0TWF0CiAgICAgaWYgKCFzdGFydCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBp
bnQgc2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKKyAgICBpbnQgc2l6ZSA9IG1fYnVmZmVyLmxlbmd0
aCgpOwogICAgIGludCBvZmZzZXQgPSBzdGFydDsKICAgICBVQ2hhcjMyIGZpcnN0Q2hhcmFjdGVy
OwotICAgIFUxNl9HRVQobV9idWZmZXIuZGF0YSgpLCAwLCBvZmZzZXQsIHNpemUsIGZpcnN0Q2hh
cmFjdGVyKTsKKyAgICBVMTZfR0VUKG1fYnVmZmVyLmNoYXJhY3RlcnMoKSwgMCwgb2Zmc2V0LCBz
aXplLCBmaXJzdENoYXJhY3Rlcik7CiAKICAgICBpZiAobV9vcHRpb25zICYgVHJlYXRNZWRpYWxD
YXBpdGFsQXNXb3JkU3RhcnQpIHsKICAgICAgICAgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlcjsK
LSAgICAgICAgVTE2X1BSRVYobV9idWZmZXIuZGF0YSgpLCAwLCBvZmZzZXQsIHByZXZpb3VzQ2hh
cmFjdGVyKTsKKyAgICAgICAgVTE2X1BSRVYobV9idWZmZXIuY2hhcmFjdGVycygpLCAwLCBvZmZz
ZXQsIHByZXZpb3VzQ2hhcmFjdGVyKTsKIAogICAgICAgICBpZiAoaXNTZXBhcmF0b3IoZmlyc3RD
aGFyYWN0ZXIpKSB7CiAgICAgICAgICAgICAvLyBUaGUgc3RhcnQgb2YgYSBzZXBhcmF0b3IgcnVu
IGlzIGEgd29yZCBzdGFydCAoIi5vcmciIGluICJ3ZWJraXQub3JnIikuCkBAIC0yMTUxLDEwICsy
MTUxLDEwIEBAIGlubGluZSBib29sIFNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXQKICAgICAg
ICAgICAgIC8vIFRoZSBsYXN0IGNoYXJhY3RlciBvZiBhbiB1cHBlcmNhc2UgcnVuIGZvbGxvd2Vk
IGJ5IGEgbm9uLXNlcGFyYXRvciwgbm9uLWRpZ2l0CiAgICAgICAgICAgICAvLyBpcyBhIHdvcmQg
c3RhcnQgKCJSZXF1ZXN0IiBpbiAiWE1MSFRUUFJlcXVlc3QiKS4KICAgICAgICAgICAgIG9mZnNl
dCA9IHN0YXJ0OwotICAgICAgICAgICAgVTE2X0ZXRF8xKG1fYnVmZmVyLmRhdGEoKSwgb2Zmc2V0
LCBzaXplKTsKKyAgICAgICAgICAgIFUxNl9GV0RfMShtX2J1ZmZlci5jaGFyYWN0ZXJzKCksIG9m
ZnNldCwgc2l6ZSk7CiAgICAgICAgICAgICBVQ2hhcjMyIG5leHRDaGFyYWN0ZXIgPSAwOwogICAg
ICAgICAgICAgaWYgKG9mZnNldCA8IHNpemUpCi0gICAgICAgICAgICAgICAgVTE2X0dFVChtX2J1
ZmZlci5kYXRhKCksIDAsIG9mZnNldCwgc2l6ZSwgbmV4dENoYXJhY3Rlcik7CisgICAgICAgICAg
ICAgICAgVTE2X0dFVChtX2J1ZmZlci5jaGFyYWN0ZXJzKCksIDAsIG9mZnNldCwgc2l6ZSwgbmV4
dENoYXJhY3Rlcik7CiAgICAgICAgICAgICBpZiAoIWlzQVNDSUlVcHBlcihuZXh0Q2hhcmFjdGVy
KSAmJiAhaXNBU0NJSURpZ2l0KG5leHRDaGFyYWN0ZXIpICYmICFpc1NlcGFyYXRvcihuZXh0Q2hh
cmFjdGVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlm
IChpc0FTQ0lJRGlnaXQoZmlyc3RDaGFyYWN0ZXIpKSB7CkBAIC0yMTc1LDEzICsyMTc1LDEzIEBA
IGlubGluZSBib29sIFNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXQKIAogICAgIHNpemVfdCB3
b3JkQnJlYWtTZWFyY2hTdGFydCA9IHN0YXJ0ICsgbGVuZ3RoOwogICAgIHdoaWxlICh3b3JkQnJl
YWtTZWFyY2hTdGFydCA+IHN0YXJ0KQotICAgICAgICB3b3JkQnJlYWtTZWFyY2hTdGFydCA9IGZp
bmROZXh0V29yZEZyb21JbmRleChtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUoKSwgd29y
ZEJyZWFrU2VhcmNoU3RhcnQsIGZhbHNlIC8qIGJhY2t3YXJkcyAqLyk7CisgICAgICAgIHdvcmRC
cmVha1NlYXJjaFN0YXJ0ID0gZmluZE5leHRXb3JkRnJvbUluZGV4KG1fYnVmZmVyLmNoYXJhY3Rl
cnMoKSwgbV9idWZmZXIubGVuZ3RoKCksIHdvcmRCcmVha1NlYXJjaFN0YXJ0LCBmYWxzZSAvKiBi
YWNrd2FyZHMgKi8pOwogICAgIHJldHVybiB3b3JkQnJlYWtTZWFyY2hTdGFydCA9PSBzdGFydDsK
IH0KIAogaW5saW5lIHNpemVfdCBTZWFyY2hCdWZmZXI6OnNlYXJjaChzaXplX3QmIHN0YXJ0KQog
ewotICAgIHNpemVfdCBzaXplID0gbV9idWZmZXIuc2l6ZSgpOworICAgIHNpemVfdCBzaXplID0g
bV9idWZmZXIubGVuZ3RoKCk7CiAgICAgaWYgKG1fYXRCcmVhaykgewogICAgICAgICBpZiAoIXNp
emUpCiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTIxOTMsNyArMjE5Myw3IEBAIGlubGluZSBz
aXplX3QgU2VhcmNoQnVmZmVyOjpzZWFyY2goc2l6ZV8KICAgICBVU3RyaW5nU2VhcmNoKiBzZWFy
Y2hlciA9IFdlYkNvcmU6OnNlYXJjaGVyKCk7CiAKICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVf
WkVST19FUlJPUjsKLSAgICB1c2VhcmNoX3NldFRleHQoc2VhcmNoZXIsIG1fYnVmZmVyLmRhdGEo
KSwgc2l6ZSwgJnN0YXR1cyk7CisgICAgdXNlYXJjaF9zZXRUZXh0KHNlYXJjaGVyLCBtX2J1ZmZl
ci5jaGFyYWN0ZXJzKCksIHNpemUsICZzdGF0dXMpOwogICAgIEFTU0VSVChzdGF0dXMgPT0gVV9a
RVJPX0VSUk9SKTsKIAogICAgIHVzZWFyY2hfc2V0T2Zmc2V0KHNlYXJjaGVyLCBtX3ByZWZpeExl
bmd0aCwgJnN0YXR1cyk7CkBAIC0yMjE3LDExICsyMjE3LDExIEBAIG5leHRNYXRjaDoKICAgICAg
ICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQgY29udGV4dCBiZWZvcmUg
bWF0Y2hTdGFydCB0aGUgbmV4dCB0aW1lIGFyb3VuZCBmb3IKICAgICAgICAgICAgIC8vIGRldGVy
bWluaW5nIGlmIGl0IGlzIGF0IGEgd29yZCBib3VuZGFyeS4KICAgICAgICAgICAgIGludCB3b3Jk
Qm91bmRhcnlDb250ZXh0U3RhcnQgPSBtYXRjaFN0YXJ0OwotICAgICAgICAgICAgVTE2X0JBQ0tf
MShtX2J1ZmZlci5kYXRhKCksIDAsIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCk7Ci0gICAgICAg
ICAgICB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNv
bnRleHQobV9idWZmZXIuZGF0YSgpLCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpOworICAgICAg
ICAgICAgVTE2X0JBQ0tfMShtX2J1ZmZlci5jaGFyYWN0ZXJzKCksIDAsIHdvcmRCb3VuZGFyeUNv
bnRleHRTdGFydCk7CisgICAgICAgICAgICB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBzdGFy
dE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRleHQobV9idWZmZXIuY2hhcmFjdGVycygpLCB3b3JkQm91
bmRhcnlDb250ZXh0U3RhcnQpOwogICAgICAgICAgICAgb3ZlcmxhcCA9IG1pbihzaXplIC0gMSwg
bWF4KG92ZXJsYXAsIHNpemUgLSB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpKTsKICAgICAgICAg
fQotICAgICAgICBtZW1jcHkobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5kYXRhKCkgKyBzaXpl
IC0gb3ZlcmxhcCwgb3ZlcmxhcCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBtZW1jcHkobV9i
dWZmZXIuY2hhcmFjdGVycygpLCBtX2J1ZmZlci5jaGFyYWN0ZXJzKCkgKyBzaXplIC0gb3Zlcmxh
cCwgb3ZlcmxhcCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBtX3ByZWZpeExlbmd0aCAtPSBt
aW4obV9wcmVmaXhMZW5ndGgsIHNpemUgLSBvdmVybGFwKTsKICAgICAgICAgbV9idWZmZXIuc2hy
aW5rKG92ZXJsYXApOwogICAgICAgICByZXR1cm4gMDsKQEAgLTIyMzEsMTQgKzIyMzEsMTQgQEAg
bmV4dE1hdGNoOgogICAgIEFTU0VSVChtYXRjaFN0YXJ0ICsgbWF0Y2hlZExlbmd0aCA8PSBzaXpl
KTsKIAogICAgIC8vIElmIHRoaXMgbWF0Y2ggaXMgImJhZCIsIG1vdmUgb24gdG8gdGhlIG5leHQg
bWF0Y2guCi0gICAgaWYgKGlzQmFkTWF0Y2gobV9idWZmZXIuZGF0YSgpICsgbWF0Y2hTdGFydCwg
bWF0Y2hlZExlbmd0aCkgfHwgKChtX29wdGlvbnMgJiBBdFdvcmRTdGFydHMpICYmICFpc1dvcmRT
dGFydE1hdGNoKG1hdGNoU3RhcnQsIG1hdGNoZWRMZW5ndGgpKSkgeworICAgIGlmIChpc0JhZE1h
dGNoKG1fYnVmZmVyLmNoYXJhY3RlcnMoKSArIG1hdGNoU3RhcnQsIG1hdGNoZWRMZW5ndGgpIHx8
ICgobV9vcHRpb25zICYgQXRXb3JkU3RhcnRzKSAmJiAhaXNXb3JkU3RhcnRNYXRjaChtYXRjaFN0
YXJ0LCBtYXRjaGVkTGVuZ3RoKSkpIHsKICAgICAgICAgbWF0Y2hTdGFydCA9IHVzZWFyY2hfbmV4
dChzZWFyY2hlciwgJnN0YXR1cyk7CiAgICAgICAgIEFTU0VSVChzdGF0dXMgPT0gVV9aRVJPX0VS
Uk9SKTsKICAgICAgICAgZ290byBuZXh0TWF0Y2g7CiAgICAgfQogCiAgICAgc2l6ZV90IG5ld1Np
emUgPSBzaXplIC0gKG1hdGNoU3RhcnQgKyAxKTsKLSAgICBtZW1tb3ZlKG1fYnVmZmVyLmRhdGEo
KSwgbV9idWZmZXIuZGF0YSgpICsgbWF0Y2hTdGFydCArIDEsIG5ld1NpemUgKiBzaXplb2YoVUNo
YXIpKTsKKyAgICBtZW1tb3ZlKG1fYnVmZmVyLmNoYXJhY3RlcnMoKSwgbV9idWZmZXIuY2hhcmFj
dGVycygpICsgbWF0Y2hTdGFydCArIDEsIG5ld1NpemUgKiBzaXplb2YoVUNoYXIpKTsKICAgICBt
X3ByZWZpeExlbmd0aCAtPSBtaW48c2l6ZV90PihtX3ByZWZpeExlbmd0aCwgbWF0Y2hTdGFydCAr
IDEpOwogICAgIG1fYnVmZmVyLnNocmluayhuZXdTaXplKTsKIApAQCAtMjUxOCwyMSArMjUxOCwy
MSBAQCBVQ2hhciogcGxhaW5UZXh0VG9NYWxsb2NBbGxvY2F0ZWRCdWZmZXIoCiAgICAgYnVmZmVy
TGVuZ3RoID0gMDsKICAgICB0eXBlZGVmIHBhaXI8VUNoYXIqLCB1bnNpZ25lZD4gVGV4dFNlZ21l
bnQ7CiAgICAgT3duUHRyPFZlY3RvcjxUZXh0U2VnbWVudD4gPiB0ZXh0U2VnbWVudHM7Ci0gICAg
VmVjdG9yPFVDaGFyPiB0ZXh0QnVmZmVyOwotICAgIHRleHRCdWZmZXIucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShjTWF4U2VnbWVudFNpemUpOworICAgIFN0cmluZ0J1aWxkZXIgdGV4dEJ1ZmZlcjsK
KyAgICB0ZXh0QnVmZmVyLnJlc2VydmVDYXBhY2l0eShjTWF4U2VnbWVudFNpemUpOwogICAgIFRl
eHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yID0gZGVmYXVsdEJlaGF2aW9yOwogICAgIGlmICgh
aXNEaXNwbGF5U3RyaW5nKQogICAgICAgICBiZWhhdmlvciA9IHN0YXRpY19jYXN0PFRleHRJdGVy
YXRvckJlaGF2aW9yPihiZWhhdmlvciB8IFRleHRJdGVyYXRvckVtaXRzVGV4dHNXaXRob3V0VHJh
bnNjb2RpbmcpOwogICAgIAogICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHIsIGJlaGF2aW9yKTsg
IWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewotICAgICAgICBpZiAodGV4dEJ1ZmZlci5zaXpl
KCkgJiYgdGV4dEJ1ZmZlci5zaXplKCkgKyBpdC5sZW5ndGgoKSA+IGNNYXhTZWdtZW50U2l6ZSkg
ewotICAgICAgICAgICAgVUNoYXIqIG5ld1NlZ21lbnRCdWZmZXIgPSBzdGF0aWNfY2FzdDxVQ2hh
cio+KG1hbGxvYyh0ZXh0QnVmZmVyLnNpemUoKSAqIHNpemVvZihVQ2hhcikpKTsKKyAgICAgICAg
aWYgKHRleHRCdWZmZXIubGVuZ3RoKCkgJiYgdGV4dEJ1ZmZlci5sZW5ndGgoKSArIGl0Lmxlbmd0
aCgpID4gY01heFNlZ21lbnRTaXplKSB7CisgICAgICAgICAgICBVQ2hhciogbmV3U2VnbWVudEJ1
ZmZlciA9IHN0YXRpY19jYXN0PFVDaGFyKj4obWFsbG9jKHRleHRCdWZmZXIubGVuZ3RoKCkgKiBz
aXplb2YoVUNoYXIpKSk7CiAgICAgICAgICAgICBpZiAoIW5ld1NlZ21lbnRCdWZmZXIpCiAgICAg
ICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICAgICAgbWVtY3B5KG5ld1NlZ21lbnRCdWZm
ZXIsIHRleHRCdWZmZXIuZGF0YSgpLCB0ZXh0QnVmZmVyLnNpemUoKSAqIHNpemVvZihVQ2hhcikp
OworICAgICAgICAgICAgbWVtY3B5KG5ld1NlZ21lbnRCdWZmZXIsIHRleHRCdWZmZXIuY2hhcmFj
dGVycygpLCB0ZXh0QnVmZmVyLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgICAgICAg
ICBpZiAoIXRleHRTZWdtZW50cykKICAgICAgICAgICAgICAgICB0ZXh0U2VnbWVudHMgPSBhZG9w
dFB0cihuZXcgVmVjdG9yPFRleHRTZWdtZW50Pik7Ci0gICAgICAgICAgICB0ZXh0U2VnbWVudHMt
PmFwcGVuZChtYWtlX3BhaXIobmV3U2VnbWVudEJ1ZmZlciwgKHVuc2lnbmVkKXRleHRCdWZmZXIu
c2l6ZSgpKSk7CisgICAgICAgICAgICB0ZXh0U2VnbWVudHMtPmFwcGVuZChtYWtlX3BhaXIobmV3
U2VnbWVudEJ1ZmZlciwgKHVuc2lnbmVkKXRleHRCdWZmZXIubGVuZ3RoKCkpKTsKICAgICAgICAg
ICAgIHRleHRCdWZmZXIuY2xlYXIoKTsKICAgICAgICAgfQogICAgICAgICB0ZXh0QnVmZmVyLmFw
cGVuZChpdC5jaGFyYWN0ZXJzKCksIGl0Lmxlbmd0aCgpKTsKQEAgLTI1NTcsNyArMjU1Nyw3IEBA
IFVDaGFyKiBwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcigKICAgICAgICAgICAgICAg
ICByZXN1bHRQb3MgKz0gc2VnbWVudC5zZWNvbmQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgbWVtY3B5KHJlc3VsdFBvcywgdGV4dEJ1ZmZlci5kYXRhKCksIHRleHRCdWZmZXIu
c2l6ZSgpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIG1lbWNweShyZXN1bHRQb3MsIHRleHRC
dWZmZXIuY2hhcmFjdGVycygpLCB0ZXh0QnVmZmVyLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7
CiAgICAgfQogCiBleGl0OgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5o
CShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJGaW5kT3B0aW9u
cy5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0zMTYsNyArMzE3LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9wcmV2aW91c0xlbmd0aDsKIAog
ICAgIC8vIG1hbnkgY2h1bmtzIGZyb20gdGV4dEl0ZXJhdG9yIGNvbmNhdGVuYXRlZAotICAgIFZl
Y3RvcjxVQ2hhcj4gbV9idWZmZXI7CisgICAgU3RyaW5nQnVpbGRlciBtX2J1ZmZlcjsKICAgICAK
ICAgICAvLyBEaWQgd2UgaGF2ZSB0byBsb29rIGFoZWFkIGluIHRoZSB0ZXh0SXRlcmF0b3IgdG8g
Y29uZmlybSB0aGUgY3VycmVudCBjaHVuaz8KICAgICBib29sIG1fZGlkTG9va0FoZWFkOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDkzNzAzKQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzOCwxNyArMzM4LDE3IEBAIGludCBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhjb25zdCBOb2Rl
KiBub2QKIAogU3RyaW5nIHN0cmluZ1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZShjb25zdCBTdHJp
bmcmIHN0cmluZywgYm9vbCBzdGFydElzU3RhcnRPZlBhcmFncmFwaCwgYm9vbCBlbmRJc0VuZE9m
UGFyYWdyYXBoKQogewotICAgIFZlY3RvcjxVQ2hhcj4gcmViYWxhbmNlZFN0cmluZzsKLSAgICBh
cHBlbmQocmViYWxhbmNlZFN0cmluZywgc3RyaW5nKTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlYmFs
YW5jZWRTdHJpbmc7CisgICAgcmViYWxhbmNlZFN0cmluZy5hcHBlbmQoc3RyaW5nKTsKIAogICAg
IGJvb2wgcHJldmlvdXNDaGFyYWN0ZXJXYXNTcGFjZSA9IGZhbHNlOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmViYWxhbmNlZFN0cmluZy5zaXplKCk7IGkrKykgeworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmViYWxhbmNlZFN0cmluZy5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAg
IGlmICghaXNXaGl0ZXNwYWNlKHJlYmFsYW5jZWRTdHJpbmdbaV0pKSB7CiAgICAgICAgICAgICBw
cmV2aW91c0NoYXJhY3Rlcldhc1NwYWNlID0gZmFsc2U7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChwcmV2aW91c0NoYXJhY3Rlcldhc1NwYWNlIHx8ICgh
aSAmJiBzdGFydElzU3RhcnRPZlBhcmFncmFwaCkgfHwgKGkgKyAxID09IHJlYmFsYW5jZWRTdHJp
bmcuc2l6ZSgpICYmIGVuZElzRW5kT2ZQYXJhZ3JhcGgpKSB7CisgICAgICAgIGlmIChwcmV2aW91
c0NoYXJhY3Rlcldhc1NwYWNlIHx8ICghaSAmJiBzdGFydElzU3RhcnRPZlBhcmFncmFwaCkgfHwg
KGkgKyAxID09IHJlYmFsYW5jZWRTdHJpbmcubGVuZ3RoKCkgJiYgZW5kSXNFbmRPZlBhcmFncmFw
aCkpIHsKICAgICAgICAgICAgIHJlYmFsYW5jZWRTdHJpbmdbaV0gPSBub0JyZWFrU3BhY2U7CiAg
ICAgICAgICAgICBwcmV2aW91c0NoYXJhY3Rlcldhc1NwYWNlID0gZmFsc2U7CiAgICAgICAgIH0g
ZWxzZSB7CkBAIC0zNTgsNyArMzU4LDcgQEAgU3RyaW5nIHN0cmluZ1dpdGhSZWJhbGFuY2VkV2hp
dGVzcGFjZShjbwogICAgICAgICAgICAgCiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRv
cHQocmViYWxhbmNlZFN0cmluZyk7CisgICAgcmV0dXJuIHJlYmFsYW5jZWRTdHJpbmcudG9TdHJp
bmcoKTsKIH0KIAogYm9vbCBpc1RhYmxlU3RydWN0dXJlTm9kZShjb25zdCBOb2RlICpub2RlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCwxMyAr
MTI4LDEzIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdGFrZVJlc3VsdHMoKTsKIAogcHJpdmF0ZToK
LSAgICB2b2lkIGFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoVmVjdG9yPFVDaGFyPiYsIENTU1N0eWxl
RGVjbGFyYXRpb24qLCBEb2N1bWVudCosIGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKKyAgICB2b2lk
IGFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoU3RyaW5nQnVpbGRlciYsIENTU1N0eWxlRGVjbGFyYXRp
b24qLCBEb2N1bWVudCosIGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKICAgICBjb25zdCBTdHJpbmcg
c3R5bGVOb2RlQ2xvc2VUYWcoYm9vbCBpc0Jsb2NrID0gZmFsc2UpOwotICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCopOworICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCopOwogICAgIFN0cmluZyByZW5k
ZXJlZFRleHQoY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKik7CiAgICAgU3RyaW5nIHN0cmluZ1Zh
bHVlRm9yUmFuZ2UoY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKik7Ci0gICAgdm9pZCBhcHBlbmRF
bGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBhZGREaXNw
bGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwotICAgIHZvaWQgYXBwZW5kRWxlbWVu
dChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqKSB7IGFw
cGVuZEVsZW1lbnQob3V0LCBlbGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7IH0K
KyAgICB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVt
ZW50LCBib29sIGFkZERpc3BsYXlJbmxpbmUsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7CisgICAg
dm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwg
TmFtZXNwYWNlcyopIHsgYXBwZW5kRWxlbWVudChvdXQsIGVsZW1lbnQsIGZhbHNlLCBEb2VzRnVs
bHlTZWxlY3ROb2RlKTsgfQogCiAgICAgZW51bSBOb2RlVHJhdmVyc2FsTW9kZSB7IEVtaXRTdHJp
bmcsIERvTm90RW1pdFN0cmluZyB9OwogICAgIE5vZGUqIHRyYXZlcnNlTm9kZXNGb3JTZXJpYWxp
emF0aW9uKE5vZGUqIHN0YXJ0Tm9kZSwgTm9kZSogcGFzdEVuZCwgTm9kZVRyYXZlcnNhbE1vZGUp
OwpAQCAtMTYyLDEyICsxNjIsMTIgQEAgaW5saW5lIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpT
dHlsZWRNYQogCiB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aE5vZGUoTm9k
ZSogbm9kZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBSYW5nZUZ1bGx5U2VsZWN0c05v
ZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQogewotICAgIFZlY3RvcjxVQ2hhcj4gbWFya3VwOwor
ICAgIFN0cmluZ0J1aWxkZXIgbWFya3VwOwogICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkp
CiAgICAgICAgIGFwcGVuZEVsZW1lbnQobWFya3VwLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSksIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgJiYgaXNCbG9jayhjb25zdF9jYXN0PE5vZGUqPihu
b2RlKSksIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7CiAgICAgZWxzZQogICAgICAgICBhcHBlbmRT
dGFydE1hcmt1cChtYXJrdXAsIG5vZGUsIDApOwotICAgIG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJr
dXAuYXBwZW5kKFN0cmluZzo6YWRvcHQobWFya3VwKSk7CisgICAgbV9yZXZlcnNlZFByZWNlZGlu
Z01hcmt1cC5hcHBlbmQobWFya3VwLnRvU3RyaW5nKCkpOwogICAgIGFwcGVuZEVuZFRhZyhub2Rl
KTsKICAgICBpZiAobV9ub2RlcykKICAgICAgICAgbV9ub2Rlcy0+YXBwZW5kKG5vZGUpOwpAQCAt
MTc1LDIwICsxNzUsMjAgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhO
bwogCiB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aFN0eWxlTm9kZShDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGlzQmxvY2sp
CiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBvcGVuVGFnOworICAgIFN0cmluZ0J1aWxkZXIgb3BlblRh
ZzsKICAgICBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKG9wZW5UYWcsIHN0eWxlLCBkb2N1bWVudCwg
aXNCbG9jayk7Ci0gICAgbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cC5hcHBlbmQoU3RyaW5nOjph
ZG9wdChvcGVuVGFnKSk7CisgICAgbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cC5hcHBlbmQob3Bl
blRhZy50b1N0cmluZygpKTsKICAgICBhcHBlbmRTdHJpbmcoc3R5bGVOb2RlQ2xvc2VUYWcoaXNC
bG9jaykpOwogfQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHlsZU5v
ZGVPcGVuVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUs
IERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBpc0Jsb2NrKQordm9pZCBTdHlsZWRNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kU3R5bGVOb2RlT3BlblRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykK
IHsKICAgICAvLyBBbGwgdGV4dC1kZWNvcmF0aW9uLXJlbGF0ZWQgZWxlbWVudHMgc2hvdWxkIGhh
dmUgYmVlbiB0cmVhdGVkIGFzIHNwZWNpYWwgYW5jZXN0b3JzCiAgICAgLy8gSWYgd2UgZXZlciBo
aXQgdGhpcyBBU1NFUlQsIHdlIHNob3VsZCBleHBvcnQgU3R5bGVDaGFuZ2UgaW4gQXBwbHlTdHls
ZUNvbW1hbmQgYW5kIHVzZSBpdCBoZXJlCiAgICAgQVNTRVJUKHByb3BlcnR5TWlzc2luZ09yRXF1
YWxUb05vbmUoc3R5bGUsIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pICYmIHByb3BlcnR5TWlz
c2luZ09yRXF1YWxUb05vbmUoc3R5bGUsIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25z
SW5FZmZlY3QpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZGl2U3R5
bGUsICgiPGRpdiBzdHlsZT1cIiIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
cmluZywgc3R5bGVTcGFuT3BlbiwgKCI8c3BhbiBzdHlsZT1cIiIpKTsKLSAgICBhcHBlbmQob3V0
LCBpc0Jsb2NrID8gZGl2U3R5bGUgOiBzdHlsZVNwYW5PcGVuKTsKKyAgICBvdXQuYXBwZW5kKGlz
QmxvY2sgPyBkaXZTdHlsZSA6IHN0eWxlU3Bhbk9wZW4pOwogICAgIGFwcGVuZEF0dHJpYnV0ZVZh
bHVlKG91dCwgc3R5bGUtPmNzc1RleHQoKSwgZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpOwog
ICAgIG91dC5hcHBlbmQoJ1wiJyk7CiAgICAgb3V0LmFwcGVuZCgnPicpOwpAQCAtMjAzLDE5ICsy
MDMsMTkgQEAgY29uc3QgU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzdAogCiBTdHJp
bmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRha2VSZXN1bHRzKCkKIHsKLSAgICBWZWN0b3I8
VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0b3RhbExl
bmd0aChtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwKSArIGxlbmd0aCgpKTsKKyAgICBTdHJpbmdC
dWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsTGVuZ3RoKG1f
cmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXApICsgbGVuZ3RoKCkpOwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuc2l6ZSgpOyBpID4gMDsgLS1pKQotICAgICAg
ICBhcHBlbmQocmVzdWx0LCBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwW2kgLSAxXSk7CisgICAg
ICAgIHJlc3VsdC5hcHBlbmQobV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cFtpIC0gMV0pOwogCiAg
ICAgY29uY2F0ZW5hdGVNYXJrdXAocmVzdWx0KTsKIAogICAgIC8vIFdlIHJlbW92ZSAnXDAnIGNo
YXJhY3RlcnMgYmVjYXVzZSB0aGV5IGFyZSBub3QgdmlzaWJseSByZW5kZXJlZCB0byB0aGUgdXNl
ci4KLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpLnJlcGxhY2UoMCwgIiIpOworICAg
IHJldHVybiByZXN1bHQudG9TdHJpbmcoKS5yZXBsYWNlKDAsICIiKTsKIH0KIAotdm9pZCBTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQq
IHRleHQpCit2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1
aWxkZXImIG91dCwgVGV4dCogdGV4dCkKIHsgICAgCiAgICAgY29uc3QgYm9vbCBwYXJlbnRJc1Rl
eHRhcmVhID0gdGV4dC0+cGFyZW50RWxlbWVudCgpICYmIHRleHQtPnBhcmVudEVsZW1lbnQoKS0+
dGFnUU5hbWUoKSA9PSB0ZXh0YXJlYVRhZzsKICAgICBjb25zdCBib29sIHdyYXBwaW5nU3BhbiA9
IHNob3VsZEFwcGx5V3JhcHBpbmdTdHlsZSh0ZXh0KSAmJiAhcGFyZW50SXNUZXh0YXJlYTsKQEAg
LTIyNyw5ICsyMjcsOSBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0
CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBpbmNsdWRlZCBpbiBmb3JjZUlubGlu
ZT8KICAgICAgICAgd3JhcHBpbmdTdHlsZS0+c3R5bGUoKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlGbG9hdCwgQ1NTVmFsdWVOb25lKTsKIAotICAgICAgICBWZWN0b3I8VUNoYXI+IG9wZW5UYWc7
CisgICAgICAgIFN0cmluZ0J1aWxkZXIgb3BlblRhZzsKICAgICAgICAgYXBwZW5kU3R5bGVOb2Rl
T3BlblRhZyhvcGVuVGFnLCB3cmFwcGluZ1N0eWxlLT5zdHlsZSgpLCB0ZXh0LT5kb2N1bWVudCgp
KTsKLSAgICAgICAgYXBwZW5kKG91dCwgU3RyaW5nOjphZG9wdChvcGVuVGFnKSk7CisgICAgICAg
IG91dC5hcHBlbmQob3BlblRhZyk7CiAgICAgfQogCiAgICAgaWYgKCFzaG91bGRBbm5vdGF0ZSgp
IHx8IHBhcmVudElzVGV4dGFyZWEpCkBAIC0yMzcsMTMgKzIzNywxMyBAQCB2b2lkIFN0eWxlZE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0CiAgICAgZWxzZSB7CiAgICAgICAgIGNvbnN0IGJv
b2wgdXNlUmVuZGVyZWRUZXh0ID0gIWVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25J
bk5vZGUodGV4dCksIHNlbGVjdFRhZyk7CiAgICAgICAgIFN0cmluZyBjb250ZW50ID0gdXNlUmVu
ZGVyZWRUZXh0ID8gcmVuZGVyZWRUZXh0KHRleHQsIG1fcmFuZ2UpIDogc3RyaW5nVmFsdWVGb3JS
YW5nZSh0ZXh0LCBtX3JhbmdlKTsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7CisgICAg
ICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVyOwogICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFj
aW5nRW50aXRpZXMoYnVmZmVyLCBjb250ZW50LmNoYXJhY3RlcnMoKSwgY29udGVudC5sZW5ndGgo
KSwgRW50aXR5TWFza0luUENEQVRBKTsKLSAgICAgICAgYXBwZW5kKG91dCwgY29udmVydEhUTUxU
ZXh0VG9JbnRlcmNoYW5nZUZvcm1hdChTdHJpbmc6OmFkb3B0KGJ1ZmZlciksIHRleHQpKTsKKyAg
ICAgICAgb3V0LmFwcGVuZChjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0KGJ1ZmZl
ci50b1N0cmluZygpLCB0ZXh0KSk7CiAgICAgfQogCiAgICAgaWYgKHdyYXBwaW5nU3BhbikKLSAg
ICAgICAgYXBwZW5kKG91dCwgc3R5bGVOb2RlQ2xvc2VUYWcoKSk7CisgICAgICAgIG91dC5hcHBl
bmQoc3R5bGVOb2RlQ2xvc2VUYWcoKSk7CiB9CiAgICAgCiBTdHJpbmcgU3R5bGVkTWFya3VwQWNj
dW11bGF0b3I6OnJlbmRlcmVkVGV4dChjb25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFu
Z2UpCkBAIC0yODAsNyArMjgwLDcgQEAgU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpz
dHJpbmdWYQogICAgIHJldHVybiBzdHI7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBi
b29sIGFkZERpc3BsYXlJbmxpbmUsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2Vs
ZWN0c05vZGUpCit2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0
cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBhZGREaXNwbGF5SW5saW5l
LCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQogewogICAgIGNv
bnN0IGJvb2wgZG9jdW1lbnRJc0hUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1
bWVudCgpOwogICAgIGFwcGVuZE9wZW5UYWcob3V0LCBlbGVtZW50LCAwKTsKQEAgLTMyNSw3ICsz
MjUsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtCiAKICAgICAg
ICAgaWYgKCFuZXdJbmxpbmVTdHlsZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5bGVQcmVmaXgsICgiIHN0eWxlPVwiIikpOwot
ICAgICAgICAgICAgYXBwZW5kKG91dCwgc3R5bGVQcmVmaXgpOworICAgICAgICAgICAgb3V0LmFw
cGVuZChzdHlsZVByZWZpeCk7CiAgICAgICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQs
IG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5jc3NUZXh0KCksIGRvY3VtZW50SXNIVE1MKTsKICAg
ICAgICAgICAgIG91dC5hcHBlbmQoJ1wiJyk7CiAgICAgICAgIH0KQEAgLTkxNSwxMyArOTE1LDEz
IEBAIFN0cmluZyBjcmVhdGVGdWxsTWFya3VwKGNvbnN0IFJhbmdlKiByYW4KIAogU3RyaW5nIHVy
bFRvTWFya3VwKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKLSAgICBW
ZWN0b3I8VUNoYXI+IG1hcmt1cDsKLSAgICBhcHBlbmQobWFya3VwLCAiPGEgaHJlZj1cIiIpOwot
ICAgIGFwcGVuZChtYXJrdXAsIHVybC5zdHJpbmcoKSk7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIlwi
PiIpOworICAgIFN0cmluZ0J1aWxkZXIgbWFya3VwOworICAgIG1hcmt1cC5hcHBlbmQoIjxhIGhy
ZWY9XCIiKTsKKyAgICBtYXJrdXAuYXBwZW5kKHVybC5zdHJpbmcoKSk7CisgICAgbWFya3VwLmFw
cGVuZCgiXCI+Iik7CiAgICAgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKG1hcmt1
cCwgdGl0bGUuY2hhcmFjdGVycygpLCB0aXRsZS5sZW5ndGgoKSwgRW50aXR5TWFza0luUENEQVRB
KTsKLSAgICBhcHBlbmQobWFya3VwLCAiPC9hPiIpOwotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0
KG1hcmt1cCk7CisgICAgbWFya3VwLmFwcGVuZCgiPC9hPiIpOworICAgIHJldHVybiBtYXJrdXAu
dG9TdHJpbmcoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxl
X3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVf
dW5pdHMuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlz
aWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdURjo6VW5pY29kZTsKIAogZW51bSBCb3VuZGFyeVNlYXJjaENvbnRleHRBdmFpbGFi
aWxpdHkgeyBEb250SGF2ZU1vcmVDb250ZXh0LCBNYXlIYXZlTW9yZUNvbnRleHQgfTsKIAotdHlw
ZWRlZiB1bnNpZ25lZCAoKkJvdW5kYXJ5U2VhcmNoRnVuY3Rpb24pKGNvbnN0IFVDaGFyKiwgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBvZmZzZXQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWls
YWJpbGl0eSwgYm9vbCYgbmVlZE1vcmVDb250ZXh0KTsKK3R5cGVkZWYgdW5zaWduZWQgKCpCb3Vu
ZGFyeVNlYXJjaEZ1bmN0aW9uKShjb25zdCBVQ2hhciosIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVk
IG9mZnNldCwgQm91bmRhcnlTZWFyY2hDb250ZXh0QXZhaWxhYmlsaXR5LCBib29sJiBuZWVkTW9y
ZUNvbnRleHQpOwogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnkoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaEZ1bmN0aW9uIHNlYXJjaEZ1bmN0
aW9uKQogewpAQCAtNjUsNyArNjUsOCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3Vz
Qm91bmRhcnkoCiAgICAgUG9zaXRpb24gZW5kID0gcG9zLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVu
dCgpOwogICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGQpOwog
ICAgIAotICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gc3RyaW5nOworICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nOworICAgIHN0cmluZy5yZXNlcnZlQ2FwYWNpdHkoMTAyNCk7CiAgICAgdW5zaWduZWQg
c3VmZml4TGVuZ3RoID0gMDsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtMTA3LDcg
KzEwOCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeSgKICAgICAg
ICAgICAgIGl0ZXJhdG9yU3RyaW5nLmZpbGwoJ3gnKTsKICAgICAgICAgICAgIHN0cmluZy5wcmVw
ZW5kKGl0ZXJhdG9yU3RyaW5nLmNoYXJhY3RlcnMoKSwgaXRlcmF0b3JTdHJpbmcubGVuZ3RoKCkp
OwogICAgICAgICB9Ci0gICAgICAgIG5leHQgPSBzZWFyY2hGdW5jdGlvbihzdHJpbmcuZGF0YSgp
LCBzdHJpbmcuc2l6ZSgpLCBzdHJpbmcuc2l6ZSgpIC0gc3VmZml4TGVuZ3RoLCBNYXlIYXZlTW9y
ZUNvbnRleHQsIG5lZWRNb3JlQ29udGV4dCk7CisgICAgICAgIG5leHQgPSBzZWFyY2hGdW5jdGlv
bihzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCksIHN0cmluZy5sZW5ndGgoKSAt
IHN1ZmZpeExlbmd0aCwgTWF5SGF2ZU1vcmVDb250ZXh0LCBuZWVkTW9yZUNvbnRleHQpOwogICAg
ICAgICBpZiAobmV4dCAhPSAwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGl0LmFkdmFu
Y2UoKTsKQEAgLTExNSw3ICsxMTYsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3Vz
Qm91bmRhcnkoCiAgICAgaWYgKG5lZWRNb3JlQ29udGV4dCkgewogICAgICAgICAvLyBUaGUgbGFz
dCBzZWFyY2ggcmV0dXJuZWQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyIGFuZCBhc2tlZCBm
b3IgbW9yZSBjb250ZXh0LAogICAgICAgICAvLyBidXQgdGhlcmUgaXMgbm8gZWFybGllciB0ZXh0
LiBGb3JjZSBhIHNlYXJjaCB3aXRoIHdoYXQncyBhdmFpbGFibGUuCi0gICAgICAgIG5leHQgPSBz
ZWFyY2hGdW5jdGlvbihzdHJpbmcuZGF0YSgpLCBzdHJpbmcuc2l6ZSgpLCBzdHJpbmcuc2l6ZSgp
IC0gc3VmZml4TGVuZ3RoLCBEb250SGF2ZU1vcmVDb250ZXh0LCBuZWVkTW9yZUNvbnRleHQpOwor
ICAgICAgICBuZXh0ID0gc2VhcmNoRnVuY3Rpb24oc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5n
Lmxlbmd0aCgpLCBzdHJpbmcubGVuZ3RoKCkgLSBzdWZmaXhMZW5ndGgsIERvbnRIYXZlTW9yZUNv
bnRleHQsIG5lZWRNb3JlQ29udGV4dCk7CiAgICAgICAgIEFTU0VSVCghbmVlZE1vcmVDb250ZXh0
KTsKICAgICB9CiAKQEAgLTEyOSw3ICsxMzAsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHBy
ZXZpb3VzQm91bmRhcnkoCiAKICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRvciB0byB0
cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4KICAgICBCYWNrd2Fy
ZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UuZ2V0KCkpOwotICAgIGNoYXJJ
dC5hZHZhbmNlKHN0cmluZy5zaXplKCkgLSBzdWZmaXhMZW5ndGggLSBuZXh0KTsKKyAgICBjaGFy
SXQuYWR2YW5jZShzdHJpbmcubGVuZ3RoKCkgLSBzdWZmaXhMZW5ndGggLSBuZXh0KTsKICAgICAv
LyBGSVhNRTogY2hhckl0IGNhbiBnZXQgb3V0IG9mIHNoYWRvdyBob3N0LgogICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oY2hhckl0LnJhbmdlKCktPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0p
OwogfQpAQCAtMTQ1LDcgKzE0Niw4IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dEJvdW5k
YXJ5KGNvbnMKICAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKGQtPmNyZWF0ZVJhbmdlKCkp
OwogICAgIFBvc2l0aW9uIHN0YXJ0KHBvcy5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CiAK
LSAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmlu
ZzsKKyAgICBzdHJpbmcucmVzZXJ2ZUNhcGFjaXR5KDEwMjQpOwogICAgIHVuc2lnbmVkIHByZWZp
eExlbmd0aCA9IDA7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTE4MCwyMSArMTgy
LDIxIEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5KGNvbnMKICAgICAgICAg
ICAgIC8vIFRyZWF0IGJ1bGxldHMgdXNlZCBpbiB0aGUgdGV4dCBzZWN1cml0eSBtb2RlIGFzIHJl
Z3VsYXIgY2hhcmFjdGVycyB3aGVuIGxvb2tpbmcgZm9yIGJvdW5kYXJpZXMKICAgICAgICAgICAg
IFN0cmluZyBpdGVyYXRvclN0cmluZyhpdC5jaGFyYWN0ZXJzKCksIGl0Lmxlbmd0aCgpKTsKICAg
ICAgICAgICAgIGl0ZXJhdG9yU3RyaW5nLmZpbGwoJ3gnKTsKLSAgICAgICAgICAgIHN0cmluZy5h
cHBlbmQoaXRlcmF0b3JTdHJpbmcuY2hhcmFjdGVycygpLCBpdGVyYXRvclN0cmluZy5sZW5ndGgo
KSk7CisgICAgICAgICAgICBzdHJpbmcuYXBwZW5kKGl0ZXJhdG9yU3RyaW5nKTsKICAgICAgICAg
fQotICAgICAgICBuZXh0ID0gc2VhcmNoRnVuY3Rpb24oc3RyaW5nLmRhdGEoKSwgc3RyaW5nLnNp
emUoKSwgcHJlZml4TGVuZ3RoLCBNYXlIYXZlTW9yZUNvbnRleHQsIG5lZWRNb3JlQ29udGV4dCk7
Ci0gICAgICAgIGlmIChuZXh0ICE9IHN0cmluZy5zaXplKCkpCisgICAgICAgIG5leHQgPSBzZWFy
Y2hGdW5jdGlvbihzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCksIHByZWZpeExl
bmd0aCwgTWF5SGF2ZU1vcmVDb250ZXh0LCBuZWVkTW9yZUNvbnRleHQpOworICAgICAgICBpZiAo
bmV4dCAhPSBzdHJpbmcubGVuZ3RoKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaXQu
YWR2YW5jZSgpOwogICAgIH0KICAgICBpZiAobmVlZE1vcmVDb250ZXh0KSB7CiAgICAgICAgIC8v
IFRoZSBsYXN0IHNlYXJjaCByZXR1cm5lZCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgYW5kIGFza2Vk
IGZvciBtb3JlIGNvbnRleHQsCiAgICAgICAgIC8vIGJ1dCB0aGVyZSBpcyBubyBmdXJ0aGVyIHRl
eHQuIEZvcmNlIGEgc2VhcmNoIHdpdGggd2hhdCdzIGF2YWlsYWJsZS4KLSAgICAgICAgbmV4dCA9
IHNlYXJjaEZ1bmN0aW9uKHN0cmluZy5kYXRhKCksIHN0cmluZy5zaXplKCksIHByZWZpeExlbmd0
aCwgRG9udEhhdmVNb3JlQ29udGV4dCwgbmVlZE1vcmVDb250ZXh0KTsKKyAgICAgICAgbmV4dCA9
IHNlYXJjaEZ1bmN0aW9uKHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSwgcHJl
Zml4TGVuZ3RoLCBEb250SGF2ZU1vcmVDb250ZXh0LCBuZWVkTW9yZUNvbnRleHQpOwogICAgICAg
ICBBU1NFUlQoIW5lZWRNb3JlQ29udGV4dCk7CiAgICAgfQogICAgIAotICAgIGlmIChpdC5hdEVu
ZCgpICYmIG5leHQgPT0gc3RyaW5nLnNpemUoKSkgeworICAgIGlmIChpdC5hdEVuZCgpICYmIG5l
eHQgPT0gc3RyaW5nLmxlbmd0aCgpKSB7CiAgICAgICAgIHBvcyA9IGl0LnJhbmdlKCktPnN0YXJ0
UG9zaXRpb24oKTsKICAgICB9IGVsc2UgaWYgKG5leHQgIT0gcHJlZml4TGVuZ3RoKSB7CiAgICAg
ICAgIC8vIFVzZSB0aGUgY2hhcmFjdGVyIGl0ZXJhdG9yIHRvIHRyYW5zbGF0ZSB0aGUgbmV4dCB2
YWx1ZSBpbnRvIGEgRE9NIHBvc2l0aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9ET01U
b2tlbkxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5M
aXN0LmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRva2Vu
TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgU3RyaW5nIERPTVRva2Vu
TGlzdDo6cmVtb3ZlVG9rZW4oY29uc3QgQQogICAgIC8vIEFsZ29yaXRobSBkZWZpbmVkIGF0IGh0
dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdl
L2NvbW1vbi1taWNyb3N5bnRheGVzLmh0bWwjcmVtb3ZlLWEtdG9rZW4tZnJvbS1hLXN0cmluZwog
CiAgICAgdW5zaWduZWQgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKLSAgICBWZWN0b3I8
VUNoYXI+IG91dHB1dDsgLy8gMworICAgIFN0cmluZ0J1aWxkZXIgb3V0cHV0OwogICAgIG91dHB1
dC5yZXNlcnZlQ2FwYWNpdHkoaW5wdXRMZW5ndGgpOwogICAgIHVuc2lnbmVkIHBvc2l0aW9uID0g
MDsgLy8gNAogCkBAIC03OCw3ICs3OCw3IEBAIFN0cmluZyBET01Ub2tlbkxpc3Q6OnJlbW92ZVRv
a2VuKGNvbnN0IEEKICAgICAgICAgfQogCiAgICAgICAgIC8vIFN0ZXAgNwotICAgICAgICBWZWN0
b3I8VUNoYXI+IHM7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgczsKICAgICAgICAgd2hpbGUgKHBv
c2l0aW9uIDwgaW5wdXRMZW5ndGggJiYgaXNOb3RIVE1MU3BhY2UoaW5wdXRbcG9zaXRpb25dKSkK
ICAgICAgICAgICAgIHMuYXBwZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKIApAQCAtODksNyArODks
NyBAQCBTdHJpbmcgRE9NVG9rZW5MaXN0OjpyZW1vdmVUb2tlbihjb25zdCBBCiAgICAgICAgICAg
ICAgICAgKytwb3NpdGlvbjsKIAogICAgICAgICAgICAgLy8gU3RlcCA4LjIKLSAgICAgICAgICAg
IHNpemVfdCBqID0gb3V0cHV0LnNpemUoKTsKKyAgICAgICAgICAgIHNpemVfdCBqID0gb3V0cHV0
Lmxlbmd0aCgpOwogICAgICAgICAgICAgd2hpbGUgKGogPiAwICYmIGlzSFRNTFNwYWNlKG91dHB1
dFtqIC0gMV0pKQogICAgICAgICAgICAgICAgIC0tajsKICAgICAgICAgICAgIG91dHB1dC5yZXNp
emUoaik7CkBAIC0xMDEsOCArMTAxLDcgQEAgU3RyaW5nIERPTVRva2VuTGlzdDo6cmVtb3ZlVG9r
ZW4oY29uc3QgQQogICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzKTsgLy8gU3RlcCA5CiAgICAg
fQogCi0gICAgb3V0cHV0LnNocmlua1RvRml0KCk7Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQo
b3V0cHV0KTsKKyAgICByZXR1cm4gb3V0cHV0LnRvU3RyaW5nKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVL
ZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJ
ZGlvbXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKQEAgLTg5LDcgKzkwLDggQEAgc3RhdGljIGJvb2wgcGFyc2VGb250U2l6
ZShjb25zdCBTdHJpbmcmIAogICAgIH0KIAogICAgIC8vIFN0ZXAgNgotICAgIFZlY3RvcjxVQ2hh
ciwgMTY+IGRpZ2l0czsKKyAgICBTdHJpbmdCdWlsZGVyIGRpZ2l0czsKKyAgICBkaWdpdHMucmVz
ZXJ2ZUNhcGFjaXR5KDE2KTsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKICAgICAgICAg
aWYgKCFpc0FTQ0lJRGlnaXQoKnBvc2l0aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAx
LDcgKzEwMyw3IEBAIHN0YXRpYyBib29sIHBhcnNlRm9udFNpemUoY29uc3QgU3RyaW5nJiAKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gU3RlcCA4Ci0gICAgaW50IHZhbHVlID0gY2hh
cmFjdGVyc1RvSW50U3RyaWN0KGRpZ2l0cy5kYXRhKCksIGRpZ2l0cy5zaXplKCkpOworICAgIGlu
dCB2YWx1ZSA9IGNoYXJhY3RlcnNUb0ludFN0cmljdChkaWdpdHMuY2hhcmFjdGVycygpLCBkaWdp
dHMubGVuZ3RoKCkpOwogCiAgICAgLy8gU3RlcCA5CiAgICAgaWYgKG1vZGUgPT0gUmVsYXRpdmVQ
bHVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsx
MTAsNyBAQCBTdHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN0cmlwCiAgICAgaWYg
KCFhdHRyaWJ1dGVWYWx1ZS5jb250YWlucyhuZXdsaW5lQ2hhcmFjdGVyKSAmJiAhYXR0cmlidXRl
VmFsdWUuY29udGFpbnMoY2FycmlhZ2VSZXR1cm4pKQogICAgICAgICByZXR1cm4gYXR0cmlidXRl
VmFsdWU7CiAKLSAgICBWZWN0b3I8VUNoYXI+IHN0cmlwcGVkOworICAgIFN0cmluZ0J1aWxkZXIg
c3RyaXBwZWQ7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmlidXRlVmFsdWUubGVuZ3RoKCk7
CiAgICAgc3RyaXBwZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkBAIC0xMTksNyArMTE5LDcgQEAgU3RyaW5nIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzdHJpcAogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIHN0cmlwcGVkLmFwcGVuZChjaGFyYWN0ZXIpOwogICAgIH0KLSAgICByZXR1cm4gU3Ry
aW5nOjphZG9wdChzdHJpcHBlZCk7CisgICAgcmV0dXJuIHN0cmlwcGVkLnRvU3RyaW5nKCk7CiB9
CiAKIHN0YXRpYyBib29sIGlzTm90TGluZUJyZWFrKFVDaGFyIGNoKSB7IHJldHVybiBjaCAhPSBu
ZXdsaW5lQ2hhcmFjdGVyICYmIGNoICE9IGNhcnJpYWdlUmV0dXJuOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAJKHJldmlzaW9uIDkz
NzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgSFRNTFZpZXdTb3VyY2VEb2N1
bWVudDo6cHJvY2Vzc1RhZ1QKIHsKICAgICBtX2N1cnJlbnQgPSBhZGRTcGFuV2l0aENsYXNzTmFt
ZSgid2Via2l0LWh0bWwtdGFnIik7CiAKLSAgICBBdG9taWNTdHJpbmcgdGFnTmFtZSh0b2tlbi5u
YW1lKCkuZGF0YSgpLCB0b2tlbi5uYW1lKCkuc2l6ZSgpKTsKKyAgICBBdG9taWNTdHJpbmcgdGFn
TmFtZSh0b2tlbi5uYW1lKCkudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpOwogCiAgICAgdW5z
aWduZWQgaW5kZXggPSAwOwogICAgIEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IHRva2VuLmF0dHJpYnV0ZXMoKS5iZWdpbigpOwpAQCAtMTUyLDggKzE1Miw4
IEBAIHZvaWQgSFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6cHJvY2Vzc1RhZ1QKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgQXRvbWljU3RyaW5nIG5hbWUoaXRlci0+bV9u
YW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7Ci0gICAgICAgIFN0cmluZyB2YWx1ZShp
dGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOyAKKyAgICAgICAgQXRv
bWljU3RyaW5nIG5hbWUoaXRlci0+bV9uYW1lLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsK
KyAgICAgICAgU3RyaW5nIHZhbHVlKGl0ZXItPm1fdmFsdWUudG9TdHJpbmdQcmVzZXJ2ZUNhcGFj
aXR5KCkpOwogCiAgICAgICAgIGluZGV4ID0gYWRkUmFuZ2Uoc291cmNlLCBpbmRleCwgaXRlci0+
bV9uYW1lUmFuZ2UubV9zdGFydCAtIHRva2VuLnN0YXJ0SW5kZXgoKSwgIiIpOwogICAgICAgICBp
bmRleCA9IGFkZFJhbmdlKHNvdXJjZSwgaW5kZXgsIGl0ZXItPm1fbmFtZVJhbmdlLm1fZW5kIC0g
dG9rZW4uc3RhcnRJbmRleCgpLCAid2Via2l0LWh0bWwtYXR0cmlidXRlLW5hbWUiKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAJ
KHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9h
ZFNjYW5uZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw5ICs1Myw5IEBAIHZvaWQgQ1NTUHJl
bG9hZFNjYW5uZXI6OnNjYW4oY29uc3QgSFRNTFQKIHsKICAgICBtX3NjYW5uaW5nQm9keSA9IHNj
YW5uaW5nQm9keTsKIAotICAgIGNvbnN0IEhUTUxUb2tlbjo6RGF0YVZlY3RvciYgY2hhcmFjdGVy
cyA9IHRva2VuLmNoYXJhY3RlcnMoKTsKLSAgICBmb3IgKEhUTUxUb2tlbjo6RGF0YVZlY3Rvcjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGNoYXJhY3RlcnMuYmVnaW4oKTsgaXRlciAhPSBjaGFyYWN0
ZXJzLmVuZCgpICYmIG1fc3RhdGUgIT0gRG9uZVBhcnNpbmdJbXBvcnRSdWxlczsgKytpdGVyKQot
ICAgICAgICB0b2tlbml6ZSgqaXRlcik7CisgICAgY29uc3QgU3RyaW5nQnVpbGRlciYgY2hhcmFj
dGVycyA9IHRva2VuLmNoYXJhY3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y2hhcmFjdGVycy5sZW5ndGgoKSAmJiBtX3N0YXRlICE9IERvbmVQYXJzaW5nSW1wb3J0UnVsZXM7
ICsraSkKKyAgICAgICAgdG9rZW5pemUoY2hhcmFjdGVyc1tpXSk7CiB9CiAKIGlubGluZSB2b2lk
IENTU1ByZWxvYWRTY2FubmVyOjp0b2tlbml6ZShVQ2hhciBjKQpAQCAtMTkyLDE0ICsxOTIsMTQg
QEAgc3RhdGljIFN0cmluZyBwYXJzZUNTU1N0cmluZ09yVVJMKGNvbnN0IAogCiB2b2lkIENTU1By
ZWxvYWRTY2FubmVyOjplbWl0UnVsZSgpCiB7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCJp
bXBvcnQiLCBtX3J1bGUuZGF0YSgpLCBtX3J1bGUuc2l6ZSgpKSkgewotICAgICAgICBTdHJpbmcg
dmFsdWUgPSBwYXJzZUNTU1N0cmluZ09yVVJMKG1fcnVsZVZhbHVlLmRhdGEoKSwgbV9ydWxlVmFs
dWUuc2l6ZSgpKTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoImltcG9ydCIsIG1fcnVsZS5j
aGFyYWN0ZXJzKCksIG1fcnVsZS5sZW5ndGgoKSkpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0g
cGFyc2VDU1NTdHJpbmdPclVSTChtX3J1bGVWYWx1ZS5jaGFyYWN0ZXJzKCksIG1fcnVsZVZhbHVl
Lmxlbmd0aCgpKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHZhbHVlKSk7
CiAgICAgICAgICAgICBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5wcmVsb2Fk
KENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCByZXF1ZXN0LCBTdHJpbmcoKSwgbV9zY2Fu
bmluZ0JvZHkpOwogICAgICAgICB9CiAgICAgICAgIG1fc3RhdGUgPSBJbml0aWFsOwotICAgIH0g
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoImNoYXJzZXQiLCBtX3J1bGUuZGF0YSgpLCBtX3J1
bGUuc2l6ZSgpKSkKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCJjaGFyc2V0Iiwg
bV9ydWxlLmNoYXJhY3RlcnMoKSwgbV9ydWxlLmxlbmd0aCgpKSkKICAgICAgICAgbV9zdGF0ZSA9
IEluaXRpYWw7CiAgICAgZWxzZQogICAgICAgICBtX3N0YXRlID0gRG9uZVBhcnNpbmdJbXBvcnRS
dWxlczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNj
YW5uZXIuaAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9D
U1NQcmVsb2FkU2Nhbm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVm
aW5lIENTU1ByZWxvYWRTY2FubmVyX2gKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02MSw4ICs2MSw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBlbWl0UnVsZSgpOwogCiAgICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBWZWN0b3I8VUNo
YXIsIDE2PiBtX3J1bGU7Ci0gICAgVmVjdG9yPFVDaGFyPiBtX3J1bGVWYWx1ZTsKKyAgICBTdHJp
bmdCdWlsZGVyIG1fcnVsZTsKKyAgICBTdHJpbmdCdWlsZGVyIG1fcnVsZVZhbHVlOwogCiAgICAg
Ym9vbCBtX3NjYW5uaW5nQm9keTsKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5j
cHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENv
bnN0cnVjdGlvblNpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDcgQEAgdm9p
ZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEJvZAogdm9pZCBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0RG9jdHlwZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIEFT
U0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkRPQ1RZUEUpOwotICAgIGF0dGFj
aChtX2F0dGFjaG1lbnRSb290LCBEb2N1bWVudFR5cGU6OmNyZWF0ZShtX2RvY3VtZW50LCB0b2tl
bi5uYW1lKCksIFN0cmluZzo6YWRvcHQodG9rZW4ucHVibGljSWRlbnRpZmllcigpKSwgU3RyaW5n
OjphZG9wdCh0b2tlbi5zeXN0ZW1JZGVudGlmaWVyKCkpKSk7CisgICAgYXR0YWNoKG1fYXR0YWNo
bWVudFJvb3QsIERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRva2VuLm5hbWUoKSwg
dG9rZW4ucHVibGljSWRlbnRpZmllcigpLnJlbGVhc2VTdHJpbmcoKSwgdG9rZW4uc3lzdGVtSWRl
bnRpZmllcigpLnJlbGVhc2VTdHJpbmcoKSkpOwogICAgIAogICAgIC8vIERPQ1RZUEUgbm9kZXMg
YXJlIG9ubHkgcHJvY2Vzc2VkIHdoZW4gcGFyc2luZyBmcmFnbWVudHMgdy9vIGNvbnRleHRFbGVt
ZW50cywgd2hpY2gKICAgICAvLyBuZXZlciBvY2N1cnMuICBIb3dldmVyLCBpZiB3ZSBldmVyIGNo
b3NlIHRvIHN1cHBvcnQgc3VjaCwgdGhpcyBjb2RlIGlzIHN1YnRseSB3cm9uZywKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwCShyZXZp
c2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHZhbHVlOwogICAgIH0KIAotICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb252ZXJ0VG9V
VEYxNihVQ2hhcjMyIHZhbHVlLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZEVudGl0eSkKKyAg
ICBpbmxpbmUgc3RhdGljIGJvb2wgY29udmVydFRvVVRGMTYoVUNoYXIzMiB2YWx1ZSwgU3RyaW5n
QnVpbGRlciYgZGVjb2RlZEVudGl0eSkKICAgICB7CiAgICAgICAgIGlmIChVX0lTX0JNUCh2YWx1
ZSkpIHsKICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0YXRpY19jYXN0PFVDaGFyPih2
YWx1ZSk7CkBAIC04NSw5ICs4NSw5IEBAIHB1YmxpYzoKIAogICAgIGlubGluZSBzdGF0aWMgYm9v
bCBhY2NlcHRNYWxmb3JtZWQoKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBpbmxpbmUgc3RhdGlj
IGJvb2wgY29uc3VtZU5hbWVkRW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBWZWN0b3I8
VUNoYXIsIDE2PiYgZGVjb2RlZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNo
YXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIsIFVDaGFyJiBjYykKKyAgICBpbmxpbmUgc3Rh
dGljIGJvb2wgY29uc3VtZU5hbWVkRW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJp
bmdCdWlsZGVyJiBkZWNvZGVkRW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hh
ciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciwgVUNoYXImIGNjKQogICAgIHsKLSAgICAgICAg
VmVjdG9yPFVDaGFyLCAxMD4gY29uc3VtZWRDaGFyYWN0ZXJzOworICAgICAgICBTdHJpbmdCdWls
ZGVyIGNvbnN1bWVkQ2hhcmFjdGVyczsKICAgICAgICAgSFRNTEVudGl0eVNlYXJjaCBlbnRpdHlT
ZWFyY2g7CiAgICAgICAgIHdoaWxlICghc291cmNlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
Y2MgPSAqc291cmNlOwpAQCAtMTM5LDcgKzEzOSw3IEBAIHB1YmxpYzoKIH0KIAogCi1ib29sIGNv
bnN1bWVIVE1MRW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBWZWN0b3I8VUNoYXIsIDE2
PiYgZGVjb2RlZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRp
b25hbEFsbG93ZWRDaGFyYWN0ZXIpCitib29sIGNvbnN1bWVIVE1MRW50aXR5KFNlZ21lbnRlZFN0
cmluZyYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkRW50aXR5LCBib29sJiBub3RFbm91
Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKIHsKICAgICBy
ZXR1cm4gY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZTxIVE1MRW50aXR5UGFyc2VyPihzb3VyY2Us
IGRlY29kZWRFbnRpdHksIG5vdEVub3VnaENoYXJhY3RlcnMsIGFkZGl0aW9uYWxBbGxvd2VkQ2hh
cmFjdGVyKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQ
YXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50
aXR5UGFyc2VyLmgJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTEVudGl0eVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRT
dHJpbmcmLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZEVudGl0eSwgYm9vbCYgbm90RW5vdWdo
Q2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPSAnXDAnKTsKK2Jv
b2wgY29uc3VtZUhUTUxFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiwgU3RyaW5nQnVpbGRlciYgZGVj
b2RlZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFs
bG93ZWRDaGFyYWN0ZXIgPSAnXDAnKTsKIAogLy8gVXNlZCBieSB0aGUgWE1MIHBhcnNlci4gIE5v
dCBzdWl0YWJsZSBmb3IgdXNlIGluIEhUTUwgcGFyc2luZy4gIFVzZSBjb25zdW1lSFRNTEVudGl0
eSBpbnN0ZWFkLgogVUNoYXIgZGVjb2RlTmFtZWRFbnRpdHkoY29uc3QgY2hhciopOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJz
ZXIuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxNZXRhQ2hhcnNldFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMSArMTA0LDgg
QEAgYm9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnByb2Nlc3NNZXRhKAogewogICAgIGNvbnN0
IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgdG9rZW5BdHRyaWJ1dGVzID0gbV90b2tlbi5hdHRy
aWJ1dGVzKCk7CiAgICAgQXR0cmlidXRlTGlzdCBhdHRyaWJ1dGVzOwotICAgIGZvciAoSFRNTFRv
a2VuOjpBdHRyaWJ1dGVMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gdG9rZW5BdHRyaWJ1dGVz
LmJlZ2luKCk7IGl0ZXIgIT0gdG9rZW5BdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAg
ICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1l
LnNpemUoKSk7Ci0gICAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLmRh
dGEoKSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOwotICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZCht
YWtlX3BhaXIoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpKTsKLSAgICB9CisgICAgZm9y
IChIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0b2tlbkF0
dHJpYnV0ZXMuYmVnaW4oKTsgaXRlciAhPSB0b2tlbkF0dHJpYnV0ZXMuZW5kKCk7ICsraXRlcikK
KyAgICAgICAgYXR0cmlidXRlcy5hcHBlbmQobWFrZV9wYWlyKGl0ZXItPm1fbmFtZS50b1N0cmlu
Z1ByZXNlcnZlQ2FwYWNpdHkoKSwgaXRlci0+bV92YWx1ZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNp
dHkoKSkpOwogCiAgICAgbV9lbmNvZGluZyA9IGVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1dGVzKGF0
dHJpYnV0ZXMpOwogICAgIHJldHVybiBtX2VuY29kaW5nLmlzVmFsaWQoKTsKQEAgLTE3Nyw3ICsx
NzQsNyBAQCBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6Y2hlY2tGb3JNZXRhCiAgICAgd2hp
bGUgKG1fdG9rZW5pemVyLT5uZXh0VG9rZW4obV9pbnB1dCwgbV90b2tlbikpIHsKICAgICAgICAg
Ym9vbCBlbmQgPSBtX3Rva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnOwogICAg
ICAgICBpZiAoZW5kIHx8IG1fdG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRh
ZykgewotICAgICAgICAgICAgQXRvbWljU3RyaW5nIHRhZ05hbWUobV90b2tlbi5uYW1lKCkuZGF0
YSgpLCBtX3Rva2VuLm5hbWUoKS5zaXplKCkpOworICAgICAgICAgICAgQXRvbWljU3RyaW5nIHRh
Z05hbWUobV90b2tlbi5uYW1lKCkudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpOwogICAgICAg
ICAgICAgaWYgKCFlbmQpIHsKICAgICAgICAgICAgICAgICBtX3Rva2VuaXplci0+dXBkYXRlU3Rh
dGVGb3IodGFnTmFtZSwgMCk7CiAgICAgICAgICAgICAgICAgaWYgKHRhZ05hbWUgPT0gbWV0YVRh
ZyAmJiBwcm9jZXNzTWV0YSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUGFyc2VySWRpb21zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjA4LDcgKzIwOCw4IEBAIGJvb2wgcGFyc2VIVE1MSW50ZWdlcihjb25zdCBTdHJpbmcmIGlucHUK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gU3RlcCA4Ci0gICAgVmVjdG9yPFVDaGFy
LCAxNj4gZGlnaXRzOworICAgIFN0cmluZ0J1aWxkZXIgZGlnaXRzOworICAgIGRpZ2l0cy5yZXNl
cnZlQ2FwYWNpdHkoMTYpOwogICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewogICAgICAgICBp
ZiAoIWlzQVNDSUlEaWdpdCgqcG9zaXRpb24pKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTYs
NyArMjE3LDcgQEAgYm9vbCBwYXJzZUhUTUxJbnRlZ2VyKGNvbnN0IFN0cmluZyYgaW5wdQogICAg
IH0KIAogICAgIC8vIFN0ZXAgOQotICAgIHZhbHVlID0gc2lnbiAqIGNoYXJhY3RlcnNUb0ludFN0
cmljdChkaWdpdHMuZGF0YSgpLCBkaWdpdHMuc2l6ZSgpKTsKKyAgICB2YWx1ZSA9IHNpZ24gKiBj
aGFyYWN0ZXJzVG9JbnRTdHJpY3QoZGlnaXRzLmNoYXJhY3RlcnMoKSwgZGlnaXRzLmxlbmd0aCgp
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjU0LDcgKzI1NSw4IEBAIGJvb2wgcGFyc2VI
VE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0IFMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gU3RlcCA4Ci0gICAgVmVjdG9yPFVDaGFyLCAxNj4gZGlnaXRzOworICAgIFN0cmluZ0J1
aWxkZXIgZGlnaXRzOworICAgIGRpZ2l0cy5yZXNlcnZlQ2FwYWNpdHkoMTYpOwogICAgIHdoaWxl
IChwb3NpdGlvbiA8IGVuZCkgewogICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqcG9zaXRpb24p
KQogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNjIsNyArMjY0LDcgQEAgYm9vbCBwYXJzZUhUTUxO
b25OZWdhdGl2ZUludGVnZXIoY29uc3QgUwogICAgIH0KIAogICAgIC8vIFN0ZXAgOQotICAgIHZh
bHVlID0gY2hhcmFjdGVyc1RvVUludFN0cmljdChkaWdpdHMuZGF0YSgpLCBkaWdpdHMuc2l6ZSgp
KTsKKyAgICB2YWx1ZSA9IGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QoZGlnaXRzLmNoYXJhY3RlcnMo
KSwgZGlnaXRzLmxlbmd0aCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCShyZXZp
c2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nh
bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIHsKIGNs
YXNzIFByZWxvYWRUYXNrIHsKIHB1YmxpYzoKICAgICBQcmVsb2FkVGFzayhjb25zdCBIVE1MVG9r
ZW4mIHRva2VuKQotICAgICAgICA6IG1fdGFnTmFtZSh0b2tlbi5uYW1lKCkuZGF0YSgpLCB0b2tl
bi5uYW1lKCkuc2l6ZSgpKQorICAgICAgICA6IG1fdGFnTmFtZSh0b2tlbi5uYW1lKCkudG9TdHJp
bmdQcmVzZXJ2ZUNhcGFjaXR5KCkpCiAgICAgICAgICwgbV9saW5rSXNTdHlsZVNoZWV0KGZhbHNl
KQogICAgICAgICAsIG1fbGlua01lZGlhQXR0cmlidXRlSXNTY3JlZW4odHJ1ZSkKICAgICAgICAg
LCBtX2lucHV0SXNJbWFnZShmYWxzZSkKQEAgLTY2LDggKzY2LDggQEAgcHVibGljOgogCiAgICAg
ICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0g
YXR0cmlidXRlcy5iZWdpbigpOwogICAgICAgICAgICAgIGl0ZXIgIT0gYXR0cmlidXRlcy5lbmQo
KTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBBdG9taWNTdHJpbmcgYXR0cmlidXRlTmFtZShpdGVy
LT5tX25hbWUuZGF0YSgpLCBpdGVyLT5tX25hbWUuc2l6ZSgpKTsKLSAgICAgICAgICAgIFN0cmlu
ZyBhdHRyaWJ1dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5zaXpl
KCkpOworICAgICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1l
LnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIFN0cmluZyBhdHRyaWJ1
dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKIAogICAg
ICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gY2hhcnNldEF0dHIpCiAgICAgICAgICAgICAg
ICAgbV9jaGFyc2V0ID0gYXR0cmlidXRlVmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVG9rZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVG9rZW4uaAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVG9rZW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIE1hcmt1cFRva2VuQmFzZTxIVE1MVG9rZW5UeXBlcywgSFRNTFRva2VuVHlw
ZXM6OkRvY3R5cGVEYXRhPjo6YXBwZW5kVG9OYW1lKGNoYXJhY3Rlcik7CiAgICAgfQogICAgIAot
ICAgIGNvbnN0IERhdGFWZWN0b3ImIG5hbWUoKSBjb25zdAorICAgIGNvbnN0IFN0cmluZ0J1aWxk
ZXImIG5hbWUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBIVE1MVG9r
ZW5UeXBlczo6U3RhcnRUYWcgfHwgbV90eXBlID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcgfHwg
bV90eXBlID09IEhUTUxUb2tlblR5cGVzOjpET0NUWVBFKTsKICAgICAgICAgcmV0dXJuIE1hcmt1
cFRva2VuQmFzZTxIVE1MVG9rZW5UeXBlcywgSFRNTFRva2VuVHlwZXM6OkRvY3R5cGVEYXRhPjo6
bmFtZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXpl
ci5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIHRlbXBsYXRlPD4KIFF1YWxpZmllZE5hbWUgQXRvbWljTWFya3Vw
VG9rZW5CYXNlPEhUTUxUb2tlbj46Om5hbWVGb3JBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlQmFz
ZSYgYXR0cmlidXRlKSBjb25zdAogewotICAgIHJldHVybiBRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCBBdG9taWNTdHJpbmcoYXR0cmlidXRlLm1fbmFtZS5kYXRhKCksIGF0dHJpYnV0ZS5tX25hbWUu
c2l6ZSgpKSwgbnVsbEF0b20pOworICAgIHJldHVybiBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBB
dG9taWNTdHJpbmcoYXR0cmlidXRlLm1fbmFtZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSks
IG51bGxBdG9tKTsKIH0KIAogdGVtcGxhdGU8PgpAQCAtNzYsMTYgKzc2LDYgQEAgaW5saW5lIFVD
aGFyIHRvTG93ZXJDYXNlKFVDaGFyIGNjKQogICAgIHJldHVybiBjYyArIGxvd2VyQ2FzZU9mZnNl
dDsKIH0KIAotaW5saW5lIGJvb2wgdmVjdG9yRXF1YWxzU3RyaW5nKGNvbnN0IFZlY3RvcjxVQ2hh
ciwgMzI+JiB2ZWN0b3IsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIGlmICh2ZWN0b3Iu
c2l6ZSgpICE9IHN0cmluZy5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNv
bnN0IFVDaGFyKiBzdHJpbmdEYXRhID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBV
Q2hhciogdmVjdG9yRGF0YSA9IHZlY3Rvci5kYXRhKCk7Ci0gICAgLy8gRklYTUU6IElzIHRoZXJl
IGEgaGlnaGVyLWxldmVsIGZ1bmN0aW9uIHdlIHNob3VsZCBiZSBjYWxsaW5nIGhlcmU/Ci0gICAg
cmV0dXJuICFtZW1jbXAoc3RyaW5nRGF0YSwgdmVjdG9yRGF0YSwgdmVjdG9yLnNpemUoKSAqIHNp
emVvZihVQ2hhcikpOwotfQotCiBpbmxpbmUgYm9vbCBpc0VuZFRhZ0J1ZmZlcmluZ1N0YXRlKEhU
TUxUb2tlbml6ZXJTdGF0ZTo6U3RhdGUgc3RhdGUpCiB7CiAgICAgc3dpdGNoIChzdGF0ZSkgewpA
QCAtMTQ1LDcgKzEzNSw3IEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cmVzZXQoKQogaW5saW5lIGJv
b2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc0VudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkK
IHsKICAgICBib29sIG5vdEVub3VnaENoYXJhY3RlcnMgPSBmYWxzZTsKLSAgICBWZWN0b3I8VUNo
YXIsIDE2PiBkZWNvZGVkRW50aXR5OworICAgIFN0cmluZ0J1aWxkZXIgZGVjb2RlZEVudGl0eTsK
ICAgICBib29sIHN1Y2Nlc3MgPSBjb25zdW1lSFRNTEVudGl0eShzb3VyY2UsIGRlY29kZWRFbnRp
dHksIG5vdEVub3VnaENoYXJhY3RlcnMpOwogICAgIGlmIChub3RFbm91Z2hDaGFyYWN0ZXJzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTMsOSArMTQzLDggQEAgaW5saW5lIGJvb2wgSFRN
TFRva2VuaXplcjo6cHJvY2Vzc0VudGl0eQogICAgICAgICBBU1NFUlQoZGVjb2RlZEVudGl0eS5p
c0VtcHR5KCkpOwogICAgICAgICBidWZmZXJDaGFyYWN0ZXIoJyYnKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBWZWN0b3I8VUNoYXI+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZGVjb2RlZEVudGl0
eS5iZWdpbigpOwotICAgICAgICBmb3IgKDsgaXRlciAhPSBkZWNvZGVkRW50aXR5LmVuZCgpOyAr
K2l0ZXIpCi0gICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXIoKml0ZXIpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVjb2RlZEVudGl0eS5sZW5ndGgoKTsgKytpKQorICAgICAg
ICAgICAgYnVmZmVyQ2hhcmFjdGVyKGRlY29kZWRFbnRpdHlbaV0pOwogICAgIH0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTk4Nyw3ICs5NzYsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6Om5leHRU
b2tlbihTZWdtZW50ZWRTCiAKICAgICBIVE1MX0JFR0lOX1NUQVRFKENoYXJhY3RlclJlZmVyZW5j
ZUluQXR0cmlidXRlVmFsdWVTdGF0ZSkgewogICAgICAgICBib29sIG5vdEVub3VnaENoYXJhY3Rl
cnMgPSBmYWxzZTsKLSAgICAgICAgVmVjdG9yPFVDaGFyLCAxNj4gZGVjb2RlZEVudGl0eTsKKyAg
ICAgICAgU3RyaW5nQnVpbGRlciBkZWNvZGVkRW50aXR5OwogICAgICAgICBib29sIHN1Y2Nlc3Mg
PSBjb25zdW1lSFRNTEVudGl0eShzb3VyY2UsIGRlY29kZWRFbnRpdHksIG5vdEVub3VnaENoYXJh
Y3RlcnMsIG1fYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpOwogICAgICAgICBpZiAobm90RW5v
dWdoQ2hhcmFjdGVycykKICAgICAgICAgICAgIHJldHVybiBoYXZlQnVmZmVyZWRDaGFyYWN0ZXJU
b2tlbigpOwpAQCAtOTk1LDkgKzk4NCw4IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6bmV4dFRva2Vu
KFNlZ21lbnRlZFMKICAgICAgICAgICAgIEFTU0VSVChkZWNvZGVkRW50aXR5LmlzRW1wdHkoKSk7
CiAgICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKCcmJyk7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBWZWN0b3I8VUNoYXI+Ojpjb25zdF9pdGVyYXRvciBp
dGVyID0gZGVjb2RlZEVudGl0eS5iZWdpbigpOwotICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0g
ZGVjb2RlZEVudGl0eS5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgICAgIG1fdG9rZW4tPmFw
cGVuZFRvQXR0cmlidXRlVmFsdWUoKml0ZXIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRlY29kZWRFbnRpdHkubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgICAgICBt
X3Rva2VuLT5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKGRlY29kZWRFbnRpdHlbaV0pOwogICAgICAg
ICB9CiAgICAgICAgIC8vIFdlJ3JlIHN1cHBvc2VkIHRvIHN3aXRjaCBiYWNrIHRvIHRoZSBhdHRy
aWJ1dGUgdmFsdWUgc3RhdGUgdGhhdAogICAgICAgICAvLyB3ZSB3ZXJlIGluIHdoZW4gd2Ugd2Vy
ZSBzd2l0Y2hlZCBpbnRvIHRoaXMgc3RhdGUuIFJhdGhlciB0aGFuCkBAIC0xNTk5LDcgKzE1ODcs
NyBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnVwZGF0ZVN0YXRlRm9yKGNvbnN0CiAKIGlubGluZSBi
b29sIEhUTUxUb2tlbml6ZXI6OnRlbXBvcmFyeUJ1ZmZlcklzKGNvbnN0IFN0cmluZyYgZXhwZWN0
ZWRTdHJpbmcpCiB7Ci0gICAgcmV0dXJuIHZlY3RvckVxdWFsc1N0cmluZyhtX3RlbXBvcmFyeUJ1
ZmZlciwgZXhwZWN0ZWRTdHJpbmcpOworICAgIHJldHVybiBtX3RlbXBvcmFyeUJ1ZmZlciA9PSBl
eHBlY3RlZFN0cmluZzsKIH0KIAogaW5saW5lIHZvaWQgSFRNTFRva2VuaXplcjo6YWRkVG9Qb3Nz
aWJsZUVuZFRhZyhVQ2hhciBjYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVG9rZW5pemVyLmgJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFRva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsMTcgKzE5NSwxNyBA
QCBwcml2YXRlOgogICAgIH0KICAgICBpbmxpbmUgYm9vbCBpc0FwcHJvcHJpYXRlRW5kVGFnKCk7
CiAKLSAgICBWZWN0b3I8VUNoYXIsIDMyPiBtX2FwcHJvcHJpYXRlRW5kVGFnTmFtZTsKKyAgICBT
dHJpbmdCdWlsZGVyIG1fYXBwcm9wcmlhdGVFbmRUYWdOYW1lOwogCiAgICAgYm9vbCBtX3Nob3Vs
ZEFsbG93Q0RBVEE7CiAKICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFw
cHMvY3VycmVudC13b3JrLyN0ZW1wb3JhcnktYnVmZmVyCi0gICAgVmVjdG9yPFVDaGFyLCAzMj4g
bV90ZW1wb3JhcnlCdWZmZXI7CisgICAgU3RyaW5nQnVpbGRlciBtX3RlbXBvcmFyeUJ1ZmZlcjsK
IAogICAgIC8vIFdlIG9jY2F0aW9uYWxseSB3YW50IHRvIGVtaXQgYm90aCBhIGNoYXJhY3RlciB0
b2tlbiBhbmQgYW4gZW5kIHRhZwogICAgIC8vIHRva2VuIChlLmcuLCB3aGVuIGxleGluZyBzY3Jp
cHQpLiBXZSBidWZmZXIgdGhlIG5hbWUgb2YgdGhlIGVuZCB0YWcKICAgICAvLyB0b2tlbiBoZXJl
IHNvIHdlIHJlbWVtYmVyIGl0IG5leHQgdGltZSB3ZSByZS1lbnRlciB0aGUgdG9rZW5pemVyLgot
ICAgIFZlY3RvcjxVQ2hhciwgMzI+IG1fYnVmZmVyZWRFbmRUYWdOYW1lOworICAgIFN0cmluZ0J1
aWxkZXIgbV9idWZmZXJlZEVuZFRhZ05hbWU7CiAgICAgCiAgICAgYm9vbCBtX3VzZVByZUhUTUw1
UGFyc2VyUXVpcmtzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxU
cmVlQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRyZWVCdWlsZGVyLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsOCAr
MjQ4LDggQEAgY2xhc3MgSFRNTFRyZWVCdWlsZGVyOjpFeHRlcm5hbENoYXJhY3RlcgogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIpOwogcHVibGlj
OgogICAgIGV4cGxpY2l0IEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKLSAgICAgICAgOiBtX2N1cnJlbnQodG9rZW4uY2hhcmFjdGVycygpLmRhdGEo
KSkKLSAgICAgICAgLCBtX2VuZChtX2N1cnJlbnQgKyB0b2tlbi5jaGFyYWN0ZXJzKCkuc2l6ZSgp
KQorICAgICAgICA6IG1fY3VycmVudCh0b2tlbi5jaGFyYWN0ZXJzKCkuY2hhcmFjdGVycygpKQor
ICAgICAgICAsIG1fZW5kKG1fY3VycmVudCArIHRva2VuLmNoYXJhY3RlcnMoKS5sZW5ndGgoKSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKICAgICB9CkBAIC0yOTEsNyArMjkx
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RyaW5nKHN0YXJ0LCBtX2N1cnJlbnQgLSBz
dGFydCk7CiAgICAgfQogCi0gICAgdm9pZCBnaXZlUmVtYWluaW5nVG8oVmVjdG9yPFVDaGFyPiYg
cmVjaXBpZW50KQorICAgIHZvaWQgZ2l2ZVJlbWFpbmluZ1RvKFN0cmluZ0J1aWxkZXImIHJlY2lw
aWVudCkKICAgICB7CiAgICAgICAgIHJlY2lwaWVudC5hcHBlbmQobV9jdXJyZW50LCBtX2VuZCAt
IG1fY3VycmVudCk7CiAgICAgICAgIG1fY3VycmVudCA9IG1fZW5kOwpAQCAtMzAwLDcgKzMwMCw3
IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdGFrZVJlbWFpbmluZ1doaXRlc3BhY2UoKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwotICAgICAgICBWZWN0b3I8VUNoYXI+IHdoaXRl
c3BhY2U7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgd2hpdGVzcGFjZTsKICAgICAgICAgZG8gewog
ICAgICAgICAgICAgVUNoYXIgY2MgPSAqbV9jdXJyZW50Kys7CiAgICAgICAgICAgICBpZiAoaXNI
VE1MU3BhY2UoY2MpKQpAQCAtMzExLDcgKzMxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdG8g
aW5zZXJ0IGEgdGV4dCBub2RlIChhcyBvcHBvc2VkIHRvIGluc2VydGluZyBhbiBlbXB0eSB0ZXh0
IG5vZGUpLgogICAgICAgICBpZiAod2hpdGVzcGFjZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHdoaXRlc3BhY2Up
OworICAgICAgICByZXR1cm4gd2hpdGVzcGFjZS50b1N0cmluZygpOwogICAgIH0KIAogcHJpdmF0
ZToKQEAgLTI3MTgsNyArMjcxOCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9y
QWZ0ZXJIZWEKIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJblRhYmxlVGV4dCgp
CiB7Ci0gICAgU3RyaW5nIGNoYXJhY3RlcnMgPSBTdHJpbmc6OmFkb3B0KG1fcGVuZGluZ1RhYmxl
Q2hhcmFjdGVycyk7CisgICAgU3RyaW5nIGNoYXJhY3RlcnMgPSBtX3BlbmRpbmdUYWJsZUNoYXJh
Y3RlcnMucmVsZWFzZVN0cmluZygpOwogICAgIGlmICghaXNBbGxXaGl0ZXNwYWNlKGNoYXJhY3Rl
cnMpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBwYXJzZSBlcnJvcgogICAgICAgICBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6UmVkaXJlY3RUb0Zvc3RlclBhcmVudEd1YXJkIHJlZGlyZWN0ZXIobV90cmVl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5o
CShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNyArMjQxLDcgQEAgcHJpdmF0ZToKICAg
ICBJbnNlcnRpb25Nb2RlIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlOwogCiAgICAgLy8gaHR0cDov
L3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9r
ZW5pemF0aW9uLmh0bWwjcGVuZGluZy10YWJsZS1jaGFyYWN0ZXItdG9rZW5zCi0gICAgVmVjdG9y
PFVDaGFyPiBtX3BlbmRpbmdUYWJsZUNoYXJhY3RlcnM7CisgICAgU3RyaW5nQnVpbGRlciBtX3Bl
bmRpbmdUYWJsZUNoYXJhY3RlcnM7CiAKICAgICAvLyBXZSBhY2Nlc3MgcGFyc2VyIGJlY2F1c2Ug
SFRNTDUgc3BlYyByZXF1aXJlcyB0aGF0IHdlIGJlIGFibGUgdG8gY2hhbmdlIHRoZSBzdGF0ZSBv
ZiB0aGUgdG9rZW5pemVyCiAgICAgLy8gZnJvbSB3aXRoaW4gcGFyc2VyIGFjdGlvbnMuIFdlIGFs
c28gbmVlZCBpdCB0byB0cmFjayB0aGUgY3VycmVudCBwb3NpdGlvbi4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxWaWV3U291cmNlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVmlld1NvdXJjZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFZpZXdTb3Vy
Y2VQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgSFRNTFZp
ZXdTb3VyY2VQYXJzZXI6OnVwZGF0ZVRva2VuaXoKICAgICBpZiAobV90b2tlbi50eXBlKCkgIT0g
SFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKQogICAgICAgICByZXR1cm47CiAKLSAgICBBdG9taWNT
dHJpbmcgdGFnTmFtZShtX3Rva2VuLm5hbWUoKS5kYXRhKCksIG1fdG9rZW4ubmFtZSgpLnNpemUo
KSk7CisgICAgQXRvbWljU3RyaW5nIHRhZ05hbWUobV90b2tlbi5uYW1lKCkudG9TdHJpbmdQcmVz
ZXJ2ZUNhcGFjaXR5KCkpOwogICAgIG1fdG9rZW5pemVyLT51cGRhdGVTdGF0ZUZvcih0YWdOYW1l
LCBkb2N1bWVudCgpLT5mcmFtZSgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvWFNTQXVkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvWFNTQXVkaXRvci5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDEzICs2OSwx
MyBAQCBzdGF0aWMgYm9vbCBpc1JlcXVpcmVkRm9ySW5qZWN0aW9uKFVDaGFyCiAKIHN0YXRpYyBi
b29sIGhhc05hbWUoY29uc3QgSFRNTFRva2VuJiB0b2tlbiwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSkKIHsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ051bGxpdHkodG9rZW4ubmFtZSgpLCBz
dGF0aWNfY2FzdDxjb25zdCBTdHJpbmcmPihuYW1lLmxvY2FsTmFtZSgpKSk7CisgICAgcmV0dXJu
IGVxdWFsSWdub3JpbmdOdWxsaXR5KHRva2VuLm5hbWUoKS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNp
dHkoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nJj4obmFtZS5sb2NhbE5hbWUoKSkpOwogfQog
CiBzdGF0aWMgYm9vbCBmaW5kQXR0cmlidXRlV2l0aE5hbWUoY29uc3QgSFRNTFRva2VuJiB0b2tl
biwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgc2l6ZV90JiBpbmRleE9mTWF0Y2hpbmdBdHRy
aWJ1dGUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b2tlbi5hdHRyaWJ1dGVzKCku
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdOdWxsaXR5KHRva2VuLmF0
dHJpYnV0ZXMoKS5hdChpKS5tX25hbWUsIG5hbWUubG9jYWxOYW1lKCkpKSB7CisgICAgICAgIGlm
IChlcXVhbElnbm9yaW5nTnVsbGl0eSh0b2tlbi5hdHRyaWJ1dGVzKCkuYXQoaSkubV9uYW1lLnRv
U3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpLCBuYW1lLmxvY2FsTmFtZSgpKSkgewogICAgICAgICAg
ICAgaW5kZXhPZk1hdGNoaW5nQXR0cmlidXRlID0gaTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CkBAIC04MywxMCArODMsMTAgQEAgc3RhdGljIGJvb2wgZmluZEF0dHJpYnV0
ZVdpdGhOYW1lKGNvbnN0IAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaXNO
YW1lT2ZJbmxpbmVFdmVudEhhbmRsZXIoY29uc3QgVmVjdG9yPFVDaGFyLCAzMj4mIG5hbWUpCitz
dGF0aWMgYm9vbCBpc05hbWVPZklubGluZUV2ZW50SGFuZGxlcihjb25zdCBTdHJpbmdCdWlsZGVy
JiBuYW1lKQogewogICAgIGNvbnN0IHNpemVfdCBsZW5ndGhPZlNob3J0ZXN0SW5saW5lRXZlbnRI
YW5kbGVyTmFtZSA9IDU7IC8vIFRvIHdpdDogb25jdXQuCi0gICAgaWYgKG5hbWUuc2l6ZSgpIDwg
bGVuZ3RoT2ZTaG9ydGVzdElubGluZUV2ZW50SGFuZGxlck5hbWUpCisgICAgaWYgKG5hbWUubGVu
Z3RoKCkgPCBsZW5ndGhPZlNob3J0ZXN0SW5saW5lRXZlbnRIYW5kbGVyTmFtZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBuYW1lWzBdID09ICdvJyAmJiBuYW1lWzFdID09ICdu
JzsKIH0KQEAgLTk3LDIxICs5NywyMSBAQCBzdGF0aWMgYm9vbCBpc0Rhbmdlcm91c0hUVFBFcXVp
dihjb25zdCBTCiAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAicmVmcmVzaCIp
IHx8IGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAic2V0LWNvb2tpZSIpOwogfQogCi1zdGF0aWMg
Ym9vbCBjb250YWluc0phdmFTY3JpcHRVUkwoY29uc3QgVmVjdG9yPFVDaGFyLCAzMj4mIHZhbHVl
KQorc3RhdGljIGJvb2wgY29udGFpbnNKYXZhU2NyaXB0VVJMKGNvbnN0IFN0cmluZ0J1aWxkZXIm
IHZhbHVlKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyIGphdmFTY3JpcHRTY2hlbWVbXSA9ICJq
YXZhc2NyaXB0OiI7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBsZW5ndGhPZkphdmFTY3JpcHRT
Y2hlbWUgPSBzaXplb2YoamF2YVNjcmlwdFNjaGVtZSkgLSAxOwogCiAgICAgc2l6ZV90IGk7Ci0g
ICAgZm9yIChpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7CisgICAgZm9yIChpID0gMDsg
aSA8IHZhbHVlLmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgaWYgKCFpc0hUTUxTcGFjZSh2YWx1
ZVtpXSkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAodmFsdWUuc2l6ZSgp
IC0gaSA8IGxlbmd0aE9mSmF2YVNjcmlwdFNjaGVtZSkKKyAgICBpZiAodmFsdWUubGVuZ3RoKCkg
LSBpIDwgbGVuZ3RoT2ZKYXZhU2NyaXB0U2NoZW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZGF0YSgpICsgaSwgamF2YVNjcmlw
dFNjaGVtZSwgbGVuZ3RoT2ZKYXZhU2NyaXB0U2NoZW1lKTsKKyAgICByZXR1cm4gZXF1YWxJZ25v
cmluZ0Nhc2UodmFsdWUuY2hhcmFjdGVycygpICsgaSwgamF2YVNjcmlwdFNjaGVtZSwgbGVuZ3Ro
T2ZKYXZhU2NyaXB0U2NoZW1lKTsKIH0KIAogc3RhdGljIFN0cmluZyBkZWNvZGVVUkwoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCkBAIC0zMjMsNyAr
MzIzLDcgQEAgYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJQYXJhbVRva2VuKEhUTUxUbwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYgbmFtZUF0
dHJpYnV0ZSA9IHRva2VuLmF0dHJpYnV0ZXMoKS5hdChpbmRleE9mTmFtZUF0dHJpYnV0ZSk7Ci0g
ICAgU3RyaW5nIG5hbWUgPSBTdHJpbmcobmFtZUF0dHJpYnV0ZS5tX3ZhbHVlLmRhdGEoKSwgbmFt
ZUF0dHJpYnV0ZS5tX3ZhbHVlLnNpemUoKSk7CisgICAgU3RyaW5nIG5hbWUgPSBuYW1lQXR0cmli
dXRlLm1fdmFsdWUudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCk7CiAKICAgICBpZiAoIUhUTUxQ
YXJhbUVsZW1lbnQ6OmlzVVJMUGFyYW1ldGVyKG5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC00MjIsOSArNDIyLDkgQEAgYm9vbCBYU1NBdWRpdG9yOjplcmFzZUF0dHJpYnV0ZUlmSW5q
ZWN0ZQogICAgIGlmIChmaW5kQXR0cmlidXRlV2l0aE5hbWUodG9rZW4sIGF0dHJpYnV0ZU5hbWUs
IGluZGV4T2ZBdHRyaWJ1dGUpKSB7CiAgICAgICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRl
JiBhdHRyaWJ1dGUgPSB0b2tlbi5hdHRyaWJ1dGVzKCkuYXQoaW5kZXhPZkF0dHJpYnV0ZSk7CiAg
ICAgICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChzbmlwcGV0Rm9yQXR0cmlidXRlKHRva2Vu
LCBhdHRyaWJ1dGUpKSkgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gc3JjQXR0
ciAmJiBpc1NhbWVPcmlnaW5SZXNvdXJjZShTdHJpbmcoYXR0cmlidXRlLm1fdmFsdWUuZGF0YSgp
LCBhdHRyaWJ1dGUubV92YWx1ZS5zaXplKCkpKSkKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVO
YW1lID09IHNyY0F0dHIgJiYgaXNTYW1lT3JpZ2luUmVzb3VyY2UoYXR0cmlidXRlLm1fdmFsdWUu
dG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IGh0dHBfZXF1aXZBdHRyICYmICFp
c0Rhbmdlcm91c0hUVFBFcXVpdihTdHJpbmcoYXR0cmlidXRlLm1fdmFsdWUuZGF0YSgpLCBhdHRy
aWJ1dGUubV92YWx1ZS5zaXplKCkpKSkKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09
IGh0dHBfZXF1aXZBdHRyICYmICFpc0Rhbmdlcm91c0hUVFBFcXVpdihhdHRyaWJ1dGUubV92YWx1
ZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgdG9rZW4uZXJhc2VWYWx1ZU9mQXR0cmlidXRlKGluZGV4T2ZBdHRy
aWJ1dGUpOwogICAgICAgICAgICAgaWYgKCFyZXBsYWNlbWVudFZhbHVlLmlzRW1wdHkoKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCShyZXZp
c2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKIAogI2luY2x1ZGUgPHd0Zi9EZWNpbWFsTnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTI2MSw3ICsyNjIs
NyBAQCBpbmxpbmUgaW50IGhleFRvSW50KFVDaGFyIGMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJv
b2wgZGVjb2RlU3RyaW5nKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgVmVj
dG9yPFVDaGFyPiogb3V0cHV0KQorYm9vbCBkZWNvZGVTdHJpbmcoY29uc3QgVUNoYXIqIHN0YXJ0
LCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmdCdWlsZGVyKiBvdXRwdXQpCiB7CiAgICAgd2hpbGUg
KHN0YXJ0IDwgZW5kKSB7CiAgICAgICAgIFVDaGFyIGMgPSAqc3RhcnQrKzsKQEAgLTMyMSwxMSAr
MzIyLDExIEBAIGJvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFVDaGFyKiBzdGFydCwgY28KICAgICB9
CiAgICAgaWYgKHN0YXJ0ID4gZW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVmVjdG9y
PFVDaGFyPiBidWZmZXI7CisgICAgU3RyaW5nQnVpbGRlciBidWZmZXI7CiAgICAgYnVmZmVyLnJl
c2VydmVDYXBhY2l0eShlbmQgLSBzdGFydCk7CiAgICAgaWYgKCFkZWNvZGVTdHJpbmcoc3RhcnQs
IGVuZCwgJmJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAqb3V0cHV0ID0gU3Ry
aW5nKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOyAgICAKKyAgICAqb3V0cHV0ID0gYnVm
ZmVyLnRvU3RyaW5nKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ0NCw3ICs0NDUsNyBA
QCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBidWlsZFZhbHVlKGNvCiAgICAgcmV0dXJuIHJl
c3VsdC5yZWxlYXNlKCk7CiB9CiAKLWlubGluZSBib29sIGVzY2FwZUNoYXIoVUNoYXIgYywgVmVj
dG9yPFVDaGFyPiogZHN0KQoraW5saW5lIGJvb2wgZXNjYXBlQ2hhcihVQ2hhciBjLCBTdHJpbmdC
dWlsZGVyKiBkc3QpCiB7CiAgICAgc3dpdGNoIChjKSB7CiAgICAgY2FzZSAnXGInOiBkc3QtPmFw
cGVuZCgiXFxiIiwgMik7IGJyZWFrOwpAQCAtNDYwLDcgKzQ2MSw3IEBAIGlubGluZSBib29sIGVz
Y2FwZUNoYXIoVUNoYXIgYywgVmVjdG9yPFUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5l
IHZvaWQgZG91YmxlUXVvdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIFZlY3RvcjxVQ2hhcj4q
IGRzdCkKK2lubGluZSB2b2lkIGRvdWJsZVF1b3RlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyLCBT
dHJpbmdCdWlsZGVyKiBkc3QpCiB7CiAgICAgZHN0LT5hcHBlbmQoJyInKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3RyLmxlbmd0aCgpOyArK2kpIHsKQEAgLTU1NiwxMyArNTU3LDEz
IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvclZhbHUKIAogU3RyaW5nIElu
c3BlY3RvclZhbHVlOjp0b0pTT05TdHJpbmcoKSBjb25zdAogewotICAgIFZlY3RvcjxVQ2hhcj4g
cmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlQ2Fw
YWNpdHkoNTEyKTsKICAgICB3cml0ZUpTT04oJnJlc3VsdCk7Ci0gICAgcmV0dXJuIFN0cmluZyhy
ZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5n
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBv
dXRwdXQpIGNvbnN0Cit2b2lkIEluc3BlY3RvclZhbHVlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRl
ciogb3V0cHV0KSBjb25zdAogewogICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZU51bGwpOwogICAg
IG91dHB1dC0+YXBwZW5kKG51bGxTdHJpbmcsIDQpOwpAQCAtNjE2LDcgKzYxNyw3IEBAIGJvb2wg
SW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWcKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0
cHV0KSBjb25zdAordm9pZCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04oU3RyaW5nQnVp
bGRlciogb3V0cHV0KSBjb25zdAogewogICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZUJvb2xlYW4g
fHwgdHlwZSgpID09IFR5cGVOdW1iZXIpOwogICAgIGlmICh0eXBlKCkgPT0gVHlwZUJvb2xlYW4p
IHsKQEAgLTY1Miw3ICs2NTMsNyBAQCBib29sIEluc3BlY3RvclN0cmluZzo6YXNTdHJpbmcoU3Ry
aW5nKiBvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yU3RyaW5nOjp3cml0
ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAordm9pZCBJbnNwZWN0b3JTdHJpbmc6
OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHR5
cGUoKSA9PSBUeXBlU3RyaW5nKTsKICAgICBkb3VibGVRdW90ZVN0cmluZyhtX3N0cmluZ1ZhbHVl
LCBvdXRwdXQpOwpAQCAtNzI0LDcgKzcyNSw3IEBAIHZvaWQgSW5zcGVjdG9yT2JqZWN0OjpyZW1v
dmUoY29uc3QgU3RyaW4KICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yT2JqZWN0Ojp3cml0ZUpT
T04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAordm9pZCBJbnNwZWN0b3JPYmplY3Q6Ondy
aXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB7CiAgICAgb3V0cHV0LT5hcHBl
bmQoJ3snKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fb3JkZXIuc2l6ZSgpOyArK2kp
IHsKQEAgLTc2MSw3ICs3NjIsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0
b3JBcnJhCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXJyYXk6OndyaXRl
SlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0Cit2b2lkIEluc3BlY3RvckFycmF5Ojp3
cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdAogewogICAgIG91dHB1dC0+YXBw
ZW5kKCdbJyk7CiAgICAgZm9yIChWZWN0b3I8UmVmUHRyPEluc3BlY3RvclZhbHVlPiA+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fZGF0YS5iZWdpbigpOyBpdCAhPSBtX2RhdGEuZW5kKCk7ICsraXQp
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgJKHJl
dmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VKU09OKGNvbnN0IFN0cmluZyYganNvbik7
CiAKICAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHdy
aXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3
cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAg
IGV4cGxpY2l0IEluc3BlY3RvclZhbHVlKFR5cGUgdHlwZSkgOiBtX3R5cGUodHlwZSkgeyB9CkBA
IC0xMjEsNyArMTIxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcih1bnNp
Z25lZCBsb25nKiBvdXRwdXQpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcih1bnNp
Z25lZCBpbnQqIG91dHB1dCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZl
Y3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihT
dHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IElu
c3BlY3RvckJhc2ljVmFsdWUoYm9vbCB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlQm9vbGVh
biksIG1fYm9vbFZhbHVlKHZhbHVlKSB7IH0KQEAgLTE0OCw3ICsxNDgsNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIGJvb2wgYXNTdHJpbmcoU3RyaW5nKiBvdXRwdXQpIGNvbnN0OyAgICAKIAot
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3Q7
CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgSW5zcGVjdG9yU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZVN0cmluZyksIG1fc3RyaW5nVmFsdWUodmFsdWUp
IHsgfQpAQCAtMTk5LDcgKzE5OSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVtb3ZlKGNvbnN0
IFN0cmluZyYgbmFtZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hh
cj4qIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWls
ZGVyKiBvdXRwdXQpIGNvbnN0OwogCiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2Rh
dGEuYmVnaW4oKTsgfQogICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fZGF0YS5lbmQoKTsg
fQpAQCAtMjMzLDcgKzIzMyw3IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IGdldChzaXplX3QgaW5kZXgpOwogCi0gICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihW
ZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04o
U3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBJbnNwZWN0b3JB
cnJheSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29u
dHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2lu
QWNjZXNzQ29udHJvbC5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTE1LDE5
ICsxMTYsMTkgQEAgUmVzb3VyY2VSZXF1ZXN0IGNyZWF0ZUFjY2Vzc0NvbnRyb2xQcmVmbAogICAg
IGNvbnN0IEhUVFBIZWFkZXJNYXAmIHJlcXVlc3RIZWFkZXJGaWVsZHMgPSByZXF1ZXN0Lmh0dHBI
ZWFkZXJGaWVsZHMoKTsKIAogICAgIGlmIChyZXF1ZXN0SGVhZGVyRmllbGRzLnNpemUoKSA+IDAp
IHsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBoZWFkZXJCdWZmZXI7CisgICAgICAgIFN0cmluZ0J1
aWxkZXIgaGVhZGVyQnVmZmVyOwogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHJlcXVlc3RIZWFkZXJGaWVsZHMuYmVnaW4oKTsKLSAgICAgICAgYXBwZW5kKGhlYWRl
ckJ1ZmZlciwgaXQtPmZpcnN0KTsKKyAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+Zmly
c3QpOwogICAgICAgICArK2l0OwogCiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJGaWVsZHMuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoJywnKTsKICAg
ICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAgIGFwcGVuZCho
ZWFkZXJCdWZmZXIsIGl0LT5maXJzdCk7CisgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5k
KGl0LT5maXJzdCk7CiAgICAgICAgIH0KIAotICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhU
VFBIZWFkZXJGaWVsZCgiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzIiwgU3RyaW5nOjph
ZG9wdChoZWFkZXJCdWZmZXIpKTsKKyAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVh
ZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycyIsIGhlYWRlckJ1ZmZlci50
b1N0cmluZygpKTsKICAgICB9CiAKICAgICByZXR1cm4gcHJlZmxpZ2h0UmVxdWVzdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwogCkBAIC04MzYsMTcgKzgzNywxNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpz
dG9yZShBcHBsCiAgICAgLy8gVGhlbiwgaW5zZXJ0IHRoZSByZXNvdXJjZQogICAgIAogICAgIC8v
IFNlcmlhbGl6ZSB0aGUgaGVhZGVycwotICAgIFZlY3RvcjxVQ2hhcj4gc3RyaW5nQnVpbGRlcjsK
KyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgCiAgICAgSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cEhlYWRlckZp
ZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJh
Y3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoaXQtPmZpcnN0KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoKFVDaGFyKSc6Jyk7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBp
dC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNl
Y29uZCk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknXG4nKTsKICAgICB9
CiAgICAgCi0gICAgU3RyaW5nIGhlYWRlcnMgPSBTdHJpbmc6OmFkb3B0KHN0cmluZ0J1aWxkZXIp
OworICAgIFN0cmluZyBoZWFkZXJzID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogICAgIAog
ICAgIFNRTGl0ZVN0YXRlbWVudCByZXNvdXJjZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJU
IElOVE8gQ2FjaGVSZXNvdXJjZXMgKHVybCwgc3RhdHVzQ29kZSwgcmVzcG9uc2VVUkwsIGhlYWRl
cnMsIGRhdGEsIG1pbWVUeXBlLCB0ZXh0RW5jb2RpbmdOYW1lKSBWQUxVRVMgKD8sID8sID8sID8s
ID8sID8sID8pIik7CiAgICAgaWYgKHJlc291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxS
ZXN1bHRPaykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0
Nyw3IEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKICNpbmNsdWRlICJTdG9yYWdlTmFt
ZXNwYWNlLmgiCkBAIC00MjgsMTMgKzQyOSwxMyBAQCB2b2lkIENocm9tZTo6c2V0VG9vbFRpcChj
b25zdCBIaXRUZXN0UmVzCiAgICAgICAgICAgICAgICAgICAgIEZpbGVMaXN0KiBmaWxlcyA9IGlu
cHV0LT5maWxlcygpOwogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaXN0U2l6ZSA9IGZp
bGVzLT5sZW5ndGgoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RTaXplID4gMSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiBuYW1lczsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgbmFtZXM7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHBlbmQobmFtZXMsIGZpbGVzLT5pdGVtKGkpLT5maWxlTmFtZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoZmlsZXMtPml0ZW0oaSkt
PmZpbGVOYW1lKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9IGxpc3RT
aXplIC0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKCdc
bicpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
dG9vbFRpcCA9IFN0cmluZzo6YWRvcHQobmFtZXMpOworICAgICAgICAgICAgICAgICAgICAgICAg
dG9vbFRpcCA9IG5hbWVzLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBm
aWxlbmFtZSBhbHdheXMgZGlzcGxheSBhcyBMVFIuCiAgICAgICAgICAgICAgICAgICAgICAgICB0
b29sVGlwRGlyZWN0aW9uID0gTFRSOwogICAgICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDE0ICsyMjIs
MTQgQEAgdm9pZCBFdmVudFNvdXJjZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVucwogCiB2b2lkIEV2
ZW50U291cmNlOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQog
ewotICAgIGFwcGVuZChtX3JlY2VpdmVCdWYsIG1fZGVjb2Rlci0+ZGVjb2RlKGRhdGEsIGxlbmd0
aCkpOworICAgIG1fcmVjZWl2ZUJ1Zi5hcHBlbmQobV9kZWNvZGVyLT5kZWNvZGUoZGF0YSwgbGVu
Z3RoKSk7CiAgICAgcGFyc2VFdmVudFN0cmVhbSgpOwogfQogCiB2b2lkIEV2ZW50U291cmNlOjpk
aWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcsIGRvdWJsZSkKIHsKLSAgICBpZiAobV9yZWNl
aXZlQnVmLnNpemUoKSA+IDAgfHwgbV9kYXRhLnNpemUoKSA+IDApIHsKLSAgICAgICAgYXBwZW5k
KG1fcmVjZWl2ZUJ1ZiwgIlxuXG4iKTsKKyAgICBpZiAobV9yZWNlaXZlQnVmLmxlbmd0aCgpID4g
MCB8fCBtX2RhdGEubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgIG1fcmVjZWl2ZUJ1Zi5hcHBlbmQo
IlxuXG4iKTsKICAgICAgICAgcGFyc2VFdmVudFN0cmVhbSgpOwogICAgIH0KICAgICBtX3N0YXRl
ID0gQ09OTkVDVElORzsKQEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIEV2ZW50U291cmNlOjpkaWRG
YWlsUmVkaXJlY3RDaGVjaygpCiB2b2lkIEV2ZW50U291cmNlOjpwYXJzZUV2ZW50U3RyZWFtKCkK
IHsKICAgICB1bnNpZ25lZCBpbnQgYnVmUG9zID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgYnVmU2l6
ZSA9IG1fcmVjZWl2ZUJ1Zi5zaXplKCk7CisgICAgdW5zaWduZWQgaW50IGJ1ZlNpemUgPSBtX3Jl
Y2VpdmVCdWYubGVuZ3RoKCk7CiAgICAgd2hpbGUgKGJ1ZlBvcyA8IGJ1ZlNpemUpIHsKICAgICAg
ICAgaWYgKG1fZGlzY2FyZFRyYWlsaW5nTmV3bGluZSkgewogICAgICAgICAgICAgaWYgKG1fcmVj
ZWl2ZUJ1ZltidWZQb3NdID09ICdcbicpCkBAIC0yOTQsNyArMjk0LDcgQEAgdm9pZCBFdmVudFNv
dXJjZTo6cGFyc2VFdmVudFN0cmVhbUxpbmUodQogewogICAgIGlmICghbGluZUxlbmd0aCkgewog
ICAgICAgICBpZiAoIW1fZGF0YS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fZGF0YS5yZW1v
dmVMYXN0KCk7CisgICAgICAgICAgICBtX2RhdGEuc2hyaW5rKG1fZGF0YS5sZW5ndGgoKSAtIDEp
OwogICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChjcmVhdGVNZXNzYWdlRXZlbnQoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKCFtX2V2ZW50TmFtZS5pc0VtcHR5KCkpCkBAIC0zNDMsNyArMzQz
LDcgQEAgdm9pZCBFdmVudFNvdXJjZTo6c3RvcCgpCiBQYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4g
RXZlbnRTb3VyY2U6OmNyZWF0ZU1lc3NhZ2VFdmVudCgpCiB7CiAgICAgUmVmUHRyPE1lc3NhZ2VF
dmVudD4gZXZlbnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSgpOwotICAgIGV2ZW50LT5pbml0TWVz
c2FnZUV2ZW50KG1fZXZlbnROYW1lLmlzRW1wdHkoKSA/IGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZl
bnQgOiBBdG9taWNTdHJpbmcobV9ldmVudE5hbWUpLCBmYWxzZSwgZmFsc2UsIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKFN0cmluZzo6YWRvcHQobV9kYXRhKSksIG1fb3JpZ2luLCBtX2xh
c3RFdmVudElkLCAwLCAwKTsKKyAgICBldmVudC0+aW5pdE1lc3NhZ2VFdmVudChtX2V2ZW50TmFt
ZS5pc0VtcHR5KCkgPyBldmVudE5hbWVzKCkubWVzc2FnZUV2ZW50IDogQXRvbWljU3RyaW5nKG1f
ZXZlbnROYW1lKSwgZmFsc2UsIGZhbHNlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSht
X2RhdGEucmVsZWFzZVN0cmluZygpKSwgbV9vcmlnaW4sIG1fbGFzdEV2ZW50SWQsIDAsIDApOwog
ICAgIHJldHVybiBldmVudC5yZWxlYXNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
U291cmNlLmgJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNv
dXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSAiVGhyZWFk
YWJsZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTEwLDEzICsxMTAsMTMg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rl
cj4gbV9kZWNvZGVyOwogICAgICAgICBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gbV9sb2FkZXI7
CiAgICAgICAgIFRpbWVyPEV2ZW50U291cmNlPiBtX3JlY29ubmVjdFRpbWVyOwotICAgICAgICBW
ZWN0b3I8VUNoYXI+IG1fcmVjZWl2ZUJ1ZjsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBtX3JlY2Vp
dmVCdWY7CiAgICAgICAgIGJvb2wgbV9kaXNjYXJkVHJhaWxpbmdOZXdsaW5lOwogICAgICAgICBi
b29sIG1fZmFpbFNpbGVudGx5OwogICAgICAgICBib29sIG1fcmVxdWVzdEluRmxpZ2h0OwogCiAg
ICAgICAgIFN0cmluZyBtX2V2ZW50TmFtZTsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBtX2RhdGE7
CisgICAgICAgIFN0cmluZ0J1aWxkZXIgbV9kYXRhOwogICAgICAgICBTdHJpbmcgbV9sYXN0RXZl
bnRJZDsKICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG1fcmVjb25uZWN0RGVsYXk7CiAgICAg
ICAgIFN0cmluZyBtX29yaWdpbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6
ZXIuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw5ICs5Niw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5TZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoKTsKIAogcHJvdGVjdGVkOgotICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCopOwotICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCos
IE5hbWVzcGFjZXMqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhW
ZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAgdmlydHVhbCB2
b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0Kik7CisgICAgdmlydHVhbCB2
b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNl
cyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxk
ZXImIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5k
RW5kVGFnKE5vZGUqKTsKIAogcHJpdmF0ZToKQEAgLTEyMCwyNyArMTIwLDI4IEBAIFNlcmlhbGl6
ZXJNYXJrdXBBY2N1bXVsYXRvcjo6flNlcmlhbGl6ZXIKIHsKIH0KIAotdm9pZCBTZXJpYWxpemVy
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0KiB0
ZXh0KQordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5n
QnVpbGRlciYgb3V0LCBUZXh0KiB0ZXh0KQogewogICAgIEVsZW1lbnQqIHBhcmVudCA9IHRleHQt
PnBhcmVudEVsZW1lbnQoKTsKICAgICBpZiAocGFyZW50ICYmICFzaG91bGRJZ25vcmVFbGVtZW50
KHBhcmVudCkpCiAgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KG91dCwgdGV4
dCk7CiB9CiAKLXZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50
KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNw
YWNlcykKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0
cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNl
cykKIHsKICAgICBpZiAoIXNob3VsZElnbm9yZUVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KG91dCwgZWxlbWVudCwgbmFtZXNwYWNlcyk7
CiAKICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKSB7Ci0g
ICAgICAgIFN0cmluZyBtZXRhID0gIjxtZXRhIGNoYXJzZXQ9XCIiICsgbV9kb2N1bWVudC0+Y2hh
cnNldCgpICsgIlwiPiI7Ci0gICAgICAgIG91dC5hcHBlbmQobWV0YS5jaGFyYWN0ZXJzKCksIG1l
dGEubGVuZ3RoKCkpOworICAgICAgICBvdXQuYXBwZW5kKCI8bWV0YSBjaGFyc2V0PVwiIik7Cisg
ICAgICAgIG91dC5hcHBlbmQobV9kb2N1bWVudC0+Y2hhcnNldCgpKTsKKyAgICAgICAgb3V0LmFw
cGVuZCgiXCI+Iik7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IEZvciBvYmplY3QgKHBsdWdpbnMp
IHRhZ3MgYW5kIHZpZGVvIHRhZyB3ZSBjb3VsZCByZXBsYWNlIHRoZW0gYnkgYW4gaW1hZ2Ugb2Yg
dGhlaXIgY3VycmVudCBjb250ZW50cy4KIH0KIAotdm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50
KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBTZXJpYWxpemVyTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoU3RyaW5nQnVpbGRlciYgb3V0LCBF
bGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGlmICghZWxl
bWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NiArMzcsNyBAQAogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5Niwx
OCArMzk3LDE4IEBAIFN0cmluZyBTZWN1cml0eU9yaWdpbjo6dG9TdHJpbmcoKSBjb25zdAogICAg
ICAgICByZXR1cm4gImZpbGU6Ly8iOwogICAgIH0KIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0
OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcHJvdG9jb2wubGVuZ3RoKCkg
KyBtX2hvc3QubGVuZ3RoKCkgKyAxMCk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgbV9wcm90b2NvbCk7
Ci0gICAgYXBwZW5kKHJlc3VsdCwgIjovLyIpOwotICAgIGFwcGVuZChyZXN1bHQsIG1faG9zdCk7
CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSht
X3Byb3RvY29sLmxlbmd0aCgpICsgbV9ob3N0Lmxlbmd0aCgpICsgMTApOworICAgIHJlc3VsdC5h
cHBlbmQobV9wcm90b2NvbCk7CisgICAgcmVzdWx0LmFwcGVuZCgiOi8vIik7CisgICAgcmVzdWx0
LmFwcGVuZChtX2hvc3QpOwogCiAgICAgaWYgKG1fcG9ydCkgewotICAgICAgICBhcHBlbmQocmVz
dWx0LCAiOiIpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBTdHJpbmc6Om51bWJlcihtX3BvcnQp
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiOiIpOworICAgICAgICByZXN1bHQuYXBwZW5kKFN0
cmluZzo6bnVtYmVyKG1fcG9ydCkpOwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhjb25zdCBT
dHJpbmcmIG9yaWdpblN0cmluZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVT
eXN0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0
ZW0uY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVT
eXN0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRmls
ZVN5c3RlbS5oIgogCiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04MCw4ICs4
MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRFc2NhcGVVQ2hhcihVQ2gKIFN0cmluZyBl
bmNvZGVGb3JGaWxlTmFtZShjb25zdCBTdHJpbmcmIGlucHV0U3RyKQogewogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGlucHV0U3RyLmxlbmd0aCgpOwotICAgIFZlY3RvcjxVQ2hhciwgNTEyPiBidWZm
ZXIobGVuZ3RoICogMyArIDEpOwotICAgIFVDaGFyKiBwID0gYnVmZmVyLmRhdGEoKTsKKyAgICBT
dHJpbmdCdWlsZGVyIGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzaXplKGxlbmd0aCAqIDMgKyAxKTsK
KyAgICBVQ2hhciogcCA9IGJ1ZmZlci5jaGFyYWN0ZXJzKCk7CiAKICAgICBjb25zdCBVQ2hhciog
c3RyID0gaW5wdXRTdHIuY2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBzdHJFbmQgPSBz
dHIgKyBsZW5ndGg7CkBAIC05NSw5ICs5NywxMCBAQCBTdHJpbmcgZW5jb2RlRm9yRmlsZU5hbWUo
Y29uc3QgU3RyaW5nJiBpCiAgICAgICAgICAgICAqcCsrID0gYzsKICAgICB9CiAKLSAgICBBU1NF
UlQocCAtIGJ1ZmZlci5kYXRhKCkgPD0gc3RhdGljX2Nhc3Q8aW50PihidWZmZXIuc2l6ZSgpKSk7
CisgICAgQVNTRVJUKHAgLSBidWZmZXIuY2hhcmFjdGVycygpIDw9IHN0YXRpY19jYXN0PGludD4o
YnVmZmVyLmxlbmd0aCgpKSk7CiAKLSAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlci5kYXRhKCksIHAg
LSBidWZmZXIuZGF0YSgpKTsKKyAgICBidWZmZXIuc2hyaW5rKHAgLSBidWZmZXIuY2hhcmFjdGVy
cygpKTsKKyAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiB9CiAKICNpZiAhUExBVEZPUk0o
TUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgog
CiAjaWYgVVNFKElDVV9VTklDT0RFKQpAQCAtODg5LDIyICs4OTAsMjIgQEAgU3RyaW5nIEtVUkw6
OmRlcHJlY2F0ZWRTdHJpbmcoKSBjb25zdAogICAgIGlmICghbV9pc1ZhbGlkKQogICAgICAgICBy
ZXR1cm4gbV9zdHJpbmc7CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAgICBTdHJpbmdC
dWlsZGVyIHJlc3VsdDsKIAotICAgIGFwcGVuZChyZXN1bHQsIHByb3RvY29sKCkpOworICAgIHJl
c3VsdC5hcHBlbmQocHJvdG9jb2woKSk7CiAgICAgcmVzdWx0LmFwcGVuZCgnOicpOwogCi0gICAg
VmVjdG9yPFVDaGFyPiBhdXRob3JpdHk7CisgICAgU3RyaW5nQnVpbGRlciBhdXRob3JpdHk7CiAK
ICAgICBpZiAobV9ob3N0RW5kICE9IG1fcGFzc3dvcmRFbmQpIHsKICAgICAgICAgaWYgKG1fdXNl
ckVuZCAhPSBtX3VzZXJTdGFydCkgewotICAgICAgICAgICAgYXBwZW5kKGF1dGhvcml0eSwgdXNl
cigpKTsKKyAgICAgICAgICAgIGF1dGhvcml0eS5hcHBlbmQodXNlcigpKTsKICAgICAgICAgICAg
IGF1dGhvcml0eS5hcHBlbmQoJ0AnKTsKICAgICAgICAgfQotICAgICAgICBhcHBlbmQoYXV0aG9y
aXR5LCBob3N0KCkpOworICAgICAgICBhdXRob3JpdHkuYXBwZW5kKGhvc3QoKSk7CiAgICAgICAg
IGlmIChoYXNQb3J0KCkpIHsKICAgICAgICAgICAgIGF1dGhvcml0eS5hcHBlbmQoJzonKTsKLSAg
ICAgICAgICAgIGFwcGVuZChhdXRob3JpdHksIFN0cmluZzo6bnVtYmVyKHBvcnQoKSkpOworICAg
ICAgICAgICAgYXV0aG9yaXR5LmFwcGVuZChTdHJpbmc6Om51bWJlcihwb3J0KCkpKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtOTE3LDE5ICs5MTgsMTkgQEAgU3RyaW5nIEtVUkw6OmRlcHJlY2F0
ZWRTdHJpbmcoKSBjb25zdAogICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7CiAgICAgfQogCi0g
ICAgYXBwZW5kKHJlc3VsdCwgcGF0aCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKHBhdGgoKSk7CiAK
ICAgICBpZiAobV9wYXRoRW5kICE9IG1fcXVlcnlFbmQpIHsKICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnPycpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBxdWVyeSgpKTsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChxdWVyeSgpKTsKICAgICB9CiAKICAgICBpZiAobV9mcmFnbWVudEVuZCAhPSBtX3F1
ZXJ5RW5kKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyMnKTsKLSAgICAgICAgYXBwZW5kKHJl
c3VsdCwgZnJhZ21lbnRJZGVudGlmaWVyKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGZyYWdt
ZW50SWRlbnRpZmllcigpKTsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogU3RyaW5nIGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdHJpbmcmIHN0cikKQEAgLTkzOSw3ICs5NDAsNyBAQCBT
dHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0CiAKIFN0cmluZyBkZWNvZGVV
UkxFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3RyaW5nJiBzdHIsIGNvbnN0IFRleHRFbmNvZGluZyYg
ZW5jb2RpbmcpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRl
ciByZXN1bHQ7CiAKICAgICBDaGFyQnVmZmVyIGJ1ZmZlcjsKIApAQCAtOTc4LDEzICs5NzksMTMg
QEAgU3RyaW5nIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdAogCiAgICAgICAgIC8v
IEJ1aWxkIHVwIHRoZSBzdHJpbmcgd2l0aCB3aGF0IHdlIGp1c3Qgc2tpcHBlZCBhbmQgd2hhdCB3
ZSBqdXN0IGRlY29kZWQuCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RyLmNoYXJhY3RlcnMoKSAr
IGRlY29kZWRQb3NpdGlvbiwgZW5jb2RlZFJ1blBvc2l0aW9uIC0gZGVjb2RlZFBvc2l0aW9uKTsK
LSAgICAgICAgcmVzdWx0LmFwcGVuZChkZWNvZGVkLmNoYXJhY3RlcnMoKSwgZGVjb2RlZC5sZW5n
dGgoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVjb2RlZCk7CiAgICAgICAgIGRlY29kZWRQ
b3NpdGlvbiA9IGVuY29kZWRSdW5FbmQ7CiAgICAgfQogCiAgICAgcmVzdWx0LmFwcGVuZChzdHIu
Y2hhcmFjdGVycygpICsgZGVjb2RlZFBvc2l0aW9uLCBsZW5ndGggLSBkZWNvZGVkUG9zaXRpb24p
OwogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
LnRvU3RyaW5nKCk7CiB9CiAKIC8vIENhdXRpb246IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYm91
bmRzIGNoZWNrLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmNwcAkocmV2aXNp
b24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJMaW5rSGFzaC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKQEAgLTc5
LDkgKzgwLDkgQEAgc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zQ29sb25TbGFzaFNsYQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNxdWVlemVPdXROdWxsQ2hh
cmFjdGVycyhWZWN0b3I8VUNoYXIsIDUxMj4mIHN0cmluZykKK3N0YXRpYyBpbmxpbmUgdm9pZCBz
cXVlZXplT3V0TnVsbENoYXJhY3RlcnMoU3RyaW5nQnVpbGRlciYgc3RyaW5nKQogewotICAgIHNp
emVfdCBzaXplID0gc3RyaW5nLnNpemUoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0cmluZy5sZW5n
dGgoKTsKICAgICBzaXplX3QgaSA9IDA7CiAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkg
ewogICAgICAgICBpZiAoIXN0cmluZ1tpXSkKQEAgLTk1LDE0ICs5NiwxNCBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgc3F1ZWV6ZU91dE51bGxDaGFyYWN0CiAgICAgICAgICAgICBzdHJpbmdbaisrXSA9
IGNoYXJhY3RlcjsKICAgICB9CiAgICAgQVNTRVJUKGogPCBzaXplKTsKLSAgICBzdHJpbmcuc2hy
aW5rKGopOworICAgIHN0cmluZy5yZXNpemUoaik7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFuU2xh
c2hEb3REb3RTbGFzaGVzKFZlY3RvcjxVQ2hhciwgNTEyPiYgcGF0aCwgc2l6ZV90IGZpcnN0U2xh
c2gpCitzdGF0aWMgdm9pZCBjbGVhblNsYXNoRG90RG90U2xhc2hlcyhTdHJpbmdCdWlsZGVyJiBw
YXRoLCBzaXplX3QgZmlyc3RTbGFzaCkKIHsKICAgICBzaXplX3Qgc2xhc2ggPSBmaXJzdFNsYXNo
OwogICAgIGRvIHsKLSAgICAgICAgc2l6ZV90IHByZXZpb3VzU2xhc2ggPSBzbGFzaCA/IHJldmVy
c2VGaW5kKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJy8nLCBzbGFzaCAtIDEpIDogbm90Rm91
bmQ7CisgICAgICAgIHNpemVfdCBwcmV2aW91c1NsYXNoID0gc2xhc2ggPyByZXZlcnNlRmluZChw
YXRoLmNoYXJhY3RlcnMoKSwgcGF0aC5sZW5ndGgoKSwgJy8nLCBzbGFzaCAtIDEpIDogbm90Rm91
bmQ7CiAgICAgICAgIC8vIERvbid0IHJlbW92ZSB0aGUgaG9zdCwgaS5lLiBodHRwOi8vZm9vLm9y
Zy8uLi9mb28uaHRtbAogICAgICAgICBpZiAocHJldmlvdXNTbGFzaCA9PSBub3RGb3VuZCB8fCAo
cHJldmlvdXNTbGFzaCA+IDMgJiYgcGF0aFtwcmV2aW91c1NsYXNoIC0gMl0gPT0gJzonICYmIHBh
dGhbcHJldmlvdXNTbGFzaCAtIDFdID09ICcvJykpIHsKICAgICAgICAgICAgIHBhdGhbc2xhc2hd
ID0gMDsKQEAgLTExMywxNSArMTE0LDE1IEBAIHN0YXRpYyB2b2lkIGNsZWFuU2xhc2hEb3REb3RT
bGFzaGVzKFZlY3QKICAgICAgICAgICAgICAgICBwYXRoW2ldID0gMDsKICAgICAgICAgfQogICAg
ICAgICBzbGFzaCArPSAzOwotICAgIH0gd2hpbGUgKChzbGFzaCA9IGZpbmRTbGFzaERvdERvdFNs
YXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgc2xhc2gpKSAhPSBub3RGb3VuZCk7CisgICAg
fSB3aGlsZSAoKHNsYXNoID0gZmluZFNsYXNoRG90RG90U2xhc2gocGF0aC5jaGFyYWN0ZXJzKCks
IHBhdGgubGVuZ3RoKCksIHNsYXNoKSkgIT0gbm90Rm91bmQpOwogICAgIHNxdWVlemVPdXROdWxs
Q2hhcmFjdGVycyhwYXRoKTsKIH0KIAotc3RhdGljIHZvaWQgbWVyZ2VEb3VibGVTbGFzaGVzKFZl
Y3RvcjxVQ2hhciwgNTEyPiYgcGF0aCwgc2l6ZV90IGZpcnN0U2xhc2gpCitzdGF0aWMgdm9pZCBt
ZXJnZURvdWJsZVNsYXNoZXMoU3RyaW5nQnVpbGRlciYgcGF0aCwgc2l6ZV90IGZpcnN0U2xhc2gp
CiB7Ci0gICAgc2l6ZV90IHJlZlBvcyA9IGZpbmQocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAn
IycpOworICAgIHNpemVfdCByZWZQb3MgPSBmaW5kKHBhdGguY2hhcmFjdGVycygpLCBwYXRoLmxl
bmd0aCgpLCAnIycpOwogICAgIGlmICghcmVmUG9zIHx8IHJlZlBvcyA9PSBub3RGb3VuZCkKLSAg
ICAgICAgcmVmUG9zID0gcGF0aC5zaXplKCk7CisgICAgICAgIHJlZlBvcyA9IHBhdGgubGVuZ3Ro
KCk7CiAKICAgICBzaXplX3Qgc2xhc2ggPSBmaXJzdFNsYXNoOwogICAgIHdoaWxlIChzbGFzaCA8
IHJlZlBvcykgewpAQCAtMTI5LDM3ICsxMzAsMzcgQEAgc3RhdGljIHZvaWQgbWVyZ2VEb3VibGVT
bGFzaGVzKFZlY3RvcjxVQwogICAgICAgICAgICAgcGF0aFtzbGFzaCsrXSA9IDA7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHNsYXNoICs9IDI7Ci0gICAgICAgIGlmICgoc2xhc2ggPSBmaW5k
U2xhc2hTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIHNsYXNoKSkgPT0gbm90Rm91bmQp
CisgICAgICAgIGlmICgoc2xhc2ggPSBmaW5kU2xhc2hTbGFzaChwYXRoLmNoYXJhY3RlcnMoKSwg
cGF0aC5sZW5ndGgoKSwgc2xhc2gpKSA9PSBub3RGb3VuZCkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMocGF0aCk7CiB9CiAKLXN0YXRpYyB2
b2lkIGNsZWFuU2xhc2hEb3RTbGFzaGVzKFZlY3RvcjxVQ2hhciwgNTEyPiYgcGF0aCwgc2l6ZV90
IGZpcnN0U2xhc2gpCitzdGF0aWMgdm9pZCBjbGVhblNsYXNoRG90U2xhc2hlcyhTdHJpbmdCdWls
ZGVyJiBwYXRoLCBzaXplX3QgZmlyc3RTbGFzaCkKIHsKICAgICBzaXplX3Qgc2xhc2ggPSBmaXJz
dFNsYXNoOwogICAgIGRvIHsKICAgICAgICAgcGF0aFtzbGFzaF0gPSAwOwogICAgICAgICBwYXRo
W3NsYXNoICsgMV0gPSAwOwogICAgICAgICBzbGFzaCArPSAyOwotICAgIH0gd2hpbGUgKChzbGFz
aCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgc2xhc2gpKSAh
PSBub3RGb3VuZCk7CisgICAgfSB3aGlsZSAoKHNsYXNoID0gZmluZFNsYXNoRG90U2xhc2gocGF0
aC5jaGFyYWN0ZXJzKCksIHBhdGgubGVuZ3RoKCksIHNsYXNoKSkgIT0gbm90Rm91bmQpOwogICAg
IHNxdWVlemVPdXROdWxsQ2hhcmFjdGVycyhwYXRoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lk
IGNsZWFuUGF0aChWZWN0b3I8VUNoYXIsIDUxMj4mIHBhdGgpCitzdGF0aWMgaW5saW5lIHZvaWQg
Y2xlYW5QYXRoKFN0cmluZ0J1aWxkZXImIHBhdGgpCiB7CiAgICAgLy8gRklYTUU6IFNob3VsZCBu
b3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yIHBhcnQgb2YgdGhlIFVSTC4KLSAgICBz
aXplX3QgZmlyc3RTbGFzaCA9IGZpbmRTbGFzaERvdERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRo
LnNpemUoKSwgMCk7CisgICAgc2l6ZV90IGZpcnN0U2xhc2ggPSBmaW5kU2xhc2hEb3REb3RTbGFz
aChwYXRoLmNoYXJhY3RlcnMoKSwgcGF0aC5sZW5ndGgoKSwgMCk7CiAgICAgaWYgKGZpcnN0U2xh
c2ggIT0gbm90Rm91bmQpCiAgICAgICAgIGNsZWFuU2xhc2hEb3REb3RTbGFzaGVzKHBhdGgsIGZp
cnN0U2xhc2gpOwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVl
cnkgcGFydC4KLSAgICBmaXJzdFNsYXNoID0gZmluZFNsYXNoU2xhc2gocGF0aC5kYXRhKCksIHBh
dGguc2l6ZSgpLCAwKTsKKyAgICBmaXJzdFNsYXNoID0gZmluZFNsYXNoU2xhc2gocGF0aC5jaGFy
YWN0ZXJzKCksIHBhdGgubGVuZ3RoKCksIDApOwogICAgIGlmIChmaXJzdFNsYXNoICE9IG5vdEZv
dW5kKQogICAgICAgICBtZXJnZURvdWJsZVNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7CiAKICAg
ICAvLyBGSVhNRTogU2hvdWxkIG5vdCBkbyB0aGlzIGluIHRoZSBxdWVyeSBvciBhbmNob3IgcGFy
dC4KLSAgICBmaXJzdFNsYXNoID0gZmluZFNsYXNoRG90U2xhc2gocGF0aC5kYXRhKCksIHBhdGgu
c2l6ZSgpLCAwKTsKKyAgICBmaXJzdFNsYXNoID0gZmluZFNsYXNoRG90U2xhc2gocGF0aC5jaGFy
YWN0ZXJzKCksIHBhdGgubGVuZ3RoKCksIDApOwogICAgIGlmIChmaXJzdFNsYXNoICE9IG5vdEZv
dW5kKQogICAgICAgICBjbGVhblNsYXNoRG90U2xhc2hlcyhwYXRoLCBmaXJzdFNsYXNoKTsKIH0K
QEAgLTIwNSw3ICsyMDYsNyBAQCBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIq
IHVyCiAgICAgcmV0dXJuIHZpc2l0ZWRMaW5rSGFzaElubGluZSh1cmwsIGxlbmd0aCk7CiB9CiAK
LXN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRlZFVSTElubGluZShjb25zdCBLVVJMJiBi
YXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCwgVmVjdG9yPFVDaGFyLCA1MTI+
JiBidWZmZXIpCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0ZWRVUkxJbmxpbmUoY29u
c3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwsIFN0cmluZ0J1
aWxkZXImIGJ1ZmZlcikKIHsKICAgICBpZiAoYXR0cmlidXRlVVJMLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yMjcsNyArMjI4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCB2
aXNpdGVkVVJMSW5saQogICAgIGJvb2wgaGFzQ29sb25TbGFzaFNsYXNoID0gY29udGFpbnNDb2xv
blNsYXNoU2xhc2goY2hhcmFjdGVycywgbGVuZ3RoKTsKIAogICAgIGlmIChoYXNDb2xvblNsYXNo
U2xhc2ggJiYgIW5lZWRzVHJhaWxpbmdTbGFzaChjaGFyYWN0ZXJzLCBsZW5ndGgpKSB7Ci0gICAg
ICAgIGJ1ZmZlci5hcHBlbmQoYXR0cmlidXRlVVJMLmNoYXJhY3RlcnMoKSwgYXR0cmlidXRlVVJM
Lmxlbmd0aCgpKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChhdHRyaWJ1dGVVUkwpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC0yNDEsNyArMjQyLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgdm9pZCB2aXNpdGVkVVJMSW5saQogICAgIH0KIAogICAgIGlmICghbGVuZ3RoKQotICAgICAg
ICBidWZmZXIuYXBwZW5kKGJhc2Uuc3RyaW5nKCkuY2hhcmFjdGVycygpLCBiYXNlLnN0cmluZygp
Lmxlbmd0aCgpKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChiYXNlLnN0cmluZygpKTsKICAgICBl
bHNlIHsKICAgICAgICAgc3dpdGNoIChjaGFyYWN0ZXJzWzBdKSB7CiAgICAgICAgICAgICBjYXNl
ICcvJzoKQEAgLTI1Nyw3ICsyNTgsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0
ZWRVUkxJbmxpCiAgICAgfQogICAgIGJ1ZmZlci5hcHBlbmQoY2hhcmFjdGVycywgbGVuZ3RoKTsK
ICAgICBjbGVhblBhdGgoYnVmZmVyKTsKLSAgICBpZiAobmVlZHNUcmFpbGluZ1NsYXNoKGJ1ZmZl
ci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpKSB7CisgICAgaWYgKG5lZWRzVHJhaWxpbmdTbGFzaChi
dWZmZXIuY2hhcmFjdGVycygpLCBidWZmZXIubGVuZ3RoKCkpKSB7CiAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGluY29ycmVjdCBmb3IgVVJMcyB0aGF0IGhhdmUgYSBxdWVyeSBvciBhbmNob3I7
IHRoZSAiLyIgbmVlZHMgdG8gZ28gYXQgdGhlCiAgICAgICAgIC8vIGVuZCBvZiB0aGUgcGF0aCwg
KmJlZm9yZSogdGhlIHF1ZXJ5IG9yIGFuY2hvci4KICAgICAgICAgYnVmZmVyLmFwcGVuZCgnLycp
OwpAQCAtMjY2LDE5ICsyNjcsMjAgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdGVk
VVJMSW5saQogICAgIHJldHVybjsKIH0KIAotdm9pZCB2aXNpdGVkVVJMKGNvbnN0IEtVUkwmIGJh
c2UsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMLCBWZWN0b3I8VUNoYXIsIDUxMj4m
IGJ1ZmZlcikKK3ZvaWQgdmlzaXRlZFVSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZVVSTCwgU3RyaW5nQnVpbGRlciYgYnVmZmVyKQogewogICAgIHJldHVy
biB2aXNpdGVkVVJMSW5saW5lKGJhc2UsIGF0dHJpYnV0ZVVSTCwgYnVmZmVyKTsKIH0KIAogTGlu
a0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYXR0cmlidXRlVVJMKQogewotICAgIFZlY3RvcjxVQ2hhciwgNTEyPiB1cmw7CisgICAgU3Ry
aW5nQnVpbGRlciB1cmw7CisgICAgdXJsLnJlc2VydmVDYXBhY2l0eSg1MTIpOwogICAgIHZpc2l0
ZWRVUkxJbmxpbmUoYmFzZSwgYXR0cmlidXRlVVJMLCB1cmwpOwogICAgIGlmICh1cmwuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiB2aXNpdGVkTGlua0hhc2hJbmxp
bmUodXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7CisgICAgcmV0dXJuIHZpc2l0ZWRMaW5rSGFzaElu
bGluZSh1cmwuY2hhcmFjdGVycygpLCB1cmwubGVuZ3RoKCkpOwogfQogCiB9ICAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5oCShyZXZpc2lvbiA5
MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDcgKzY1LDcgQEAgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwm
IGJhcwogLy8gUmVzb2x2ZXMgdGhlIHBvdGVudGlhbGx5IHJlbGF0aXZlIFVSTCAiYXR0cmlidXRl
VVJMIiByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4KIC8vIGJhc2UgVVJMLCBhbmQgcmV0dXJucyB0aGUg
aGFzaCBvZiB0aGUgc3RyaW5nIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB2aXNpdGVkLgogLy8gSXQg
d2lsbCByZXR1cm4gYW4gZW1wdHkgVmVjdG9yIGluIGNhc2Ugb2YgZXJyb3JzLgotdm9pZCB2aXNp
dGVkVVJMKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJM
LCBWZWN0b3I8VUNoYXIsIDUxMj4mKTsKK3ZvaWQgdmlzaXRlZFVSTChjb25zdCBLVVJMJiBiYXNl
LCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCwgU3RyaW5nQnVpbGRlciYpOwogCiAK
IH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDE2ICsxOTUs
MTYgQEAgU3RyaW5nIENvbG9yOjpzZXJpYWxpemVkKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGJ1
aWxkZXIudG9TdHJpbmcoKTsKICAgICB9CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyOCk7CisgICAgU3RyaW5nQnVpbGRlciBy
ZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgyOCk7CiAKLSAgICBhcHBlbmQocmVz
dWx0LCByZ2JhUGFyZW4pOwotICAgIGFwcGVuZE51bWJlcihyZXN1bHQsIHJlZCgpKTsKLSAgICBh
cHBlbmQocmVzdWx0LCBjb21tYVNwYWNlKTsKLSAgICBhcHBlbmROdW1iZXIocmVzdWx0LCBncmVl
bigpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYVNwYWNlKTsKLSAgICBhcHBlbmROdW1iZXIo
cmVzdWx0LCBibHVlKCkpOwotICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hU3BhY2UpOworICAgIHJl
c3VsdC5hcHBlbmQocmdiYVBhcmVuKTsKKyAgICByZXN1bHQuYXBwZW5kTnVtYmVyKHJlZCgpKTsK
KyAgICByZXN1bHQuYXBwZW5kKGNvbW1hU3BhY2UpOworICAgIHJlc3VsdC5hcHBlbmROdW1iZXIo
Z3JlZW4oKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYVNwYWNlKTsKKyAgICByZXN1bHQuYXBw
ZW5kTnVtYmVyKGJsdWUoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYVNwYWNlKTsKIAogICAg
IGlmICghYWxwaGEoKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnMCcpOwpAQCAtMjE1LDcgKzIx
NSw3IEBAIFN0cmluZyBDb2xvcjo6c2VyaWFsaXplZCgpIGNvbnN0CiAgICAgfQogCiAgICAgcmVz
dWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBTdHJpbmcgQ29sb3I6Om5hbWVGb3JSZW5k
ZXJUcmVlQXNUZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9E
YXRhT2JqZWN0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvRGF0YU9iamVjdEd0ay5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsy
Miw3IEBACiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTEwLDE0ICsxMTEsMTQgQEAgdm9p
ZCBEYXRhT2JqZWN0R3RrOjpzZXRVUkwoY29uc3QgS1VSTCYgdQogICAgIGlmIChhY3R1YWxMYWJl
bC5pc0VtcHR5KCkpCiAgICAgICAgIGFjdHVhbExhYmVsID0gdXJsOwogCi0gICAgVmVjdG9yPFVD
aGFyPiBtYXJrdXA7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIjxhIGhyZWY9XCIiKTsKLSAgICBhcHBl
bmQobWFya3VwLCB1cmwuc3RyaW5nKCkpOwotICAgIGFwcGVuZChtYXJrdXAsICJcIj4iKTsKKyAg
ICBTdHJpbmdCdWlsZGVyIG1hcmt1cDsKKyAgICBtYXJrdXAuYXBwZW5kKCI8YSBocmVmPVwiIik7
CisgICAgbWFya3VwLmFwcGVuZCh1cmwuc3RyaW5nKCkpOworICAgIG1hcmt1cC5hcHBlbmQoIlwi
PiIpOwogICAgIEdPd25QdHI8Z2NoYXI+IGVzY2FwZWQoZ19tYXJrdXBfZXNjYXBlX3RleHQoYWN0
dWFsTGFiZWwudXRmOCgpLmRhdGEoKSwgLTEpKTsKLSAgICBhcHBlbmQobWFya3VwLCBTdHJpbmc6
OmZyb21VVEY4KGVzY2FwZWQuZ2V0KCkpKTsKLSAgICBhcHBlbmQobWFya3VwLCAiPC9hPiIpOwot
ICAgIHNldE1hcmt1cChTdHJpbmc6OmFkb3B0KG1hcmt1cCkpOworICAgIG1hcmt1cC5hcHBlbmQo
U3RyaW5nOjpmcm9tVVRGOChlc2NhcGVkLmdldCgpKSk7CisgICAgbWFya3VwLmFwcGVuZCgiPC9h
PiIpOworICAgIHNldE1hcmt1cChtYXJrdXAudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgRGF0YU9i
amVjdEd0azo6Y2xlYXJUZXh0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvSFRUUFBhcnNlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw2ICszNSw3IEBACiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAj
aW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC0xOTYs
NyArMTk3LDcgQEAgU3RyaW5nIGZpbGVuYW1lRnJvbUhUVFBDb250ZW50RGlzcG9zaXRpbwogCiBT
dHJpbmcgZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShjb25zdCBTdHJpbmcmIG1lZGlhVHlw
ZSkKIHsKLSAgICBWZWN0b3I8VUNoYXIsIDY0PiBtaW1lVHlwZTsKKyAgICBTdHJpbmdCdWlsZGVy
IG1pbWVUeXBlOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1lZGlhVHlwZS5sZW5ndGgoKTsKICAg
ICBtaW1lVHlwZS5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKQEAgLTIyNCw5ICsyMjUsOSBAQCBTdHJpbmcgZXh0cmFj
dE1JTUVUeXBlRnJvbU1lZGlhVHlwZShjb25zCiAgICAgICAgIG1pbWVUeXBlLmFwcGVuZChjKTsK
ICAgICB9CiAKLSAgICBpZiAobWltZVR5cGUuc2l6ZSgpID09IGxlbmd0aCkKKyAgICBpZiAobWlt
ZVR5cGUubGVuZ3RoKCkgPT0gbGVuZ3RoKQogICAgICAgICByZXR1cm4gbWVkaWFUeXBlOwotICAg
IHJldHVybiBTdHJpbmcobWltZVR5cGUuZGF0YSgpLCBtaW1lVHlwZS5zaXplKCkpOworICAgIHJl
dHVybiBtaW1lVHlwZS50b1N0cmluZygpOwogfQogCiBTdHJpbmcgZXh0cmFjdENoYXJzZXRGcm9t
TWVkaWFUeXBlKGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUv
Q2hhcmFjdGVyTmFtZXMuaD4KIAogdXNpbmcgc3RkOjptaW47CkBAIC0zMDgsNyArMzA5LDcgQEAg
U3RyaW5nIFRleHRDb2RlY0lDVTo6ZGVjb2RlKGNvbnN0IGNoYXIqIAogICAgIAogICAgIEVycm9y
Q2FsbGJhY2tTZXR0ZXIgY2FsbGJhY2tTZXR0ZXIobV9jb252ZXJ0ZXJJQ1UsIHN0b3BPbkVycm9y
KTsKIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0
OwogCiAgICAgVUNoYXIgYnVmZmVyW0NvbnZlcnNpb25CdWZmZXJTaXplXTsKICAgICBVQ2hhciog
YnVmZmVyTGltaXQgPSBidWZmZXIgKyBDb252ZXJzaW9uQnVmZmVyU2l6ZTsKQEAgLTMzMCw3ICsz
MzEsNyBAQCBTdHJpbmcgVGV4dENvZGVjSUNVOjpkZWNvZGUoY29uc3QgY2hhciogCiAgICAgICAg
IHNhd0Vycm9yID0gdHJ1ZTsKICAgICB9CiAKLSAgICBTdHJpbmcgcmVzdWx0U3RyaW5nID0gU3Ry
aW5nOjphZG9wdChyZXN1bHQpOworICAgIFN0cmluZyByZXN1bHRTdHJpbmcgPSByZXN1bHQudG9T
dHJpbmcoKTsKIAogICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzAxND4KICAgICAvLyBTaW1wbGlmaWVkIENoaW5lc2UgcGFnZXMgdXNlIHRoZSBjb2RlIEEz
QTAgdG8gbWVhbiAiZnVsbC13aWR0aCBzcGFjZSIsIGJ1dCBJQ1UgZGVjb2RlcyBpdCBhcyBVK0U1
RTUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAJ
KHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0U3Ry
ZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMTIgKzg1LDEwIEBAIFRleHRTdHJlYW0mIFRl
eHRTdHJlYW06Om9wZXJhdG9yPDwoZG91YmwKIFRleHRTdHJlYW0mIFRleHRTdHJlYW06Om9wZXJh
dG9yPDwoY29uc3QgY2hhciogc3RyaW5nKQogewogICAgIHNpemVfdCBzdHJpbmdMZW5ndGggPSBz
dHJsZW4oc3RyaW5nKTsKLSAgICBzaXplX3QgdGV4dExlbmd0aCA9IG1fdGV4dC5zaXplKCk7Cisg
ICAgc2l6ZV90IHRleHRMZW5ndGggPSBtX3RleHQubGVuZ3RoKCk7CiAgICAgaWYgKHN0cmluZ0xl
bmd0aCA+IG51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0gdGV4dExlbmd0aCkKICAgICAg
ICAgQ1JBU0goKTsKLSAgICBtX3RleHQuZ3Jvdyh0ZXh0TGVuZ3RoICsgc3RyaW5nTGVuZ3RoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZ0xlbmd0aDsgKytpKQotICAgICAgICBt
X3RleHRbdGV4dExlbmd0aCArIGldID0gc3RyaW5nW2ldOworICAgIG1fdGV4dC5hcHBlbmQoc3Ry
aW5nLCBzdHJpbmdMZW5ndGgpOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTAzLDEzICsx
MDEsMTMgQEAgVGV4dFN0cmVhbSYgVGV4dFN0cmVhbTo6b3BlcmF0b3I8PChjb25zdAogCiBUZXh0
U3RyZWFtJiBUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewot
ICAgIGFwcGVuZChtX3RleHQsIHN0cmluZyk7CisgICAgbV90ZXh0LmFwcGVuZChzdHJpbmcpOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIAogU3RyaW5nIFRleHRTdHJlYW06OnJlbGVhc2UoKQogewot
ICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KG1fdGV4dCk7CisgICAgcmV0dXJuIG1fdGV4dC5yZWxl
YXNlU3RyaW5nKCk7CiB9CiAKICNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmgJKHJldmlzaW9uIDkzNzAz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgVGV4dFN0cmVhbV9oCiAKICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBTdHJp
bmcgcmVsZWFzZSgpOwogCiBwcml2YXRlOgotICAgIFZlY3RvcjxVQ2hhcj4gbV90ZXh0OworICAg
IFN0cmluZ0J1aWxkZXIgbV90ZXh0OwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5TdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvUGx1Z2luU3RyZWFtLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAvLyBX
ZSB1c2UgLTIgaGVyZSBiZWNhdXNlIHNvbWUgcGx1Z2lucyBsaWtlIHRvIHJldHVybiAtMSB0byBp
bmRpY2F0ZSBlcnJvcgpAQCAtMTM4LDIxICsxMzksMjEgQEAgdm9pZCBQbHVnaW5TdHJlYW06OnN0
YXJ0U3RyZWFtKCkKICAgICBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gbV9yZXNv
dXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwogCiAgICAgaWYgKG1fcmVzb3Vy
Y2VSZXNwb25zZS5pc0hUVFAoKSkgewotICAgICAgICBWZWN0b3I8VUNoYXI+IHN0cmluZ0J1aWxk
ZXI7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgU3RyaW5n
IHNlcGFyYXRvcigiOiAiKTsKIAogICAgICAgICBTdHJpbmcgc3RhdHVzTGluZSA9ICJIVFRQICIg
KyBTdHJpbmc6Om51bWJlcihtX3Jlc291cmNlUmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkgKyAi
IE9LXG4iOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzdGF0dXNMaW5lLmNoYXJhY3Rl
cnMoKSwgc3RhdHVzTGluZS5sZW5ndGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHN0YXR1c0xpbmUpOwogCiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgICAg
IGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlUmVzcG9u
c2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJhY3RlcnMoKSwgaXQtPmZp
cnN0Lmxlbmd0aCgpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRv
ci5jaGFyYWN0ZXJzKCksIHNlcGFyYXRvci5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgo
KSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VwYXJhdG9yKTsKKyAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJ1xuJyk7CiAgICAgICAgIH0KIAotICAgICAgICBtX2hlYWRlcnMgPSBTdHJpbmc6OmFk
b3B0KHN0cmluZ0J1aWxkZXIpLnV0ZjgoKTsKKyAgICAgICAgbV9oZWFkZXJzID0gc3RyaW5nQnVp
bGRlci50b1N0cmluZygpLnV0ZjgoKTsKIAogICAgICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBl
bmNvZGVkIChtb3N0IGxpa2VseSBjb21wcmVzc2VkKSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5n
dGggdG8gdGhlIHBsdWdpbiwKICAgICAgICAgLy8gd2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGlu
IHRoZSBkZWNvZGVkIGxlbmd0aCwgbm90IHlldCBrbm93biBhdCB0aGUgbW9tZW50LgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gOTM3
MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2OCw4ICsxNjgsOCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RDaGFyYWN0ZXJz
QW5kTGVuZ3RoRm9yCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBoeXBoZW5TdHJpbmcgPSBzdHls
ZS0+aHlwaGVuU3RyaW5nKCk7CiAgICAgY2hhcmFjdGVyc1dpdGhIeXBoZW4ucmVzZXJ2ZUNhcGFj
aXR5KGxlbmd0aCArIGh5cGhlblN0cmluZy5sZW5ndGgoKSk7CiAgICAgY2hhcmFjdGVyc1dpdGhI
eXBoZW4uYXBwZW5kKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgY2hhcmFjdGVyc1dpdGhIeXBo
ZW4uYXBwZW5kKGh5cGhlblN0cmluZy5jaGFyYWN0ZXJzKCksIGh5cGhlblN0cmluZy5sZW5ndGgo
KSk7Ci0gICAgY2hhcmFjdGVycyA9IGNoYXJhY3RlcnNXaXRoSHlwaGVuLmRhdGEoKTsKKyAgICBj
aGFyYWN0ZXJzV2l0aEh5cGhlbi5hcHBlbmQoaHlwaGVuU3RyaW5nKTsKKyAgICBjaGFyYWN0ZXJz
ID0gY2hhcmFjdGVyc1dpdGhIeXBoZW4uY2hhcmFjdGVycygpOwogICAgIGxlbmd0aCArPSBoeXBo
ZW5TdHJpbmcubGVuZ3RoKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guaAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5j
bHVkZSAiSW5saW5lQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIiAvLyBzbyB0ZXh0UmVu
ZGVyZXIoKSBjYW4gYmUgaW5saW5lCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNCw3
ICszNSwxMiBAQCBjbGFzcyBEb2N1bWVudE1hcmtlcjsKIAogY29uc3QgdW5zaWduZWQgc2hvcnQg
Y05vVHJ1bmNhdGlvbiA9IFVTSFJUX01BWDsKIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNGdWxsVHJ1
bmNhdGlvbiA9IFVTSFJUX01BWCAtIDE7Ci10eXBlZGVmIFZlY3RvcjxVQ2hhciwgMjU2PiBCdWZm
ZXJGb3JBcHBlbmRpbmdIeXBoZW47CisKK2NsYXNzIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiA6
IHB1YmxpYyBTdHJpbmdCdWlsZGVyCit7CitwdWJsaWM6CisgICAgQnVmZmVyRm9yQXBwZW5kaW5n
SHlwaGVuKCkgeyByZXNlcnZlQ2FwYWNpdHkoMjU2KTsgfQorfTsKIAogLy8gSGVscGVyIGZ1bmN0
aW9ucyBzaGFyZWQgYnkgSW5saW5lVGV4dEJveCAvIFNWR1Jvb3RJbmxpbmVCb3gKIHZvaWQgdXBk
YXRlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IENvbG9yJiBmaWxsQ29s
b3IsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBDb2xv
clNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVt
LmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0zNzAsMTcgKzM3MSwxNyBAQCBTdHJpbmcgUmVu
ZGVyTGlzdEl0ZW06Om1hcmtlclRleHRXaXRoU3VmCiAKICAgICBjb25zdCBTdHJpbmcmIG1hcmtl
clRleHQgPSBtX21hcmtlci0+dGV4dCgpOwogICAgIGNvbnN0IFN0cmluZyBtYXJrZXJTdWZmaXgg
PSBtX21hcmtlci0+c3VmZml4KCk7Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHRWZWN0b3I7Cisg
ICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKICAgICBpZiAoIW1fbWFya2VyLT5zdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQobWFy
a2VyU3VmZml4LmNoYXJhY3RlcnMoKSwgbWFya2VyU3VmZml4Lmxlbmd0aCgpKTsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChtYXJrZXJTdWZmaXgpOwogCi0gICAgcmVzdWx0VmVjdG9yLmFwcGVuZCht
YXJrZXJUZXh0LmNoYXJhY3RlcnMoKSwgbWFya2VyVGV4dC5sZW5ndGgoKSk7CisgICAgcmVzdWx0
LmFwcGVuZChtYXJrZXJUZXh0KTsKIAogICAgIGlmIChtX21hcmtlci0+c3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICByZXN1bHRWZWN0b3IuYXBwZW5kKG1hcmtlclN1
ZmZpeC5jaGFyYWN0ZXJzKCksIG1hcmtlclN1ZmZpeC5sZW5ndGgoKSk7CisgICAgICAgIHJlc3Vs
dC5hcHBlbmQobWFya2VyU3VmZml4KTsKIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3Vs
dFZlY3Rvcik7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiB2b2lkIFJlbmRl
ckxpc3RJdGVtOjpleHBsaWNpdFZhbHVlQ2hhbmdlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5h
bWVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0xMjMsMTIgKzEyNCwxMiBAQCBzdGF0
aWMgU3RyaW5nIHRvU3ltYm9saWMoaW50IG51bWJlciwgY29uCiAgICAgLS1udW1iZXJTaGFkb3c7
CiAKICAgICAvLyBUaGUgYXN0ZXJpc2tzIGxpc3Qtc3R5bGUtdHlwZSBpcyB0aGUgd29yc3QgY2Fz
ZTsgd2Ugc2hvdyB8bnVtYmVyU2hhZG93fCBhc3Rlcmlza3MuCi0gICAgVmVjdG9yPFVDaGFyPiBs
ZXR0ZXJzOworICAgIFN0cmluZ0J1aWxkZXIgbGV0dGVyczsKICAgICBsZXR0ZXJzLmFwcGVuZChz
eW1ib2xzW251bWJlclNoYWRvdyAlIHN5bWJvbHNTaXplXSk7CiAgICAgdW5zaWduZWQgbnVtU3lt
Ym9scyA9IG51bWJlclNoYWRvdyAvIHN5bWJvbHNTaXplOwogICAgIHdoaWxlIChudW1TeW1ib2xz
LS0pCiAgICAgICAgIGxldHRlcnMuYXBwZW5kKHN5bWJvbHNbbnVtYmVyU2hhZG93ICUgc3ltYm9s
c1NpemVdKTsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChsZXR0ZXJzKTsKKyAgICByZXR1cm4g
bGV0dGVycy50b1N0cmluZygpOwogfQogCiBzdGF0aWMgU3RyaW5nIHRvQWxwaGFiZXRpYyhpbnQg
bnVtYmVyLCBjb25zdCBVQ2hhciogYWxwaGFiZXQsIHVuc2lnbmVkIGFscGhhYmV0U2l6ZSkKQEAg
LTEyNzQsMTMgKzEyNzUsMTMgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludElu
Zm8mIAogICAgICAgICAvLyBUZXh0IGlzIG5vdCBhcmJpdHJhcnkuIFdlIGNhbiBqdWRnZSB3aGV0
aGVyIGl0J3MgUlRMIGZyb20gdGhlIGZpcnN0IGNoYXJhY3RlciwKICAgICAgICAgLy8gYW5kIHdl
IG9ubHkgbmVlZCB0byBoYW5kbGUgdGhlIGRpcmVjdGlvbiBSaWdodFRvTGVmdCBmb3Igbm93Lgog
ICAgICAgICBib29sIHRleHROZWVkc1JldmVyc2luZyA9IGRpcmVjdGlvbihtX3RleHRbMF0pID09
IFJpZ2h0VG9MZWZ0OwotICAgICAgICBWZWN0b3I8VUNoYXI+IHJldmVyc2VkVGV4dDsKKyAgICAg
ICAgU3RyaW5nQnVpbGRlciByZXZlcnNlZFRleHQ7CiAgICAgICAgIGlmICh0ZXh0TmVlZHNSZXZl
cnNpbmcpIHsKICAgICAgICAgICAgIGludCBsZW5ndGggPSBtX3RleHQubGVuZ3RoKCk7CiAgICAg
ICAgICAgICByZXZlcnNlZFRleHQuZ3JvdyhsZW5ndGgpOwogICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICByZXZlcnNlZFRleHRbbGVu
Z3RoIC0gaSAtIDFdID0gbV90ZXh0W2ldOwotICAgICAgICAgICAgdGV4dFJ1bi5zZXRUZXh0KHJl
dmVyc2VkVGV4dC5kYXRhKCksIGxlbmd0aCk7CisgICAgICAgICAgICB0ZXh0UnVuLnNldFRleHQo
cmV2ZXJzZWRUZXh0LmNoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKICAgICAgICAgfQogCiAgICAgICAg
IGNvbnN0IFVDaGFyIHN1ZmZpeCA9IGxpc3RNYXJrZXJTdWZmaXgodHlwZSwgbV9saXN0SXRlbS0+
dmFsdWUoKSk7CkBAIC0xNTUyLDE4ICsxNTUzLDE4IEBAIFN0cmluZyBSZW5kZXJMaXN0TWFya2Vy
OjpzdWZmaXgoKSBjb25zdAogICAgIEVMaXN0U3R5bGVUeXBlIHR5cGUgPSBzdHlsZSgpLT5saXN0
U3R5bGVUeXBlKCk7CiAgICAgY29uc3QgVUNoYXIgc3VmZml4ID0gbGlzdE1hcmtlclN1ZmZpeCh0
eXBlLCBtX2xpc3RJdGVtLT52YWx1ZSgpKTsKIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0VmVj
dG9yOwotICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQoc3VmZml4KTsKKyAgICBTdHJpbmdCdWlsZGVy
IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKHN1ZmZpeCk7CiAKICAgICAvLyBJZiB0aGUgc3Vm
Zml4IGlzIG5vdCAnICcsIGFuIGV4dHJhIHNwYWNlIGlzIG5lZWRlZAogICAgIGlmIChzdWZmaXgg
IT0gJyAnKSB7CiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkp
Ci0gICAgICAgICAgICByZXN1bHRWZWN0b3IuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCcgJyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdFZlY3Rvci5w
cmVwZW5kKCcgJyk7CisgICAgICAgICAgICByZXN1bHQucHJlcGVuZCgnICcpOwogICAgIH0KIAot
ICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdFZlY3Rvcik7CisgICAgcmV0dXJuIHJlc3Vs
dC50b1N0cmluZygpOwogfQogCiBib29sIFJlbmRlckxpc3RNYXJrZXI6OmlzSW5zaWRlKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5j
cHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAgc3RhdGljIGJv
b2wgaXNFbXB0eU9yVW5zdHlsZWRBcHBsZVN0eWxlUwogCiBTdHJpbmcgcXVvdGVBbmRFc2NhcGVO
b25QcmludGFibGVzKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3Vs
dDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICByZXN1bHQuYXBwZW5kKCciJyk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBzLmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAg
VUNoYXIgYyA9IHNbaV07CkBAIC0yMjIsNyArMjIyLDcgQEAgU3RyaW5nIHF1b3RlQW5kRXNjYXBl
Tm9uUHJpbnRhYmxlcyhjb25zdAogICAgICAgICB9CiAgICAgfQogICAgIHJlc3VsdC5hcHBlbmQo
JyInKTsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQudG9TdHJpbmcoKTsKIH0KIAogdm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9i
amVjdChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBSZW5kZXJBc1RleHRC
ZWhhdmlvciBiZWhhdmlvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MRmVuY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0
LmgiCisjaW5jbHVkZSAid3RmL3RleHQvU3RyaW5nQnVpbGRlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgCkBAIC02NCwxMiArNjUsMTIgQEAgdm9pZCBSZW5kZXJNYXRoTUxGZW5jZWQ6
OnVwZGF0ZUZyb21FbGVtZQogICAgIAogICAgIEF0b21pY1N0cmluZyBzZXBhcmF0b3JzID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KGZlbmNlZCktPmdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6c2Vw
YXJhdG9yc0F0dHIpOwogICAgIGlmICghc2VwYXJhdG9ycy5pc051bGwoKSkgewotICAgICAgICBW
ZWN0b3I8VUNoYXI+IGNoYXJhY3RlcnM7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgY2hhcmFjdGVy
czsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzZXBhcmF0b3JzLmxlbmd0
aCgpOyBpKyspIHsKICAgICAgICAgICAgIGlmICghaXNTcGFjZU9yTmV3bGluZShzZXBhcmF0b3Jz
W2ldKSkKICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzLmFwcGVuZChzZXBhcmF0b3JzW2ldKTsK
ICAgICAgICAgfQotICAgICAgICBtX3NlcGFyYXRvcnMgPSAhY2hhcmFjdGVycy5zaXplKCkgPyAw
IDogU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnMuZGF0YSgpICwgY2hhcmFjdGVycy5zaXpl
KCkpOworICAgICAgICBtX3NlcGFyYXRvcnMgPSAhY2hhcmFjdGVycy5sZW5ndGgoKSA/IDAgOiBj
aGFyYWN0ZXJzLnRvU3RyaW5nKCkuaW1wbCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRo
ZSBzZXBhcmF0b3IgZGVmYXVsdHMgdG8gYSBzaW5nbGUgY29tbWEuCiAgICAgICAgIG1fc2VwYXJh
dG9ycyA9IFN0cmluZ0ltcGw6OmNyZWF0ZSgiLCIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJMZXZlbERCQ29kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIkxldmVsREJTbGlj
ZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogLy8gTGV2ZWxEQiBz
dG9yZXMga2V5L3ZhbHVlIHBhaXJzLiBLZXlzIGFuZCB2YWx1ZXMgYXJlIHN0cmluZ3Mgb2YgYnl0
ZXMsIG5vcm1hbGx5IG9mIHR5cGUgVmVjdG9yPGNoYXI+LgogLy8KQEAgLTI2NCwxNiArMjY1LDE3
IEBAIFN0cmluZyBkZWNvZGVTdHJpbmcoY29uc3QgY2hhciogcCwgY29uc3QKICAgICBBU1NFUlQo
ISgoZW5kIC0gcCkgJSAyKSk7CiAKICAgICBzaXplX3QgbGVuID0gKGVuZCAtIHApIC8gMjsKLSAg
ICBWZWN0b3I8VUNoYXI+IHZlY3RvcihsZW4pOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0Owor
ICAgIHJlc3VsdC5ncm93KGxlbik7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsg
KytpKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgaGkgPSAqcCsrOwogICAgICAgICB1bnNpZ25l
ZCBjaGFyIGxvID0gKnArKzsKIAotICAgICAgICB2ZWN0b3JbaV0gPSAoaGkgPDwgOCkgfCBsbzsK
KyAgICAgICAgcmVzdWx0W2ldID0gKGhpIDw8IDgpIHwgbG87CiAgICAgfQogCi0gICAgcmV0dXJu
IFN0cmluZzo6YWRvcHQodmVjdG9yKTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9
CiAKIFZlY3RvcjxjaGFyPiBlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGNvbnN0IFN0cmluZyYgcykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTM3MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NzQsNyArODc0LDcgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25z
ZUhlYQogICAgICAgICByZXR1cm4gIiI7CiAgICAgfQogCi0gICAgVmVjdG9yPFVDaGFyPiBzdHJp
bmdCdWlsZGVyOworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKIAogICAgIEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
cygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCE9IGVuZDsgKytpdCkgewpA
QCAtODkwLDE1ICs4OTAsMTUgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25z
ZUhlYQogICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3NDb250
cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0KSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJz
KCksIGl0LT5maXJzdC5sZW5ndGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0
LT5maXJzdCk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0
LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZCk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCdccicpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICB9CiAK
LSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChzdHJpbmdCdWlsZGVyKTsKKyAgICByZXR1cm4gc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpOwogfQogCiBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJl
c3BvbnNlSGVhZGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9u
IDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIlhQYXRoVXRpbC5oIgogI2luY2x1
ZGUgIlhQYXRoVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNw
YWNlIFhQYXRoIHsKQEAgLTMxOCwyNiArMzE5LDI2IEBAIFZhbHVlIEZ1blBvc2l0aW9uOjpldmFs
dWF0ZSgpIGNvbnN0CiBWYWx1ZSBGdW5JZDo6ZXZhbHVhdGUoKSBjb25zdAogewogICAgIFZhbHVl
IGEgPSBhcmcoMCktPmV2YWx1YXRlKCk7Ci0gICAgVmVjdG9yPFVDaGFyPiBpZExpc3Q7IC8vIEEg
d2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBJRHMKKyAgICBTdHJpbmdCdWlsZGVyIGlkTGlz
dDsgLy8gQSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIElEcwogCiAgICAgaWYgKGEuaXNO
b2RlU2V0KCkpIHsKICAgICAgICAgY29uc3QgTm9kZVNldCYgbm9kZXMgPSBhLnRvTm9kZVNldCgp
OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgICAgICBTdHJpbmcgc3RyID0gc3RyaW5nVmFsdWUobm9kZXNbaV0pOwotICAgICAgICAg
ICAgaWRMaXN0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkpOworICAgICAg
ICAgICAgaWRMaXN0LmFwcGVuZChzdHIpOwogICAgICAgICAgICAgaWRMaXN0LmFwcGVuZCgnICcp
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5nIHN0ciA9IGEudG9TdHJp
bmcoKTsKLSAgICAgICAgaWRMaXN0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3Ro
KCkpOworICAgICAgICBpZExpc3QuYXBwZW5kKHN0cik7CiAgICAgfQogICAgIAogICAgIFRyZWVT
Y29wZSogY29udGV4dFNjb3BlID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlLT50cmVlU2NvcGUo
KTsKICAgICBOb2RlU2V0IHJlc3VsdDsKICAgICBIYXNoU2V0PE5vZGUqPiByZXN1bHRTZXQ7CiAK
LSAgICBzaXplX3Qgc3RhcnRQb3MgPSAwOwotICAgIHNpemVfdCBsZW5ndGggPSBpZExpc3Quc2l6
ZSgpOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBp
ZExpc3QubGVuZ3RoKCk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgd2hpbGUgKHN0YXJ0
UG9zIDwgbGVuZ3RoICYmIGlzV2hpdGVzcGFjZShpZExpc3Rbc3RhcnRQb3NdKSkKICAgICAgICAg
ICAgICsrc3RhcnRQb3M7CkBAIC00MzYsMTUgKzQzNywxNiBAQCBWYWx1ZSBGdW5TdHJpbmc6OmV2
YWx1YXRlKCkgY29uc3QKIAogVmFsdWUgRnVuQ29uY2F0OjpldmFsdWF0ZSgpIGNvbnN0CiB7Ci0g
ICAgVmVjdG9yPFVDaGFyLCAxMDI0PiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7
CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgxMDI0KTsKIAogICAgIHVuc2lnbmVkIGNvdW50
ID0gYXJnQ291bnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
ewogICAgICAgICBTdHJpbmcgc3RyKGFyZyhpKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpKTsKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkpOworICAg
ICAgICByZXN1bHQuYXBwZW5kKHN0cik7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZyhyZXN1
bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7
CiB9CiAKIFZhbHVlIEZ1blN0YXJ0c1dpdGg6OmV2YWx1YXRlKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aFV0aWwuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aFV0aWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaWYgRU5B
QkxFKFhQQVRIKQogCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFhQ
YXRoIHsKQEAgLTUxLDE3ICs1MiwxNyBAQCBTdHJpbmcgc3RyaW5nVmFsdWUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIHJldHVybiBub2RlLT5ub2RlVmFsdWUoKTsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIGlmIChpc1Jvb3REb21Ob2RlKG5vZGUpIHx8IG5vZGUtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiBy
ZXN1bHQ7CisgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgICAgICAg
ICAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgxMDI0KTsKIAogICAgICAgICAgICAgICAgIGZv
ciAoTm9kZSogbiA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5v
ZGUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBub2RlVmFsdWUgPSBuLT5ub2Rl
VmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobm9kZVZhbHVl
LmNoYXJhY3RlcnMoKSwgbm9kZVZhbHVlLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQobm9kZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJl
c3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogICAgICAg
ICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vz
c29yTGlieHNsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9j
ZXNzb3JMaWJ4c2x0LmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwv
WFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsOSArMTY4LDkg
QEAgc3RhdGljIGlubGluZSB2b2lkIHNldFhTTFRMb2FkQ2FsbEJhY2soeAogICAgIGdsb2JhbENh
Y2hlZFJlc291cmNlTG9hZGVyID0gY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiB9CiAKLXN0YXRpYyBp
bnQgd3JpdGVUb1ZlY3Rvcih2b2lkKiBjb250ZXh0LCBjb25zdCBjaGFyKiBidWZmZXIsIGludCBs
ZW4pCitzdGF0aWMgaW50IHdyaXRlVG9TdHJpbmdCdWlsZGVyKHZvaWQqIGNvbnRleHQsIGNvbnN0
IGNoYXIqIGJ1ZmZlciwgaW50IGxlbikKIHsKLSAgICBWZWN0b3I8VUNoYXI+JiByZXN1bHRPdXRw
dXQgPSAqc3RhdGljX2Nhc3Q8VmVjdG9yPFVDaGFyPio+KGNvbnRleHQpOworICAgIFN0cmluZ0J1
aWxkZXImIHJlc3VsdE91dHB1dCA9ICpzdGF0aWNfY2FzdDxTdHJpbmdCdWlsZGVyKj4oY29udGV4
dCk7CiAKICAgICBpZiAoIWxlbikKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTcsOSArMTk3LDkg
QEAgc3RhdGljIGJvb2wgc2F2ZVJlc3VsdFRvU3RyaW5nKHhtbERvY1B0cgogICAgIGlmICghb3V0
cHV0QnVmKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3Vs
dFZlY3RvcjsKLSAgICBvdXRwdXRCdWYtPmNvbnRleHQgPSAmcmVzdWx0VmVjdG9yOwotICAgIG91
dHB1dEJ1Zi0+d3JpdGVjYWxsYmFjayA9IHdyaXRlVG9WZWN0b3I7CisgICAgU3RyaW5nQnVpbGRl
ciByZXN1bHRCdWlsZGVyOworICAgIG91dHB1dEJ1Zi0+Y29udGV4dCA9ICZyZXN1bHRCdWlsZGVy
OworICAgIG91dHB1dEJ1Zi0+d3JpdGVjYWxsYmFjayA9IHdyaXRlVG9TdHJpbmdCdWlsZGVyOwog
CiAgICAgaW50IHJldHZhbCA9IHhzbHRTYXZlUmVzdWx0VG8ob3V0cHV0QnVmLCByZXN1bHREb2Ms
IHNoZWV0KTsKICAgICB4bWxPdXRwdXRCdWZmZXJDbG9zZShvdXRwdXRCdWYpOwpAQCAtMjA3LDEw
ICsyMDcsMTAgQEAgc3RhdGljIGJvb2wgc2F2ZVJlc3VsdFRvU3RyaW5nKHhtbERvY1B0cgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBXb3JrYXJvdW5kIGZvciA8aHR0cDovL2J1Z3pp
bGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk1NjY4PjogbGlieHNsdCBhcHBlbmRzIGFu
IGV4dHJhIGxpbmUgZmVlZCB0byB0aGUgcmVzdWx0LgotICAgIGlmIChyZXN1bHRWZWN0b3Iuc2l6
ZSgpID4gMCAmJiByZXN1bHRWZWN0b3JbcmVzdWx0VmVjdG9yLnNpemUoKSAtIDFdID09ICdcbicp
Ci0gICAgICAgIHJlc3VsdFZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgaWYgKHJlc3VsdEJ1aWxk
ZXIubGVuZ3RoKCkgPiAwICYmIHJlc3VsdEJ1aWxkZXJbcmVzdWx0QnVpbGRlci5sZW5ndGgoKSAt
IDFdID09ICdcbicpCisgICAgICAgIHJlc3VsdEJ1aWxkZXIuc2hyaW5rKHJlc3VsdEJ1aWxkZXIu
bGVuZ3RoKCkgLSAxKTsKIAotICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZzo6YWRvcHQocmVzdWx0
VmVjdG9yKTsKKyAgICByZXN1bHRTdHJpbmcgPSByZXN1bHRCdWlsZGVyLnRvU3RyaW5nKCk7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hh
cmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9k
cy5oCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFj
dGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw3IEBACiAjaWZuZGVmIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHNf
aAogI2RlZmluZSBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzX2gKIAotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsMTkgKzM2LDE5IEBAIGlubGluZSBib29s
IGlzSGV4RGlnaXQoVUNoYXIgY2MpCiAgICAgcmV0dXJuIChjYyA+PSAnMCcgJiYgY2MgPD0gJzkn
KSB8fCAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykgfHwgKGNjID49ICdBJyAmJiBjYyA8PSAnRicp
OwogfQogCi1pbmxpbmUgdm9pZCB1bmNvbnN1bWVDaGFyYWN0ZXJzKFNlZ21lbnRlZFN0cmluZyYg
c291cmNlLCBjb25zdCBWZWN0b3I8VUNoYXIsIDEwPiYgY29uc3VtZWRDaGFyYWN0ZXJzKQoraW5s
aW5lIHZvaWQgdW5jb25zdW1lQ2hhcmFjdGVycyhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgY29u
c3QgU3RyaW5nQnVpbGRlciYgY29uc3VtZWRDaGFyYWN0ZXJzKQogewotICAgIGlmIChjb25zdW1l
ZENoYXJhY3RlcnMuc2l6ZSgpID09IDEpCisgICAgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5n
dGgoKSA9PSAxKQogICAgICAgICBzb3VyY2UucHVzaChjb25zdW1lZENoYXJhY3RlcnNbMF0pOwot
ICAgIGVsc2UgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5zaXplKCkgPT0gMikgeworICAgIGVsc2Ug
aWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5ndGgoKSA9PSAyKSB7CiAgICAgICAgIHNvdXJjZS5w
dXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1swXSk7CiAgICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVk
Q2hhcmFjdGVyc1sxXSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHNvdXJjZS5wcmVwZW5kKFNlZ21l
bnRlZFN0cmluZyhTdHJpbmcoY29uc3VtZWRDaGFyYWN0ZXJzLmRhdGEoKSwgY29uc3VtZWRDaGFy
YWN0ZXJzLnNpemUoKSkpKTsKKyAgICAgICAgc291cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5n
KGNvbnN1bWVkQ2hhcmFjdGVycy50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSkpOwogfQogCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgUGFyc2VyRnVuY3Rpb25zPgotYm9vbCBjb25zdW1lQ2hhcmFjdGVy
UmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVj
b2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25h
bEFsbG93ZWRDaGFyYWN0ZXIpCitib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVu
dGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRDaGFyYWN0ZXIsIGJvb2wm
IG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQog
ewogICAgIEFTU0VSVCghYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgfHwgYWRkaXRpb25hbEFs
bG93ZWRDaGFyYWN0ZXIgPT0gJyInIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICdc
JycgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJz4nKTsKICAgICBBU1NFUlQoIW5v
dEVub3VnaENoYXJhY3RlcnMpOwpAQCAtNjUsNyArNjUsNyBAQCBib29sIGNvbnN1bWVDaGFyYWN0
ZXJSZWZlcmVuY2UoU2VnbWVudGVkCiAgICAgfTsKICAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0
ZSA9IEluaXRpYWw7CiAgICAgVUNoYXIzMiByZXN1bHQgPSAwOwotICAgIFZlY3RvcjxVQ2hhciwg
MTA+IGNvbnN1bWVkQ2hhcmFjdGVyczsKKyAgICBTdHJpbmdCdWlsZGVyIGNvbnN1bWVkQ2hhcmFj
dGVyczsKICAgICAKICAgICB3aGlsZSAoIXNvdXJjZS5pc0VtcHR5KCkpIHsKICAgICAgICAgVUNo
YXIgY2MgPSAqc291cmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBU
b2tlbkJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1
cFRva2VuQmFzZS5oCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvTWFya3VwVG9rZW5CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTQ4LDggKzQ5LDggQEAg
cHVibGljOgogCiAgICAgYm9vbCBtX2hhc1B1YmxpY0lkZW50aWZpZXI7CiAgICAgYm9vbCBtX2hh
c1N5c3RlbUlkZW50aWZpZXI7Ci0gICAgV1RGOjpWZWN0b3I8VUNoYXI+IG1fcHVibGljSWRlbnRp
ZmllcjsKLSAgICBXVEY6OlZlY3RvcjxVQ2hhcj4gbV9zeXN0ZW1JZGVudGlmaWVyOworICAgIFN0
cmluZ0J1aWxkZXIgbV9wdWJsaWNJZGVudGlmaWVyOworICAgIFN0cmluZ0J1aWxkZXIgbV9zeXN0
ZW1JZGVudGlmaWVyOwogfTsKIAogY2xhc3MgQXR0cmlidXRlQmFzZSB7CkBAIC02Miw4ICs2Myw4
IEBAIHB1YmxpYzoKIAogICAgIFJhbmdlIG1fbmFtZVJhbmdlOwogICAgIFJhbmdlIG1fdmFsdWVS
YW5nZTsKLSAgICBXVEY6OlZlY3RvcjxVQ2hhciwgMzI+IG1fbmFtZTsKLSAgICBXVEY6OlZlY3Rv
cjxVQ2hhciwgMzI+IG1fdmFsdWU7CisgICAgU3RyaW5nQnVpbGRlciBtX25hbWU7CisgICAgU3Ry
aW5nQnVpbGRlciBtX3ZhbHVlOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZVNldCwgdHlw
ZW5hbWUgRG9jdHlwZURhdGFUeXBlID0gRG9jdHlwZURhdGFCYXNlLCB0eXBlbmFtZSBBdHRyaWJ1
dGVUeXBlID0gQXR0cmlidXRlQmFzZT4KQEAgLTc1LDEwICs3NiwxMiBAQCBwdWJsaWM6CiAgICAg
dHlwZWRlZiBBdHRyaWJ1dGVUeXBlIEF0dHJpYnV0ZTsKICAgICB0eXBlZGVmIERvY3R5cGVEYXRh
VHlwZSBEb2N0eXBlRGF0YTsKIAotICAgIHR5cGVkZWYgV1RGOjpWZWN0b3I8QXR0cmlidXRlLCAx
MD4gQXR0cmlidXRlTGlzdDsKLSAgICB0eXBlZGVmIFdURjo6VmVjdG9yPFVDaGFyLCAxMDI0PiBE
YXRhVmVjdG9yOworICAgIHR5cGVkZWYgVmVjdG9yPEF0dHJpYnV0ZSwgMTA+IEF0dHJpYnV0ZUxp
c3Q7CiAKLSAgICBNYXJrdXBUb2tlbkJhc2UoKSB7IGNsZWFyKCk7IH0KKyAgICBNYXJrdXBUb2tl
bkJhc2UoKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIG1fZGF0YS5yZXNlcnZlQ2FwYWNp
dHkoMTAyNCk7CisgICAgfQogICAgIHZpcnR1YWwgfk1hcmt1cFRva2VuQmFzZSgpIHsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGNsZWFyKCkKQEAgLTIzOCw3ICsyNDEsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBBU1NFUlQoIXZhbHVlLmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVChtX3R5
cGUgPT0gVHlwZVNldDo6U3RhcnRUYWcgfHwgbV90eXBlID09IFR5cGVTZXQ6OkVuZFRhZyk7Ci0g
ICAgICAgIG1fYXR0cmlidXRlc1tpXS5tX3ZhbHVlLmFwcGVuZCh2YWx1ZS5jaGFyYWN0ZXJzKCks
IHZhbHVlLmxlbmd0aCgpKTsKKyAgICAgICAgbV9hdHRyaWJ1dGVzW2ldLm1fdmFsdWUuYXBwZW5k
KHZhbHVlKTsKICAgICB9CiAKICAgICB0eXBlbmFtZSBUeXBlOjpUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KQEAgLTI3MywyNyArMjc2LDI3IEBAIHB1YmxpYzoKICAgICAgICAg
bV9hdHRyaWJ1dGVzW2ldLm1fdmFsdWUuY2xlYXIoKTsKICAgICB9CiAKLSAgICBjb25zdCBEYXRh
VmVjdG9yJiBjaGFyYWN0ZXJzKCkgY29uc3QKKyAgICBjb25zdCBTdHJpbmdCdWlsZGVyJiBjaGFy
YWN0ZXJzKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZVNldDo6
Q2hhcmFjdGVyKTsKICAgICAgICAgcmV0dXJuIG1fZGF0YTsKICAgICB9CiAKLSAgICBjb25zdCBE
YXRhVmVjdG9yJiBjb21tZW50KCkgY29uc3QKKyAgICBjb25zdCBTdHJpbmdCdWlsZGVyJiBjb21t
ZW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZVNldDo6Q29t
bWVudCk7CiAgICAgICAgIHJldHVybiBtX2RhdGE7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IERp
c3Rpbmd1aXNoIGJldHdlZW4gYSBtaXNzaW5nIHB1YmxpYyBpZGVudGlmZXIgYW5kIGFuIGVtcHR5
IG9uZS4KLSAgICBjb25zdCBXVEY6OlZlY3RvcjxVQ2hhcj4mIHB1YmxpY0lkZW50aWZpZXIoKSBj
b25zdAorICAgIGNvbnN0IFN0cmluZ0J1aWxkZXImIHB1YmxpY0lkZW50aWZpZXIoKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlU2V0OjpET0NUWVBFKTsKICAgICAg
ICAgcmV0dXJuIG1fZG9jdHlwZURhdGEtPm1fcHVibGljSWRlbnRpZmllcjsKICAgICB9CiAKICAg
ICAvLyBGSVhNRTogRGlzdGluZ3Vpc2ggYmV0d2VlbiBhIG1pc3Npbmcgc3lzdGVtIGlkZW50aWZl
ciBhbmQgYW4gZW1wdHkgb25lLgotICAgIGNvbnN0IFdURjo6VmVjdG9yPFVDaGFyPiYgc3lzdGVt
SWRlbnRpZmllcigpIGNvbnN0CisgICAgY29uc3QgU3RyaW5nQnVpbGRlciYgc3lzdGVtSWRlbnRp
ZmllcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IFR5cGVTZXQ6OkRP
Q1RZUEUpOwogICAgICAgICByZXR1cm4gbV9kb2N0eXBlRGF0YS0+bV9zeXN0ZW1JZGVudGlmaWVy
OwpAQCAtMzMyLDExICszMzUsMTAgQEAgcHVibGljOgogcHJvdGVjdGVkOgogCiAjaWZuZGVmIE5E
RUJVRwotICAgIHZvaWQgcHJpbnRTdHJpbmcoY29uc3QgRGF0YVZlY3RvciYgc3RyaW5nKSBjb25z
dAorICAgIHZvaWQgcHJpbnRTdHJpbmcoY29uc3QgU3RyaW5nQnVpbGRlciYgc3RyaW5nKSBjb25z
dAogICAgIHsKLSAgICAgICAgRGF0YVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHN0cmlu
Zy5iZWdpbigpOwotICAgICAgICBmb3IgKDsgaXRlciAhPSBzdHJpbmcuZW5kKCk7ICsraXRlcikK
LSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJWxjIiwgd2NoYXJfdCgqaXRlcikpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aCgpOyArK2kpCisgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVsYyIsIHdjaGFyX3Qoc3RyaW5nW2ldKSk7CiAgICAg
fQogI2VuZGlmIC8vIE5ERUJVRwogCkBAIC0zNDYsNyArMzQ4LDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBtX2RhdGEuYXBwZW5kKGNoYXJhY3Rlcik7CiAgICAgfQogICAgIAotICAgIGlubGluZSBj
b25zdCBEYXRhVmVjdG9yJiBuYW1lKCkgY29uc3QKKyAgICBpbmxpbmUgY29uc3QgU3RyaW5nQnVp
bGRlciYgbmFtZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9kYXRhOwogICAgIH0K
QEAgLTM2MCw3ICszNjIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdHlwZW5hbWUgVHlwZTo6VHlwZSBt
X3R5cGU7CiAgICAgdHlwZW5hbWUgQXR0cmlidXRlOjpSYW5nZSBtX3JhbmdlOyAvLyBBbHdheXMg
c3RhcnRzIGF0IHplcm8uCiAgICAgaW50IG1fYmFzZU9mZnNldDsKLSAgICBEYXRhVmVjdG9yIG1f
ZGF0YTsKKyAgICBTdHJpbmdCdWlsZGVyIG1fZGF0YTsKIAogICAgIC8vIEZvciBET0NUWVBFCiAg
ICAgT3duUHRyPERvY3R5cGVEYXRhPiBtX2RvY3R5cGVEYXRhOwpAQCAtMzg3LDcgKzM4OSw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OkRPQ1RZUEU6Ci0gICAgICAgICAgICBt
X25hbWUgPSBBdG9taWNTdHJpbmcodG9rZW4tPm5hbWUoKS5kYXRhKCksIHRva2VuLT5uYW1lKCku
c2l6ZSgpKTsKKyAgICAgICAgICAgIG1fbmFtZSA9IEF0b21pY1N0cmluZyh0b2tlbi0+bmFtZSgp
LnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgIG1fZG9jdHlwZURhdGEg
PSB0b2tlbi0+bV9kb2N0eXBlRGF0YS5yZWxlYXNlKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6RW5kT2ZGaWxlOgpAQCAtMzk1LDEyICszOTcsMTIgQEAg
cHVibGljOgogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpTdGFydFRhZzoKICAgICAgICAgY2Fz
ZSBUb2tlbjo6VHlwZTo6RW5kVGFnOiB7CiAgICAgICAgICAgICBtX3NlbGZDbG9zaW5nID0gdG9r
ZW4tPnNlbGZDbG9zaW5nKCk7Ci0gICAgICAgICAgICBtX25hbWUgPSBBdG9taWNTdHJpbmcodG9r
ZW4tPm5hbWUoKS5kYXRhKCksIHRva2VuLT5uYW1lKCkuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1f
bmFtZSA9IEF0b21pY1N0cmluZyh0b2tlbi0+bmFtZSgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0
eSgpKTsKICAgICAgICAgICAgIGluaXRpYWxpemVBdHRyaWJ1dGVzKHRva2VuLT5hdHRyaWJ1dGVz
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBUb2tlbjo6
VHlwZTo6Q29tbWVudDoKLSAgICAgICAgICAgIG1fZGF0YSA9IFN0cmluZyh0b2tlbi0+Y29tbWVu
dCgpLmRhdGEoKSwgdG9rZW4tPmNvbW1lbnQoKS5zaXplKCkpOworICAgICAgICAgICAgbV9kYXRh
ID0gdG9rZW4tPmNvbW1lbnQoKS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpDaGFyYWN0ZXI6CiAgICAgICAg
ICAgICBtX2V4dGVybmFsQ2hhcmFjdGVycyA9ICZ0b2tlbi0+Y2hhcmFjdGVycygpOwpAQCAtNDU4
LDcgKzQ2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlcy5yZWxlYXNl
KCk7CiAgICAgfQogCi0gICAgY29uc3QgdHlwZW5hbWUgVG9rZW46OkRhdGFWZWN0b3ImIGNoYXJh
Y3RlcnMoKSBjb25zdAorICAgIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNoYXJhY3RlcnMoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUb2tlbjo6VHlwZTo6Q2hhcmFjdGVy
KTsKICAgICAgICAgcmV0dXJuICptX2V4dGVybmFsQ2hhcmFjdGVyczsKQEAgLTQ3MSwxNCArNDcz
LDE0IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBGSVhNRTogRGlzdGluZ3Vpc2ggYmV0d2Vl
biBhIG1pc3NpbmcgcHVibGljIGlkZW50aWZlciBhbmQgYW4gZW1wdHkgb25lLgotICAgIFdURjo6
VmVjdG9yPFVDaGFyPiYgcHVibGljSWRlbnRpZmllcigpIGNvbnN0CisgICAgU3RyaW5nQnVpbGRl
ciYgcHVibGljSWRlbnRpZmllcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBl
ID09IFRva2VuOjpUeXBlOjpET0NUWVBFKTsKICAgICAgICAgcmV0dXJuIG1fZG9jdHlwZURhdGEt
Pm1fcHVibGljSWRlbnRpZmllcjsKICAgICB9CiAKICAgICAvLyBGSVhNRTogRGlzdGluZ3Vpc2gg
YmV0d2VlbiBhIG1pc3Npbmcgc3lzdGVtIGlkZW50aWZlciBhbmQgYW4gZW1wdHkgb25lLgotICAg
IFdURjo6VmVjdG9yPFVDaGFyPiYgc3lzdGVtSWRlbnRpZmllcigpIGNvbnN0CisgICAgU3RyaW5n
QnVpbGRlciYgc3lzdGVtSWRlbnRpZmllcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
bV90eXBlID09IFRva2VuOjpUeXBlOjpET0NUWVBFKTsKICAgICAgICAgcmV0dXJuIG1fZG9jdHlw
ZURhdGEtPm1fc3lzdGVtSWRlbnRpZmllcjsKQEAgLTUwOCw3ICs1MTAsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgLy8KICAgICAvLyBGSVhNRTogQWRkIGEgbWVjaGFuaXNtIGZvciAiaW50ZXJuYWxpemlu
ZyIgdGhlIGNoYXJhY3RlcnMgd2hlbiB0aGUKICAgICAvLyAgICAgICAgSFRNTFRva2VuIGlzIGRl
c3RydWN0ZWQuCi0gICAgY29uc3QgdHlwZW5hbWUgVG9rZW46OkRhdGFWZWN0b3IqIG1fZXh0ZXJu
YWxDaGFyYWN0ZXJzOworICAgIGNvbnN0IFN0cmluZ0J1aWxkZXIqIG1fZXh0ZXJuYWxDaGFyYWN0
ZXJzOwogCiAgICAgLy8gRm9yIERPQ1RZUEUKICAgICBPd25QdHI8dHlwZW5hbWUgVG9rZW46OkRv
Y3R5cGVEYXRhPiBtX2RvY3R5cGVEYXRhOwpAQCAtNTQwLDcgKzU0Miw3IEBAIGlubGluZSB2b2lk
IEF0b21pY01hcmt1cFRva2VuQmFzZTxUb2tlbj4KICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZS5t
X3ZhbHVlUmFuZ2UubV9zdGFydCk7CiAgICAgICAgIEFTU0VSVChhdHRyaWJ1dGUubV92YWx1ZVJh
bmdlLm1fZW5kKTsKIAotICAgICAgICBTdHJpbmcgdmFsdWUoYXR0cmlidXRlLm1fdmFsdWUuZGF0
YSgpLCBhdHRyaWJ1dGUubV92YWx1ZS5zaXplKCkpOworICAgICAgICBTdHJpbmcgdmFsdWUoYXR0
cmlidXRlLm1fdmFsdWUudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpOwogICAgICAgICBtX2F0
dHJpYnV0ZXMtPmluc2VydEF0dHJpYnV0ZShBdHRyaWJ1dGU6OmNyZWF0ZU1hcHBlZChuYW1lRm9y
QXR0cmlidXRlKGF0dHJpYnV0ZSksIHZhbHVlKSwgZmFsc2UpOwogICAgIH0KIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlci5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KIAotICAg
IGlubGluZSBzdGF0aWMgYm9vbCBjb252ZXJ0VG9VVEYxNihVQ2hhcjMyIHZhbHVlLCBWZWN0b3I8
VUNoYXIsIDE2PiYgZGVjb2RlZENoYXJhY3RlcikKKyAgICBpbmxpbmUgc3RhdGljIGJvb2wgY29u
dmVydFRvVVRGMTYoVUNoYXIzMiB2YWx1ZSwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZENoYXJhY3Rl
cikKICAgICB7CiAgICAgICAgIGlmIChVX0lTX0JNUCh2YWx1ZSkpIHsKICAgICAgICAgVUNoYXIg
Y2hhcmFjdGVyID0gc3RhdGljX2Nhc3Q8VUNoYXI+KHZhbHVlKTsKQEAgLTYxLDcgKzYxLDcgQEAg
cHVibGljOgogCiAgICAgaW5saW5lIHN0YXRpYyBib29sIGFjY2VwdE1hbGZvcm1lZCgpIHsgcmV0
dXJuIGZhbHNlOyB9CiAKLSAgICBpbmxpbmUgc3RhdGljIGJvb2wgY29uc3VtZU5hbWVkRW50aXR5
KFNlZ21lbnRlZFN0cmluZyYsIFZlY3RvcjxVQ2hhciwgMTY+JiwgYm9vbCYsIFVDaGFyLCBVQ2hh
ciYpCisgICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnN1bWVOYW1lZEVudGl0eShTZWdtZW50ZWRT
dHJpbmcmLCBTdHJpbmdCdWlsZGVyJiwgYm9vbCYsIFVDaGFyLCBVQ2hhciYpCiAgICAgewogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzAs
NyArNzAsNyBAQCBwdWJsaWM6CiAKIH0KIAotYm9vbCBjb25zdW1lWE1MQ2hhcmFjdGVyUmVmZXJl
bmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZENo
YXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycykKK2Jvb2wgY29uc3VtZVhNTENoYXJh
Y3RlclJlZmVyZW5jZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU3RyaW5nQnVpbGRlciYgZGVj
b2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycykKIHsKICAgICByZXR1cm4g
Y29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZTxYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXI+KHNv
dXJjZSwgZGVjb2RlZENoYXJhY3Rlciwgbm90RW5vdWdoQ2hhcmFjdGVycywgMCk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVm
ZXJlbmNlUGFyc2VyLmgJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1ib29sIGNvbnN1bWVYTUxD
aGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiwgVmVjdG9yPFVDaGFyLCAxNj4mIGRl
Y29kZWRDaGFyYWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMpOworYm9vbCBjb25zdW1l
WE1MQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYsIFN0cmluZ0J1aWxkZXImIGRl
Y29kZWRDaGFyYWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMpOwogCiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVG9rZW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuLmgJKHJldmlzaW9uIDkzNzAzKQorKysgU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3
ICs1Miw3IEBAIHB1YmxpYzoKIGNsYXNzIFByZWZpeGVkQXR0cmlidXRlIDogcHVibGljIEF0dHJp
YnV0ZUJhc2UgewogcHVibGljOgogICAgIFJhbmdlIG1fcHJlZml4UmFuZ2U7Ci0gICAgV1RGOjpW
ZWN0b3I8VUNoYXIsIDMyPiBtX3ByZWZpeDsKKyAgICBTdHJpbmdCdWlsZGVyIG1fcHJlZml4Owog
fTsKIAogY2xhc3MgWE1MVG9rZW4gOiBwdWJsaWMgTWFya3VwVG9rZW5CYXNlPFhNTFRva2VuVHlw
ZXMsIERvY3R5cGVEYXRhQmFzZSwgUHJlZml4ZWRBdHRyaWJ1dGU+IHsKQEAgLTcwLDggKzcwLDgg
QEAgcHVibGljOgogICAgICAgICBib29sIG1faGFzU3RhbmRhbG9uZTsKICAgICAgICAgYm9vbCBt
X2hhc0VuY29kaW5nOwogICAgICAgICBib29sIG1fc3RhbmRhbG9uZTsKLSAgICAgICAgV1RGOjpW
ZWN0b3I8VUNoYXI+IG1fZW5jb2Rpbmc7Ci0gICAgICAgIFdURjo6VmVjdG9yPFVDaGFyPiBtX3Zl
cnNpb247CisgICAgICAgIFN0cmluZ0J1aWxkZXIgbV9lbmNvZGluZzsKKyAgICAgICAgU3RyaW5n
QnVpbGRlciBtX3ZlcnNpb247CiAgICAgfTsKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpCkBA
IC04NiwyNSArODYsMjUgQEAgcHVibGljOgogICAgICAgICBNYXJrdXBUb2tlbkJhc2U8WE1MVG9r
ZW5UeXBlcywgRG9jdHlwZURhdGFCYXNlLCBQcmVmaXhlZEF0dHJpYnV0ZT46OmFwcGVuZFRvTmFt
ZShjaGFyYWN0ZXIpOwogICAgIH0KIAotICAgIGNvbnN0IERhdGFWZWN0b3ImIG5hbWUoKSBjb25z
dAorICAgIGNvbnN0IFN0cmluZ0J1aWxkZXImIG5hbWUoKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fdHlwZSA9PSBYTUxUb2tlblR5cGVzOjpTdGFydFRhZyB8fCBtX3R5cGUgPT0gWE1M
VG9rZW5UeXBlczo6RW5kVGFnIHx8IG1fdHlwZSA9PSBYTUxUb2tlblR5cGVzOjpET0NUWVBFIHx8
IG1fdHlwZSA9PSBYTUxUb2tlblR5cGVzOjpFbnRpdHkpOwogICAgICAgICByZXR1cm4gTWFya3Vw
VG9rZW5CYXNlPFhNTFRva2VuVHlwZXMsIERvY3R5cGVEYXRhQmFzZSwgUHJlZml4ZWRBdHRyaWJ1
dGU+OjpuYW1lKCk7CiAgICAgfQogCi0gICAgY29uc3QgRGF0YVZlY3RvciYgdGFyZ2V0KCkgY29u
c3QKKyAgICBjb25zdCBTdHJpbmdCdWlsZGVyJiB0YXJnZXQoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBYTUxUb2tlblR5cGVzOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24p
OwogICAgICAgICByZXR1cm4gbV90YXJnZXQ7CiAgICAgfQogCi0gICAgY29uc3QgRGF0YVZlY3Rv
ciYgZGF0YSgpIGNvbnN0CisgICAgY29uc3QgU3RyaW5nQnVpbGRlciYgZGF0YSgpIGNvbnN0CiAg
ICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IFhNTFRva2VuVHlwZXM6OkNEQVRBIHx8IG1f
dHlwZSA9PSBYTUxUb2tlblR5cGVzOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOwogICAgICAgICBy
ZXR1cm4gbV9kYXRhOwogICAgIH0KIAotICAgIGNvbnN0IERhdGFWZWN0b3ImIHByZWZpeCgpIGNv
bnN0CisgICAgY29uc3QgU3RyaW5nQnVpbGRlciYgcHJlZml4KCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtX3R5cGUgPT0gWE1MVG9rZW5UeXBlczo6U3RhcnRUYWcgfHwgbV90eXBlID09
IFhNTFRva2VuVHlwZXM6OkVuZFRhZyk7CiAgICAgICAgIHJldHVybiBtX3RhcmdldDsKQEAgLTIx
MCw3ICsyMTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQcmVmaXgoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBYTUxUb2tlblR5cGVzOjpTdGFydFRhZyB8fCBtX3R5
cGUgPT0gWE1MVG9rZW5UeXBlczo6RW5kVGFnKTsKLSAgICAgICAgcmV0dXJuIG1fdGFyZ2V0LnNp
emUoKTsKKyAgICAgICAgcmV0dXJuIG1fdGFyZ2V0Lmxlbmd0aCgpOwogICAgIH0KIAogICAgIHZv
aWQgYmVnaW5DREFUQSgpCkBAIC0zOTMsNyArMzkzLDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgQXRvbWljWE1MVG9rZW47CiAKICAgICAvLyAidGFyZ2V0IiBmb3IgUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLCAicHJlZml4IiBmb3IgU3RhcnRUYWcgYW5kIEVuZFRhZwotICAgIERhdGFWZWN0
b3IgbV90YXJnZXQ7CisgICAgU3RyaW5nQnVpbGRlciBtX3RhcmdldDsKIAogICAgIC8vIEZvciBY
TUwgRGVjbGFyYXRpb24KICAgICBPd25QdHI8WE1MRGVjbGFyYXRpb25EYXRhPiBtX3htbERlY2xh
cmF0aW9uRGF0YTsKQEAgLTQwNywyNCArNDA3LDI0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHN3aXRjaCAobV90eXBlKSB7CiAgICAgICAgIGNhc2UgWE1MVG9rZW5UeXBlczo6UHJvY2Vzc2lu
Z0luc3RydWN0aW9uOgotICAgICAgICAgICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKHRva2VuLnRh
cmdldCgpLmRhdGEoKSwgdG9rZW4udGFyZ2V0KCkuc2l6ZSgpKTsKLSAgICAgICAgICAgIG1fZGF0
YSA9IFN0cmluZyh0b2tlbi5kYXRhKCkuZGF0YSgpLCB0b2tlbi5kYXRhKCkuc2l6ZSgpKTsKKyAg
ICAgICAgICAgIG1fbmFtZSA9IEF0b21pY1N0cmluZyh0b2tlbi50YXJnZXQoKS50b1N0cmluZ1By
ZXNlcnZlQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBtX2RhdGEgPSB0b2tlbi5kYXRhKCkudG9T
dHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBYTUxUb2tlblR5cGVzOjpYTUxEZWNsYXJhdGlvbjoKICAgICAgICAgICAgIG1feG1sRGVjbGFy
YXRpb25EYXRhID0gdG9rZW4ubV94bWxEZWNsYXJhdGlvbkRhdGEucmVsZWFzZSgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgWE1MVG9rZW5UeXBlczo6U3RhcnRUYWc6CiAgICAg
ICAgIGNhc2UgWE1MVG9rZW5UeXBlczo6RW5kVGFnOiB7Ci0gICAgICAgICAgICBpZiAodG9rZW4u
cHJlZml4KCkuc2l6ZSgpKQotICAgICAgICAgICAgICAgIG1fcHJlZml4ID0gQXRvbWljU3RyaW5n
KHRva2VuLnByZWZpeCgpLmRhdGEoKSwgdG9rZW4ucHJlZml4KCkuc2l6ZSgpKTsKKyAgICAgICAg
ICAgIGlmICh0b2tlbi5wcmVmaXgoKS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBtX3ByZWZp
eCA9IEF0b21pY1N0cmluZyh0b2tlbi5wcmVmaXgoKS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHko
KSk7CiAgICAgICAgICAgICBpbml0aWFsaXplQXR0cmlidXRlcyh0b2tlbi5hdHRyaWJ1dGVzKCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBYTUxUb2tlblR5
cGVzOjpDREFUQToKLSAgICAgICAgICAgIG1fZGF0YSA9IFN0cmluZyh0b2tlbi5kYXRhKCkuZGF0
YSgpLCB0b2tlbi5kYXRhKCkuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fZGF0YSA9IHRva2VuLmRh
dGEoKS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIFhNTFRva2VuVHlwZXM6OkVudGl0eToKLSAgICAgICAgICAgIG1fbmFtZSA9IEF0
b21pY1N0cmluZyh0b2tlbi5uYW1lKCkuZGF0YSgpLCB0b2tlbi5uYW1lKCkuc2l6ZSgpKTsKKyAg
ICAgICAgICAgIG1fbmFtZSA9IEF0b21pY1N0cmluZyh0b2tlbi5uYW1lKCkudG9TdHJpbmdQcmVz
ZXJ2ZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTQ1NCw3ICs0NTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2RhdGE7CiAgICAgfQogCi0gICAgV1RGOjpWZWN0b3I8VUNoYXI+JiB4bWxWZXJzaW9u
KCkgY29uc3QKKyAgICBTdHJpbmdCdWlsZGVyJiB4bWxWZXJzaW9uKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gWE1MVG9rZW5UeXBlczo6WE1MRGVjbGFyYXRpb24pOwog
ICAgICAgICByZXR1cm4gbV94bWxEZWNsYXJhdGlvbkRhdGEtPm1fdmVyc2lvbjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDkzNzAz
KQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHRlbXBsYXRlPD4K
IFF1YWxpZmllZE5hbWUgQXRvbWljTWFya3VwVG9rZW5CYXNlPFhNTFRva2VuPjo6bmFtZUZvckF0
dHJpYnV0ZShjb25zdCBYTUxUb2tlbjo6QXR0cmlidXRlJiBhdHRyaWJ1dGUpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIFF1YWxpZmllZE5hbWUoYXR0cmlidXRlLm1fcHJlZml4LmlzRW1wdHkoKSA/IG51
bGxBdG9tIDogQXRvbWljU3RyaW5nKGF0dHJpYnV0ZS5tX3ByZWZpeC5kYXRhKCksIGF0dHJpYnV0
ZS5tX3ByZWZpeC5zaXplKCkpLCBBdG9taWNTdHJpbmcoYXR0cmlidXRlLm1fbmFtZS5kYXRhKCks
IGF0dHJpYnV0ZS5tX25hbWUuc2l6ZSgpKSwgbnVsbEF0b20pOworICAgIHJldHVybiBRdWFsaWZp
ZWROYW1lKGF0dHJpYnV0ZS5tX3ByZWZpeC5pc0VtcHR5KCkgPyBudWxsQXRvbSA6IEF0b21pY1N0
cmluZyhhdHRyaWJ1dGUubV9wcmVmaXgudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpLCBBdG9t
aWNTdHJpbmcoYXR0cmlidXRlLm1fbmFtZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSksIG51
bGxBdG9tKTsKIH0KIAogdGVtcGxhdGU8PgpAQCAtMjUxLDExICsyNTEsMTAgQEAgYm9vbCBYTUxU
b2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRTdAogICAgIFhNTF9CRUdJTl9TVEFURShDaGFy
YWN0ZXJSZWZlcmVuY2VTdGFydFN0YXRlKSB7CiAgICAgICAgIGlmIChjYyA9PSAnIycpIHsKICAg
ICAgICAgICAgIGJvb2wgbm90RW5vdWdoQ2hhcmFjdGVycyA9IGZhbHNlOwotICAgICAgICAgICAg
VmVjdG9yPFVDaGFyLCAxNj4gZGVjb2RlZENoYXJhY3RlcjsKKyAgICAgICAgICAgIFN0cmluZ0J1
aWxkZXIgZGVjb2RlZENoYXJhY3RlcjsKICAgICAgICAgICAgIGlmIChjb25zdW1lWE1MQ2hhcmFj
dGVyUmVmZXJlbmNlKHNvdXJjZSwgZGVjb2RlZENoYXJhY3Rlciwgbm90RW5vdWdoQ2hhcmFjdGVy
cykpIHsKLSAgICAgICAgICAgICAgICBWZWN0b3I8VUNoYXIsIDE2Pjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGRlY29kZWRDaGFyYWN0ZXIuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBmb3IgKDsg
aXRlciAhPSBkZWNvZGVkQ2hhcmFjdGVyLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAg
ICAgIGJ1ZmZlckNoYXJhY3RlcigqaXRlcik7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRlY29kZWRDaGFyYWN0ZXIubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKGRlY29kZWRDaGFyYWN0ZXJbaV0pOwogICAgICAgICAg
ICAgICAgIFhNTF9TV0lUQ0hfVE8oRGF0YVN0YXRlKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAo
bm90RW5vdWdoQ2hhcmFjdGVycykKICAgICAgICAgICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVk
Q2hhcmFjdGVyVG9rZW4oKTsKQEAgLTQzNywxMiArNDM2LDExIEBAIGJvb2wgWE1MVG9rZW5pemVy
OjpuZXh0VG9rZW4oU2VnbWVudGVkU3QKICAgICBYTUxfQkVHSU5fU1RBVEUoQ2hhcmFjdGVyUmVm
ZXJlbmNlSW5BdHRyaWJ1dGVWYWx1ZVN0YXRlKSB7CiAgICAgICAgIGlmIChjYyA9PSAnIycpIHsK
ICAgICAgICAgICAgIGJvb2wgbm90RW5vdWdoQ2hhcmFjdGVycyA9IGZhbHNlOwotICAgICAgICAg
ICAgVmVjdG9yPFVDaGFyLCAxNj4gZGVjb2RlZENoYXJhY3RlcjsKKyAgICAgICAgICAgIFN0cmlu
Z0J1aWxkZXIgZGVjb2RlZENoYXJhY3RlcjsKICAgICAgICAgICAgIHNvdXJjZS5wdXNoKGNjKTsK
ICAgICAgICAgICAgIGlmIChjb25zdW1lWE1MQ2hhcmFjdGVyUmVmZXJlbmNlKHNvdXJjZSwgZGVj
b2RlZENoYXJhY3Rlciwgbm90RW5vdWdoQ2hhcmFjdGVycykpIHsKLSAgICAgICAgICAgICAgICBW
ZWN0b3I8VUNoYXIsIDE2Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlY29kZWRDaGFyYWN0ZXIu
YmVnaW4oKTsKLSAgICAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBkZWNvZGVkQ2hhcmFjdGVy
LmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQXR0
cmlidXRlVmFsdWUoKml0ZXIpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkZWNvZGVkQ2hhcmFjdGVyLmxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICAgICAgICAg
IG1fdG9rZW4tPmFwcGVuZFRvQXR0cmlidXRlVmFsdWUoZGVjb2RlZENoYXJhY3RlcltpXSk7CiAg
ICAgICAgICAgICAgICAgWE1MX0FEVkFOQ0VfVE8oQXR0cmlidXRlVmFsdWVRdW90ZWRTdGF0ZSk7
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vdEVub3VnaENoYXJhY3RlcnMpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNwcAkocmV2aXNpb24gOTM3MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgWE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NY
TUxEZWNsYXJhdGkKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCi0gICAgbV9kb2N1bWVu
dC0+c2V0WE1MVmVyc2lvbihTdHJpbmcodG9rZW4ueG1sVmVyc2lvbigpKSwgZWMpOworICAgIG1f
ZG9jdW1lbnQtPnNldFhNTFZlcnNpb24odG9rZW4ueG1sVmVyc2lvbigpLnRvU3RyaW5nUHJlc2Vy
dmVDYXBhY2l0eSgpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICBtX3BhcnNlci0+c3RvcFBh
cnNpbmcoKTsKIApAQCAtMjA3LDggKzIwNyw4IEBAIHZvaWQgWE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NET0NUWVBFKGNvbnMKICAgICBpZiAoIWZhaWxPblRleHQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQXRvbWljU3RyaW5nIHB1YmxpY0lkZW50aWZpZXIodG9rZW4ucHVibGljSWRlbnRpZmll
cigpLmRhdGEoKSwgdG9rZW4ucHVibGljSWRlbnRpZmllcigpLnNpemUoKSk7Ci0gICAgQXRvbWlj
U3RyaW5nIHN5c3RlbUlkZW50aWZpZXIodG9rZW4uc3lzdGVtSWRlbnRpZmllcigpLmRhdGEoKSwg
dG9rZW4uc3lzdGVtSWRlbnRpZmllcigpLnNpemUoKSk7CisgICAgQXRvbWljU3RyaW5nIHB1Ymxp
Y0lkZW50aWZpZXIodG9rZW4ucHVibGljSWRlbnRpZmllcigpLnRvU3RyaW5nUHJlc2VydmVDYXBh
Y2l0eSgpKTsKKyAgICBBdG9taWNTdHJpbmcgc3lzdGVtSWRlbnRpZmllcih0b2tlbi5zeXN0ZW1J
ZGVudGlmaWVyKCkudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpOwogICAgIFJlZlB0cjxEb2N1
bWVudFR5cGU+IGRvY3R5cGUgPSBEb2N1bWVudFR5cGU6OmNyZWF0ZShtX2RvY3VtZW50LCB0b2tl
bi5uYW1lKCksIHB1YmxpY0lkZW50aWZpZXIsIHN5c3RlbUlkZW50aWZpZXIpOwogICAgIG1fZG9j
dW1lbnQtPnNldERvY1R5cGUoZG9jdHlwZSk7CiAgICAgbV9kb2N1bWVudC0+cGFyc2VyQWRkQ2hp
bGQoZG9jdHlwZSk7CkBAIC0yNzAsNyArMjcwLDcgQEAgdm9pZCBYTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0VuZFRhZyhjb25zdAogCiB2b2lkIFhNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVy
KGNvbnN0IEF0b21pY1hNTFRva2VuJiB0b2tlbikKIHsKLSAgICBhcHBlbmRUb1RleHQodG9rZW4u
Y2hhcmFjdGVycygpLmRhdGEoKSwgdG9rZW4uY2hhcmFjdGVycygpLnNpemUoKSk7CisgICAgYXBw
ZW5kVG9UZXh0KHRva2VuLmNoYXJhY3RlcnMoKS5jaGFyYWN0ZXJzKCksIHRva2VuLmNoYXJhY3Rl
cnMoKS5sZW5ndGgoKSk7CiB9CiAKIHZvaWQgWE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDREFUQShj
b25zdCBBdG9taWNYTUxUb2tlbiYgdG9rZW4pCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwkocmV2aXNpb24gOTM3NjEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTA4LTI0ICBYaWFuemh1IFdhbmcg
IDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBzb21lIHVzYWdl
cyBvZiBWZWN0b3I8VUNoYXI+IHRvIFN0cmluZ0J1aWxkZXIuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Byb2Nlc3NfYnVnLmNnaQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgcGFydCBvZiB3b3JrIHRvIHN1cHBvcnQgOC1i
aXQgc3RyaW5nIGJ1ZmZlcnMuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0
ZXN0cy9TdHJpbmdCdWlsZGVyVGVzdC5jcHA6IEFkZGVkLiBUZXN0IGZvciBTdHJpbmdCdWlsZGVy
LgorCiAyMDExLTA4LTI0ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgSW1wbGVtZW50IGEga2V5cGF0aCBwYXJzZXIgc3RyaWN0bHkgZm9sbG93aW5nIHRoZSBz
cGVjaWZpY2F0aW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkJKHJldmlzaW9u
IDkzNzAzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQkod29ya2luZyBj
b3B5KQpAQCAtNjcsNiArNjcsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL1BPREludGVydmFsVHJl
ZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RSZWRCbGFja1RyZWVUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvU2Nyb2xsQW5pbWF0b3JOb25lVGVzdC5jcHAnLAorICAgICAg
ICAgICAgJ3Rlc3RzL1N0cmluZ0J1aWxkZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
VGlsaW5nRGF0YVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UcmVlU3luY2hyb25pemVy
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RyZWVUZXN0SGVscGVycy5jcHAnLApJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9TdHJpbmdCdWlsZGVyVGVzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9TdHJpbmdCdWlsZGVyVGVz
dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1N0cmlu
Z0J1aWxkZXJUZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBCYXNpYyB0
ZXN0cyB0aGF0IHZlcmlmeSBvdXIgS1VSTCdzIGludGVyZmFjZSBiZWhhdmVzIHRoZSBzYW1lIGFz
IHRoZQorLy8gb3JpZ2luYWwgS1VSTCdzLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgeworCisjZGVmaW5lIEVYUEVD
VF9DT05URU5UKHN0ciwgYnVpbGRlcikgXAorICAgIEVYUEVDVF9TVFJFUShzdHIsIFN0cmluZyhi
dWlsZGVyLmNoYXJhY3RlcnMoKSwgYnVpbGRlci5sZW5ndGgoKSkuYXNjaWkoKS5kYXRhKCkpCisK
K3ZvaWQgZXhwZWN0RW1wdHkoY29uc3QgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKK3sKKyAgICBF
WFBFQ1RfRVEoMFUsIGJ1aWxkZXIubGVuZ3RoKCkpOworICAgIEVYUEVDVF9UUlVFKGJ1aWxkZXIu
aXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoTlVMTCwgYnVpbGRlci5jaGFyYWN0ZXJzKCkpOwor
ICAgIEVYUEVDVF9DT05URU5UKCIiLCBidWlsZGVyKTsKK30KKworVEVTVChTdHJpbmdCdWlsZGVy
VGVzdCwgZGVmYXVsdENvbnN0cnVjdG9yKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KyAgICBleHBlY3RFbXB0eShidWlsZGVyKTsKKyAgICBFWFBFQ1RfRVEoMFUsIGJ1aWxkZXIuY2Fw
YWNpdHkoKSk7Cit9CisvKgorVEVTVChTdHJpbmdCdWlsZGVyVGVzdCwgY29uc3RydWN0b3JXaXRo
SW5pdGlhbExlbmd0aCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoMTYpOworICAgIEVY
UEVDVF9FUSgxNiwgYnVpbGRlci5sZW5ndGgoKSk7Cit9CisqLworVEVTVChTdHJpbmdCdWlsZGVy
VGVzdCwgcmVzZXJ2ZUNhcGFjaXR5KQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAg
ICBidWlsZGVyLmFwcGVuZCgiMDEyMzQ1Njc4OSIpOworICAgIEVYUEVDVF9MVCgwVSwgYnVpbGRl
ci5jYXBhY2l0eSgpKTsKKyAgICB1bnNpZ25lZCBuZXdDYXBhY2l0eSA9IDUgKiBidWlsZGVyLmNh
cGFjaXR5KCk7CisgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkobmV3Q2FwYWNpdHkpOworICAg
IEVYUEVDVF9MRShuZXdDYXBhY2l0eSwgYnVpbGRlci5jYXBhY2l0eSgpKTsKKyAgICBFWFBFQ1Rf
Q09OVEVOVCgiMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOworfQorCitURVNUKFN0cmluZ0J1aWxkZXJU
ZXN0LCBpbnNlcnQpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIu
aW5zZXJ0KFN0cmluZygiMDEyMzQ1Njc4OSIpLCAwKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEy
MzQ1Njc4OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIuaW5zZXJ0KCJhYmNkIiwgMCk7CisgICAg
RVhQRUNUX0NPTlRFTlQoImFiY2QwMTIzNDU2Nzg5IiwgYnVpbGRlcik7CisgICAgYnVpbGRlci5p
bnNlcnQoImVmZ2giLCAzLCBidWlsZGVyLmxlbmd0aCgpKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgi
YWJjZDAxMjM0NTY3ODllZmciLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLmluc2VydChTdHJpbmco
IlhZWiIpLCA5KTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiYWJjZDAxMjM0WFlaNTY3ODllZmciLCBi
dWlsZGVyKTsKKyAgICBidWlsZGVyLmluc2VydCgiIiwgOSk7CisgICAgRVhQRUNUX0NPTlRFTlQo
ImFiY2QwMTIzNFhZWjU2Nzg5ZWZnIiwgYnVpbGRlcik7CisgICAgYnVpbGRlci5pbnNlcnQoJyMn
LCAxMCk7CisgICAgRVhQRUNUX0NPTlRFTlQoImFiY2QwMTIzNFgjWVo1Njc4OWVmZyIsIGJ1aWxk
ZXIpOworCisgICAgYnVpbGRlci50b1N0cmluZygpOyAvLyBUZXN0IGFmdGVyIHJlaWZ5U3RyaW5n
KCkuCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyMTsKKyAgICBidWlsZGVyLmluc2VydChidWls
ZGVyMSwgMTApOworICAgIEVYUEVDVF9DT05URU5UKCJhYmNkMDEyMzRYI1laNTY3ODllZmciLCBi
dWlsZGVyKTsKKyAgICBidWlsZGVyMS5pbnNlcnQoYnVpbGRlciwgMCk7CisgICAgYnVpbGRlci5p
bnNlcnQoYnVpbGRlcjEsIDE1KTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiYWJjZDAxMjM0WCNZWjU2
YWJjZDAxMjM0WCNZWjU2Nzg5ZWZnNzg5ZWZnIiwgYnVpbGRlcik7Cit9CisKK1RFU1QoU3RyaW5n
QnVpbGRlclRlc3QsIHByZXBlbmQpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
IGJ1aWxkZXIucHJlcGVuZChTdHJpbmcoIjAxMjM0NTY3ODkiKSk7CisgICAgRVhQRUNUX0NPTlRF
TlQoIjAxMjM0NTY3ODkiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLnByZXBlbmQoImFiY2QiKTsK
KyAgICBFWFBFQ1RfQ09OVEVOVCgiYWJjZDAxMjM0NTY3ODkiLCBidWlsZGVyKTsKKyAgICBidWls
ZGVyLnByZXBlbmQoImVmZ2giLCAzKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiZWZnYWJjZDAxMjM0
NTY3ODkiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLnByZXBlbmQoIiIpOworICAgIEVYUEVDVF9D
T05URU5UKCJlZmdhYmNkMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIucHJlcGVu
ZCgnIycpOworICAgIEVYUEVDVF9DT05URU5UKCIjZWZnYWJjZDAxMjM0NTY3ODkiLCBidWlsZGVy
KTsKKworICAgIGJ1aWxkZXIudG9TdHJpbmcoKTsgLy8gVGVzdCBhZnRlciByZWlmeVN0cmluZygp
LgorICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjE7CisgICAgYnVpbGRlci5wcmVwZW5kKGJ1aWxk
ZXIxKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiI2VmZ2FiY2QwMTIzNDU2Nzg5IiwgYnVpbGRlcik7
CisgICAgYnVpbGRlcjEucHJlcGVuZChidWlsZGVyKTsKKyAgICBidWlsZGVyMS5wcmVwZW5kKCJY
WVoiKTsKKyAgICBidWlsZGVyLnByZXBlbmQoYnVpbGRlcjEpOworICAgIEVYUEVDVF9DT05URU5U
KCJYWVojZWZnYWJjZDAxMjM0NTY3ODkjZWZnYWJjZDAxMjM0NTY3ODkiLCBidWlsZGVyKTsKK30K
KworVEVTVChTdHJpbmdCdWlsZGVyVGVzdCwgYXBwZW5kKQoreworICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZChTdHJpbmcoIjAxMjM0NTY3ODkiKSk7CisgICAg
RVhQRUNUX0NPTlRFTlQoIjAxMjM0NTY3ODkiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLmFwcGVu
ZCgiYWJjZCIpOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2Nzg5YWJjZCIsIGJ1aWxkZXIp
OworICAgIGJ1aWxkZXIuYXBwZW5kKCJlZmdoIiwgMyk7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAx
MjM0NTY3ODlhYmNkZWZnIiwgYnVpbGRlcik7CisgICAgYnVpbGRlci5hcHBlbmQoIiIpOworICAg
IEVYUEVDVF9DT05URU5UKCIwMTIzNDU2Nzg5YWJjZGVmZyIsIGJ1aWxkZXIpOworICAgIGJ1aWxk
ZXIuYXBwZW5kKCcjJyk7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAxMjM0NTY3ODlhYmNkZWZnIyIs
IGJ1aWxkZXIpOworCisgICAgYnVpbGRlci50b1N0cmluZygpOyAvLyBUZXN0IGFmdGVyIHJlaWZ5
U3RyaW5nKCkuCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyMTsKKyAgICBidWlsZGVyLmFwcGVu
ZChidWlsZGVyMSk7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAxMjM0NTY3ODlhYmNkZWZnIyIsIGJ1
aWxkZXIpOworICAgIGJ1aWxkZXIxLmFwcGVuZChidWlsZGVyKTsKKyAgICBidWlsZGVyMS5hcHBl
bmQoIlhZWiIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGJ1aWxkZXIxKTsKKyAgICBFWFBFQ1RfQ09O
VEVOVCgiMDEyMzQ1Njc4OWFiY2RlZmcjMDEyMzQ1Njc4OWFiY2RlZmcjWFlaIiwgYnVpbGRlcik7
Cit9CisKK1RFU1QoU3RyaW5nQnVpbGRlclRlc3QsIHJlbW92ZSkKK3sKKyAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmQoIjAxMjM0NTY3ODkiKTsKKyAgICBidWls
ZGVyLnJlbW92ZSgwLCAwKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQ1Njc4OSIsIGJ1aWxk
ZXIpOworICAgIGJ1aWxkZXIucmVtb3ZlKDUsIDApOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIz
NDU2Nzg5IiwgYnVpbGRlcik7CisgICAgYnVpbGRlci5yZW1vdmUoYnVpbGRlci5sZW5ndGgoKSAt
IDEsIDEpOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2NzgiLCBidWlsZGVyKTsKKyAgICBi
dWlsZGVyLnJlbW92ZSgwLCAxKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMTIzNDU2NzgiLCBidWls
ZGVyKTsKKyAgICBidWlsZGVyLnJlbW92ZSg1LCAyKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMTIz
NDU4IiwgYnVpbGRlcik7CisgICAgYnVpbGRlci5yZW1vdmUoMCwgNik7CisgICAgZXhwZWN0RW1w
dHkoYnVpbGRlcik7Cit9CisKK1RFU1QoU3RyaW5nQnVpbGRlclRlc3QsIGNsZWFyKQoreworICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCgiMDEyMzQ1Njc4OSIp
OworICAgIGJ1aWxkZXIuY2xlYXIoKTsKKyAgICBleHBlY3RFbXB0eShidWlsZGVyKTsKKyAgICBF
WFBFQ1RfRVEoMFUsIGJ1aWxkZXIuY2FwYWNpdHkoKSk7Cit9CisKK1RFU1QoU3RyaW5nQnVpbGRl
clRlc3QsIGNoYXJhY3RlcnMpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1
aWxkZXIuYXBwZW5kKCIwMTIzNDU2Nzg5Iik7CisgICAgVUNoYXIqIGNoYXJhY3RlcnMgPSBidWls
ZGVyLmNoYXJhY3RlcnMoKTsKKyAgICBFWFBFQ1RfRVEoJzAnLCBzdGF0aWNfY2FzdDxjaGFyPihj
aGFyYWN0ZXJzWzBdKSk7CisgICAgRVhQRUNUX0VRKCc5Jywgc3RhdGljX2Nhc3Q8Y2hhcj4oY2hh
cmFjdGVyc1s5XSkpOworICAgIGNoYXJhY3RlcnNbNV0gPSAnIyc7CisgICAgRVhQRUNUX0NPTlRF
TlQoIjAxMjM0IzY3ODkiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLnRvU3RyaW5nKCk7IC8vIFRl
c3QgYWZ0ZXIgcmVpZnlTdHJpbmcoKS4KKyAgICBidWlsZGVyLmNoYXJhY3RlcnMoKVs2XSA9ICdA
JzsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQjQDc4OSIsIGJ1aWxkZXIpOworfQorCitURVNU
KFN0cmluZ0J1aWxkZXJUZXN0LCBhcnJheSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CisgICAgYnVpbGRlci5hcHBlbmQoIjAxMjM0NTY3ODkiKTsKKyAgICBFWFBFQ1RfRVEoJzAnLCBz
dGF0aWNfY2FzdDxjaGFyPihidWlsZGVyWzBdKSk7CisgICAgRVhQRUNUX0VRKCc5Jywgc3RhdGlj
X2Nhc3Q8Y2hhcj4oYnVpbGRlcls5XSkpOworICAgIGJ1aWxkZXJbNV0gPSAnIyc7CisgICAgRVhQ
RUNUX0NPTlRFTlQoIjAxMjM0IzY3ODkiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLnRvU3RyaW5n
KCk7IC8vIFRlc3QgYWZ0ZXIgcmVpZnlTdHJpbmcoKS4KKyAgICBidWlsZGVyWzZdID0gJ0AnOwor
ICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNCNANzg5IiwgYnVpbGRlcik7Cit9CisKK1RFU1QoU3Ry
aW5nQnVpbGRlclRlc3QsIGNvbnN0QnVpbGRlcikKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgYnVpbGRlci5hcHBlbmQoIjAxMjM0NTY3ODkiKTsKKyAgICBjb25zdCBTdHJpbmdC
dWlsZGVyJiBjb25zdEJ1aWxkZXIgPSBidWlsZGVyOworICAgIEVYUEVDVF9FUSgnMCcsIHN0YXRp
Y19jYXN0PGNoYXI+KGNvbnN0QnVpbGRlclswXSkpOworICAgIEVYUEVDVF9FUSgnOScsIHN0YXRp
Y19jYXN0PGNoYXI+KGNvbnN0QnVpbGRlcls5XSkpOworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzID0gY29uc3RCdWlsZGVyLmNoYXJhY3RlcnMoKTsKKyAgICBFWFBFQ1RfRVEoJzAnLCBzdGF0
aWNfY2FzdDxjaGFyPihjaGFyYWN0ZXJzWzBdKSk7CisgICAgRVhQRUNUX0VRKCc5Jywgc3RhdGlj
X2Nhc3Q8Y2hhcj4oY2hhcmFjdGVyc1s5XSkpOworfQorCitURVNUKFN0cmluZ0J1aWxkZXJUZXN0
LCBhcHBlbmROdW1iZXIpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxk
ZXIuYXBwZW5kTnVtYmVyKDApOworICAgIEVYUEVDVF9DT05URU5UKCIwIiwgYnVpbGRlcik7Cisg
ICAgYnVpbGRlci5hcHBlbmROdW1iZXIoMSk7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAxIiwgYnVp
bGRlcik7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoMjU1KTsKKyAgICBFWFBFQ1RfQ09OVEVO
VCgiMDEyNTUiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcig5OSk7CisgICAg
RVhQRUNUX0NPTlRFTlQoIjAxMjU1OTkiLCBidWlsZGVyKTsKK30KKworVEVTVChTdHJpbmdCdWls
ZGVyVGVzdCwgcmVzaXplKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWls
ZGVyLmFwcGVuZCgiMDEyMzQ1Njc4OSIpOworICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gYnVpbGRl
ci5jYXBhY2l0eSgpOworICAgIGJ1aWxkZXIucmVzaXplKDEwKTsKKyAgICBFWFBFQ1RfRVEoMTBV
LCBidWlsZGVyLmxlbmd0aCgpKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQ1Njc4OSIsIGJ1
aWxkZXIpOworICAgIEVYUEVDVF9FUShjYXBhY2l0eSwgYnVpbGRlci5jYXBhY2l0eSgpKTsKKyAg
ICBidWlsZGVyLnJlc2l6ZSg4KTsKKyAgICBFWFBFQ1RfRVEoOFUsIGJ1aWxkZXIubGVuZ3RoKCkp
OworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2NyIsIGJ1aWxkZXIpOworICAgIEVYUEVDVF9F
UShjYXBhY2l0eSwgYnVpbGRlci5jYXBhY2l0eSgpKTsKKworICAgIGJ1aWxkZXIudG9TdHJpbmco
KTsKKyAgICBidWlsZGVyLnJlc2l6ZSg3KTsKKyAgICBFWFBFQ1RfRVEoN1UsIGJ1aWxkZXIubGVu
Z3RoKCkpOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2IiwgYnVpbGRlcik7CisgICAgYnVp
bGRlci5yZXNpemUoMjApOworICAgIEVYUEVDVF9FUSgyMFUsIGJ1aWxkZXIubGVuZ3RoKCkpOwor
ICAgIEVYUEVDVF9FUSgnMCcsIGJ1aWxkZXJbMF0pOworICAgIEVYUEVDVF9FUSgnNycsIGJ1aWxk
ZXJbN10pOworICAgIGJ1aWxkZXIucmVzaXplKDApOworICAgIGV4cGVjdEVtcHR5KGJ1aWxkZXIp
OworfQorCit9IC8vIG5hbWVzcGFjZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9TdHJpbmdCdWlsZGVyVGVzdC5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQogICArIExGCgo=
</data>
<flag name="commit-queue"
          id="101196"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105139</attachid>
            <date>2011-08-25 00:28:31 -0700</date>
            <delta_ts>2011-08-26 01:21:44 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>patch-66661a</filename>
            <type>text/plain</type>
            <size>195514</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM3NjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAK
KzIwMTEtMDgtMjQgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXBsYWNlIHNvbWUgdXNhZ2VzIG9mIFZlY3RvcjxVQ2hhcj4gdG8gU3RyaW5nQnVp
bGRlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2
NjYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBpcyBwYXJ0IG9mIHdvcmsgdG8gc3VwcG9ydCA4LWJpdCBzdHJpbmcgYnVmZmVycy4KKyAgICAg
ICAgVGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG9yaWduYWwgU3RyaW5nQnVpbGRlciBhcmUgZXh0
ZW5kZWQgdG8gc3VwcG9ydAorICAgICAgICB0aGUgb3JpZ2luYWwgdXNhZ2VzIG9mIFZlY3RvcjxV
Q2hhcj4uCisKKyAgICAgICAgKiB3dGYvRm9yd2FyZC5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmlu
Zyk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlbW92ZSk6CisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6OnNocmluayk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6Omdy
b3cpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6Omluc2VydFVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoV1RGOjpTdHJp
bmdCdWlsZGVyOjppbnNlcnQpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpzaHJpbmtU
b0ZpdCk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oOgorICAgICAgICAoV1RG
OjpTdHJpbmdCdWlsZGVyOjpTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVp
bGRlcjo6YXBwZW5kKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kTnVtYmVy
KToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6cHJlcGVuZCk6CisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6Omluc2VydCk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnRv
U3RyaW5nUHJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJl
bGVhc2VTdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpsZW5ndGgpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNpemUpOgorICAgICAgICAoV1RGOjpTdHJpbmdC
dWlsZGVyOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmNoYXJhY3RlcnMpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjbGVhcik6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxk
ZXI6OnN3YXApOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjYXBhY2l0eSk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnRyeVJldGFpbik6CisgICAgICAgICogd3RmL3RleHQv
V1RGU3RyaW5nLmg6CisKIDIwMTEtMDgtMjQgIEp1YW4gQy4gTW9udGVtYXlvciAgPGptb250QGFw
cGxlLmNvbT4KIAogICAgICAgICBLZWVwIHRyYWNrIG9mIHRvcENhbGxGcmFtZSBmb3IgU3RhY2sg
dHJhY2VzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0ZvcndhcmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0ZvcndhcmQuaAkocmV2aXNpb24gOTM3
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0ZvcndhcmQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBjbGFzcyBFbmNvZGVyOwog
ICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFzcyBTdHJpbmdCdWZmZXI7CisgICAgY2xhc3MgU3Ry
aW5nQnVpbGRlcjsKICAgICBjbGFzcyBTdHJpbmdJbXBsOwogfQogCkBAIC01OSw2ICs2MCw3IEBA
IHVzaW5nIFdURjo6RW5jb2RlcjsKIHVzaW5nIFdURjo6RGVjb2RlcjsKIHVzaW5nIFdURjo6U3Ry
aW5nOwogdXNpbmcgV1RGOjpTdHJpbmdCdWZmZXI7Cit1c2luZyBXVEY6OlN0cmluZ0J1aWxkZXI7
CiB1c2luZyBXVEY6OlN0cmluZ0ltcGw7CiAKICNlbmRpZiAvLyBXVEZfRm9yd2FyZF9oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3Bw
CShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOSBAQAogCiBuYW1lc3Bh
Y2UgV1RGIHsKIAotdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygpCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWluaW11bUNhcGFjaXR5ID0gMTY7CisKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6
cmVpZnlTdHJpbmcoKSBjb25zdAogewogICAgIC8vIENoZWNrIGlmIHRoZSBzdHJpbmcgYWxyZWFk
eSBleGlzdHMuCiAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkgewpAQCAtNTEsNyArNTMsMjEg
QEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygpCiAgICAgICAgIDogU3RyaW5nSW1w
bDo6Y3JlYXRlKG1fYnVmZmVyLCAwLCBtX2xlbmd0aCk7CiB9CiAKLXZvaWQgU3RyaW5nQnVpbGRl
cjo6cmVzaXplKHVuc2lnbmVkIG5ld1NpemUpCit2b2lkIFN0cmluZ0J1aWxkZXI6OnJlbW92ZSh1
bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChwb3NpdGlv
biA8IG1fbGVuZ3RoKTsKKyAgICBBU1NFUlQocG9zaXRpb24gKyBsZW5ndGggPD0gbV9sZW5ndGgp
OworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocG9zaXRpb24g
KyBsZW5ndGggPCBtX2xlbmd0aCkgeworICAgICAgICBVQ2hhciogYnVmZmVyID0gY2hhcmFjdGVy
cygpOworICAgICAgICBtZW1tb3ZlKGJ1ZmZlciArIHBvc2l0aW9uLCBidWZmZXIgKyBwb3NpdGlv
biArIGxlbmd0aCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aCAtIHBvc2l0aW9uIC0gbGVu
Z3RoKSAqIHNpemVvZihVQ2hhcikpOworICAgIH0KKyAgICBtX2xlbmd0aCAtPSBsZW5ndGg7Cit9
CisKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6c2hyaW5rKHVuc2lnbmVkIG5ld1NpemUpCiB7CiAgICAg
Ly8gQ2hlY2sgbmV3U2l6ZSA8IG1fbGVuZ3RoLCBoZW5jZSBtX2xlbmd0aCA+IDAuCiAgICAgQVNT
RVJUKG5ld1NpemUgPD0gbV9sZW5ndGgpOwpAQCAtNjIsNyArNzgsNyBAQCB2b2lkIFN0cmluZ0J1
aWxkZXI6OnJlc2l6ZSh1bnNpZ25lZCBuZXdTCiAgICAgLy8gSWYgdGhlcmUgaXMgYSBidWZmZXIs
IHdlIG9ubHkgbmVlZCB0byBkdXBsaWNhdGUgaXQgaWYgaXQgaGFzIG1vcmUgdGhhbiBvbmUgcmVm
LgogICAgIGlmIChtX2J1ZmZlcikgewogICAgICAgICBpZiAoIW1fYnVmZmVyLT5oYXNPbmVSZWYo
KSkKLSAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzKCksIG1f
YnVmZmVyLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+
Y2hhcmFjdGVycygpLCBtX2J1ZmZlci0+bGVuZ3RoKCksIDAsIDApOwogICAgICAgICBtX2xlbmd0
aCA9IG5ld1NpemU7CiAgICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTc2LDI2ICs5MiwzOCBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2l6ZSh1bnNpZ25l
ZCBuZXdTCiAgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGUobV9zdHJpbmcuaW1wbCgp
LCAwLCBuZXdTaXplKTsKIH0KIAordm9pZCBTdHJpbmdCdWlsZGVyOjpncm93KHVuc2lnbmVkIG5l
d1NpemUpCit7CisgICAgQVNTRVJUKG5ld1NpemUgPj0gbV9sZW5ndGgpOworICAgIGlmIChuZXdT
aXplID09IG1fbGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnNlcnRVbmluaXRpYWxp
emVkKG5ld1NpemUgLSBtX2xlbmd0aCwgbV9sZW5ndGgpOworfQorCiB2b2lkIFN0cmluZ0J1aWxk
ZXI6OnJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0eSkKIHsKICAgICBpZiAobV9i
dWZmZXIpIHsKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIGJ1ZmZlciwgdGhlbiBn
cm93IGlmIG5lY2Vzc2FyeS4KICAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gbV9idWZmZXItPmxl
bmd0aCgpKQotICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnMo
KSwgbmV3Q2FwYWNpdHkpOworICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNo
YXJhY3RlcnMoKSwgbmV3Q2FwYWNpdHksIDAsIDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IEdyb3cgdGhlIHN0cmluZywgaWYgbmVjZXNzYXJ5LgogICAgICAgICBpZiAobmV3Q2FwYWNpdHkg
PiBtX2xlbmd0aCkKLSAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJhY3Rl
cnMoKSwgbmV3Q2FwYWNpdHkpOworICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9zdHJpbmcu
Y2hhcmFjdGVycygpLCBuZXdDYXBhY2l0eSwgMCwgMCk7CiAgICAgfQogfQogCiAvLyBBbGxvY2F0
ZSBhIG5ldyBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENoYXJhY3RlcnMgKHRoZXNlIG1heSBj
b21lIGZyb20gZWl0aGVyIG1fc3RyaW5nCiAvLyBvciBtX2J1ZmZlciwgIG5laXRoZXIgd2lsbCBi
ZSByZWFzc2lnbmVkIHVudGlsIHRoZSBjb3B5IGhhcyBjb21wbGV0ZWQpLgotdm9pZCBTdHJpbmdC
dWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVu
c2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQordm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZl
cihjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNp
dHksIHVuc2lnbmVkIGluc2VydExlbmd0aCwgdW5zaWduZWQgaW5zZXJ0UG9zaXRpb24pCiB7CiAg
ICAgLy8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRvIGEgbmV3IGJ1ZmZlciwgc2V0IHJlc3Vs
dCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBkYXRhLgotICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiBidWZmZXIgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHJlcXVp
cmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnMpOwotICAgIG1lbWNweShtX2J1ZmZlckNoYXJh
Y3RlcnMsIGN1cnJlbnRDaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVuZ3RoKSAq
IHNpemVvZihVQ2hhcikpOyAvLyBUaGlzIGNhbid0IG92ZXJmbG93LgorICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiBidWZmZXIgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHJlcXVpcmVk
Q2FwYWNpdHksIG1fYnVmZmVyQ2hhcmFjdGVycyk7CisgICAgaWYgKGluc2VydFBvc2l0aW9uID4g
MCkKKyAgICAgICAgbWVtY3B5KG1fYnVmZmVyQ2hhcmFjdGVycywgY3VycmVudENoYXJhY3RlcnMs
IHN0YXRpY19jYXN0PHNpemVfdD4oaW5zZXJ0UG9zaXRpb24pICogc2l6ZW9mKFVDaGFyKSk7Cisg
ICAgaWYgKGluc2VydFBvc2l0aW9uIDwgbV9sZW5ndGgpCisgICAgICAgIG1lbWNweShtX2J1ZmZl
ckNoYXJhY3RlcnMgKyBpbnNlcnRQb3NpdGlvbiArIGluc2VydExlbmd0aCwgY3VycmVudENoYXJh
Y3RlcnMgKyBpbnNlcnRQb3NpdGlvbiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aCAtIGlu
c2VydFBvc2l0aW9uKSAqIHNpemVvZihVQ2hhcikpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBidWls
ZGVyIHN0YXRlLgogICAgIG1fYnVmZmVyID0gYnVmZmVyLnJlbGVhc2UoKTsKQEAgLTEwNCw3ICsx
MzIsNyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0CiAKIC8vIE1h
a2UgJ2xlbmd0aCcgYWRkaXRpb25hbCBjYXBhY2l0eSBiZSBhdmFpbGFibGUgaW4gbV9idWZmZXIs
IHVwZGF0ZSBtX3N0cmluZyAmIG1fbGVuZ3RoLAogLy8gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUg
bmV3bHkgYWxsb2NhdGVkIHN0b3JhZ2UuCi1VQ2hhciogU3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5p
bml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCitVQ2hhciogU3RyaW5nQnVpbGRlcjo6aW5zZXJ0
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHBvc2l0aW9uKQogewogICAg
IEFTU0VSVChsZW5ndGgpOwogCkBAIC0xMTksNDAgKzE0Nyw0MiBAQCBVQ2hhciogU3RyaW5nQnVp
bGRlcjo6YXBwZW5kVW5pbml0aWFsaXplCiAKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGJ1ZmZl
ciBhbHJlYWR5IGhhcyBzdWZmaWNpZW50IGNhcGFjaXR5LgogICAgICAgICBpZiAocmVxdWlyZWRM
ZW5ndGggPD0gbV9idWZmZXItPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjdXJy
ZW50TGVuZ3RoID0gbV9sZW5ndGg7CiAgICAgICAgICAgICBtX3N0cmluZyA9IFN0cmluZygpOwor
ICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgbV9sZW5ndGgpCisgICAgICAgICAgICAgICAgbWVt
bW92ZShtX2J1ZmZlckNoYXJhY3RlcnMgKyBwb3NpdGlvbiArIGxlbmd0aCwgbV9idWZmZXJDaGFy
YWN0ZXJzICsgcG9zaXRpb24sIHN0YXRpY19jYXN0PHNpemVfdD4obV9sZW5ndGggLSBwb3NpdGlv
bikgKiBzaXplb2YoVUNoYXIpKTsKICAgICAgICAgICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5n
dGg7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWZmZXJDaGFyYWN0ZXJzICsgY3VycmVudExlbmd0
aDsKKyAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnMgKyBwb3NpdGlvbjsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVhbGxvYyB0aGUgYnVmZmVyLgotICAg
ICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVycygpLCBzdGQ6Om1heChyZXF1
aXJlZExlbmd0aCwgbV9idWZmZXItPmxlbmd0aCgpICogMikpOworICAgICAgICBhbGxvY2F0ZUJ1
ZmZlcihtX2J1ZmZlckNoYXJhY3RlcnMsIHN0ZDo6bWF4KHJlcXVpcmVkTGVuZ3RoLCBzdGQ6Om1h
eChtaW5pbXVtQ2FwYWNpdHksIG1fYnVmZmVyLT5sZW5ndGgoKSAqIDIpKSwgbGVuZ3RoLCBwb3Np
dGlvbik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fc3RyaW5nLmxlbmd0aCgpID09
IG1fbGVuZ3RoKTsKLSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFjdGVycygp
LCBzdGQ6Om1heChyZXF1aXJlZExlbmd0aCwgcmVxdWlyZWRMZW5ndGggKiAyKSk7CisgICAgICAg
IGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RkOjptYXgocmVxdWlyZWRM
ZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgbV9sZW5ndGggKiAyKSksIGxlbmd0aCwg
cG9zaXRpb24pOwogICAgIH0KIAotICAgIFVDaGFyKiByZXN1bHQgPSBtX2J1ZmZlckNoYXJhY3Rl
cnMgKyBtX2xlbmd0aDsKICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOwotICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFjdGVycyArIHBvc2l0aW9uOwogfQog
Ci12b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKQordm9pZCBTdHJpbmdCdWlsZGVyOjppbnNlcnQoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgcG9zaXRpb24pCiB7CiAgICAgaWYg
KCFsZW5ndGgpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CisgICAg
QVNTRVJUKHBvc2l0aW9uIDw9IG1fbGVuZ3RoKTsKIAotICAgIG1lbWNweShhcHBlbmRVbmluaXRp
YWxpemVkKGxlbmd0aCksIGNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAq
IDIpOworICAgIG1lbWNweShpbnNlcnRVbmluaXRpYWxpemVkKGxlbmd0aCwgcG9zaXRpb24pLCBj
aGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiAyKTsKIH0KIAotdm9pZCBT
dHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQordm9pZCBTdHJpbmdCdWlsZGVyOjppbnNlcnQoY29uc3QgY2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBwb3NpdGlvbikKIHsKICAgICBpZiAoIWxlbmd0aCkK
ICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKKyAgICBBU1NFUlQocG9z
aXRpb24gPD0gbV9sZW5ndGgpOwogCi0gICAgVUNoYXIqIGRlc3QgPSBhcHBlbmRVbmluaXRpYWxp
emVkKGxlbmd0aCk7CisgICAgVUNoYXIqIGRlc3QgPSBpbnNlcnRVbmluaXRpYWxpemVkKGxlbmd0
aCwgcG9zaXRpb24pOwogICAgIGNvbnN0IGNoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7
CiAgICAgd2hpbGUgKGNoYXJhY3RlcnMgPCBlbmQpCiAgICAgICAgICooZGVzdCsrKSA9ICooY29u
c3QgdW5zaWduZWQgY2hhciopKGNoYXJhY3RlcnMrKyk7CkBAIC0xNjQsOCArMTk0LDkgQEAgdm9p
ZCBTdHJpbmdCdWlsZGVyOjpzaHJpbmtUb0ZpdCgpCiAgICAgaWYgKG1fYnVmZmVyICYmIG1fYnVm
ZmVyLT5sZW5ndGgoKSA+IChtX2xlbmd0aCArIChtX2xlbmd0aCA+PiAyKSkpIHsKICAgICAgICAg
VUNoYXIqIHJlc3VsdDsKICAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmlu
aXRpYWxpemVkKG1fbGVuZ3RoLCByZXN1bHQpOwotICAgICAgICBtZW1jcHkocmVzdWx0LCBtX2J1
ZmZlci0+Y2hhcmFjdGVycygpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVuZ3RoKSAqIDIpOyAv
LyBUaGlzIGNhbid0IG92ZXJmbG93LgorICAgICAgICBtZW1jcHkocmVzdWx0LCBtX2J1ZmZlckNo
YXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obV9sZW5ndGgpICogMik7IC8vIFRoaXMgY2Fu
J3Qgb3ZlcmZsb3cuCiAgICAgICAgIG1fYnVmZmVyID0gMDsKKyAgICAgICAgbV9idWZmZXJDaGFy
YWN0ZXJzID0gMDsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwyMyArMzUsMzYgQEAgY2xhc3MgU3RyaW5nQnVpbGRlciB7CiBwdWJsaWM6CiAgICAgU3RyaW5n
QnVpbGRlcigpCiAgICAgICAgIDogbV9sZW5ndGgoMCkKKyAgICAgICAgLCBtX2J1ZmZlckNoYXJh
Y3RlcnMoMCkKICAgICB7CiAgICAgfQorLyoKKyAgICBleHBsaWNpdCBTdHJpbmdCdWlsZGVyKHVu
c2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBtX2xlbmd0aCgwKQorICAgIHsKKyAgICAgICAgcmVz
aXplKGxlbmd0aCk7CisgICAgfQorKi8KKyAgICBTdHJpbmdCdWlsZGVyKGNvbnN0IFN0cmluZ0J1
aWxkZXImIGJ1aWxkZXIpCisgICAgICAgIDogbV9sZW5ndGgoMCkKKyAgICB7CisgICAgICAgIGFw
cGVuZChidWlsZGVyKTsKKyAgICB9CiAKLSAgICB2b2lkIGFwcGVuZChjb25zdCBVQ2hhciosIHVu
c2lnbmVkKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiwgdW5zaWduZWQpOworICAgIHZv
aWQgYXBwZW5kKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCisgICAg
eworICAgICAgICBpbnNlcnQoY2hhcmFjdGVycywgbGVuZ3RoLCBtX2xlbmd0aCk7CisgICAgfQor
CisgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQorICAgIHsKKyAgICAgICAgaW5zZXJ0KGNoYXJhY3RlcnMsIGxlbmd0aCwgbV9sZW5ndGgpOwor
ICAgIH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKLSAg
ICAgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVtcHR5IHN0cmluZywgYW5kIHRoZXJl
IGlzIG5vdCBidWZmZXIKLSAgICAgICAgLy8gKGluIGNhc2UgcmVzZXJ2ZUNhcGFjaXR5IGhhcyBi
ZWVuIGNhbGxlZCkgdGhlbiBqdXN0IHJldGFpbiB0aGUKLSAgICAgICAgLy8gc3RyaW5nLgotICAg
ICAgICBpZiAoIW1fbGVuZ3RoICYmICFtX2J1ZmZlcikgewotICAgICAgICAgICAgbV9zdHJpbmcg
PSBzdHJpbmc7Ci0gICAgICAgICAgICBtX2xlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBhcHBlbmQoc3RyaW5nLmNoYXJhY3Rl
cnMoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgaWYgKCF0cnlSZXRhaW4oc3RyaW5nKSkK
KyAgICAgICAgICAgIGFwcGVuZChzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCkp
OwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMpCkBAIC02
OCwxNCArODEsOTIgQEAgcHVibGljOgogICAgICAgICAgICAgYXBwZW5kKCZjLCAxKTsKICAgICB9
CiAKLSAgICB2b2lkIGFwcGVuZChjaGFyIGMpCisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5n
QnVpbGRlciYgYnVpbGRlcikKICAgICB7Ci0gICAgICAgIGlmIChtX2J1ZmZlciAmJiBtX2xlbmd0
aCA8IG1fYnVmZmVyLT5sZW5ndGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAg
IG1fYnVmZmVyQ2hhcmFjdGVyc1ttX2xlbmd0aCsrXSA9ICh1bnNpZ25lZCBjaGFyKWM7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZCgmYywgMSk7CisgICAgICAgIGlmICghdHJ5UmV0
YWluKGJ1aWxkZXIpKQorICAgICAgICAgICAgYXBwZW5kKGJ1aWxkZXIuY2hhcmFjdGVycygpLCBi
dWlsZGVyLmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZE51bWJlcih1bnNpZ25l
ZCBjaGFyIG51bWJlcikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG51bWJlckxlbmd0aCA9IG51
bWJlciA+IDk5ID8gMyA6IChudW1iZXIgPiA5ID8gMiA6IDEpOworICAgICAgICBVQ2hhciogYnVm
ZmVyID0gaW5zZXJ0VW5pbml0aWFsaXplZChudW1iZXJMZW5ndGgsIG1fbGVuZ3RoKTsKKworICAg
ICAgICBzd2l0Y2ggKG51bWJlckxlbmd0aCkgeworICAgICAgICBjYXNlIDM6CisgICAgICAgICAg
ICBidWZmZXJbMl0gPSBudW1iZXIgJSAxMCArICcwJzsKKyAgICAgICAgICAgIG51bWJlciAvPSAx
MDsKKyAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgICAgICBjYXNlIDI6CisgICAgICAg
ICAgICBidWZmZXJbMV0gPSBudW1iZXIgJSAxMCArICcwJzsKKyAgICAgICAgICAgIG51bWJlciAv
PSAxMDsKKyAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgICAgICBjYXNlIDE6CisgICAg
ICAgICAgICBidWZmZXJbMF0gPSBudW1iZXIgJSAxMCArICcwJzsKKyAgICAgICAgfQogICAgIH0K
IAorICAgIHZvaWQgcHJlcGVuZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQorICAgIHsKKyAgICAgICAgaW5zZXJ0KGNoYXJhY3RlcnMsIGxlbmd0aCwgMCk7CisgICAg
fQorCisgICAgdm9pZCBwcmVwZW5kKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCkKKyAgICB7CisgICAgICAgIGluc2VydChjaGFyYWN0ZXJzLCBsZW5ndGgsIDApOworICAg
IH0KKworICAgIHZvaWQgcHJlcGVuZChjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAg
ICAgIGlmICghdHJ5UmV0YWluKHN0cmluZykpCisgICAgICAgICAgICBwcmVwZW5kKHN0cmluZy5j
aGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgfQorCisgICAgdm9pZCBwcmVwZW5k
KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMpCisgICAgeworICAgICAgICBpZiAoY2hhcmFjdGVycykK
KyAgICAgICAgICAgIHByZXBlbmQoY2hhcmFjdGVycywgc3RybGVuKGNoYXJhY3RlcnMpKTsKKyAg
ICB9CisKKyAgICB2b2lkIHByZXBlbmQoVUNoYXIgYykKKyAgICB7CisgICAgICAgIHByZXBlbmQo
JmMsIDEpOworICAgIH0KKworICAgIHZvaWQgcHJlcGVuZChjb25zdCBTdHJpbmdCdWlsZGVyJiBi
dWlsZGVyKQorICAgIHsKKyAgICAgICAgaWYgKCF0cnlSZXRhaW4oYnVpbGRlcikpCisgICAgICAg
ICAgICBwcmVwZW5kKGJ1aWxkZXIuY2hhcmFjdGVycygpLCBidWlsZGVyLmxlbmd0aCgpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGluc2VydChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoLCB1bnNpZ25lZCBwb3NpdGlvbik7CisgICAgdm9pZCBpbnNlcnQoY29uc3QgY2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBwb3NpdGlvbik7CisKKyAgICB2
b2lkIGluc2VydChjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgcG9zaXRpb24pCisgICAg
eworICAgICAgICBpZiAoIXRyeVJldGFpbihzdHJpbmcpKQorICAgICAgICAgICAgaW5zZXJ0KHN0
cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSwgcG9zaXRpb24pOworICAgIH0KKwor
ICAgIHZvaWQgaW5zZXJ0KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHBvc2l0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnMpCisgICAgICAgICAgICBpbnNlcnQoY2hh
cmFjdGVycywgc3RybGVuKGNoYXJhY3RlcnMpLCBwb3NpdGlvbik7CisgICAgfQorCisgICAgdm9p
ZCBpbnNlcnQoVUNoYXIgYywgdW5zaWduZWQgcG9zaXRpb24pCisgICAgeworICAgICAgICBpbnNl
cnQoJmMsIDEsIHBvc2l0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIGluc2VydChjb25zdCBTdHJp
bmdCdWlsZGVyJiBidWlsZGVyLCB1bnNpZ25lZCBwb3NpdGlvbikKKyAgICB7CisgICAgICAgIGlm
ICghdHJ5UmV0YWluKGJ1aWxkZXIpKQorICAgICAgICAgICAgaW5zZXJ0KGJ1aWxkZXIuY2hhcmFj
dGVycygpLCBidWlsZGVyLmxlbmd0aCgpLCBwb3NpdGlvbik7CisgICAgfQorCisgICAgdm9pZCBy
ZW1vdmUodW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7CisKICAgICBTdHJpbmcg
dG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgaWYgKG1fc3RyaW5nLmlzTnVsbCgpKSB7CkBAIC04
NSwzMyArMTc2LDgyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc3RyaW5nOwogICAgIH0K
IAotICAgIFN0cmluZyB0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKQorICAgIFN0cmluZyB0b1N0
cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fc3RyaW5n
LmlzTnVsbCgpKQogICAgICAgICAgICAgcmVpZnlTdHJpbmcoKTsKICAgICAgICAgcmV0dXJuIG1f
c3RyaW5nOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0CisgICAgU3RyaW5n
IHJlbGVhc2VTdHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOworICAgICAg
ICBTdHJpbmcgcmVzdWx0ID0gdG9TdHJpbmcoKTsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2xlbmd0aDsgfQorCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxl
bmd0aCgpOyB9CiAKICAgICB2b2lkIHJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0
eSk7CiAKLSAgICB2b2lkIHJlc2l6ZSh1bnNpZ25lZCBuZXdTaXplKTsKKyAgICAvLyBTaHJpbmsg
dGhlIHNpemUgdG8gbmV3U2l6ZSB3aXRob3V0IGFmZmVjdGluZyB0aGUgY2FwYWNpdHkuCisgICAg
dm9pZCBzaHJpbmsodW5zaWduZWQgbmV3U2l6ZSk7CisKKyAgICAvLyBHcm93IHRoZSBzaXplIHRv
IG5ld1NpemUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGNhcGFjaXR5LgorICAgIHZvaWQgZ3Jvdyh1
bnNpZ25lZCBuZXdTaXplKTsKKworICAgIHZvaWQgcmVzaXplKHVuc2lnbmVkIG5ld1NpemUpCisg
ICAgeworICAgICAgICBpZiAobmV3U2l6ZSA+IG1fbGVuZ3RoKQorICAgICAgICAgICAgZ3Jvdyhu
ZXdTaXplKTsKKyAgICAgICAgZWxzZSBpZiAobmV3U2l6ZSA8IG1fbGVuZ3RoKQorICAgICAgICAg
ICAgc2hyaW5rKG5ld1NpemUpOworICAgIH0KIAorICAgIC8vIFNocmlua3MgdGhlIGJ1ZmZlciB0
byB0aGUgY3VycmVudCBsZW5ndGguCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogCiAgICAgVUNo
YXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGkg
PCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzKClbaV07CisgICAgfQorCisg
ICAgVUNoYXImIG9wZXJhdG9yW10odW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChp
IDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gY2hhcmFjdGVycygpW2ldOworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIHN0cmluZykgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSA9PSBzdHJpbmc7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gdG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkgPT0g
YnVpbGRlci50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKTsKKyAgICB9CisKKyAgICBjb25zdCBV
Q2hhciogY2hhcmFjdGVycygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fbGVuZ3RoKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmICghbV9zdHJpbmcuaXNOdWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gbV9zdHJpbmdbaV07CisgICAgICAgICAgICByZXR1cm4gbV9zdHJp
bmcuY2hhcmFjdGVycygpOwogICAgICAgICBBU1NFUlQobV9idWZmZXIpOwotICAgICAgICByZXR1
cm4gbV9idWZmZXItPmNoYXJhY3RlcnMoKVtpXTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5j
aGFyYWN0ZXJzKCk7CisgICAgfQorCisgICAgVUNoYXIqIGNoYXJhY3RlcnMoKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2xlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAo
IW1fYnVmZmVyQ2hhcmFjdGVycykKKyAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5n
LmNoYXJhY3RlcnMoKSwgbV9sZW5ndGgsIDAsIDApOworICAgICAgICByZXR1cm4gbV9idWZmZXJD
aGFyYWN0ZXJzOwogICAgIH0KIAogICAgIHZvaWQgY2xlYXIoKQpAQCAtMTE5LDE1ICsyNTksNTMg
QEAgcHVibGljOgogICAgICAgICBtX2xlbmd0aCA9IDA7CiAgICAgICAgIG1fc3RyaW5nID0gU3Ry
aW5nKCk7CiAgICAgICAgIG1fYnVmZmVyID0gMDsKKyAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJz
ID0gMDsKKyAgICB9CisKKyAgICB2b2lkIHN3YXAoU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKKyAg
ICB7CisgICAgICAgIHN0ZDo6c3dhcChtX2xlbmd0aCwgYnVpbGRlci5tX2xlbmd0aCk7CisgICAg
ICAgIG1fc3RyaW5nLnN3YXAoYnVpbGRlci5tX3N0cmluZyk7CisgICAgICAgIG1fYnVmZmVyLnN3
YXAoYnVpbGRlci5tX2J1ZmZlcik7CisgICAgICAgIHN0ZDo6c3dhcChtX2J1ZmZlckNoYXJhY3Rl
cnMsIGJ1aWxkZXIubV9idWZmZXJDaGFyYWN0ZXJzKTsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBj
YXBhY2l0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9idWZmZXIgPyBtX2J1ZmZl
ci0+bGVuZ3RoKCkgOiBtX2xlbmd0aDsKKyAgICB9CiBwcml2YXRlOgotICAgIHZvaWQgYWxsb2Nh
dGVCdWZmZXIoY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJl
ZExlbmd0aCk7Ci0gICAgVUNoYXIqIGFwcGVuZFVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICB2b2lkIHJlaWZ5U3RyaW5nKCk7CisgICAgYm9vbCB0cnlSZXRhaW4oY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICAvLyBJZiB3ZSdyZSBhcHBlbmRpbmcvcHJlcGVu
ZGluZy9pbnNlcnRpbmcgdG8gYW4gZW1wdHkgc3RyaW5nLCBhbmQgdGhlcmUgaXMgbm90IGJ1ZmZl
cgorICAgICAgICAvLyAoaW4gY2FzZSByZXNlcnZlQ2FwYWNpdHkgaGFzIGJlZW4gY2FsbGVkKSB0
aGVuIGp1c3QgcmV0YWluIHRoZSBzdHJpbmcuCisgICAgICAgIGlmICghbV9sZW5ndGggJiYgIW1f
YnVmZmVyKSB7CisgICAgICAgICAgICBtX3N0cmluZyA9IHN0cmluZzsKKyAgICAgICAgICAgIG1f
bGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdHJ5UmV0YWlu
KGNvbnN0IFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCisgICAgeworICAgICAgICAvLyBJZiB3ZSdy
ZSBhcHBlbmRpbmcvcHJlcGVuZGluZy9pbnNlcnRpbmcgdG8gYW4gZW1wdHkgc3RyaW5nLCBhbmQg
dGhlcmUgaXMgbm90IGJ1ZmZlcgorICAgICAgICAvLyAoaW4gY2FzZSByZXNlcnZlQ2FwYWNpdHkg
aGFzIGJlZW4gY2FsbGVkKSB0aGVuIGp1c3QgcmV0YWluIHRoZSBzdHJpbmcuCisgICAgICAgIGlm
ICghbV9sZW5ndGggJiYgIW1fYnVmZmVyKSB7CisgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0g
YnVpbGRlci50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKTsKKyAgICAgICAgICAgIG1fc3RyaW5n
ID0gc3RyaW5nOworICAgICAgICAgICAgbV9sZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgdm9pZCBhbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciogY3VycmVudENoYXJh
Y3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHksIHVuc2lnbmVkIGluc2VydExlbmd0aCwg
dW5zaWduZWQgaW5zZXJ0UG9zaXRpb24pOworICAgIFVDaGFyKiBpbnNlcnRVbmluaXRpYWxpemVk
KHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgaW5zZXJ0UG9zaXRpb24pOworICAgIHZvaWQgcmVp
ZnlTdHJpbmcoKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwotICAgIFN0cmluZyBt
X3N0cmluZzsKKyAgICBtdXRhYmxlIFN0cmluZyBtX3N0cmluZzsKICAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gbV9idWZmZXI7CiAgICAgVUNoYXIqIG1fYnVmZmVyQ2hhcmFjdGVyczsKIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oCShyZXZpc2lvbiA5
MzcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtNDU2LDMxICs0NTYsNiBAQCBpbmxpbmUgc2l6ZV90IHJldmVyc2VGaW5k
KGNvbnN0IFVDaGFyKiBjCiAgICAgcmV0dXJuIGluZGV4OwogfQogCi1pbmxpbmUgdm9pZCBhcHBl
bmQoVmVjdG9yPFVDaGFyPiYgdmVjdG9yLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICB2
ZWN0b3IuYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSk7Ci19Ci0K
LWlubGluZSB2b2lkIGFwcGVuZE51bWJlcihWZWN0b3I8VUNoYXI+JiB2ZWN0b3IsIHVuc2lnbmVk
IGNoYXIgbnVtYmVyKQotewotICAgIGludCBudW1iZXJMZW5ndGggPSBudW1iZXIgPiA5OSA/IDMg
OiAobnVtYmVyID4gOSA/IDIgOiAxKTsKLSAgICBzaXplX3QgdmVjdG9yU2l6ZSA9IHZlY3Rvci5z
aXplKCk7Ci0gICAgdmVjdG9yLmdyb3codmVjdG9yU2l6ZSArIG51bWJlckxlbmd0aCk7Ci0KLSAg
ICBzd2l0Y2ggKG51bWJlckxlbmd0aCkgewotICAgIGNhc2UgMzoKLSAgICAgICAgdmVjdG9yW3Zl
Y3RvclNpemUgKyAyXSA9IG51bWJlciAlIDEwICsgJzAnOwotICAgICAgICBudW1iZXIgLz0gMTA7
Ci0KLSAgICBjYXNlIDI6Ci0gICAgICAgIHZlY3Rvclt2ZWN0b3JTaXplICsgMV0gPSBudW1iZXIg
JSAxMCArICcwJzsKLSAgICAgICAgbnVtYmVyIC89IDEwOwotCi0gICAgY2FzZSAxOgotICAgICAg
ICB2ZWN0b3JbdmVjdG9yU2l6ZV0gPSBudW1iZXIgJSAxMCArICcwJzsKLSAgICB9Ci19Ci0KIHRl
bXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hhcmFjdGVyKFVDaGFyKT4gaW5saW5lIGJvb2wgaXNBbGxT
cGVjaWFsQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkK
IHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkBAIC01MTEsOCAr
NDg2LDYgQEAgV1RGX0VYUE9SVF9QUklWQVRFIGNvbnN0IFN0cmluZyYgZW1wdHlTdAogdXNpbmcg
V1RGOjpDU3RyaW5nOwogdXNpbmcgV1RGOjpTdHJpbmc7CiB1c2luZyBXVEY6OmVtcHR5U3RyaW5n
OwotdXNpbmcgV1RGOjphcHBlbmQ7Ci11c2luZyBXVEY6OmFwcGVuZE51bWJlcjsKIHVzaW5nIFdU
Rjo6Y2hhcmFjdGVyc0FyZUFsbEFTQ0lJOwogdXNpbmcgV1RGOjpjaGFyYWN0ZXJzQXJlQWxsTGF0
aW4xOwogdXNpbmcgV1RGOjpjaGFyYWN0ZXJzVG9JbnRTdHJpY3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA5Mzc2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDI0NiBAQAorMjAxMS0wOC0yNCAgWGlhbnpodSBXYW5nICA8d2FuZ3hpYW56
aHVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlcGxhY2Ugc29tZSB1c2FnZXMgb2YgVmVjdG9y
PFVDaGFyPiB0byBTdHJpbmdCdWlsZGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0byBzdXBwb3J0IDgtYml0IHN0
cmluZyBidWZmZXJzLgorICAgICAgICBObyBuZXcgdGVzdHMuIEFsbCBleGlzdGluZyB1bml0IHRl
c3RzIGFuZCBsYXlvdXQgdGVzdHMgc2hvdWxkIHJ1biBhcworICAgICAgICBiZWZvcmUuCisKKyAg
ICAgICAgKiBjc3MvQ1NTT01VdGlscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRDaGFy
YWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplQ2hhcmFjdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNlcmlhbGl6ZUNoYXJhY3RlckFzQ29kZVBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnNlcmlhbGl6ZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplU3Ry
aW5nKToKKyAgICAgICAgKiBjc3MvQ1NTT01VdGlscy5oOgorICAgICAgICAqIGNzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3Nz
VGV4dCk6CisgICAgICAgICogY3NzL0NTU1dyYXBTaGFwZXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTV3JhcFNoYXBlUmVjdDo6Y3NzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NXcmFw
U2hhcGVDaXJjbGU6OmNzc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTV3JhcFNoYXBlRWxs
aXBzZTo6Y3NzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NXcmFwU2hhcGVQb2x5Z29uOjpj
c3NUZXh0KToKKyAgICAgICAgKiBlZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0KToKKyAgICAgICAg
KiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVu
ZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBB
Y2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRFbmRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0
b3I6OmNvbmNhdGVuYXRlTWFya3VwKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTmFtZXNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmREb2N1bWVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kT3BlblRhZyk6CisgICAgICAgIChXZWJD
b3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2xvc2VUYWcpOgorICAgICAgICAoV2ViQ29y
ZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cCk6CisgICAgICAgIChXZWJD
b3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kTWFya3VwKToKKyAgICAgICAgKiBlZGl0
aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVySXRlcmF0b3I6OnN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JkQXdhcmVJdGVyYXRvcjo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmRBd2FyZUl0ZXJhdG9yOjpjaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Om5v
cm1hbGl6ZUNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjpTZWFy
Y2hCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjphcHBlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjpwcmVwZW5kQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWFyY2hCdWZmZXI6OmlzQmFkTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6U2Vh
cmNoQnVmZmVyOjppc1dvcmRTdGFydE1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1
ZmZlcjo6c2VhcmNoKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYWluVGV4dFRvTWFsbG9jQWxsb2Nh
dGVkQnVmZmVyKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5oOgorICAgICAgICAq
IGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RyaW5nV2l0aFJl
YmFsYW5jZWRXaGl0ZXNwYWNlKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhOb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aFN0eWxl
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
U3R5bGVOb2RlT3BlblRhZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVs
YXRvcjo6dGFrZVJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6dXJsVG9NYXJrdXApOgorICAg
ICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2
aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRCb3VuZGFyeSk6CisgICAgICAg
ICogaHRtbC9ET01Ub2tlbkxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NVG9rZW5MaXN0
OjpyZW1vdmVUb2tlbik6CisgICAgICAgICogaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6cGFyc2VGb250U2l6ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudDo6c3RyaXBwZWRQbGFjZWhvbGRlcik6CisgICAgICAgICogaHRtbC9IVE1MVmll
d1NvdXJjZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWV3U291cmNlRG9j
dW1lbnQ6OnByb2Nlc3NUYWdUb2tlbik6CisgICAgICAgICogaHRtbC9wYXJzZXIvQ1NTUHJlbG9h
ZFNjYW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJlbG9hZFNjYW5uZXI6OnNjYW4p
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJlbG9hZFNjYW5uZXI6OmVtaXRSdWxlKToKKyAgICAg
ICAgKiBodG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjppbnNlcnREb2N0eXBlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
RW50aXR5UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVIVE1MRW50aXR5KToK
KyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmg6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01ldGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1ldGFDaGFyc2V0UGFyc2VyOjpjaGVja0Zvck1ldGFDaGFyc2V0KToKKyAgICAgICAgKiBodG1s
L3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSFRN
TEludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2Vy
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE5hbWVzOjpQcmVsb2FkVGFzazo6UHJlbG9hZFRhc2spOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE5hbWVzOjpQcmVsb2FkVGFzazo6cHJvY2Vzc0F0dHJpYnV0ZXMpOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUb2tlbi5oOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRva2VuOjpuYW1lKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ojo6bmFtZUZvckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVG9rZW5pemVyOjpwcm9jZXNzRW50aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
b2tlbml6ZXI6Om5leHRUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjp0
ZW1wb3JhcnlCdWZmZXJJcyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5o
OgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXI6OkV4
dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVC
dWlsZGVyOjpFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyOjpnaXZlUmVtYWluaW5nVG8pOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpFeHRlcm5hbENoYXJhY3RlclRva2Vu
QnVmZmVyOjp0YWtlUmVtYWluaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJblRhYmxlVGV4dCk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFZpZXdTb3Vy
Y2VQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZXdTb3VyY2VQYXJzZXI6OnVw
ZGF0ZVRva2VuaXplclN0YXRlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Omhhc05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEF0
dHJpYnV0ZVdpdGhOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTmFtZU9mSW5saW5lRXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zSmF2YVNjcmlwdFVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJQYXJhbVRva2VuKToKKyAgICAgICAgKFdl
YkNvcmU6OlhTU0F1ZGl0b3I6OmVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JWYWx1ZTo6dG9KU09OU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZhbHVl
Ojp3cml0ZUpTT04pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3Jp
dGVKU09OKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6d3JpdGVKU09OKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckFycmF5Ojp3cml0ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3ND
b250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjY2Vzc0NvbnRyb2xQcmVmbGln
aHRSZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0
b3JlKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWU6OnNldFRvb2xUaXApOgorICAgICAgICAqIHBhZ2UvRXZlbnRTb3VyY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50U291cmNlOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50U291cmNlOjpwYXJzZUV2ZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291
cmNlOjpwYXJzZUV2ZW50U3RyZWFtTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJj
ZTo6Y3JlYXRlTWVzc2FnZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50U291cmNlLmg6Cisg
ICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJp
YWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRl
cyk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbjo6dG9TdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVTeXN0
ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlRm9yRmlsZU5hbWUpOgorICAgICAgICAq
IHBsYXRmb3JtL0tVUkwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6ZGVwcmVjYXRlZFN0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL0xpbmtIYXNoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNxdWVlemVP
dXROdWxsQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpjbGVhblNsYXNoRG90RG90U2xh
c2hlcyk6CisgICAgICAgIChXZWJDb3JlOjptZXJnZURvdWJsZVNsYXNoZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y2xlYW5TbGFzaERvdFNsYXNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYW5Q
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OnZpc2l0ZWRVUkxJbmxpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6dmlzaXRlZFVSTCk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2gpOgor
ICAgICAgICAqIHBsYXRmb3JtL0xpbmtIYXNoLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNlcmlhbGl6ZWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFPYmplY3RHdGs6OnNldFVSTCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQ
UGFyc2Vycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFU
eXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9UZXh0U3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRTdHJlYW06Om9wZXJhdG9y
PDwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFN0cmVhbTo6cmVsZWFzZSk6CisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmg6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5TdHJl
YW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YWRqdXN0Q2hhcmFjdGVyc0FuZExlbmd0aEZvckh5cGhlbik6CisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlckZvckFwcGVuZGluZ0h5
cGhlbjo6QnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGlzdEl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06Om1hcmtl
clRleHRXaXRoU3VmZml4KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp0b1N5bWJvbGljKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJr
ZXI6OnN1ZmZpeCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXRoTUxGZW5jZWQ6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKiBz
dG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxE
QkNvZGluZzo6ZGVjb2RlU3RyaW5nKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVy
cyk6CisgICAgICAgICogeG1sL1hQYXRoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpGdW5JZDo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNv
bmNhdDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHhtbC9YUGF0aFV0aWwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3Nv
ckxpYnhzbHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVUb1N0cmluZ0J1aWxkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2F2ZVJlc3VsdFRvU3RyaW5nKToKKyAgICAgICAgKiB4bWwvcGFy
c2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKFdl
YkNvcmU6OnVuY29uc3VtZUNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUNo
YXJhY3RlclJlZmVyZW5jZSk6CisgICAgICAgICogeG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cFRva2VuQmFzZTo6TWFya3VwVG9rZW5CYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cFRva2VuQmFzZTo6YXBwZW5kVG9BdHRyaWJ1dGVWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tlbkJhc2U6OmNoYXJhY3RlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5CYXNlOjpjb21tZW50KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1hcmt1cFRva2VuQmFzZTo6cHVibGljSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3Jl
OjpNYXJrdXBUb2tlbkJhc2U6OnN5c3RlbUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TWFya3VwVG9rZW5CYXNlOjpwcmludFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBU
b2tlbkJhc2U6Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljTWFya3VwVG9rZW5CYXNl
OjpBdG9taWNNYXJrdXBUb2tlbkJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljTWFya3Vw
VG9rZW5CYXNlOjpjaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRv
a2VuQmFzZTo6cHVibGljSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNNYXJr
dXBUb2tlbkJhc2U6OnN5c3RlbUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6Ojppbml0
aWFsaXplQXR0cmlidXRlcyk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZl
cmVuY2VQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZVhNTENoYXJhY3RlclJl
ZmVyZW5jZSk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJz
ZXIuaDoKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTFRva2VuLmg6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxUb2tlbjo6bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbjo6dGFyZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TFRva2VuOjpwcmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW46Omhhc1ByZWZpeCk6
CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNYTUxUb2tlbjo6QXRvbWljWE1MVG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6QXRvbWljWE1MVG9rZW46OnhtbFZlcnNpb24pOgorICAgICAgICAqIHht
bC9wYXJzZXIvWE1MVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6bmFtZUZvckF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6Om5leHRUb2tlbik6Cisg
ICAgICAgICogeG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1hNTERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRE9DVFlQRSk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3Rlcik6CisKIDIwMTEtMDgtMjQgIEphbWVzIFJv
Ymluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBTb21lIGxheWVyVHJlZUFz
VGV4dCBjb21wb3NpdGluZyB0ZXN0cyBhcmUgZmxha3kKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NPTVV0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTT01V
dGlscy5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU09NVXRp
bHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTEgQEAKICNpbmNsdWRlICJDU1NP
TVV0aWxzLmgiCiAKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lk
IGFwcGVuZENoYXJhY3RlcihVQ2hhcjMyIGMsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKQorc3Rh
dGljIHZvaWQgYXBwZW5kQ2hhcmFjdGVyKFVDaGFyMzIgYywgU3RyaW5nQnVpbGRlciYgYXBwZW5k
VG8pCiB7CiAgICAgaWYgKFUxNl9MRU5HVEgoYykgPT0gMSkKICAgICAgICAgYXBwZW5kVG8uYXBw
ZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjKSk7CkBAIC00NSwxMyArNDYsMTMgQEAgc3RhdGljIHZv
aWQgYXBwZW5kQ2hhcmFjdGVyKFVDaGFyMzIgYywgVgogICAgIH0KIH0KIAotdm9pZCBzZXJpYWxp
emVDaGFyYWN0ZXIoVUNoYXIzMiBjLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbykKK3ZvaWQgc2Vy
aWFsaXplQ2hhcmFjdGVyKFVDaGFyMzIgYywgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pCiB7CiAg
ICAgYXBwZW5kVG8uYXBwZW5kKCdcXCcpOwogICAgIGFwcGVuZENoYXJhY3RlcihjLCBhcHBlbmRU
byk7CiB9CiAKLXZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIzMiBjLCBW
ZWN0b3I8VUNoYXI+JiBhcHBlbmRUbykKK3ZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9p
bnQoVUNoYXIzMiBjLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbykKIHsKICAgICBhcHBlbmRUby5h
cHBlbmQoJ1xcJyk7CiAgICAgYXBwZW5kVW5zaWduZWRBc0hleChjLCBhcHBlbmRUbywgTG93ZXJj
YXNlKTsKQEAgLTYwLDEyICs2MSwxMiBAQCB2b2lkIHNlcmlhbGl6ZUNoYXJhY3RlckFzQ29kZVBv
aW50KFVDaGFyCiAKIHZvaWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXIsIFN0cmluZyYgYXBwZW5kVG8pCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBhZGRlbmQ7Cisg
ICAgU3RyaW5nQnVpbGRlciBhZGRlbmQ7CiAgICAgc2VyaWFsaXplSWRlbnRpZmllcihpZGVudGlm
aWVyLCBhZGRlbmQpOwotICAgIGFwcGVuZFRvLmFwcGVuZChTdHJpbmc6OmFkb3B0KGFkZGVuZCkp
OworICAgIGFwcGVuZFRvLmFwcGVuZChhZGRlbmQudG9TdHJpbmcoKSk7CiB9CiAKLXZvaWQgc2Vy
aWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFZlY3RvcjxVQ2hhcj4m
IGFwcGVuZFRvKQordm9pZCBzZXJpYWxpemVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllciwgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pCiB7CiAgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1
ZTsKICAgICBib29sIGlzU2Vjb25kID0gZmFsc2U7CkBAIC05NiwxMiArOTcsMTIgQEAgdm9pZCBz
ZXJpYWxpemVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaQogCiB2b2lkIHNlcmlhbGl6ZVN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZywgU3RyaW5nJiBhcHBlbmRUbykKIHsKLSAgICBWZWN0b3I8
VUNoYXI+IGFkZGVuZDsKKyAgICBTdHJpbmdCdWlsZGVyIGFkZGVuZDsKICAgICBzZXJpYWxpemVT
dHJpbmcoc3RyaW5nLCBhZGRlbmQpOwotICAgIGFwcGVuZFRvLmFwcGVuZChTdHJpbmc6OmFkb3B0
KGFkZGVuZCkpOworICAgIGFwcGVuZFRvLmFwcGVuZChhZGRlbmQudG9TdHJpbmcoKSk7CiB9CiAK
LXZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBWZWN0b3I8VUNoYXI+
JiBhcHBlbmRUbykKK3ZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBT
dHJpbmdCdWlsZGVyJiBhcHBlbmRUbykKIHsKICAgICBhcHBlbmRUby5hcHBlbmQoJ1wiJyk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NPTVV0aWxzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU09NVXRpbHMuaAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTT01VdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQ29tbW9uIHNlcmlhbGl6aW5nIG1ldGhvZHMu
IFNlZTogaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1p
ZGlvbXMKLXZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyKFVDaGFyMzIsIFZlY3RvcjxVQ2hhcj4mIGFw
cGVuZFRvKTsKLXZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIzMiwgVmVj
dG9yPFVDaGFyPiYgYXBwZW5kVG8pOwordm9pZCBzZXJpYWxpemVDaGFyYWN0ZXIoVUNoYXIzMiwg
U3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pOwordm9pZCBzZXJpYWxpemVDaGFyYWN0ZXJBc0NvZGVQ
b2ludChVQ2hhcjMyLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbyk7CiB2b2lkIHNlcmlhbGl6ZUlk
ZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBTdHJpbmcmIGFwcGVuZFRvKTsKLXZv
aWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFZlY3RvcjxV
Q2hhcj4mIGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBTdHJpbmcmIGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbyk7Cit2b2lkIHNlcmlhbGl6ZUlkZW50
aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbyk7
Cit2b2lkIHNlcmlhbGl6ZVN0cmluZyhjb25zdCBTdHJpbmcmLCBTdHJpbmcmIGFwcGVuZFRvKTsK
K3ZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYsIFN0cmluZ0J1aWxkZXImIGFwcGVu
ZFRvKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzks
NyBAQAogI2luY2x1ZGUgPHd0Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9S
VCkKICNpbmNsdWRlICJEYXNoYm9hcmRSZWdpb24uaCIKQEAgLTcwOCwxNCArNzA5LDE0IEBAIFN0
cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCgpIGNvbnMKICAgICAgICAgY2FzZSBDU1Nf
QVRUUjogewogICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGF0
dHJQYXJlbiwgKCJhdHRyKCIpKTsKIAotICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7
Ci0gICAgICAgICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg2ICsgbV92YWx1ZS5z
dHJpbmctPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAg
ICAgICAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSg2ICsgbV92YWx1ZS5zdHJpbmctPmxlbmd0
aCgpKTsKIAotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgYXR0clBhcmVuKTsKLSAgICAgICAg
ICAgIGFwcGVuZChyZXN1bHQsIG1fdmFsdWUuc3RyaW5nKTsKLSAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoJyknKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXR0clBhcmVu
KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV92YWx1ZS5zdHJpbmcpOworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnKScpOwogCi0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjphZG9w
dChyZXN1bHQpOworICAgICAgICAgICAgdGV4dCA9IHJlc3VsdC50b1N0cmluZygpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NfQ09VTlRFUl9OQU1FOgpA
QCAtNzMzLDIzICs3MzQsMjMgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkg
Y29ucwogICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHJlY3RQ
YXJlbiwgKCJyZWN0KCIpKTsKIAogICAgICAgICAgICAgUmVjdCogcmVjdFZhbCA9IGdldFJlY3RW
YWx1ZSgpOwotICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAgICAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7Ci0gICAgICAgICAgICBhcHBlbmQocmVz
dWx0LCByZWN0UGFyZW4pOworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAg
ICAgICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDMyKTsKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQocmVjdFBhcmVuKTsKIAotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgcmVjdFZhbC0+
dG9wKCktPmNzc1RleHQoKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlY3RWYWwtPnRv
cCgpLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwogCi0gICAg
ICAgICAgICBhcHBlbmQocmVzdWx0LCByZWN0VmFsLT5yaWdodCgpLT5jc3NUZXh0KCkpOworICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChyZWN0VmFsLT5yaWdodCgpLT5jc3NUZXh0KCkpOwogICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwogCi0gICAgICAgICAgICBhcHBlbmQocmVzdWx0
LCByZWN0VmFsLT5ib3R0b20oKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocmVjdFZhbC0+Ym90dG9tKCktPmNzc1RleHQoKSk7CiAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgJyk7CiAKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlY3RWYWwtPmxlZnQoKS0+
Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjdFZhbC0+bGVmdCgpLT5j
c3NUZXh0KCkpOwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwogCi0gICAgICAgICAg
ICB0ZXh0ID0gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgICAgICAgICAgdGV4dCA9IHJlc3Vs
dC50b1N0cmluZygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDU1NfUkdCQ09MT1I6CkBAIC03NjMsMjcgKzc2NCwyNyBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZl
VmFsdWU6OmNzc1RleHQoKSBjb25zCiAgICAgICAgICAgICAgICAgQ29sb3I6OnBhcnNlSGV4Q29s
b3IobV92YWx1ZS5zdHJpbmcsIHJnYkNvbG9yKTsKICAgICAgICAgICAgIENvbG9yIGNvbG9yKHJn
YkNvbG9yKTsKIAotICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAgICAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7CisgICAgICAgICAgICBTdHJpbmdC
dWlsZGVyIHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOwog
ICAgICAgICAgICAgaWYgKGNvbG9yLmhhc0FscGhhKCkpCi0gICAgICAgICAgICAgICAgYXBwZW5k
KHJlc3VsdCwgcmdiYVBhcmVuKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJnYmFQ
YXJlbik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwg
cmdiUGFyZW4pOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmdiUGFyZW4pOwogCi0g
ICAgICAgICAgICBhcHBlbmROdW1iZXIocmVzdWx0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Pihjb2xvci5yZWQoKSkpOwotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgY29tbWFTcGFjZSk7
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KGNvbG9yLnJlZCgpKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbW1hU3BhY2Up
OwogCi0gICAgICAgICAgICBhcHBlbmROdW1iZXIocmVzdWx0LCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihjb2xvci5ncmVlbigpKSk7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBjb21t
YVNwYWNlKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmROdW1iZXIoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oY29sb3IuZ3JlZW4oKSkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChj
b21tYVNwYWNlKTsKIAotICAgICAgICAgICAgYXBwZW5kTnVtYmVyKHJlc3VsdCwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oY29sb3IuYmx1ZSgpKSk7CisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGNvbG9yLmJsdWUoKSkpOwogICAg
ICAgICAgICAgaWYgKGNvbG9yLmhhc0FscGhhKCkpIHsKLSAgICAgICAgICAgICAgICBhcHBlbmQo
cmVzdWx0LCBjb21tYVNwYWNlKTsKLSAgICAgICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBTdHJp
bmc6Om51bWJlcihjb2xvci5hbHBoYSgpIC8gMjU2LjBmKSk7CisgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChjb21tYVNwYWNlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFN0
cmluZzo6bnVtYmVyKGNvbG9yLmFscGhhKCkgLyAyNTYuMGYpKTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgICAgICAgICAgdGV4dCA9IFN0cmlu
Zzo6YWRvcHQocmVzdWx0KTsKKyAgICAgICAgICAgIHRleHQgPSByZXN1bHQudG9TdHJpbmcoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTX1BBSVI6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA5Mzcw
MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTM2LDcgKzkzNiw3IEBAIEVJbnNpZGVMaW5rIENTU1N0eWxlU2VsZWN0b3I6OlNl
bGVjdG9yQ2gKICAgICAgICAgcmV0dXJuIE5vdEluc2lkZUxpbms7CiAKICNpZiBQTEFURk9STShR
VCkKLSAgICBWZWN0b3I8VUNoYXIsIDUxMj4gdXJsOworICAgIFN0cmluZ0J1aWxkZXIgdXJsOwog
ICAgIHZpc2l0ZWRVUkwobV9kb2N1bWVudC0+YmFzZVVSTCgpLCAqYXR0ciwgdXJsKTsKICAgICBp
ZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7CkBA
IC05NDUsOSArOTQ1LDkgQEAgRUluc2lkZUxpbmsgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JD
aAogICAgIC8vIHRvIHRoZSBvbGQgZ2xvYmFsIGhpc3RvcnkuCiAgICAgUVdlYkhpc3RvcnlJbnRl
cmZhY2UqIGlmYWNlID0gUVdlYkhpc3RvcnlJbnRlcmZhY2U6OmRlZmF1bHRJbnRlcmZhY2UoKTsK
ICAgICBpZiAoaWZhY2UpCi0gICAgICAgIHJldHVybiBpZmFjZS0+aGlzdG9yeUNvbnRhaW5zKFFT
dHJpbmcocmVpbnRlcnByZXRfY2FzdDxRQ2hhcio+KHVybC5kYXRhKCkpLCB1cmwuc2l6ZSgpKSkg
PyBJbnNpZGVWaXNpdGVkTGluayA6IEluc2lkZVVudmlzaXRlZExpbms7CisgICAgICAgIHJldHVy
biBpZmFjZS0+aGlzdG9yeUNvbnRhaW5zKFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxRQ2hhcio+
KHVybC5jaGFyYWN0ZXJzKCkpLCB1cmwubGVuZ3RoKCkpKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDog
SW5zaWRlVW52aXNpdGVkTGluazsKIAotICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hh
c2godXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7CisgICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRM
aW5rSGFzaCh1cmwuY2hhcmFjdGVycygpLCB1cmwubGVuZ3RoKCkpOwogICAgIGlmICghaGFzaCkK
ICAgICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7CiAjZWxzZQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU1dyYXBTaGFwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NXcmFwU2hhcGVzLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTV3JhcFNoYXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDgg
QEAKIAogI2luY2x1ZGUgIkNTU1dyYXBTaGFwZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KKwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNDAsMzQgKzQyLDM0IEBAIFN0cmluZyBDU1NXcmFwU2hhcGVSZWN0Ojpjc3NUZXh0
KCkgY29uc3QKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcmVjdFBhcmVu
LCAoInJlY3QoIikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBjb21t
YSwgKCIsICIpKTsKICAgICAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7Ci0gICAgYXBwZW5kKHJlc3VsdCwgcmVjdFBhcmVu
KTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5
KDMyKTsKKyAgICByZXN1bHQuYXBwZW5kKHJlY3RQYXJlbik7CiAKLSAgICBhcHBlbmQocmVzdWx0
LCBtX2xlZnQtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAgIHJl
c3VsdC5hcHBlbmQobV9sZWZ0LT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoY29tbWEp
OwogCi0gICAgYXBwZW5kKHJlc3VsdCwgbV90b3AtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJl
c3VsdCwgY29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV90b3AtPmNzc1RleHQoKSk7CisgICAg
cmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3dpZHRoLT5jc3NU
ZXh0KCkpOwotICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hKTsKKyAgICByZXN1bHQuYXBwZW5kKG1f
d2lkdGgtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBl
bmQocmVzdWx0LCBtX2hlaWdodC0+Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKG1faGVp
Z2h0LT5jc3NUZXh0KCkpOwogICAgIAogICAgIGlmIChtX3JhZGl1c1guZ2V0KCkpIHsKLSAgICAg
ICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBtX3JhZGl1
c1gtPmNzc1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKG1fcmFkaXVzWC0+Y3NzVGV4dCgpKTsKIAogICAgICAgICBpZiAobV9yYWRp
dXNZLmdldCgpKSB7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7Ci0gICAgICAg
ICAgICBhcHBlbmQocmVzdWx0LCBtX3JhZGl1c1ktPmNzc1RleHQoKSk7CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKGNvbW1hKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9yYWRpdXNZ
LT5jc3NUZXh0KCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHJlc3VsdC5hcHBlbmQo
JyknKTsKICAgICAgICAgICAgIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBTdHJpbmcgQ1NTV3JhcFNoYXBlQ2ly
Y2xlOjpjc3NUZXh0KCkgY29uc3QKQEAgLTc1LDIwICs3NywyMCBAQCBTdHJpbmcgQ1NTV3JhcFNo
YXBlQ2lyY2xlOjpjc3NUZXh0KCkgY29uCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBT
dHJpbmcsIGNpcmNsZVBhcmVuLCAoImNpcmNsZSgiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIGNvbW1hLCAoIiwgIikpOwogICAgIAotICAgIFZlY3RvcjxVQ2hhcj4g
cmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMyKTsKLSAgICBhcHBl
bmQocmVzdWx0LCBjaXJjbGVQYXJlbik7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAg
cmVzdWx0LnJlc2VydmVDYXBhY2l0eSgzMik7CisgICAgcmVzdWx0LmFwcGVuZChjaXJjbGVQYXJl
bik7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX2xlZnQtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5k
KHJlc3VsdCwgY29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV9sZWZ0LT5jc3NUZXh0KCkpOwor
ICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgbV90b3AtPmNz
c1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQo
bV90b3AtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBl
bmQocmVzdWx0LCBtX3JhZGl1cy0+Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fcmFk
aXVzLT5jc3NUZXh0KCkpOwogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKICAgICAgICAgICAgIAot
ICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0
cmluZygpOwogfQogCiBTdHJpbmcgQ1NTV3JhcFNoYXBlRWxsaXBzZTo6Y3NzVGV4dCgpIGNvbnN0
CkBAIC05NiwyMyArOTgsMjMgQEAgU3RyaW5nIENTU1dyYXBTaGFwZUVsbGlwc2U6OmNzc1RleHQo
KSBjbwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBlbGxpcHNlUGFyZW4s
ICgiZWxsaXBzZSgiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGNv
bW1hLCAoIiwgIikpOwogICAgIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3Vs
dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMyKTsKLSAgICBhcHBlbmQocmVzdWx0LCBlbGxpcHNl
UGFyZW4pOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2Fw
YWNpdHkoMzIpOworICAgIHJlc3VsdC5hcHBlbmQoZWxsaXBzZVBhcmVuKTsKIAotICAgIGFwcGVu
ZChyZXN1bHQsIG1fbGVmdC0+Y3NzVGV4dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7
CisgICAgcmVzdWx0LmFwcGVuZChtX2xlZnQtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVu
ZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3RvcC0+Y3NzVGV4dCgpKTsKLSAgICBh
cHBlbmQocmVzdWx0LCBjb21tYSk7CisgICAgcmVzdWx0LmFwcGVuZChtX3RvcC0+Y3NzVGV4dCgp
KTsKKyAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKIAotICAgIGFwcGVuZChyZXN1bHQsIG1fcmFk
aXVzWC0+Y3NzVGV4dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7CisgICAgcmVzdWx0
LmFwcGVuZChtX3JhZGl1c1gtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7
CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3JhZGl1c1ktPmNzc1RleHQoKSk7CisgICAgcmVzdWx0
LmFwcGVuZChtX3JhZGl1c1ktPmNzc1RleHQoKSk7CiAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwog
ICAgICAgICAgICAgCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBDU1NXcmFwU2hhcGVQb2x5Z29uOjpj
c3NUZXh0KCkgY29uc3QKQEAgLTEyMSwyNiArMTIzLDI2IEBAIFN0cmluZyBDU1NXcmFwU2hhcGVQ
b2x5Z29uOjpjc3NUZXh0KCkgY28KICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmlu
ZywgcG9seWdvblBhcmVuTm9uWmVybywgKCJwb2x5Z29uKG5vbnplcm8sICIpKTsKICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgY29tbWEsICgiLCAiKSk7CiAgICAgCi0gICAg
VmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
MzIpOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNp
dHkoMzIpOwogICAgIGlmIChtX3dpbmRSdWxlID09IFJVTEVfRVZFTk9ERCkKLSAgICAgICAgYXBw
ZW5kKHJlc3VsdCwgcG9seWdvblBhcmVuRXZlbk9kZCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
cG9seWdvblBhcmVuRXZlbk9kZCk7CiAgICAgZWxzZQotICAgICAgICBhcHBlbmQocmVzdWx0LCBw
b2x5Z29uUGFyZW5Ob25aZXJvKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChwb2x5Z29uUGFyZW5O
b25aZXJvKTsKIAogICAgIEFTU0VSVCghKG1fdmFsdWVzLnNpemUoKSAlIDIpKTsKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7IGkgKz0gMikgewogICAgICAg
ICBpZiAoaSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKLSAgICAgICAgYXBwZW5k
KHJlc3VsdCwgbV92YWx1ZXMuYXQoaSktPmNzc1RleHQoKSk7Ci0gICAgICAgIGFwcGVuZChyZXN1
bHQsIGNvbW1hKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgbV92YWx1ZXMuYXQoaSArIDEpLT5j
c3NUZXh0KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fdmFsdWVzLmF0KGkpLT5jc3NUZXh0
KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChtX3ZhbHVlcy5hdChpICsgMSktPmNzc1RleHQoKSk7CiAgICAgfQogICAgIAogICAgIHJlc3Vs
dC5hcHBlbmQoJyknKTsKICAgICAgICAgICAgIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2Uu
Y3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSFRNTEludGVy
Y2hhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsOCBAQCBTdHJpbmcgY29udmVy
dEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hCiAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkgJiYg
bm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpCiAgICAgICAgIHJl
dHVybiBpbjsKIAotICAgIFZlY3RvcjxVQ2hhcj4gczsKKyAgICBTdHJpbmdCdWlsZGVyIHM7Cisg
ICAgcy5yZXNlcnZlQ2FwYWNpdHkoaW4ubGVuZ3RoKCkpOwogCiAgICAgdW5zaWduZWQgaSA9IDA7
CiAgICAgdW5zaWduZWQgY29uc3VtZWQgPSAwOwpAQCAtNzQsMjggKzc1LDI4IEBAIFN0cmluZyBj
b252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWEKICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBhZGQgPSBjb3VudCAlIDM7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChhZGQpIHsKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMs
IGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBl
bmQoY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzLmFw
cGVuZCgnICcpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNw
YWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoY29udmVydGVk
U3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgPSAzOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDAgfHwgaSArIDEgPT0gaW4ubGVuZ3RoKCkp
IC8vIGF0IHN0YXJ0IG9yIGVuZCBvZiBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcHBlbmQocywgY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoJyAn
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBj
YXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGF0IHN0YXJ0IG9mIHN0cmluZwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZCgnICcpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChpICsgMiA9PSBpbi5sZW5ndGgoKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBhdCBlbmQgb2Ygc3RyaW5nCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmlu
ZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKCcgJyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEwNyw3ICsxMDgs
NyBAQCBTdHJpbmcgY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hCiAgICAgICAgIGkg
Kz0gY29uc3VtZWQ7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocyk7CisgICAg
cmV0dXJuIHMudG9TdHJpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAJKHJldmlzaW9u
IDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNywxNCBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNp
bmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgi
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIAotdm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRp
ZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBVQ2hhciogY29udGVudCwgc2l6ZV90IGxlbmd0
aCwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQordm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5n
RW50aXRpZXMoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBVQ2hhciogY29udGVudCwgc2l6ZV90
IGxlbmd0aCwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQogewogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgU3RyaW5nLCBhbXBSZWZlcmVuY2UsICgiJmFtcDsiKSk7CiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGx0UmVmZXJlbmNlLCAoIiZsdDsiKSk7CkBAIC02NCw3
ICs2NSw3IEBAIHZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKFYKICAgICAg
ICAgZm9yIChzaXplX3QgbSA9IDA7IG0gPCBXVEZfQVJSQVlfTEVOR1RIKGVudGl0eU1hcHMpOyAr
K20pIHsKICAgICAgICAgICAgIGlmIChjb250ZW50W2ldID09IGVudGl0eU1hcHNbbV0uZW50aXR5
ICYmIGVudGl0eU1hcHNbbV0ubWFzayAmIGVudGl0eU1hc2spIHsKICAgICAgICAgICAgICAgICBv
dXQuYXBwZW5kKGNvbnRlbnQgKyBwb3NpdGlvbkFmdGVyTGFzdEVudGl0eSwgaSAtIHBvc2l0aW9u
QWZ0ZXJMYXN0RW50aXR5KTsKLSAgICAgICAgICAgICAgICBhcHBlbmQob3V0LCBlbnRpdHlNYXBz
W21dLnJlZmVyZW5jZSk7CisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZChlbnRpdHlNYXBzW21d
LnJlZmVyZW5jZSk7CiAgICAgICAgICAgICAgICAgcG9zaXRpb25BZnRlckxhc3RFbnRpdHkgPSBp
ICsgMTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTg2LDExICs4
NywxMSBAQCBNYXJrdXBBY2N1bXVsYXRvcjo6fk1hcmt1cEFjY3VtdWxhdG9yKCkKIAogU3RyaW5n
IE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2RlcyhOb2RlKiBub2RlLCBOb2RlKiBub2Rl
VG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25seSkKIHsKLSAgICBWZWN0b3I8VUNoYXI+
IG91dDsKKyAgICBTdHJpbmdCdWlsZGVyIG91dDsKICAgICBzZXJpYWxpemVOb2Rlc1dpdGhOYW1l
c3BhY2VzKG5vZGUsIG5vZGVUb1NraXAsIGNoaWxkcmVuT25seSwgMCk7Ci0gICAgb3V0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKCkpOworICAgIG91dC5yZXNlcnZlQ2FwYWNpdHkobGVu
Z3RoKCkpOwogICAgIGNvbmNhdGVuYXRlTWFya3VwKG91dCk7Ci0gICAgcmV0dXJuIFN0cmluZzo6
YWRvcHQob3V0KTsKKyAgICByZXR1cm4gb3V0LnRvU3RyaW5nKCk7CiB9CiAKIHZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OnNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSogbm9kZSwgTm9k
ZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHksIGNvbnN0IE5hbWVzcGFj
ZXMqIG5hbWVzcGFjZXMpCkBAIC0xMzgsMTggKzEzOSwxOCBAQCB2b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRTdHJpbmcoY29uCiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0
YXJ0VGFnKE5vZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7Ci0gICAgVmVjdG9y
PFVDaGFyPiBtYXJrdXA7CisgICAgU3RyaW5nQnVpbGRlciBtYXJrdXA7CiAgICAgYXBwZW5kU3Rh
cnRNYXJrdXAobWFya3VwLCBub2RlLCBuYW1lc3BhY2VzKTsKLSAgICBhcHBlbmRTdHJpbmcoU3Ry
aW5nOjphZG9wdChtYXJrdXApKTsKKyAgICBhcHBlbmRTdHJpbmcobWFya3VwLnRvU3RyaW5nKCkp
OwogICAgIGlmIChtX25vZGVzKQogICAgICAgICBtX25vZGVzLT5hcHBlbmQobm9kZSk7CiB9CiAK
IHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhOb2RlKiBub2RlKQogewotICAg
IFZlY3RvcjxVQ2hhcj4gbWFya3VwOworICAgIFN0cmluZ0J1aWxkZXIgbWFya3VwOwogICAgIGFw
cGVuZEVuZE1hcmt1cChtYXJrdXAsIG5vZGUpOwotICAgIGFwcGVuZFN0cmluZyhTdHJpbmc6OmFk
b3B0KG1hcmt1cCkpOworICAgIGFwcGVuZFN0cmluZyhtYXJrdXAudG9TdHJpbmcoKSk7CiB9CiAK
IHNpemVfdCBNYXJrdXBBY2N1bXVsYXRvcjo6dG90YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHN0cmluZ3MpCkBAIC0xNjEsMjUgKzE2MiwyNSBAQCBzaXplX3QgTWFya3VwQWNjdW11bGF0
b3I6OnRvdGFsTGVuZ3RoKGNvCiB9CiAKIC8vIEZJWE1FOiBUaGlzIGlzIGEgdmVyeSBpbmVmZmlj
aWVudCB3YXkgb2YgYWNjdW11bGF0aW5nIHRoZSBtYXJrdXAuCi0vLyBXZSdyZSBjb252ZXJ0aW5n
IHJlc3VsdHMgb2YgYXBwZW5kU3RhcnRNYXJrdXAgYW5kIGFwcGVuZEVuZE1hcmt1cCBmcm9tIFZl
Y3RvcjxVQ2hhcj4gdG8gU3RyaW5nCi0vLyBhbmQgdGhlbiBiYWNrIHRvIFZlY3RvcjxVQ2hhcj4g
YW5kIGFnYWluIHRvIFN0cmluZyBoZXJlLgotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6Y29uY2F0
ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KQorLy8gV2UncmUgY29udmVydGluZyByZXN1
bHRzIG9mIGFwcGVuZFN0YXJ0TWFya3VwIGFuZCBhcHBlbmRFbmRNYXJrdXAgZnJvbSBTdHJpbmdC
dWlsZGVyIHRvIFN0cmluZworLy8gYW5kIHRoZW4gYmFjayB0byBTdHJpbmdCdWlsZGVyIGFuZCBh
Z2FpbiB0byBTdHJpbmcgaGVyZS4KK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmNvbmNhdGVuYXRl
TWFya3VwKFN0cmluZ0J1aWxkZXImIG91dCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fc3VjY2VlZGluZ01hcmt1cC5zaXplKCk7ICsraSkKLSAgICAgICAgYXBwZW5kKG91dCwgbV9z
dWNjZWVkaW5nTWFya3VwW2ldKTsKKyAgICAgICAgb3V0LmFwcGVuZChtX3N1Y2NlZWRpbmdNYXJr
dXBbaV0pOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGVWYWx1
ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlLCBib29sIGRv
Y3VtZW50SXNIVE1MKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVmFs
dWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBk
b2N1bWVudElzSFRNTCkKIHsKICAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMo
cmVzdWx0LCBhdHRyaWJ1dGUuY2hhcmFjdGVycygpLCBhdHRyaWJ1dGUubGVuZ3RoKCksCiAgICAg
ICAgIGRvY3VtZW50SXNIVE1MID8gRW50aXR5TWFza0luSFRNTEF0dHJpYnV0ZVZhbHVlIDogRW50
aXR5TWFza0luQXR0cmlidXRlVmFsdWUpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFtZXNwYWNl
cyopCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmlu
Z0J1aWxkZXImLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopCiB7CiB9CiAKLXZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJl
c3VsdCwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUp
Cit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShT
dHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJp
YnV0ZSYgYXR0cmlidXRlKQogewogICAgIEFTU0VSVChlbGVtZW50LT5pc1VSTEF0dHJpYnV0ZShj
b25zdF9jYXN0PEF0dHJpYnV0ZSo+KCZhdHRyaWJ1dGUpKSk7CiAgICAgY29uc3QgU3RyaW5nIHJl
c29sdmVkVVJMU3RyaW5nID0gcmVzb2x2ZVVSTElmTmVlZGVkKGVsZW1lbnQsIGF0dHJpYnV0ZS52
YWx1ZSgpKTsKQEAgLTE5NCw3ICsxOTUsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRRdW90ZWRVUkxBCiAgICAgICAgICAgICAgICAgcXVvdGVDaGFyID0gJ1wnJzsKICAgICAgICAg
fQogICAgICAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hhcik7Ci0gICAgICAgIGFwcGVuZChyZXN1
bHQsIHN0cmlwcGVkVVJMU3RyaW5nKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdHJpcHBlZFVS
TFN0cmluZyk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQocXVvdGVDaGFyKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTIwNSw3ICsyMDYsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRRdW90ZWRVUkxBCiAgICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIpOwogfQogCi12b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVmFsdWUoVmVjdG9yPFVDaGFyPiYgb3V0LCBj
b25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UsIEVudGl0eU1hc2sgZW50aXR5TWFz
aykKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVWYWx1ZShTdHJpbmdCdWlsZGVy
JiBvdXQsIGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSwgRW50aXR5TWFzayBl
bnRpdHlNYXNrKQogewogICAgIFN0cmluZyBzdHIgPSBub2RlLT5ub2RlVmFsdWUoKTsKICAgICBj
b25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHN0ci5jaGFyYWN0ZXJzKCk7CkBAIC0yNTUsNyArMjU2
LDcgQEAgYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6c2hvdWxkQWRkTmFtZXNwYQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROYW1lc3BhY2UoVmVj
dG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmIG5hbWVzcGFjZXMpCit2b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmROYW1lc3BhY2UoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBj
b25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIE5hbWVzcGFjZXMmIG5hbWVzcGFjZXMpCiB7CiAgICAgbmFtZXNwYWNlcy5jaGVja0NvbnNp
c3RlbmN5KCk7CiAgICAgaWYgKG5hbWVzcGFjZVVSSS5pc0VtcHR5KCkpCkBAIC0yNjcsMTAgKzI2
OCwxMCBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROYW1lc3BhY2UoCiAgICAgaWYg
KGZvdW5kTlMgIT0gbmFtZXNwYWNlVVJJLmltcGwoKSkgewogICAgICAgICBuYW1lc3BhY2VzLnNl
dChwcmUsIG5hbWVzcGFjZVVSSS5pbXBsKCkpOwogICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7
Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIHhtbG5zQXRvbS5zdHJpbmcoKSk7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoeG1sbnNBdG9tLnN0cmluZygpKTsKICAgICAgICAgaWYgKCFwcmVmaXguaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCc6Jyk7Ci0gICAgICAgICAgICBh
cHBlbmQocmVzdWx0LCBwcmVmaXgpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwcmVmaXgp
OwogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnPScpOwpAQCAtMjkyLDU5ICsy
OTMsNTkgQEAgRW50aXR5TWFzayBNYXJrdXBBY2N1bXVsYXRvcjo6ZW50aXR5TWFzawogICAgIHJl
dHVybiB0ZXh0LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpID8gRW50aXR5TWFza0luSFRN
TFBDREFUQSA6IEVudGl0eU1hc2tJblBDREFUQTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqIHRleHQpCit2b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCogdGV4dCkK
IHsKICAgICBhcHBlbmROb2RlVmFsdWUob3V0LCB0ZXh0LCBtX3JhbmdlLCBlbnRpdHlNYXNrRm9y
VGV4dCh0ZXh0KSk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENvbW1lbnQo
VmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpCit2b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRDb21tZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5n
JiBjb21tZW50KQogewogICAgIC8vIEZJWE1FOiBDb21tZW50IGNvbnRlbnQgaXMgbm90IGVzY2Fw
ZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgc2hvdWxk
IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRlcyAiLS0+Ii4KLSAgICBhcHBlbmQob3V0
LCAiPCEtLSIpOwotICAgIGFwcGVuZChvdXQsIGNvbW1lbnQpOwotICAgIGFwcGVuZChvdXQsICIt
LT4iKTsKKyAgICBvdXQuYXBwZW5kKCI8IS0tIik7CisgICAgb3V0LmFwcGVuZChjb21tZW50KTsK
KyAgICBvdXQuYXBwZW5kKCItLT4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRG9jdW1lbnRUeXBlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBl
KiBuKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1
aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKiBuKQogewogICAgIGlmIChuLT5uYW1l
KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhcHBlbmQocmVzdWx0LCAiPCFE
T0NUWVBFICIpOwotICAgIGFwcGVuZChyZXN1bHQsIG4tPm5hbWUoKSk7CisgICAgcmVzdWx0LmFw
cGVuZCgiPCFET0NUWVBFICIpOworICAgIHJlc3VsdC5hcHBlbmQobi0+bmFtZSgpKTsKICAgICBp
ZiAoIW4tPnB1YmxpY0lkKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsICIg
UFVCTElDIFwiIik7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIG4tPnB1YmxpY0lkKCkpOwotICAg
ICAgICBhcHBlbmQocmVzdWx0LCAiXCIiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiIFBVQkxJ
QyBcIiIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG4tPnB1YmxpY0lkKCkpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJcIiIpOwogICAgICAgICBpZiAoIW4tPnN5c3RlbUlkKCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCAiIFwiIik7Ci0gICAgICAgICAgICBhcHBl
bmQocmVzdWx0LCBuLT5zeXN0ZW1JZCgpKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsICJc
IiIpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiIFwiIik7CisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCIi
KTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoIW4tPnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsICIgU1lTVEVNIFwiIik7Ci0gICAgICAgIGFwcGVuZChy
ZXN1bHQsIG4tPnN5c3RlbUlkKCkpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCAiXCIiKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiIFNZU1RFTSBcIiIpOworICAgICAgICByZXN1bHQuYXBwZW5k
KG4tPnN5c3RlbUlkKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiIpOwogICAgIH0KICAg
ICBpZiAoIW4tPmludGVybmFsU3Vic2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGFwcGVuZChy
ZXN1bHQsICIgWyIpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBuLT5pbnRlcm5hbFN1YnNldCgp
KTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgIl0iKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgi
IFsiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChuLT5pbnRlcm5hbFN1YnNldCgpKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiXSIpOwogICAgIH0KLSAgICBhcHBlbmQocmVzdWx0LCAiPiIpOwor
ICAgIHJlc3VsdC5hcHBlbmQoIj4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5n
JiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpCiB7CiAgICAgLy8gRklYTUU6IFBJIGRhdGEg
aXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIgY2Fs
bGVycykgdGhpcyBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVzICI/PiIu
Ci0gICAgYXBwZW5kKG91dCwgIjw/Iik7Ci0gICAgYXBwZW5kKG91dCwgdGFyZ2V0KTsKLSAgICBh
cHBlbmQob3V0LCAiICIpOwotICAgIGFwcGVuZChvdXQsIGRhdGEpOwotICAgIGFwcGVuZChvdXQs
ICI/PiIpOworICAgIG91dC5hcHBlbmQoIjw/Iik7CisgICAgb3V0LmFwcGVuZCh0YXJnZXQpOwor
ICAgIG91dC5hcHBlbmQoIiAiKTsKKyAgICBvdXQuYXBwZW5kKGRhdGEpOworICAgIG91dC5hcHBl
bmQoIj8+Iik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVj
dG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2Vz
KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBv
dXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgYXBw
ZW5kT3BlblRhZyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwogCkBAIC0zNTksMTUgKzM2MCwx
NSBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZlCiAgICAgYXBwZW5k
Q2xvc2VUYWcob3V0LCBlbGVtZW50KTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFj
ZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRPcGVuVGFnKFN0
cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNl
cykKIHsKICAgICBvdXQuYXBwZW5kKCc8Jyk7Ci0gICAgYXBwZW5kKG91dCwgZWxlbWVudC0+bm9k
ZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKKyAgICBvdXQuYXBwZW5kKGVsZW1lbnQtPm5vZGVOYW1l
UHJlc2VydmluZ0Nhc2UoKSk7CiAgICAgaWYgKCFlbGVtZW50LT5kb2N1bWVudCgpLT5pc0hUTUxE
b2N1bWVudCgpICYmIG5hbWVzcGFjZXMgJiYgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChlbGVt
ZW50KSkKICAgICAgICAgYXBwZW5kTmFtZXNwYWNlKG91dCwgZWxlbWVudC0+cHJlZml4KCksIGVs
ZW1lbnQtPm5hbWVzcGFjZVVSSSgpLCAqbmFtZXNwYWNlcyk7ICAgIAogfQogCi12b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQq
IGVsZW1lbnQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhTdHJpbmdC
dWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgaWYgKHNob3VsZFNlbGZDbG9z
ZShlbGVtZW50KSkgewogICAgICAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQpAQCAt
Mzc3LDE2ICszNzgsMTYgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2xvc2VUYWco
VgogICAgIG91dC5hcHBlbmQoJz4nKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
QXR0cmlidXRlJiBhdHRyaWJ1dGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFtZXNwYWNlcyogbmFtZXNw
YWNlcykKIHsKICAgICBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+
aXNIVE1MRG9jdW1lbnQoKTsKIAogICAgIG91dC5hcHBlbmQoJyAnKTsKIAogICAgIGlmIChkb2N1
bWVudElzSFRNTCkKLSAgICAgICAgYXBwZW5kKG91dCwgYXR0cmlidXRlLm5hbWUoKS5sb2NhbE5h
bWUoKSk7CisgICAgICAgIG91dC5hcHBlbmQoYXR0cmlidXRlLm5hbWUoKS5sb2NhbE5hbWUoKSk7
CiAgICAgZWxzZQotICAgICAgICBhcHBlbmQob3V0LCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5n
KCkpOworICAgICAgICBvdXQuYXBwZW5kKGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSk7CiAK
ICAgICBvdXQuYXBwZW5kKCc9Jyk7CiAKQEAgLTQwMiwxNSArNDAzLDE1IEBAIHZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZSgKICAgICAgICAgYXBwZW5kTmFtZXNwYWNlKG91
dCwgYXR0cmlidXRlLnByZWZpeCgpLCBhdHRyaWJ1dGUubmFtZXNwYWNlVVJJKCksICpuYW1lc3Bh
Y2VzKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKFZl
Y3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKQordm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3Ry
aW5nJiBzZWN0aW9uKQogewogICAgIC8vIEZJWE1FOiBDREFUQSBjb250ZW50IGlzIG5vdCBlc2Nh
cGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3Vs
ZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMgIl1dPiIuCi0gICAgYXBwZW5kKG91
dCwgIjwhW0NEQVRBWyIpOwotICAgIGFwcGVuZChvdXQsIHNlY3Rpb24pOwotICAgIGFwcGVuZChv
dXQsICJdXT4iKTsKKyAgICBvdXQuYXBwZW5kKCI8IVtDREFUQVsiKTsKKyAgICBvdXQuYXBwZW5k
KHNlY3Rpb24pOworICAgIG91dC5hcHBlbmQoIl1dPiIpOwogfQogCi12b2lkIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5v
ZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRTdGFydE1hcmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUqIG5v
ZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgaWYgKG5hbWVzcGFjZXMpCiAgICAg
ICAgIG5hbWVzcGFjZXMtPmNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTQ3NiwxNCArNDc3LDE0IEBA
IGJvb2wgTWFya3VwQWNjdW11bGF0b3I6OmVsZW1lbnRDYW5ub3RIYXYKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKS0+aWVGb3JiaWRzSW5zZXJ0SFRNTCgp
OwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRNYXJrdXAoVmVjdG9yPFVD
aGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKiBub2RlKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kRW5kTWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSogbm9kZSkK
IHsKICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSB8fCBzaG91bGRTZWxmQ2xvc2Uobm9k
ZSkgfHwgKCFub2RlLT5oYXNDaGlsZE5vZGVzKCkgJiYgZWxlbWVudENhbm5vdEhhdmVFbmRUYWco
bm9kZSkpKQogICAgICAgICByZXR1cm47CiAKICAgICByZXN1bHQuYXBwZW5kKCc8Jyk7CiAgICAg
cmVzdWx0LmFwcGVuZCgnLycpOwotICAgIGFwcGVuZChyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0
IEVsZW1lbnQqPihub2RlKS0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKKyAgICByZXN1bHQu
YXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKS0+bm9kZU5hbWVQcmVzZXJ2
aW5nQ2FzZSgpKTsKICAgICByZXN1bHQuYXBwZW5kKCc+Jyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgJKHJldmlzaW9uIDkzNzAzKQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NywzNCArNzcsMzQgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRF
bmRUYWcoTm9kZSopOwogICAgIHN0YXRpYyBzaXplX3QgdG90YWxMZW5ndGgoY29uc3QgVmVjdG9y
PFN0cmluZz4mKTsKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdG90YWxMZW5n
dGgobV9zdWNjZWVkaW5nTWFya3VwKTsgfQotICAgIHZvaWQgY29uY2F0ZW5hdGVNYXJrdXAoVmVj
dG9yPFVDaGFyPiYgb3V0KTsKLSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxV
Q2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUsIGJvb2wgZG9jdW1lbnRJc0hU
TUwpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hh
cj4mLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kTm9kZVZhbHVlKFZl
Y3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5TWFzayk7
CisgICAgdm9pZCBjb25jYXRlbmF0ZU1hcmt1cChTdHJpbmdCdWlsZGVyJiBvdXQpOworICAgIHZv
aWQgYXBwZW5kQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBTdHJp
bmcmIGF0dHJpYnV0ZSwgYm9vbCBkb2N1bWVudElzSFRNTCk7CisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZEN1c3RvbUF0dHJpYnV0ZXMoU3RyaW5nQnVpbGRlciYsIEVsZW1lbnQqLCBOYW1lc3BhY2Vz
Kik7CisgICAgdm9pZCBhcHBlbmROb2RlVmFsdWUoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBO
b2RlKiwgY29uc3QgUmFuZ2UqLCBFbnRpdHlNYXNrKTsKICAgICBib29sIHNob3VsZEFkZE5hbWVz
cGFjZUVsZW1lbnQoY29uc3QgRWxlbWVudCopOwogICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNl
QXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMmKTsKLSAgICB2b2lkIGFwcGVu
ZE5hbWVzcGFjZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJl
Zml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgTmFtZXNwYWNlcyYpOworICAg
IHZvaWQgYXBwZW5kTmFtZXNwYWNlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBOYW1lc3Bh
Y2VzJik7CiAgICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0Kik7Ci0g
ICAgdm9pZCBhcHBlbmRDb21tZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBj
b21tZW50KTsKLSAgICB2b2lkIGFwcGVuZERvY3VtZW50VHlwZShWZWN0b3I8VUNoYXI+JiByZXN1
bHQsIGNvbnN0IERvY3VtZW50VHlwZSopOwotICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0
cmluZyYgZGF0YSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFy
PiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kT3BlblRhZyhW
ZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBl
bmRDbG9zZVRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqKTsKLSAgICB2b2lkIGFwcGVu
ZEF0dHJpYnV0ZShWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBjb25zdCBBdHRyaWJ1dGUm
LCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRDREFUQVNlY3Rpb24oVmVjdG9yPFVDaGFy
PiYgb3V0LCBjb25zdCBTdHJpbmcmIHNlY3Rpb24pOwotICAgIHZvaWQgYXBwZW5kU3RhcnRNYXJr
dXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKiwgTmFtZXNwYWNlcyopOworICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCopOworICAg
IHZvaWQgYXBwZW5kQ29tbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgY29t
bWVudCk7CisgICAgdm9pZCBhcHBlbmREb2N1bWVudFR5cGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0
LCBjb25zdCBEb2N1bWVudFR5cGUqKTsKKyAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVj
dGlvbihTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJp
bmcmIGRhdGEpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXIm
IG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZE9wZW5UYWcoU3Ry
aW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBwZW5k
Q2xvc2VUYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50Kik7CisgICAgdm9pZCBhcHBlbmRB
dHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgY29uc3QgQXR0cmlidXRlJiwg
TmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBwZW5kQ0RBVEFTZWN0aW9uKFN0cmluZ0J1aWxkZXIm
IG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKTsKKyAgICB2b2lkIGFwcGVuZFN0YXJ0TWFya3Vw
KFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSosIE5hbWVzcGFjZXMqKTsKICAgICBi
b29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlKik7CiAgICAgYm9vbCBlbGVtZW50Q2Fubm90
SGF2ZUVuZFRhZyhjb25zdCBOb2RlKiBub2RlKTsKLSAgICB2b2lkIGFwcGVuZEVuZE1hcmt1cChW
ZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqKTsKKyAgICB2b2lkIGFwcGVuZEVuZE1h
cmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUqKTsKIAogICAgIFZlY3RvcjxO
b2RlKj4qIGNvbnN0IG1fbm9kZXM7CiAgICAgY29uc3QgUmFuZ2UqIGNvbnN0IG1fcmFuZ2U7CiAK
IHByaXZhdGU6CiAgICAgU3RyaW5nIHJlc29sdmVVUkxJZk5lZWRlZChjb25zdCBFbGVtZW50Kiwg
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kUXVvdGVkVVJM
QXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBFbGVtZW50KiwgY29u
c3QgQXR0cmlidXRlJik7CisgICAgdm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShT
dHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQqLCBjb25zdCBBdHRyaWJ1dGUmKTsK
ICAgICB2b2lkIHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSosIE5vZGUqIG5vZGVU
b1NraXAsIEVDaGlsZHJlbk9ubHksIGNvbnN0IE5hbWVzcGFjZXMqKTsKIAogICAgIFZlY3RvcjxT
dHJpbmc+IG1fc3VjY2VlZGluZ01hcmt1cDsKQEAgLTExMiw3ICsxMTIsNyBAQCBwcml2YXRlOgog
fTsKIAogLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBiZSBpbnRlZ3JhdGVkIHdpdGggTWFy
a3VwQWNjdW11bGF0b3IuCi12b2lkIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhW
ZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFVDaGFyKiBjb250ZW50LCBzaXplX3QgbGVuZ3RoLCBF
bnRpdHlNYXNrIGVudGl0eU1hc2spOwordm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50
aXRpZXMoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBVQ2hhciogY29udGVudCwgc2l6ZV90IGxl
bmd0aCwgRW50aXR5TWFzayk7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDE1ICs4OSwxNSBAQCBwcml2
YXRlOgogICAgIFN0cmluZyBtX3RhcmdldDsKICAgICBGaW5kT3B0aW9ucyBtX29wdGlvbnM7CiAK
LSAgICBWZWN0b3I8VUNoYXI+IG1fYnVmZmVyOworICAgIFN0cmluZ0J1aWxkZXIgbV9idWZmZXI7
CiAgICAgc2l6ZV90IG1fb3ZlcmxhcDsKICAgICBzaXplX3QgbV9wcmVmaXhMZW5ndGg7CiAgICAg
Ym9vbCBtX2F0QnJlYWs7CiAgICAgYm9vbCBtX25lZWRzTW9yZUNvbnRleHQ7CiAKICAgICBib29s
IG1fdGFyZ2V0UmVxdWlyZXNLYW5hV29ya2Fyb3VuZDsKLSAgICBWZWN0b3I8VUNoYXI+IG1fbm9y
bWFsaXplZFRhcmdldDsKLSAgICBtdXRhYmxlIFZlY3RvcjxVQ2hhcj4gbV9ub3JtYWxpemVkTWF0
Y2g7CisgICAgU3RyaW5nQnVpbGRlciBtX25vcm1hbGl6ZWRUYXJnZXQ7CisgICAgbXV0YWJsZSBT
dHJpbmdCdWlsZGVyIG1fbm9ybWFsaXplZE1hdGNoOwogCiAjZWxzZQogCkBAIC0xMDgsNyArMTA4
LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV90YXJnZXQ7CiAgICAgRmluZE9wdGlvbnMgbV9v
cHRpb25zOwogCi0gICAgVmVjdG9yPFVDaGFyPiBtX2J1ZmZlcjsKKyAgICBTdHJpbmdCdWlsZGVy
IG1fYnVmZmVyOwogICAgIFZlY3Rvcjxib29sPiBtX2lzQ2hhcmFjdGVyU3RhcnRCdWZmZXI7CiAg
ICAgYm9vbCBtX2lzQnVmZmVyRnVsbDsKICAgICBzaXplX3QgbV9jdXJzb3I7CkBAIC0xNDI1LDE1
ICsxNDI1LDE1IEBAIHZvaWQgQ2hhcmFjdGVySXRlcmF0b3I6OmFkdmFuY2UoaW50IGNvdW4KIAog
U3RyaW5nIENoYXJhY3Rlckl0ZXJhdG9yOjpzdHJpbmcoaW50IG51bUNoYXJzKQogewotICAgIFZl
Y3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51
bUNoYXJzKTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNh
cGFjaXR5KG51bUNoYXJzKTsKICAgICB3aGlsZSAobnVtQ2hhcnMgPiAwICYmICFhdEVuZCgpKSB7
CiAgICAgICAgIGludCBydW5TaXplID0gbWluKG51bUNoYXJzLCBsZW5ndGgoKSk7CiAgICAgICAg
IHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVycygpLCBydW5TaXplKTsKICAgICAgICAgbnVtQ2hhcnMg
LT0gcnVuU2l6ZTsKICAgICAgICAgYWR2YW5jZShydW5TaXplKTsKICAgICB9Ci0gICAgcmV0dXJu
IFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9
CiAKIHN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBjaGFyYWN0ZXJTdWJyYW5nZShDaGFyYWN0ZXJJ
dGVyYXRvciYgaXQsIGludCBvZmZzZXQsIGludCBsZW5ndGgpCkBAIC0xNjA2LDcgKzE2MDYsNyBA
QCB2b2lkIFdvcmRBd2FyZUl0ZXJhdG9yOjphZHZhbmNlKCkKIGludCBXb3JkQXdhcmVJdGVyYXRv
cjo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICBpZiAoIW1fYnVmZmVyLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmxlbmd0
aCgpOwogICAgIGlmIChtX3ByZXZpb3VzVGV4dCkKICAgICAgICAgcmV0dXJuIG1fcHJldmlvdXNM
ZW5ndGg7CiAgICAgcmV0dXJuIG1fdGV4dEl0ZXJhdG9yLmxlbmd0aCgpOwpAQCAtMTYxNSw3ICsx
NjE1LDcgQEAgaW50IFdvcmRBd2FyZUl0ZXJhdG9yOjpsZW5ndGgoKSBjb25zdAogY29uc3QgVUNo
YXIqIFdvcmRBd2FyZUl0ZXJhdG9yOjpjaGFyYWN0ZXJzKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
YnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsKKyAgICAg
ICAgcmV0dXJuIG1fYnVmZmVyLmNoYXJhY3RlcnMoKTsKICAgICBpZiAobV9wcmV2aW91c1RleHQp
CiAgICAgICAgIHJldHVybiBtX3ByZXZpb3VzVGV4dDsKICAgICByZXR1cm4gbV90ZXh0SXRlcmF0
b3IuY2hhcmFjdGVycygpOwpAQCAtMTg4NSwxNCArMTg4NSwxNCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgY29udGFpbnNLYW5hTGV0dGVycyhjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMg
dm9pZCBub3JtYWxpemVDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgsIFZlY3RvcjxVQ2hhcj4mIGJ1ZmZlcikKK3N0YXRpYyB2b2lkIG5vcm1hbGl6ZUNo
YXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgU3RyaW5n
QnVpbGRlciYgYnVmZmVyKQogewogICAgIEFTU0VSVChsZW5ndGgpOwogCiAgICAgYnVmZmVyLnJl
c2l6ZShsZW5ndGgpOwogCiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0g
ICAgc2l6ZV90IGJ1ZmZlclNpemUgPSB1bm9ybV9ub3JtYWxpemUoY2hhcmFjdGVycywgbGVuZ3Ro
LCBVTk9STV9ORkMsIDAsIGJ1ZmZlci5kYXRhKCksIGxlbmd0aCwgJnN0YXR1cyk7CisgICAgc2l6
ZV90IGJ1ZmZlclNpemUgPSB1bm9ybV9ub3JtYWxpemUoY2hhcmFjdGVycywgbGVuZ3RoLCBVTk9S
TV9ORkMsIDAsIGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGxlbmd0aCwgJnN0YXR1cyk7CiAgICAgQVNT
RVJUKHN0YXR1cyA9PSBVX1pFUk9fRVJST1IgfHwgc3RhdHVzID09IFVfU1RSSU5HX05PVF9URVJN
SU5BVEVEX1dBUk5JTkcgfHwgc3RhdHVzID09IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKTsKICAg
ICBBU1NFUlQoYnVmZmVyU2l6ZSk7CiAKQEAgLTE5MDIsNyArMTkwMiw3IEBAIHN0YXRpYyB2b2lk
IG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVUMKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3Rh
dHVzID0gVV9aRVJPX0VSUk9SOwotICAgIHVub3JtX25vcm1hbGl6ZShjaGFyYWN0ZXJzLCBsZW5n
dGgsIFVOT1JNX05GQywgMCwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyU2l6ZSwgJnN0YXR1cyk7Cisg
ICAgdW5vcm1fbm9ybWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCwgVU5PUk1fTkZDLCAwLCBidWZm
ZXIuY2hhcmFjdGVycygpLCBidWZmZXJTaXplLCAmc3RhdHVzKTsKICAgICBBU1NFUlQoc3RhdHVz
ID09IFVfU1RSSU5HX05PVF9URVJNSU5BVEVEX1dBUk5JTkcpOwogfQogCkBAIC0xOTU2LDcgKzE5
NTYsNyBAQCBpbmxpbmUgU2VhcmNoQnVmZmVyOjpTZWFyY2hCdWZmZXIoY29uc3QgCiAgICAgZm9s
ZFF1b3RlTWFya3NBbmRTb2Z0SHlwaGVucyhtX3RhcmdldCk7CiAKICAgICBzaXplX3QgdGFyZ2V0
TGVuZ3RoID0gbV90YXJnZXQubGVuZ3RoKCk7Ci0gICAgbV9idWZmZXIucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShtYXgodGFyZ2V0TGVuZ3RoICogOCwgbWluaW11bVNlYXJjaEJ1ZmZlclNpemUpKTsK
KyAgICBtX2J1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobWF4KHRhcmdldExlbmd0aCAqIDgsIG1pbmlt
dW1TZWFyY2hCdWZmZXJTaXplKSk7CiAgICAgbV9vdmVybGFwID0gbV9idWZmZXIuY2FwYWNpdHko
KSAvIDQ7CiAKICAgICBpZiAoKG1fb3B0aW9ucyAmIEF0V29yZFN0YXJ0cykgJiYgdGFyZ2V0TGVu
Z3RoKSB7CkBAIC0yMDExLDE3ICsyMDExLDE3IEBAIGlubGluZSBzaXplX3QgU2VhcmNoQnVmZmVy
OjphcHBlbmQoY29uc3QKICAgICAgICAgbV9idWZmZXIuc2hyaW5rKDApOwogICAgICAgICBtX3By
ZWZpeExlbmd0aCA9IDA7CiAgICAgICAgIG1fYXRCcmVhayA9IGZhbHNlOwotICAgIH0gZWxzZSBp
ZiAobV9idWZmZXIuc2l6ZSgpID09IG1fYnVmZmVyLmNhcGFjaXR5KCkpIHsKLSAgICAgICAgbWVt
Y3B5KG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuZGF0YSgpICsgbV9idWZmZXIuc2l6ZSgpIC0g
bV9vdmVybGFwLCBtX292ZXJsYXAgKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgbV9wcmVmaXhM
ZW5ndGggLT0gbWluKG1fcHJlZml4TGVuZ3RoLCBtX2J1ZmZlci5zaXplKCkgLSBtX292ZXJsYXAp
OworICAgIH0gZWxzZSBpZiAobV9idWZmZXIubGVuZ3RoKCkgPT0gbV9idWZmZXIuY2FwYWNpdHko
KSkgeworICAgICAgICBtZW1jcHkobV9idWZmZXIuY2hhcmFjdGVycygpLCBtX2J1ZmZlci5jaGFy
YWN0ZXJzKCkgKyBtX2J1ZmZlci5sZW5ndGgoKSAtIG1fb3ZlcmxhcCwgbV9vdmVybGFwICogc2l6
ZW9mKFVDaGFyKSk7CisgICAgICAgIG1fcHJlZml4TGVuZ3RoIC09IG1pbihtX3ByZWZpeExlbmd0
aCwgbV9idWZmZXIubGVuZ3RoKCkgLSBtX292ZXJsYXApOwogICAgICAgICBtX2J1ZmZlci5zaHJp
bmsobV9vdmVybGFwKTsKICAgICB9CiAKLSAgICBzaXplX3Qgb2xkTGVuZ3RoID0gbV9idWZmZXIu
c2l6ZSgpOworICAgIHNpemVfdCBvbGRMZW5ndGggPSBtX2J1ZmZlci5sZW5ndGgoKTsKICAgICBz
aXplX3QgdXNhYmxlTGVuZ3RoID0gbWluKG1fYnVmZmVyLmNhcGFjaXR5KCkgLSBvbGRMZW5ndGgs
IGxlbmd0aCk7CiAgICAgQVNTRVJUKHVzYWJsZUxlbmd0aCk7CiAgICAgbV9idWZmZXIuYXBwZW5k
KGNoYXJhY3RlcnMsIHVzYWJsZUxlbmd0aCk7Ci0gICAgZm9sZFF1b3RlTWFya3NBbmRTb2Z0SHlw
aGVucyhtX2J1ZmZlci5kYXRhKCkgKyBvbGRMZW5ndGgsIHVzYWJsZUxlbmd0aCk7CisgICAgZm9s
ZFF1b3RlTWFya3NBbmRTb2Z0SHlwaGVucyhtX2J1ZmZlci5jaGFyYWN0ZXJzKCkgKyBvbGRMZW5n
dGgsIHVzYWJsZUxlbmd0aCk7CiAgICAgcmV0dXJuIHVzYWJsZUxlbmd0aDsKIH0KIApAQCAtMjAz
Myw3ICsyMDMzLDcgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjpuZWVkc01vcmVDb250ZQog
aW5saW5lIHZvaWQgU2VhcmNoQnVmZmVyOjpwcmVwZW5kQ29udGV4dChjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBBU1NFUlQobV9uZWVkc01vcmVDb250ZXh0
KTsKLSAgICBBU1NFUlQobV9wcmVmaXhMZW5ndGggPT0gbV9idWZmZXIuc2l6ZSgpKTsKKyAgICBB
U1NFUlQobV9wcmVmaXhMZW5ndGggPT0gbV9idWZmZXIubGVuZ3RoKCkpOwogCiAgICAgaWYgKCFs
ZW5ndGgpCiAgICAgICAgIHJldHVybjsKQEAgLTIwNzUsMTEgKzIwNzUsMTEgQEAgaW5saW5lIGJv
b2wgU2VhcmNoQnVmZmVyOjppc0JhZE1hdGNoKGNvbgogICAgIC8vIGNyZWF0aW5nIGEgbmV3IG9u
ZSBlYWNoIHRpbWUuCiAgICAgbm9ybWFsaXplQ2hhcmFjdGVycyhtYXRjaCwgbWF0Y2hMZW5ndGgs
IG1fbm9ybWFsaXplZE1hdGNoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBhID0gbV9ub3JtYWxpemVk
VGFyZ2V0LmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGFFbmQgPSBtX25vcm1hbGl6ZWRUYXJn
ZXQuZW5kKCk7CisgICAgY29uc3QgVUNoYXIqIGEgPSBtX25vcm1hbGl6ZWRUYXJnZXQuY2hhcmFj
dGVycygpOworICAgIGNvbnN0IFVDaGFyKiBhRW5kID0gbV9ub3JtYWxpemVkVGFyZ2V0LmNoYXJh
Y3RlcnMoKSArIG1fbm9ybWFsaXplZFRhcmdldC5sZW5ndGgoKTsKIAotICAgIGNvbnN0IFVDaGFy
KiBiID0gbV9ub3JtYWxpemVkTWF0Y2guYmVnaW4oKTsKLSAgICBjb25zdCBVQ2hhciogYkVuZCA9
IG1fbm9ybWFsaXplZE1hdGNoLmVuZCgpOworICAgIGNvbnN0IFVDaGFyKiBiID0gbV9ub3JtYWxp
emVkTWF0Y2guY2hhcmFjdGVycygpOworICAgIGNvbnN0IFVDaGFyKiBiRW5kID0gbV9ub3JtYWxp
emVkTWF0Y2guY2hhcmFjdGVycygpICsgbV9ub3JtYWxpemVkTWF0Y2gubGVuZ3RoKCk7CiAKICAg
ICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBTa2lwIHJ1bnMgb2Ygbm9uLWthbmEtbGV0dGVy
IGNoYXJhY3RlcnMuIFRoaXMgaXMgbmVjZXNzYXJ5IHNvIHdlIGNhbgpAQCAtMjEzMSwxNCArMjEz
MSwxNCBAQCBpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzV29yZFN0YXJ0TWF0CiAgICAgaWYg
KCFzdGFydCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpbnQgc2l6ZSA9IG1fYnVmZmVy
LnNpemUoKTsKKyAgICBpbnQgc2l6ZSA9IG1fYnVmZmVyLmxlbmd0aCgpOwogICAgIGludCBvZmZz
ZXQgPSBzdGFydDsKICAgICBVQ2hhcjMyIGZpcnN0Q2hhcmFjdGVyOwotICAgIFUxNl9HRVQobV9i
dWZmZXIuZGF0YSgpLCAwLCBvZmZzZXQsIHNpemUsIGZpcnN0Q2hhcmFjdGVyKTsKKyAgICBVMTZf
R0VUKG1fYnVmZmVyLmNoYXJhY3RlcnMoKSwgMCwgb2Zmc2V0LCBzaXplLCBmaXJzdENoYXJhY3Rl
cik7CiAKICAgICBpZiAobV9vcHRpb25zICYgVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQp
IHsKICAgICAgICAgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlcjsKLSAgICAgICAgVTE2X1BSRVYo
bV9idWZmZXIuZGF0YSgpLCAwLCBvZmZzZXQsIHByZXZpb3VzQ2hhcmFjdGVyKTsKKyAgICAgICAg
VTE2X1BSRVYobV9idWZmZXIuY2hhcmFjdGVycygpLCAwLCBvZmZzZXQsIHByZXZpb3VzQ2hhcmFj
dGVyKTsKIAogICAgICAgICBpZiAoaXNTZXBhcmF0b3IoZmlyc3RDaGFyYWN0ZXIpKSB7CiAgICAg
ICAgICAgICAvLyBUaGUgc3RhcnQgb2YgYSBzZXBhcmF0b3IgcnVuIGlzIGEgd29yZCBzdGFydCAo
Ii5vcmciIGluICJ3ZWJraXQub3JnIikuCkBAIC0yMTUxLDEwICsyMTUxLDEwIEBAIGlubGluZSBi
b29sIFNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXQKICAgICAgICAgICAgIC8vIFRoZSBsYXN0
IGNoYXJhY3RlciBvZiBhbiB1cHBlcmNhc2UgcnVuIGZvbGxvd2VkIGJ5IGEgbm9uLXNlcGFyYXRv
ciwgbm9uLWRpZ2l0CiAgICAgICAgICAgICAvLyBpcyBhIHdvcmQgc3RhcnQgKCJSZXF1ZXN0IiBp
biAiWE1MSFRUUFJlcXVlc3QiKS4KICAgICAgICAgICAgIG9mZnNldCA9IHN0YXJ0OwotICAgICAg
ICAgICAgVTE2X0ZXRF8xKG1fYnVmZmVyLmRhdGEoKSwgb2Zmc2V0LCBzaXplKTsKKyAgICAgICAg
ICAgIFUxNl9GV0RfMShtX2J1ZmZlci5jaGFyYWN0ZXJzKCksIG9mZnNldCwgc2l6ZSk7CiAgICAg
ICAgICAgICBVQ2hhcjMyIG5leHRDaGFyYWN0ZXIgPSAwOwogICAgICAgICAgICAgaWYgKG9mZnNl
dCA8IHNpemUpCi0gICAgICAgICAgICAgICAgVTE2X0dFVChtX2J1ZmZlci5kYXRhKCksIDAsIG9m
ZnNldCwgc2l6ZSwgbmV4dENoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgVTE2X0dFVChtX2J1
ZmZlci5jaGFyYWN0ZXJzKCksIDAsIG9mZnNldCwgc2l6ZSwgbmV4dENoYXJhY3Rlcik7CiAgICAg
ICAgICAgICBpZiAoIWlzQVNDSUlVcHBlcihuZXh0Q2hhcmFjdGVyKSAmJiAhaXNBU0NJSURpZ2l0
KG5leHRDaGFyYWN0ZXIpICYmICFpc1NlcGFyYXRvcihuZXh0Q2hhcmFjdGVyKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmIChpc0FTQ0lJRGlnaXQoZmly
c3RDaGFyYWN0ZXIpKSB7CkBAIC0yMTc1LDEzICsyMTc1LDEzIEBAIGlubGluZSBib29sIFNlYXJj
aEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXQKIAogICAgIHNpemVfdCB3b3JkQnJlYWtTZWFyY2hTdGFy
dCA9IHN0YXJ0ICsgbGVuZ3RoOwogICAgIHdoaWxlICh3b3JkQnJlYWtTZWFyY2hTdGFydCA+IHN0
YXJ0KQotICAgICAgICB3b3JkQnJlYWtTZWFyY2hTdGFydCA9IGZpbmROZXh0V29yZEZyb21JbmRl
eChtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUoKSwgd29yZEJyZWFrU2VhcmNoU3RhcnQs
IGZhbHNlIC8qIGJhY2t3YXJkcyAqLyk7CisgICAgICAgIHdvcmRCcmVha1NlYXJjaFN0YXJ0ID0g
ZmluZE5leHRXb3JkRnJvbUluZGV4KG1fYnVmZmVyLmNoYXJhY3RlcnMoKSwgbV9idWZmZXIubGVu
Z3RoKCksIHdvcmRCcmVha1NlYXJjaFN0YXJ0LCBmYWxzZSAvKiBiYWNrd2FyZHMgKi8pOwogICAg
IHJldHVybiB3b3JkQnJlYWtTZWFyY2hTdGFydCA9PSBzdGFydDsKIH0KIAogaW5saW5lIHNpemVf
dCBTZWFyY2hCdWZmZXI6OnNlYXJjaChzaXplX3QmIHN0YXJ0KQogewotICAgIHNpemVfdCBzaXpl
ID0gbV9idWZmZXIuc2l6ZSgpOworICAgIHNpemVfdCBzaXplID0gbV9idWZmZXIubGVuZ3RoKCk7
CiAgICAgaWYgKG1fYXRCcmVhaykgewogICAgICAgICBpZiAoIXNpemUpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIxOTMsNyArMjE5Myw3IEBAIGlubGluZSBzaXplX3QgU2VhcmNoQnVmZmVy
OjpzZWFyY2goc2l6ZV8KICAgICBVU3RyaW5nU2VhcmNoKiBzZWFyY2hlciA9IFdlYkNvcmU6OnNl
YXJjaGVyKCk7CiAKICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICB1
c2VhcmNoX3NldFRleHQoc2VhcmNoZXIsIG1fYnVmZmVyLmRhdGEoKSwgc2l6ZSwgJnN0YXR1cyk7
CisgICAgdXNlYXJjaF9zZXRUZXh0KHNlYXJjaGVyLCBtX2J1ZmZlci5jaGFyYWN0ZXJzKCksIHNp
emUsICZzdGF0dXMpOwogICAgIEFTU0VSVChzdGF0dXMgPT0gVV9aRVJPX0VSUk9SKTsKIAogICAg
IHVzZWFyY2hfc2V0T2Zmc2V0KHNlYXJjaGVyLCBtX3ByZWZpeExlbmd0aCwgJnN0YXR1cyk7CkBA
IC0yMjE3LDExICsyMjE3LDExIEBAIG5leHRNYXRjaDoKICAgICAgICAgICAgIC8vIEVuc3VyZSB0
aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQgY29udGV4dCBiZWZvcmUgbWF0Y2hTdGFydCB0aGUgbmV4
dCB0aW1lIGFyb3VuZCBmb3IKICAgICAgICAgICAgIC8vIGRldGVybWluaW5nIGlmIGl0IGlzIGF0
IGEgd29yZCBib3VuZGFyeS4KICAgICAgICAgICAgIGludCB3b3JkQm91bmRhcnlDb250ZXh0U3Rh
cnQgPSBtYXRjaFN0YXJ0OwotICAgICAgICAgICAgVTE2X0JBQ0tfMShtX2J1ZmZlci5kYXRhKCks
IDAsIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCk7Ci0gICAgICAgICAgICB3b3JkQm91bmRhcnlD
b250ZXh0U3RhcnQgPSBzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRleHQobV9idWZmZXIuZGF0
YSgpLCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpOworICAgICAgICAgICAgVTE2X0JBQ0tfMSht
X2J1ZmZlci5jaGFyYWN0ZXJzKCksIDAsIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCk7CisgICAg
ICAgICAgICB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBzdGFydE9mTGFzdFdvcmRCb3VuZGFy
eUNvbnRleHQobV9idWZmZXIuY2hhcmFjdGVycygpLCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQp
OwogICAgICAgICAgICAgb3ZlcmxhcCA9IG1pbihzaXplIC0gMSwgbWF4KG92ZXJsYXAsIHNpemUg
LSB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpKTsKICAgICAgICAgfQotICAgICAgICBtZW1jcHko
bV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5kYXRhKCkgKyBzaXplIC0gb3ZlcmxhcCwgb3Zlcmxh
cCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBtZW1jcHkobV9idWZmZXIuY2hhcmFjdGVycygp
LCBtX2J1ZmZlci5jaGFyYWN0ZXJzKCkgKyBzaXplIC0gb3ZlcmxhcCwgb3ZlcmxhcCAqIHNpemVv
ZihVQ2hhcikpOwogICAgICAgICBtX3ByZWZpeExlbmd0aCAtPSBtaW4obV9wcmVmaXhMZW5ndGgs
IHNpemUgLSBvdmVybGFwKTsKICAgICAgICAgbV9idWZmZXIuc2hyaW5rKG92ZXJsYXApOwogICAg
ICAgICByZXR1cm4gMDsKQEAgLTIyMzEsMTQgKzIyMzEsMTQgQEAgbmV4dE1hdGNoOgogICAgIEFT
U0VSVChtYXRjaFN0YXJ0ICsgbWF0Y2hlZExlbmd0aCA8PSBzaXplKTsKIAogICAgIC8vIElmIHRo
aXMgbWF0Y2ggaXMgImJhZCIsIG1vdmUgb24gdG8gdGhlIG5leHQgbWF0Y2guCi0gICAgaWYgKGlz
QmFkTWF0Y2gobV9idWZmZXIuZGF0YSgpICsgbWF0Y2hTdGFydCwgbWF0Y2hlZExlbmd0aCkgfHwg
KChtX29wdGlvbnMgJiBBdFdvcmRTdGFydHMpICYmICFpc1dvcmRTdGFydE1hdGNoKG1hdGNoU3Rh
cnQsIG1hdGNoZWRMZW5ndGgpKSkgeworICAgIGlmIChpc0JhZE1hdGNoKG1fYnVmZmVyLmNoYXJh
Y3RlcnMoKSArIG1hdGNoU3RhcnQsIG1hdGNoZWRMZW5ndGgpIHx8ICgobV9vcHRpb25zICYgQXRX
b3JkU3RhcnRzKSAmJiAhaXNXb3JkU3RhcnRNYXRjaChtYXRjaFN0YXJ0LCBtYXRjaGVkTGVuZ3Ro
KSkpIHsKICAgICAgICAgbWF0Y2hTdGFydCA9IHVzZWFyY2hfbmV4dChzZWFyY2hlciwgJnN0YXR1
cyk7CiAgICAgICAgIEFTU0VSVChzdGF0dXMgPT0gVV9aRVJPX0VSUk9SKTsKICAgICAgICAgZ290
byBuZXh0TWF0Y2g7CiAgICAgfQogCiAgICAgc2l6ZV90IG5ld1NpemUgPSBzaXplIC0gKG1hdGNo
U3RhcnQgKyAxKTsKLSAgICBtZW1tb3ZlKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuZGF0YSgp
ICsgbWF0Y2hTdGFydCArIDEsIG5ld1NpemUgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1tb3Zl
KG1fYnVmZmVyLmNoYXJhY3RlcnMoKSwgbV9idWZmZXIuY2hhcmFjdGVycygpICsgbWF0Y2hTdGFy
dCArIDEsIG5ld1NpemUgKiBzaXplb2YoVUNoYXIpKTsKICAgICBtX3ByZWZpeExlbmd0aCAtPSBt
aW48c2l6ZV90PihtX3ByZWZpeExlbmd0aCwgbWF0Y2hTdGFydCArIDEpOwogICAgIG1fYnVmZmVy
LnNocmluayhuZXdTaXplKTsKIApAQCAtMjUxOCwyMSArMjUxOCwyMSBAQCBVQ2hhciogcGxhaW5U
ZXh0VG9NYWxsb2NBbGxvY2F0ZWRCdWZmZXIoCiAgICAgYnVmZmVyTGVuZ3RoID0gMDsKICAgICB0
eXBlZGVmIHBhaXI8VUNoYXIqLCB1bnNpZ25lZD4gVGV4dFNlZ21lbnQ7CiAgICAgT3duUHRyPFZl
Y3RvcjxUZXh0U2VnbWVudD4gPiB0ZXh0U2VnbWVudHM7Ci0gICAgVmVjdG9yPFVDaGFyPiB0ZXh0
QnVmZmVyOwotICAgIHRleHRCdWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjTWF4U2VnbWVu
dFNpemUpOworICAgIFN0cmluZ0J1aWxkZXIgdGV4dEJ1ZmZlcjsKKyAgICB0ZXh0QnVmZmVyLnJl
c2VydmVDYXBhY2l0eShjTWF4U2VnbWVudFNpemUpOwogICAgIFRleHRJdGVyYXRvckJlaGF2aW9y
IGJlaGF2aW9yID0gZGVmYXVsdEJlaGF2aW9yOwogICAgIGlmICghaXNEaXNwbGF5U3RyaW5nKQog
ICAgICAgICBiZWhhdmlvciA9IHN0YXRpY19jYXN0PFRleHRJdGVyYXRvckJlaGF2aW9yPihiZWhh
dmlvciB8IFRleHRJdGVyYXRvckVtaXRzVGV4dHNXaXRob3V0VHJhbnNjb2RpbmcpOwogICAgIAog
ICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHIsIGJlaGF2aW9yKTsgIWl0LmF0RW5kKCk7IGl0LmFk
dmFuY2UoKSkgewotICAgICAgICBpZiAodGV4dEJ1ZmZlci5zaXplKCkgJiYgdGV4dEJ1ZmZlci5z
aXplKCkgKyBpdC5sZW5ndGgoKSA+IGNNYXhTZWdtZW50U2l6ZSkgewotICAgICAgICAgICAgVUNo
YXIqIG5ld1NlZ21lbnRCdWZmZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KG1hbGxvYyh0ZXh0QnVm
ZmVyLnNpemUoKSAqIHNpemVvZihVQ2hhcikpKTsKKyAgICAgICAgaWYgKHRleHRCdWZmZXIubGVu
Z3RoKCkgJiYgdGV4dEJ1ZmZlci5sZW5ndGgoKSArIGl0Lmxlbmd0aCgpID4gY01heFNlZ21lbnRT
aXplKSB7CisgICAgICAgICAgICBVQ2hhciogbmV3U2VnbWVudEJ1ZmZlciA9IHN0YXRpY19jYXN0
PFVDaGFyKj4obWFsbG9jKHRleHRCdWZmZXIubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKSk7CiAg
ICAgICAgICAgICBpZiAoIW5ld1NlZ21lbnRCdWZmZXIpCiAgICAgICAgICAgICAgICAgZ290byBl
eGl0OwotICAgICAgICAgICAgbWVtY3B5KG5ld1NlZ21lbnRCdWZmZXIsIHRleHRCdWZmZXIuZGF0
YSgpLCB0ZXh0QnVmZmVyLnNpemUoKSAqIHNpemVvZihVQ2hhcikpOworICAgICAgICAgICAgbWVt
Y3B5KG5ld1NlZ21lbnRCdWZmZXIsIHRleHRCdWZmZXIuY2hhcmFjdGVycygpLCB0ZXh0QnVmZmVy
Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgICAgICAgICBpZiAoIXRleHRTZWdtZW50
cykKICAgICAgICAgICAgICAgICB0ZXh0U2VnbWVudHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFRl
eHRTZWdtZW50Pik7Ci0gICAgICAgICAgICB0ZXh0U2VnbWVudHMtPmFwcGVuZChtYWtlX3BhaXIo
bmV3U2VnbWVudEJ1ZmZlciwgKHVuc2lnbmVkKXRleHRCdWZmZXIuc2l6ZSgpKSk7CisgICAgICAg
ICAgICB0ZXh0U2VnbWVudHMtPmFwcGVuZChtYWtlX3BhaXIobmV3U2VnbWVudEJ1ZmZlciwgKHVu
c2lnbmVkKXRleHRCdWZmZXIubGVuZ3RoKCkpKTsKICAgICAgICAgICAgIHRleHRCdWZmZXIuY2xl
YXIoKTsKICAgICAgICAgfQogICAgICAgICB0ZXh0QnVmZmVyLmFwcGVuZChpdC5jaGFyYWN0ZXJz
KCksIGl0Lmxlbmd0aCgpKTsKQEAgLTI1NTcsNyArMjU1Nyw3IEBAIFVDaGFyKiBwbGFpblRleHRU
b01hbGxvY0FsbG9jYXRlZEJ1ZmZlcigKICAgICAgICAgICAgICAgICByZXN1bHRQb3MgKz0gc2Vn
bWVudC5zZWNvbmQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHJl
c3VsdFBvcywgdGV4dEJ1ZmZlci5kYXRhKCksIHRleHRCdWZmZXIuc2l6ZSgpICogc2l6ZW9mKFVD
aGFyKSk7CisgICAgICAgIG1lbWNweShyZXN1bHRQb3MsIHRleHRCdWZmZXIuY2hhcmFjdGVycygp
LCB0ZXh0QnVmZmVyLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgfQogCiBleGl0OgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCShyZXZpc2lvbiA5MzcwMykK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJGaW5kT3B0aW9ucy5oIgogI2luY2x1ZGUgIlJh
bmdlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zMTYsNyArMzE3LDcgQEAg
cHJpdmF0ZToKICAgICBpbnQgbV9wcmV2aW91c0xlbmd0aDsKIAogICAgIC8vIG1hbnkgY2h1bmtz
IGZyb20gdGV4dEl0ZXJhdG9yIGNvbmNhdGVuYXRlZAotICAgIFZlY3RvcjxVQ2hhcj4gbV9idWZm
ZXI7CisgICAgU3RyaW5nQnVpbGRlciBtX2J1ZmZlcjsKICAgICAKICAgICAvLyBEaWQgd2UgaGF2
ZSB0byBsb29rIGFoZWFkIGluIHRoZSB0ZXh0SXRlcmF0b3IgdG8gY29uZmlybSB0aGUgY3VycmVu
dCBjaHVuaz8KICAgICBib29sIG1fZGlkTG9va0FoZWFkOwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCwxNyArMzM4LDE3
IEBAIGludCBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhjb25zdCBOb2RlKiBub2QKIAogU3RyaW5nIHN0
cmluZ1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZShjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBz
dGFydElzU3RhcnRPZlBhcmFncmFwaCwgYm9vbCBlbmRJc0VuZE9mUGFyYWdyYXBoKQogewotICAg
IFZlY3RvcjxVQ2hhcj4gcmViYWxhbmNlZFN0cmluZzsKLSAgICBhcHBlbmQocmViYWxhbmNlZFN0
cmluZywgc3RyaW5nKTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlYmFsYW5jZWRTdHJpbmc7CisgICAg
cmViYWxhbmNlZFN0cmluZy5hcHBlbmQoc3RyaW5nKTsKIAogICAgIGJvb2wgcHJldmlvdXNDaGFy
YWN0ZXJXYXNTcGFjZSA9IGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmViYWxh
bmNlZFN0cmluZy5zaXplKCk7IGkrKykgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVi
YWxhbmNlZFN0cmluZy5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgIGlmICghaXNXaGl0ZXNwYWNl
KHJlYmFsYW5jZWRTdHJpbmdbaV0pKSB7CiAgICAgICAgICAgICBwcmV2aW91c0NoYXJhY3Rlcldh
c1NwYWNlID0gZmFsc2U7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChwcmV2aW91c0NoYXJhY3Rlcldhc1NwYWNlIHx8ICghaSAmJiBzdGFydElzU3RhcnRP
ZlBhcmFncmFwaCkgfHwgKGkgKyAxID09IHJlYmFsYW5jZWRTdHJpbmcuc2l6ZSgpICYmIGVuZElz
RW5kT2ZQYXJhZ3JhcGgpKSB7CisgICAgICAgIGlmIChwcmV2aW91c0NoYXJhY3Rlcldhc1NwYWNl
IHx8ICghaSAmJiBzdGFydElzU3RhcnRPZlBhcmFncmFwaCkgfHwgKGkgKyAxID09IHJlYmFsYW5j
ZWRTdHJpbmcubGVuZ3RoKCkgJiYgZW5kSXNFbmRPZlBhcmFncmFwaCkpIHsKICAgICAgICAgICAg
IHJlYmFsYW5jZWRTdHJpbmdbaV0gPSBub0JyZWFrU3BhY2U7CiAgICAgICAgICAgICBwcmV2aW91
c0NoYXJhY3Rlcldhc1NwYWNlID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0zNTgsNyAr
MzU4LDcgQEAgU3RyaW5nIHN0cmluZ1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZShjbwogICAgICAg
ICAgICAgCiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmViYWxhbmNlZFN0cmlu
Zyk7CisgICAgcmV0dXJuIHJlYmFsYW5jZWRTdHJpbmcudG9TdHJpbmcoKTsKIH0KIAogYm9vbCBp
c1RhYmxlU3RydWN0dXJlTm9kZShjb25zdCBOb2RlICpub2RlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFya3VwLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCwxMyArMTI4LDEzIEBAIHB1YmxpYzoK
ICAgICBTdHJpbmcgdGFrZVJlc3VsdHMoKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGFwcGVuZFN0
eWxlTm9kZU9wZW5UYWcoVmVjdG9yPFVDaGFyPiYsIENTU1N0eWxlRGVjbGFyYXRpb24qLCBEb2N1
bWVudCosIGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKKyAgICB2b2lkIGFwcGVuZFN0eWxlTm9kZU9w
ZW5UYWcoU3RyaW5nQnVpbGRlciYsIENTU1N0eWxlRGVjbGFyYXRpb24qLCBEb2N1bWVudCosIGJv
b2wgaXNCbG9jayA9IGZhbHNlKTsKICAgICBjb25zdCBTdHJpbmcgc3R5bGVOb2RlQ2xvc2VUYWco
Ym9vbCBpc0Jsb2NrID0gZmFsc2UpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFZlY3Rv
cjxVQ2hhcj4mIG91dCwgVGV4dCopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFN0cmlu
Z0J1aWxkZXImIG91dCwgVGV4dCopOwogICAgIFN0cmluZyByZW5kZXJlZFRleHQoY29uc3QgTm9k
ZSosIGNvbnN0IFJhbmdlKik7CiAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlRm9yUmFuZ2UoY29uc3Qg
Tm9kZSosIGNvbnN0IFJhbmdlKik7Ci0gICAgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hh
cj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1
bGx5U2VsZWN0c05vZGUpOwotICAgIHZvaWQgYXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBv
dXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqKSB7IGFwcGVuZEVsZW1lbnQob3V0LCBl
bGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7IH0KKyAgICB2b2lkIGFwcGVuZEVs
ZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgYm9vbCBhZGREaXNwbGF5SW5saW5l
LCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUpOworICAgIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdC
dWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqKSB7IGFwcGVuZEVsZW1l
bnQob3V0LCBlbGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7IH0KIAogICAgIGVu
dW0gTm9kZVRyYXZlcnNhbE1vZGUgeyBFbWl0U3RyaW5nLCBEb05vdEVtaXRTdHJpbmcgfTsKICAg
ICBOb2RlKiB0cmF2ZXJzZU5vZGVzRm9yU2VyaWFsaXphdGlvbihOb2RlKiBzdGFydE5vZGUsIE5v
ZGUqIHBhc3RFbmQsIE5vZGVUcmF2ZXJzYWxNb2RlKTsKQEAgLTE2MiwxMiArMTYyLDEyIEBAIGlu
bGluZSBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6U3R5bGVkTWEKIAogdm9pZCBTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhOb2RlKE5vZGUqIG5vZGUsIGJvb2wgY29udmVydEJsb2Nr
c1RvSW5saW5lcywgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkK
IHsKLSAgICBWZWN0b3I8VUNoYXI+IG1hcmt1cDsKKyAgICBTdHJpbmdCdWlsZGVyIG1hcmt1cDsK
ICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICBhcHBlbmRFbGVtZW50KG1h
cmt1cCwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVz
ICYmIGlzQmxvY2soY29uc3RfY2FzdDxOb2RlKj4obm9kZSkpLCByYW5nZUZ1bGx5U2VsZWN0c05v
ZGUpOwogICAgIGVsc2UKICAgICAgICAgYXBwZW5kU3RhcnRNYXJrdXAobWFya3VwLCBub2RlLCAw
KTsKLSAgICBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwLmFwcGVuZChTdHJpbmc6OmFkb3B0KG1h
cmt1cCkpOworICAgIG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuYXBwZW5kKG1hcmt1cC50b1N0
cmluZygpKTsKICAgICBhcHBlbmRFbmRUYWcobm9kZSk7CiAgICAgaWYgKG1fbm9kZXMpCiAgICAg
ICAgIG1fbm9kZXMtPmFwcGVuZChub2RlKTsKQEAgLTE3NSwyMCArMTc1LDIwIEBAIHZvaWQgU3R5
bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm8KIAogdm9pZCBTdHlsZWRNYXJrdXBBY2N1
bXVsYXRvcjo6d3JhcFdpdGhTdHlsZU5vZGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIERv
Y3VtZW50KiBkb2N1bWVudCwgYm9vbCBpc0Jsb2NrKQogewotICAgIFZlY3RvcjxVQ2hhcj4gb3Bl
blRhZzsKKyAgICBTdHJpbmdCdWlsZGVyIG9wZW5UYWc7CiAgICAgYXBwZW5kU3R5bGVOb2RlT3Bl
blRhZyhvcGVuVGFnLCBzdHlsZSwgZG9jdW1lbnQsIGlzQmxvY2spOwotICAgIG1fcmV2ZXJzZWRQ
cmVjZWRpbmdNYXJrdXAuYXBwZW5kKFN0cmluZzo6YWRvcHQob3BlblRhZykpOworICAgIG1fcmV2
ZXJzZWRQcmVjZWRpbmdNYXJrdXAuYXBwZW5kKG9wZW5UYWcudG9TdHJpbmcoKSk7CiAgICAgYXBw
ZW5kU3RyaW5nKHN0eWxlTm9kZUNsb3NlVGFnKGlzQmxvY2spKTsKIH0KIAotdm9pZCBTdHlsZWRN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3R5bGVOb2RlT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBv
dXQsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wg
aXNCbG9jaykKK3ZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9w
ZW5UYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRG9j
dW1lbnQqIGRvY3VtZW50LCBib29sIGlzQmxvY2spCiB7CiAgICAgLy8gQWxsIHRleHQtZGVjb3Jh
dGlvbi1yZWxhdGVkIGVsZW1lbnRzIHNob3VsZCBoYXZlIGJlZW4gdHJlYXRlZCBhcyBzcGVjaWFs
IGFuY2VzdG9ycwogICAgIC8vIElmIHdlIGV2ZXIgaGl0IHRoaXMgQVNTRVJULCB3ZSBzaG91bGQg
ZXhwb3J0IFN0eWxlQ2hhbmdlIGluIEFwcGx5U3R5bGVDb21tYW5kIGFuZCB1c2UgaXQgaGVyZQog
ICAgIEFTU0VSVChwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0
eVRleHREZWNvcmF0aW9uKSAmJiBwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBD
U1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KSk7CiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGRpdlN0eWxlLCAoIjxkaXYgc3R5bGU9XCIiKSk7CiAg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHN0eWxlU3Bhbk9wZW4sICgiPHNw
YW4gc3R5bGU9XCIiKSk7Ci0gICAgYXBwZW5kKG91dCwgaXNCbG9jayA/IGRpdlN0eWxlIDogc3R5
bGVTcGFuT3Blbik7CisgICAgb3V0LmFwcGVuZChpc0Jsb2NrID8gZGl2U3R5bGUgOiBzdHlsZVNw
YW5PcGVuKTsKICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIHN0eWxlLT5jc3NUZXh0KCks
IGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKTsKICAgICBvdXQuYXBwZW5kKCdcIicpOwogICAg
IG91dC5hcHBlbmQoJz4nKTsKQEAgLTIwMywxOSArMjAzLDE5IEBAIGNvbnN0IFN0cmluZyBTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcjo6c3QKIAogU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9y
Ojp0YWtlUmVzdWx0cygpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgcmVzdWx0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodG90YWxMZW5ndGgobV9yZXZlcnNlZFByZWNlZGluZ01h
cmt1cCkgKyBsZW5ndGgoKSk7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0
LnJlc2VydmVDYXBhY2l0eSh0b3RhbExlbmd0aChtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwKSAr
IGxlbmd0aCgpKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX3JldmVyc2VkUHJlY2VkaW5nTWFy
a3VwLnNpemUoKTsgaSA+IDA7IC0taSkKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgbV9yZXZlcnNl
ZFByZWNlZGluZ01hcmt1cFtpIC0gMV0pOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fcmV2ZXJz
ZWRQcmVjZWRpbmdNYXJrdXBbaSAtIDFdKTsKIAogICAgIGNvbmNhdGVuYXRlTWFya3VwKHJlc3Vs
dCk7CiAKICAgICAvLyBXZSByZW1vdmUgJ1wwJyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUg
bm90IHZpc2libHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIuCi0gICAgcmV0dXJuIFN0cmluZzo6YWRv
cHQocmVzdWx0KS5yZXBsYWNlKDAsICIiKTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCku
cmVwbGFjZSgwLCAiIik7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0KiB0ZXh0KQordm9pZCBTdHlsZWRNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqIHRleHQpCiB7
ICAgIAogICAgIGNvbnN0IGJvb2wgcGFyZW50SXNUZXh0YXJlYSA9IHRleHQtPnBhcmVudEVsZW1l
bnQoKSAmJiB0ZXh0LT5wYXJlbnRFbGVtZW50KCktPnRhZ1FOYW1lKCkgPT0gdGV4dGFyZWFUYWc7
CiAgICAgY29uc3QgYm9vbCB3cmFwcGluZ1NwYW4gPSBzaG91bGRBcHBseVdyYXBwaW5nU3R5bGUo
dGV4dCkgJiYgIXBhcmVudElzVGV4dGFyZWE7CkBAIC0yMjcsOSArMjI3LDkgQEAgdm9pZCBTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dAogICAgICAgICAvLyBGSVhNRTogU2hvdWxk
IHRoaXMgYmUgaW5jbHVkZWQgaW4gZm9yY2VJbmxpbmU/CiAgICAgICAgIHdyYXBwaW5nU3R5bGUt
PnN0eWxlKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RmxvYXQsIENTU1ZhbHVlTm9uZSk7CiAK
LSAgICAgICAgVmVjdG9yPFVDaGFyPiBvcGVuVGFnOworICAgICAgICBTdHJpbmdCdWlsZGVyIG9w
ZW5UYWc7CiAgICAgICAgIGFwcGVuZFN0eWxlTm9kZU9wZW5UYWcob3BlblRhZywgd3JhcHBpbmdT
dHlsZS0+c3R5bGUoKSwgdGV4dC0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIGFwcGVuZChvdXQsIFN0
cmluZzo6YWRvcHQob3BlblRhZykpOworICAgICAgICBvdXQuYXBwZW5kKG9wZW5UYWcpOwogICAg
IH0KIAogICAgIGlmICghc2hvdWxkQW5ub3RhdGUoKSB8fCBwYXJlbnRJc1RleHRhcmVhKQpAQCAt
MjM3LDEzICsyMzcsMTMgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4
dAogICAgIGVsc2UgewogICAgICAgICBjb25zdCBib29sIHVzZVJlbmRlcmVkVGV4dCA9ICFlbmNs
b3NpbmdOb2RlV2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKHRleHQpLCBzZWxlY3RUYWcpOwog
ICAgICAgICBTdHJpbmcgY29udGVudCA9IHVzZVJlbmRlcmVkVGV4dCA/IHJlbmRlcmVkVGV4dCh0
ZXh0LCBtX3JhbmdlKSA6IHN0cmluZ1ZhbHVlRm9yUmFuZ2UodGV4dCwgbV9yYW5nZSk7Ci0gICAg
ICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyOworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1ZmZlcjsK
ICAgICAgICAgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKGJ1ZmZlciwgY29udGVu
dC5jaGFyYWN0ZXJzKCksIGNvbnRlbnQubGVuZ3RoKCksIEVudGl0eU1hc2tJblBDREFUQSk7Ci0g
ICAgICAgIGFwcGVuZChvdXQsIGNvbnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYXQoU3Ry
aW5nOjphZG9wdChidWZmZXIpLCB0ZXh0KSk7CisgICAgICAgIG91dC5hcHBlbmQoY29udmVydEhU
TUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hdChidWZmZXIudG9TdHJpbmcoKSwgdGV4dCkpOwogICAg
IH0KIAogICAgIGlmICh3cmFwcGluZ1NwYW4pCi0gICAgICAgIGFwcGVuZChvdXQsIHN0eWxlTm9k
ZUNsb3NlVGFnKCkpOworICAgICAgICBvdXQuYXBwZW5kKHN0eWxlTm9kZUNsb3NlVGFnKCkpOwog
fQogICAgIAogU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpyZW5kZXJlZFRleHQoY29u
c3QgTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdlKQpAQCAtMjgwLDcgKzI4MCw3IEBAIFN0
cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6c3RyaW5nVmEKICAgICByZXR1cm4gc3RyOwog
fQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZlY3RvcjxV
Q2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5n
ZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQordm9pZCBTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQq
IGVsZW1lbnQsIGJvb2wgYWRkRGlzcGxheUlubGluZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJh
bmdlRnVsbHlTZWxlY3RzTm9kZSkKIHsKICAgICBjb25zdCBib29sIGRvY3VtZW50SXNIVE1MID0g
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsKICAgICBhcHBlbmRPcGVuVGFn
KG91dCwgZWxlbWVudCwgMCk7CkBAIC0zMjUsNyArMzI1LDcgQEAgdm9pZCBTdHlsZWRNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kRWxlbQogCiAgICAgICAgIGlmICghbmV3SW5saW5lU3R5bGUtPmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcs
IHN0eWxlUHJlZml4LCAoIiBzdHlsZT1cIiIpKTsKLSAgICAgICAgICAgIGFwcGVuZChvdXQsIHN0
eWxlUHJlZml4KTsKKyAgICAgICAgICAgIG91dC5hcHBlbmQoc3R5bGVQcmVmaXgpOwogICAgICAg
ICAgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+
Y3NzVGV4dCgpLCBkb2N1bWVudElzSFRNTCk7CiAgICAgICAgICAgICBvdXQuYXBwZW5kKCdcIicp
OwogICAgICAgICB9CkBAIC05MTUsMTMgKzkxNSwxMyBAQCBTdHJpbmcgY3JlYXRlRnVsbE1hcmt1
cChjb25zdCBSYW5nZSogcmFuCiAKIFN0cmluZyB1cmxUb01hcmt1cChjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7Ci0gICAg
YXBwZW5kKG1hcmt1cCwgIjxhIGhyZWY9XCIiKTsKLSAgICBhcHBlbmQobWFya3VwLCB1cmwuc3Ry
aW5nKCkpOwotICAgIGFwcGVuZChtYXJrdXAsICJcIj4iKTsKKyAgICBTdHJpbmdCdWlsZGVyIG1h
cmt1cDsKKyAgICBtYXJrdXAuYXBwZW5kKCI8YSBocmVmPVwiIik7CisgICAgbWFya3VwLmFwcGVu
ZCh1cmwuc3RyaW5nKCkpOworICAgIG1hcmt1cC5hcHBlbmQoIlwiPiIpOwogICAgIGFwcGVuZENo
YXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhtYXJrdXAsIHRpdGxlLmNoYXJhY3RlcnMoKSwgdGl0
bGUubGVuZ3RoKCksIEVudGl0eU1hc2tJblBDREFUQSk7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIjwv
YT4iKTsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChtYXJrdXApOworICAgIG1hcmt1cC5hcHBl
bmQoIjwvYT4iKTsKKyAgICByZXR1cm4gbWFya3VwLnRvU3RyaW5nKCk7CiB9CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gOTM3MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7CiAKIGVu
dW0gQm91bmRhcnlTZWFyY2hDb250ZXh0QXZhaWxhYmlsaXR5IHsgRG9udEhhdmVNb3JlQ29udGV4
dCwgTWF5SGF2ZU1vcmVDb250ZXh0IH07CiAKLXR5cGVkZWYgdW5zaWduZWQgKCpCb3VuZGFyeVNl
YXJjaEZ1bmN0aW9uKShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgb2Zm
c2V0LCBCb3VuZGFyeVNlYXJjaENvbnRleHRBdmFpbGFiaWxpdHksIGJvb2wmIG5lZWRNb3JlQ29u
dGV4dCk7Cit0eXBlZGVmIHVuc2lnbmVkICgqQm91bmRhcnlTZWFyY2hGdW5jdGlvbikoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBvZmZzZXQsIEJvdW5kYXJ5U2VhcmNoQ29u
dGV4dEF2YWlsYWJpbGl0eSwgYm9vbCYgbmVlZE1vcmVDb250ZXh0KTsKIAogc3RhdGljIFZpc2li
bGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91
bmRhcnlTZWFyY2hGdW5jdGlvbiBzZWFyY2hGdW5jdGlvbikKIHsKQEAgLTY1LDcgKzY1LDggQEAg
c3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KAogICAgIFBvc2l0aW9uIGVu
ZCA9IHBvcy5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHNl
YXJjaFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkKTsKICAgICAKLSAgICBWZWN0b3I8VUNoYXIsIDEw
MjQ+IHN0cmluZzsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZzsKKyAgICBzdHJpbmcucmVzZXJ2
ZUNhcGFjaXR5KDEwMjQpOwogICAgIHVuc2lnbmVkIHN1ZmZpeExlbmd0aCA9IDA7CiAKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTEwNyw3ICsxMDgsNyBAQCBzdGF0aWMgVmlzaWJsZVBv
c2l0aW9uIHByZXZpb3VzQm91bmRhcnkoCiAgICAgICAgICAgICBpdGVyYXRvclN0cmluZy5maWxs
KCd4Jyk7CiAgICAgICAgICAgICBzdHJpbmcucHJlcGVuZChpdGVyYXRvclN0cmluZy5jaGFyYWN0
ZXJzKCksIGl0ZXJhdG9yU3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgfQotICAgICAgICBuZXh0
ID0gc2VhcmNoRnVuY3Rpb24oc3RyaW5nLmRhdGEoKSwgc3RyaW5nLnNpemUoKSwgc3RyaW5nLnNp
emUoKSAtIHN1ZmZpeExlbmd0aCwgTWF5SGF2ZU1vcmVDb250ZXh0LCBuZWVkTW9yZUNvbnRleHQp
OworICAgICAgICBuZXh0ID0gc2VhcmNoRnVuY3Rpb24oc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3Ry
aW5nLmxlbmd0aCgpLCBzdHJpbmcubGVuZ3RoKCkgLSBzdWZmaXhMZW5ndGgsIE1heUhhdmVNb3Jl
Q29udGV4dCwgbmVlZE1vcmVDb250ZXh0KTsKICAgICAgICAgaWYgKG5leHQgIT0gMCkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBpdC5hZHZhbmNlKCk7CkBAIC0xMTUsNyArMTE2LDcgQEAg
c3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KAogICAgIGlmIChuZWVkTW9y
ZUNvbnRleHQpIHsKICAgICAgICAgLy8gVGhlIGxhc3Qgc2VhcmNoIHJldHVybmVkIHRoZSBiZWdp
bm5pbmcgb2YgdGhlIGJ1ZmZlciBhbmQgYXNrZWQgZm9yIG1vcmUgY29udGV4dCwKICAgICAgICAg
Ly8gYnV0IHRoZXJlIGlzIG5vIGVhcmxpZXIgdGV4dC4gRm9yY2UgYSBzZWFyY2ggd2l0aCB3aGF0
J3MgYXZhaWxhYmxlLgotICAgICAgICBuZXh0ID0gc2VhcmNoRnVuY3Rpb24oc3RyaW5nLmRhdGEo
KSwgc3RyaW5nLnNpemUoKSwgc3RyaW5nLnNpemUoKSAtIHN1ZmZpeExlbmd0aCwgRG9udEhhdmVN
b3JlQ29udGV4dCwgbmVlZE1vcmVDb250ZXh0KTsKKyAgICAgICAgbmV4dCA9IHNlYXJjaEZ1bmN0
aW9uKHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSwgc3RyaW5nLmxlbmd0aCgp
IC0gc3VmZml4TGVuZ3RoLCBEb250SGF2ZU1vcmVDb250ZXh0LCBuZWVkTW9yZUNvbnRleHQpOwog
ICAgICAgICBBU1NFUlQoIW5lZWRNb3JlQ29udGV4dCk7CiAgICAgfQogCkBAIC0xMjksNyArMTMw
LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KAogCiAgICAgLy8g
VXNlIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBuZXh0IHZhbHVlIGlu
dG8gYSBET00gcG9zaXRpb24uCiAgICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0
KHNlYXJjaFJhbmdlLmdldCgpKTsKLSAgICBjaGFySXQuYWR2YW5jZShzdHJpbmcuc2l6ZSgpIC0g
c3VmZml4TGVuZ3RoIC0gbmV4dCk7CisgICAgY2hhckl0LmFkdmFuY2Uoc3RyaW5nLmxlbmd0aCgp
IC0gc3VmZml4TGVuZ3RoIC0gbmV4dCk7CiAgICAgLy8gRklYTUU6IGNoYXJJdCBjYW4gZ2V0IG91
dCBvZiBzaGFkb3cgaG9zdC4KICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNoYXJJdC5yYW5n
ZSgpLT5lbmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKIH0KQEAgLTE0NSw3ICsxNDYsOCBAQCBz
dGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShjb25zCiAgICAgUmVmUHRyPFJhbmdl
PiBzZWFyY2hSYW5nZShkLT5jcmVhdGVSYW5nZSgpKTsKICAgICBQb3NpdGlvbiBzdGFydChwb3Mu
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogCi0gICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBz
dHJpbmc7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmc7CisgICAgc3RyaW5nLnJlc2VydmVDYXBh
Y2l0eSgxMDI0KTsKICAgICB1bnNpZ25lZCBwcmVmaXhMZW5ndGggPSAwOwogCiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CkBAIC0xODAsMjEgKzE4MiwyMSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIG5leHRCb3VuZGFyeShjb25zCiAgICAgICAgICAgICAvLyBUcmVhdCBidWxsZXRzIHVzZWQg
aW4gdGhlIHRleHQgc2VjdXJpdHkgbW9kZSBhcyByZWd1bGFyIGNoYXJhY3RlcnMgd2hlbiBsb29r
aW5nIGZvciBib3VuZGFyaWVzCiAgICAgICAgICAgICBTdHJpbmcgaXRlcmF0b3JTdHJpbmcoaXQu
Y2hhcmFjdGVycygpLCBpdC5sZW5ndGgoKSk7CiAgICAgICAgICAgICBpdGVyYXRvclN0cmluZy5m
aWxsKCd4Jyk7Ci0gICAgICAgICAgICBzdHJpbmcuYXBwZW5kKGl0ZXJhdG9yU3RyaW5nLmNoYXJh
Y3RlcnMoKSwgaXRlcmF0b3JTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICAgICAgc3RyaW5nLmFw
cGVuZChpdGVyYXRvclN0cmluZyk7CiAgICAgICAgIH0KLSAgICAgICAgbmV4dCA9IHNlYXJjaEZ1
bmN0aW9uKHN0cmluZy5kYXRhKCksIHN0cmluZy5zaXplKCksIHByZWZpeExlbmd0aCwgTWF5SGF2
ZU1vcmVDb250ZXh0LCBuZWVkTW9yZUNvbnRleHQpOwotICAgICAgICBpZiAobmV4dCAhPSBzdHJp
bmcuc2l6ZSgpKQorICAgICAgICBuZXh0ID0gc2VhcmNoRnVuY3Rpb24oc3RyaW5nLmNoYXJhY3Rl
cnMoKSwgc3RyaW5nLmxlbmd0aCgpLCBwcmVmaXhMZW5ndGgsIE1heUhhdmVNb3JlQ29udGV4dCwg
bmVlZE1vcmVDb250ZXh0KTsKKyAgICAgICAgaWYgKG5leHQgIT0gc3RyaW5nLmxlbmd0aCgpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGl0LmFkdmFuY2UoKTsKICAgICB9CiAgICAgaWYg
KG5lZWRNb3JlQ29udGV4dCkgewogICAgICAgICAvLyBUaGUgbGFzdCBzZWFyY2ggcmV0dXJuZWQg
dGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFuZCBhc2tlZCBmb3IgbW9yZSBjb250ZXh0LAogICAgICAg
ICAvLyBidXQgdGhlcmUgaXMgbm8gZnVydGhlciB0ZXh0LiBGb3JjZSBhIHNlYXJjaCB3aXRoIHdo
YXQncyBhdmFpbGFibGUuCi0gICAgICAgIG5leHQgPSBzZWFyY2hGdW5jdGlvbihzdHJpbmcuZGF0
YSgpLCBzdHJpbmcuc2l6ZSgpLCBwcmVmaXhMZW5ndGgsIERvbnRIYXZlTW9yZUNvbnRleHQsIG5l
ZWRNb3JlQ29udGV4dCk7CisgICAgICAgIG5leHQgPSBzZWFyY2hGdW5jdGlvbihzdHJpbmcuY2hh
cmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCksIHByZWZpeExlbmd0aCwgRG9udEhhdmVNb3JlQ29u
dGV4dCwgbmVlZE1vcmVDb250ZXh0KTsKICAgICAgICAgQVNTRVJUKCFuZWVkTW9yZUNvbnRleHQp
OwogICAgIH0KICAgICAKLSAgICBpZiAoaXQuYXRFbmQoKSAmJiBuZXh0ID09IHN0cmluZy5zaXpl
KCkpIHsKKyAgICBpZiAoaXQuYXRFbmQoKSAmJiBuZXh0ID09IHN0cmluZy5sZW5ndGgoKSkgewog
ICAgICAgICBwb3MgPSBpdC5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCk7CiAgICAgfSBlbHNlIGlm
IChuZXh0ICE9IHByZWZpeExlbmd0aCkgewogICAgICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBp
dGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5MaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRva2VuTGlzdC5jcHAJKHJldmlzaW9uIDkzNzAzKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw3ICs2Niw3IEBAIFN0cmluZyBET01Ub2tlbkxpc3Q6OnJlbW92ZVRva2VuKGNvbnN0IEEK
ICAgICAvLyBBbGdvcml0aG0gZGVmaW5lZCBhdCBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mv
d2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tb24tbWljcm9zeW50YXhlcy5odG1s
I3JlbW92ZS1hLXRva2VuLWZyb20tYS1zdHJpbmcKIAogICAgIHVuc2lnbmVkIGlucHV0TGVuZ3Ro
ID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgVmVjdG9yPFVDaGFyPiBvdXRwdXQ7IC8vIDMKKyAgICBT
dHJpbmdCdWlsZGVyIG91dHB1dDsKICAgICBvdXRwdXQucmVzZXJ2ZUNhcGFjaXR5KGlucHV0TGVu
Z3RoKTsKICAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7IC8vIDQKIApAQCAtNzgsNyArNzgsNyBA
QCBTdHJpbmcgRE9NVG9rZW5MaXN0OjpyZW1vdmVUb2tlbihjb25zdCBBCiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBTdGVwIDcKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBzOworICAgICAgICBTdHJp
bmdCdWlsZGVyIHM7CiAgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0TGVuZ3RoICYmIGlz
Tm90SFRNTFNwYWNlKGlucHV0W3Bvc2l0aW9uXSkpCiAgICAgICAgICAgICBzLmFwcGVuZChpbnB1
dFtwb3NpdGlvbisrXSk7CiAKQEAgLTg5LDcgKzg5LDcgQEAgU3RyaW5nIERPTVRva2VuTGlzdDo6
cmVtb3ZlVG9rZW4oY29uc3QgQQogICAgICAgICAgICAgICAgICsrcG9zaXRpb247CiAKICAgICAg
ICAgICAgIC8vIFN0ZXAgOC4yCi0gICAgICAgICAgICBzaXplX3QgaiA9IG91dHB1dC5zaXplKCk7
CisgICAgICAgICAgICBzaXplX3QgaiA9IG91dHB1dC5sZW5ndGgoKTsKICAgICAgICAgICAgIHdo
aWxlIChqID4gMCAmJiBpc0hUTUxTcGFjZShvdXRwdXRbaiAtIDFdKSkKICAgICAgICAgICAgICAg
ICAtLWo7CiAgICAgICAgICAgICBvdXRwdXQucmVzaXplKGopOwpAQCAtMTAxLDggKzEwMSw3IEBA
IFN0cmluZyBET01Ub2tlbkxpc3Q6OnJlbW92ZVRva2VuKGNvbnN0IEEKICAgICAgICAgICAgIG91
dHB1dC5hcHBlbmQocyk7IC8vIFN0ZXAgOQogICAgIH0KIAotICAgIG91dHB1dC5zaHJpbmtUb0Zp
dCgpOwotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KG91dHB1dCk7CisgICAgcmV0dXJuIG91dHB1
dC50b1N0cmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC04OSw3ICs5
MCw4IEBAIHN0YXRpYyBib29sIHBhcnNlRm9udFNpemUoY29uc3QgU3RyaW5nJiAKICAgICB9CiAK
ICAgICAvLyBTdGVwIDYKLSAgICBWZWN0b3I8VUNoYXIsIDE2PiBkaWdpdHM7CisgICAgU3RyaW5n
QnVpbGRlciBkaWdpdHM7CisgICAgZGlnaXRzLnJlc2VydmVDYXBhY2l0eSgxNik7CiAgICAgd2hp
bGUgKHBvc2l0aW9uIDwgZW5kKSB7CiAgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpwb3NpdGlv
bikpCiAgICAgICAgICAgICBicmVhazsKQEAgLTEwMSw3ICsxMDMsNyBAQCBzdGF0aWMgYm9vbCBw
YXJzZUZvbnRTaXplKGNvbnN0IFN0cmluZyYgCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIFN0ZXAgOAotICAgIGludCB2YWx1ZSA9IGNoYXJhY3RlcnNUb0ludFN0cmljdChkaWdpdHMu
ZGF0YSgpLCBkaWdpdHMuc2l6ZSgpKTsKKyAgICBpbnQgdmFsdWUgPSBjaGFyYWN0ZXJzVG9JbnRT
dHJpY3QoZGlnaXRzLmNoYXJhY3RlcnMoKSwgZGlnaXRzLmxlbmd0aCgpKTsKIAogICAgIC8vIFN0
ZXAgOQogICAgIGlmIChtb2RlID09IFJlbGF0aXZlUGx1cykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5
MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgU3RyaW5nIEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpzdHJpcAogICAgIGlmICghYXR0cmlidXRlVmFsdWUuY29udGFpbnMo
bmV3bGluZUNoYXJhY3RlcikgJiYgIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKGNhcnJpYWdlUmV0
dXJuKSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlOwogCi0gICAgVmVjdG9yPFVDaGFy
PiBzdHJpcHBlZDsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmlwcGVkOwogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCgpOwogICAgIHN0cmlwcGVkLnJlc2VydmVDYXBh
Y2l0eShsZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewpAQCAtMTE5LDcgKzExOSw3IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
c3RyaXAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBzdHJpcHBlZC5hcHBlbmQoY2hh
cmFjdGVyKTsKICAgICB9Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoc3RyaXBwZWQpOworICAg
IHJldHVybiBzdHJpcHBlZC50b1N0cmluZygpOwogfQogCiBzdGF0aWMgYm9vbCBpc05vdExpbmVC
cmVhayhVQ2hhciBjaCkgeyByZXR1cm4gY2ggIT0gbmV3bGluZUNoYXJhY3RlciAmJiBjaCAhPSBj
YXJyaWFnZVJldHVybjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJj
ZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWV3
U291cmNlRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsx
NDAsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OnByb2Nlc3NUYWdUCiB7CiAgICAg
bV9jdXJyZW50ID0gYWRkU3BhbldpdGhDbGFzc05hbWUoIndlYmtpdC1odG1sLXRhZyIpOwogCi0g
ICAgQXRvbWljU3RyaW5nIHRhZ05hbWUodG9rZW4ubmFtZSgpLmRhdGEoKSwgdG9rZW4ubmFtZSgp
LnNpemUoKSk7CisgICAgQXRvbWljU3RyaW5nIHRhZ05hbWUodG9rZW4ubmFtZSgpLnRvU3RyaW5n
UHJlc2VydmVDYXBhY2l0eSgpKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICBIVE1M
VG9rZW46OkF0dHJpYnV0ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0b2tlbi5hdHRyaWJ1
dGVzKCkuYmVnaW4oKTsKQEAgLTE1Miw4ICsxNTIsOCBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9j
dW1lbnQ6OnByb2Nlc3NUYWdUCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAg
ICAgIEF0b21pY1N0cmluZyBuYW1lKGl0ZXItPm1fbmFtZS5kYXRhKCksIGl0ZXItPm1fbmFtZS5z
aXplKCkpOwotICAgICAgICBTdHJpbmcgdmFsdWUoaXRlci0+bV92YWx1ZS5kYXRhKCksIGl0ZXIt
Pm1fdmFsdWUuc2l6ZSgpKTsgCisgICAgICAgIEF0b21pY1N0cmluZyBuYW1lKGl0ZXItPm1fbmFt
ZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSk7CisgICAgICAgIFN0cmluZyB2YWx1ZShpdGVy
LT5tX3ZhbHVlLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKIAogICAgICAgICBpbmRleCA9
IGFkZFJhbmdlKHNvdXJjZSwgaW5kZXgsIGl0ZXItPm1fbmFtZVJhbmdlLm1fc3RhcnQgLSB0b2tl
bi5zdGFydEluZGV4KCksICIiKTsKICAgICAgICAgaW5kZXggPSBhZGRSYW5nZShzb3VyY2UsIGlu
ZGV4LCBpdGVyLT5tX25hbWVSYW5nZS5tX2VuZCAtIHRva2VuLnN0YXJ0SW5kZXgoKSwgIndlYmtp
dC1odG1sLWF0dHJpYnV0ZS1uYW1lIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMsOSArNTMsOSBAQCB2b2lkIENTU1ByZWxvYWRTY2FubmVyOjpzY2FuKGNvbnN0IEhU
TUxUCiB7CiAgICAgbV9zY2FubmluZ0JvZHkgPSBzY2FubmluZ0JvZHk7CiAKLSAgICBjb25zdCBI
VE1MVG9rZW46OkRhdGFWZWN0b3ImIGNoYXJhY3RlcnMgPSB0b2tlbi5jaGFyYWN0ZXJzKCk7Ci0g
ICAgZm9yIChIVE1MVG9rZW46OkRhdGFWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBjaGFy
YWN0ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gY2hhcmFjdGVycy5lbmQoKSAmJiBtX3N0YXRlICE9IERv
bmVQYXJzaW5nSW1wb3J0UnVsZXM7ICsraXRlcikKLSAgICAgICAgdG9rZW5pemUoKml0ZXIpOwor
ICAgIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNoYXJhY3RlcnMgPSB0b2tlbi5jaGFyYWN0ZXJzKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoKCkgJiYgbV9z
dGF0ZSAhPSBEb25lUGFyc2luZ0ltcG9ydFJ1bGVzOyArK2kpCisgICAgICAgIHRva2VuaXplKGNo
YXJhY3RlcnNbaV0pOwogfQogCiBpbmxpbmUgdm9pZCBDU1NQcmVsb2FkU2Nhbm5lcjo6dG9rZW5p
emUoVUNoYXIgYykKQEAgLTE5MiwxNCArMTkyLDE0IEBAIHN0YXRpYyBTdHJpbmcgcGFyc2VDU1NT
dHJpbmdPclVSTChjb25zdCAKIAogdm9pZCBDU1NQcmVsb2FkU2Nhbm5lcjo6ZW1pdFJ1bGUoKQog
ewotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSgiaW1wb3J0IiwgbV9ydWxlLmRhdGEoKSwgbV9y
dWxlLnNpemUoKSkpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFyc2VDU1NTdHJpbmdPclVS
TChtX3J1bGVWYWx1ZS5kYXRhKCksIG1fcnVsZVZhbHVlLnNpemUoKSk7CisgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKCJpbXBvcnQiLCBtX3J1bGUuY2hhcmFjdGVycygpLCBtX3J1bGUubGVuZ3Ro
KCkpKSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlQ1NTU3RyaW5nT3JVUkwobV9ydWxl
VmFsdWUuY2hhcmFjdGVycygpLCBtX3J1bGVWYWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgIGlmICgh
dmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCht
X2RvY3VtZW50LT5jb21wbGV0ZVVSTCh2YWx1ZSkpOwogICAgICAgICAgICAgbV9kb2N1bWVudC0+
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVT
aGVldCwgcmVxdWVzdCwgU3RyaW5nKCksIG1fc2Nhbm5pbmdCb2R5KTsKICAgICAgICAgfQogICAg
ICAgICBtX3N0YXRlID0gSW5pdGlhbDsKLSAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KCJjaGFyc2V0IiwgbV9ydWxlLmRhdGEoKSwgbV9ydWxlLnNpemUoKSkpCisgICAgfSBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQ2FzZSgiY2hhcnNldCIsIG1fcnVsZS5jaGFyYWN0ZXJzKCksIG1fcnVs
ZS5sZW5ndGgoKSkpCiAgICAgICAgIG1fc3RhdGUgPSBJbml0aWFsOwogICAgIGVsc2UKICAgICAg
ICAgbV9zdGF0ZSA9IERvbmVQYXJzaW5nSW1wb3J0UnVsZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmgJKHJldmlzaW9uIDkzNzAzKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBDU1NQcmVsb2FkU2Nhbm5lcl9oCiAK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNjEsOCArNjEsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZW1pdFJ1bGUoKTsKIAogICAg
IFN0YXRlIG1fc3RhdGU7Ci0gICAgVmVjdG9yPFVDaGFyLCAxNj4gbV9ydWxlOwotICAgIFZlY3Rv
cjxVQ2hhcj4gbV9ydWxlVmFsdWU7CisgICAgU3RyaW5nQnVpbGRlciBtX3J1bGU7CisgICAgU3Ry
aW5nQnVpbGRlciBtX3J1bGVWYWx1ZTsKIAogICAgIGJvb2wgbV9zY2FubmluZ0JvZHk7CiAgICAg
RG9jdW1lbnQqIG1fZG9jdW1lbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydEhUTUxCb2QKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxU
b2tlblR5cGVzOjpET0NUWVBFKTsKLSAgICBhdHRhY2gobV9hdHRhY2htZW50Um9vdCwgRG9jdW1l
bnRUeXBlOjpjcmVhdGUobV9kb2N1bWVudCwgdG9rZW4ubmFtZSgpLCBTdHJpbmc6OmFkb3B0KHRv
a2VuLnB1YmxpY0lkZW50aWZpZXIoKSksIFN0cmluZzo6YWRvcHQodG9rZW4uc3lzdGVtSWRlbnRp
ZmllcigpKSkpOworICAgIGF0dGFjaChtX2F0dGFjaG1lbnRSb290LCBEb2N1bWVudFR5cGU6OmNy
ZWF0ZShtX2RvY3VtZW50LCB0b2tlbi5uYW1lKCksIHRva2VuLnB1YmxpY0lkZW50aWZpZXIoKS5y
ZWxlYXNlU3RyaW5nKCksIHRva2VuLnN5c3RlbUlkZW50aWZpZXIoKS5yZWxlYXNlU3RyaW5nKCkp
KTsKICAgICAKICAgICAvLyBET0NUWVBFIG5vZGVzIGFyZSBvbmx5IHByb2Nlc3NlZCB3aGVuIHBh
cnNpbmcgZnJhZ21lbnRzIHcvbyBjb250ZXh0RWxlbWVudHMsIHdoaWNoCiAgICAgLy8gbmV2ZXIg
b2NjdXJzLiAgSG93ZXZlciwgaWYgd2UgZXZlciBjaG9zZSB0byBzdXBwb3J0IHN1Y2gsIHRoaXMg
Y29kZSBpcyBzdWJ0bHkgd3JvbmcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRW50aXR5UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKLSAg
ICBpbmxpbmUgc3RhdGljIGJvb2wgY29udmVydFRvVVRGMTYoVUNoYXIzMiB2YWx1ZSwgVmVjdG9y
PFVDaGFyLCAxNj4mIGRlY29kZWRFbnRpdHkpCisgICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnZl
cnRUb1VURjE2KFVDaGFyMzIgdmFsdWUsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRFbnRpdHkpCiAg
ICAgewogICAgICAgICBpZiAoVV9JU19CTVAodmFsdWUpKSB7CiAgICAgICAgICAgICBVQ2hhciBj
aGFyYWN0ZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcj4odmFsdWUpOwpAQCAtODUsOSArODUsOSBAQCBw
dWJsaWM6CiAKICAgICBpbmxpbmUgc3RhdGljIGJvb2wgYWNjZXB0TWFsZm9ybWVkKCkgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnN1bWVOYW1lZEVudGl0eShT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRFbnRpdHks
IGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFj
dGVyLCBVQ2hhciYgY2MpCisgICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnN1bWVOYW1lZEVudGl0
eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZEVudGl0eSwg
Ym9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0
ZXIsIFVDaGFyJiBjYykKICAgICB7Ci0gICAgICAgIFZlY3RvcjxVQ2hhciwgMTA+IGNvbnN1bWVk
Q2hhcmFjdGVyczsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zdW1lZENoYXJhY3RlcnM7CiAg
ICAgICAgIEhUTUxFbnRpdHlTZWFyY2ggZW50aXR5U2VhcmNoOwogICAgICAgICB3aGlsZSAoIXNv
dXJjZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNjID0gKnNvdXJjZTsKQEAgLTEzOSw3ICsx
MzksNyBAQCBwdWJsaWM6CiB9CiAKIAotYm9vbCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRT
dHJpbmcmIHNvdXJjZSwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRFbnRpdHksIGJvb2wmIG5v
dEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQorYm9v
bCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU3RyaW5nQnVpbGRl
ciYgZGVjb2RlZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRp
b25hbEFsbG93ZWRDaGFyYWN0ZXIpCiB7CiAgICAgcmV0dXJuIGNvbnN1bWVDaGFyYWN0ZXJSZWZl
cmVuY2U8SFRNTEVudGl0eVBhcnNlcj4oc291cmNlLCBkZWNvZGVkRW50aXR5LCBub3RFbm91Z2hD
aGFyYWN0ZXJzLCBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rlcik7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5oCShyZXZpc2lvbiA5Mzcw
MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJv
b2wgY29uc3VtZUhUTUxFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiwgVmVjdG9yPFVDaGFyLCAxNj4m
IGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9u
YWxBbGxvd2VkQ2hhcmFjdGVyID0gJ1wwJyk7Citib29sIGNvbnN1bWVIVE1MRW50aXR5KFNlZ21l
bnRlZFN0cmluZyYsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3Vn
aENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID0gJ1wwJyk7CiAK
IC8vIFVzZWQgYnkgdGhlIFhNTCBwYXJzZXIuICBOb3Qgc3VpdGFibGUgZm9yIHVzZSBpbiBIVE1M
IHBhcnNpbmcuICBVc2UgY29uc3VtZUhUTUxFbnRpdHkgaW5zdGVhZC4KIFVDaGFyIGRlY29kZU5h
bWVkRW50aXR5KGNvbnN0IGNoYXIqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAkocmV2aXNpb24gOTM3MDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDQsMTEgKzEwNCw4IEBAIGJvb2wgSFRNTE1ldGFDaGFyc2V0UGFy
c2VyOjpwcm9jZXNzTWV0YSgKIHsKICAgICBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3Qm
IHRva2VuQXR0cmlidXRlcyA9IG1fdG9rZW4uYXR0cmlidXRlcygpOwogICAgIEF0dHJpYnV0ZUxp
c3QgYXR0cmlidXRlczsKLSAgICBmb3IgKEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IHRva2VuQXR0cmlidXRlcy5iZWdpbigpOyBpdGVyICE9IHRva2VuQXR0
cmlidXRlcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lKGl0
ZXItPm1fbmFtZS5kYXRhKCksIGl0ZXItPm1fbmFtZS5zaXplKCkpOwotICAgICAgICBTdHJpbmcg
YXR0cmlidXRlVmFsdWUoaXRlci0+bV92YWx1ZS5kYXRhKCksIGl0ZXItPm1fdmFsdWUuc2l6ZSgp
KTsKLSAgICAgICAgYXR0cmlidXRlcy5hcHBlbmQobWFrZV9wYWlyKGF0dHJpYnV0ZU5hbWUsIGF0
dHJpYnV0ZVZhbHVlKSk7Ci0gICAgfQorICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gdG9rZW5BdHRyaWJ1dGVzLmJlZ2luKCk7IGl0ZXIgIT0g
dG9rZW5BdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgIGF0dHJpYnV0ZXMuYXBwZW5k
KG1ha2VfcGFpcihpdGVyLT5tX25hbWUudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCksIGl0ZXIt
Pm1fdmFsdWUudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpKTsKIAogICAgIG1fZW5jb2Rpbmcg
PSBlbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICByZXR1cm4gbV9l
bmNvZGluZy5pc1ZhbGlkKCk7CkBAIC0xNzcsNyArMTc0LDcgQEAgYm9vbCBIVE1MTWV0YUNoYXJz
ZXRQYXJzZXI6OmNoZWNrRm9yTWV0YQogICAgIHdoaWxlIChtX3Rva2VuaXplci0+bmV4dFRva2Vu
KG1faW5wdXQsIG1fdG9rZW4pKSB7CiAgICAgICAgIGJvb2wgZW5kID0gbV90b2tlbi50eXBlKCkg
PT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZzsKICAgICAgICAgaWYgKGVuZCB8fCBtX3Rva2VuLnR5
cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpIHsKLSAgICAgICAgICAgIEF0b21pY1N0
cmluZyB0YWdOYW1lKG1fdG9rZW4ubmFtZSgpLmRhdGEoKSwgbV90b2tlbi5uYW1lKCkuc2l6ZSgp
KTsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWdOYW1lKG1fdG9rZW4ubmFtZSgpLnRvU3Ry
aW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgIGlmICghZW5kKSB7CiAgICAgICAg
ICAgICAgICAgbV90b2tlbml6ZXItPnVwZGF0ZVN0YXRlRm9yKHRhZ05hbWUsIDApOwogICAgICAg
ICAgICAgICAgIGlmICh0YWdOYW1lID09IG1ldGFUYWcgJiYgcHJvY2Vzc01ldGEoKSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAJ
KHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNl
cklkaW9tcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsOCBAQCBib29sIHBhcnNl
SFRNTEludGVnZXIoY29uc3QgU3RyaW5nJiBpbnB1CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIFN0ZXAgOAotICAgIFZlY3RvcjxVQ2hhciwgMTY+IGRpZ2l0czsKKyAgICBTdHJpbmdC
dWlsZGVyIGRpZ2l0czsKKyAgICBkaWdpdHMucmVzZXJ2ZUNhcGFjaXR5KDE2KTsKICAgICB3aGls
ZSAocG9zaXRpb24gPCBlbmQpIHsKICAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoKnBvc2l0aW9u
KSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjE2LDcgKzIxNyw3IEBAIGJvb2wgcGFyc2VIVE1M
SW50ZWdlcihjb25zdCBTdHJpbmcmIGlucHUKICAgICB9CiAKICAgICAvLyBTdGVwIDkKLSAgICB2
YWx1ZSA9IHNpZ24gKiBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoZGlnaXRzLmRhdGEoKSwgZGlnaXRz
LnNpemUoKSk7CisgICAgdmFsdWUgPSBzaWduICogY2hhcmFjdGVyc1RvSW50U3RyaWN0KGRpZ2l0
cy5jaGFyYWN0ZXJzKCksIGRpZ2l0cy5sZW5ndGgoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTI1NCw3ICsyNTUsOCBAQCBib29sIHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihjb25z
dCBTCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFN0ZXAgOAotICAgIFZlY3RvcjxV
Q2hhciwgMTY+IGRpZ2l0czsKKyAgICBTdHJpbmdCdWlsZGVyIGRpZ2l0czsKKyAgICBkaWdpdHMu
cmVzZXJ2ZUNhcGFjaXR5KDE2KTsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKICAgICAg
ICAgaWYgKCFpc0FTQ0lJRGlnaXQoKnBvc2l0aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjYyLDcgKzI2NCw3IEBAIGJvb2wgcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0IFMK
ICAgICB9CiAKICAgICAvLyBTdGVwIDkKLSAgICB2YWx1ZSA9IGNoYXJhY3RlcnNUb1VJbnRTdHJp
Y3QoZGlnaXRzLmRhdGEoKSwgZGlnaXRzLnNpemUoKSk7CisgICAgdmFsdWUgPSBjaGFyYWN0ZXJz
VG9VSW50U3RyaWN0KGRpZ2l0cy5jaGFyYWN0ZXJzKCksIGRpZ2l0cy5sZW5ndGgoKSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQ
cmVsb2FkU2Nhbm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSB7CiBjbGFzcyBQcmVsb2FkVGFzayB7CiBwdWJsaWM6
CiAgICAgUHJlbG9hZFRhc2soY29uc3QgSFRNTFRva2VuJiB0b2tlbikKLSAgICAgICAgOiBtX3Rh
Z05hbWUodG9rZW4ubmFtZSgpLmRhdGEoKSwgdG9rZW4ubmFtZSgpLnNpemUoKSkKKyAgICAgICAg
OiBtX3RhZ05hbWUodG9rZW4ubmFtZSgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKQogICAg
ICAgICAsIG1fbGlua0lzU3R5bGVTaGVldChmYWxzZSkKICAgICAgICAgLCBtX2xpbmtNZWRpYUF0
dHJpYnV0ZUlzU2NyZWVuKHRydWUpCiAgICAgICAgICwgbV9pbnB1dElzSW1hZ2UoZmFsc2UpCkBA
IC02Niw4ICs2Niw4IEBAIHB1YmxpYzoKIAogICAgICAgICBmb3IgKEhUTUxUb2tlbjo6QXR0cmli
dXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGF0dHJpYnV0ZXMuYmVnaW4oKTsKICAgICAg
ICAgICAgICBpdGVyICE9IGF0dHJpYnV0ZXMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAg
QXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9u
YW1lLnNpemUoKSk7Ci0gICAgICAgICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUoaXRlci0+bV92
YWx1ZS5kYXRhKCksIGl0ZXItPm1fdmFsdWUuc2l6ZSgpKTsKKyAgICAgICAgICAgIEF0b21pY1N0
cmluZyBhdHRyaWJ1dGVOYW1lKGl0ZXItPm1fbmFtZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHko
KSk7CisgICAgICAgICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUoaXRlci0+bV92YWx1ZS50b1N0
cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSk7CiAKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVOYW1l
ID09IGNoYXJzZXRBdHRyKQogICAgICAgICAgICAgICAgIG1fY2hhcnNldCA9IGF0dHJpYnV0ZVZh
bHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuLmgJKHJldmlzaW9u
IDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgICAgICBNYXJrdXBUb2tlbkJh
c2U8SFRNTFRva2VuVHlwZXMsIEhUTUxUb2tlblR5cGVzOjpEb2N0eXBlRGF0YT46OmFwcGVuZFRv
TmFtZShjaGFyYWN0ZXIpOwogICAgIH0KICAgICAKLSAgICBjb25zdCBEYXRhVmVjdG9yJiBuYW1l
KCkgY29uc3QKKyAgICBjb25zdCBTdHJpbmdCdWlsZGVyJiBuYW1lKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnIHx8IG1fdHlw
ZSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnIHx8IG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6
RE9DVFlQRSk7CiAgICAgICAgIHJldHVybiBNYXJrdXBUb2tlbkJhc2U8SFRNTFRva2VuVHlwZXMs
IEhUTUxUb2tlblR5cGVzOjpEb2N0eXBlRGF0YT46Om5hbWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiA5MzcwMykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB0ZW1wbGF0
ZTw+CiBRdWFsaWZpZWROYW1lIEF0b21pY01hcmt1cFRva2VuQmFzZTxIVE1MVG9rZW4+OjpuYW1l
Rm9yQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZUJhc2UmIGF0dHJpYnV0ZSkgY29uc3QKIHsKLSAg
ICByZXR1cm4gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgQXRvbWljU3RyaW5nKGF0dHJpYnV0ZS5t
X25hbWUuZGF0YSgpLCBhdHRyaWJ1dGUubV9uYW1lLnNpemUoKSksIG51bGxBdG9tKTsKKyAgICBy
ZXR1cm4gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgQXRvbWljU3RyaW5nKGF0dHJpYnV0ZS5tX25h
bWUudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpLCBudWxsQXRvbSk7CiB9CiAKIHRlbXBsYXRl
PD4KQEAgLTc2LDE2ICs3Niw2IEBAIGlubGluZSBVQ2hhciB0b0xvd2VyQ2FzZShVQ2hhciBjYykK
ICAgICByZXR1cm4gY2MgKyBsb3dlckNhc2VPZmZzZXQ7CiB9CiAKLWlubGluZSBib29sIHZlY3Rv
ckVxdWFsc1N0cmluZyhjb25zdCBWZWN0b3I8VUNoYXIsIDMyPiYgdmVjdG9yLCBjb25zdCBTdHJp
bmcmIHN0cmluZykKLXsKLSAgICBpZiAodmVjdG9yLnNpemUoKSAhPSBzdHJpbmcubGVuZ3RoKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBVQ2hhciogc3RyaW5nRGF0YSA9IHN0
cmluZy5jaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHZlY3RvckRhdGEgPSB2ZWN0b3Iu
ZGF0YSgpOwotICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBhIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiB3
ZSBzaG91bGQgYmUgY2FsbGluZyBoZXJlPwotICAgIHJldHVybiAhbWVtY21wKHN0cmluZ0RhdGEs
IHZlY3RvckRhdGEsIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVUNoYXIpKTsKLX0KLQogaW5saW5l
IGJvb2wgaXNFbmRUYWdCdWZmZXJpbmdTdGF0ZShIVE1MVG9rZW5pemVyU3RhdGU6OlN0YXRlIHN0
YXRlKQogewogICAgIHN3aXRjaCAoc3RhdGUpIHsKQEAgLTE0NSw3ICsxMzUsNyBAQCB2b2lkIEhU
TUxUb2tlbml6ZXI6OnJlc2V0KCkKIGlubGluZSBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NF
bnRpdHkoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiB7CiAgICAgYm9vbCBub3RFbm91Z2hDaGFy
YWN0ZXJzID0gZmFsc2U7Ci0gICAgVmVjdG9yPFVDaGFyLCAxNj4gZGVjb2RlZEVudGl0eTsKKyAg
ICBTdHJpbmdCdWlsZGVyIGRlY29kZWRFbnRpdHk7CiAgICAgYm9vbCBzdWNjZXNzID0gY29uc3Vt
ZUhUTUxFbnRpdHkoc291cmNlLCBkZWNvZGVkRW50aXR5LCBub3RFbm91Z2hDaGFyYWN0ZXJzKTsK
ICAgICBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTUzLDkgKzE0Myw4IEBAIGlubGluZSBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NFbnRpdHkK
ICAgICAgICAgQVNTRVJUKGRlY29kZWRFbnRpdHkuaXNFbXB0eSgpKTsKICAgICAgICAgYnVmZmVy
Q2hhcmFjdGVyKCcmJyk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVmVjdG9yPFVDaGFyPjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGRlY29kZWRFbnRpdHkuYmVnaW4oKTsKLSAgICAgICAgZm9yICg7
IGl0ZXIgIT0gZGVjb2RlZEVudGl0eS5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgYnVmZmVy
Q2hhcmFjdGVyKCppdGVyKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlY29k
ZWRFbnRpdHkubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcihkZWNv
ZGVkRW50aXR5W2ldKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC05ODcsNyArOTc2
LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpuZXh0VG9rZW4oU2VnbWVudGVkUwogCiAgICAgSFRN
TF9CRUdJTl9TVEFURShDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVlU3RhdGUpIHsK
ICAgICAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAgICAgIFZlY3Rv
cjxVQ2hhciwgMTY+IGRlY29kZWRFbnRpdHk7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgZGVjb2Rl
ZEVudGl0eTsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gY29uc3VtZUhUTUxFbnRpdHkoc291cmNl
LCBkZWNvZGVkRW50aXR5LCBub3RFbm91Z2hDaGFyYWN0ZXJzLCBtX2FkZGl0aW9uYWxBbGxvd2Vk
Q2hhcmFjdGVyKTsKICAgICAgICAgaWYgKG5vdEVub3VnaENoYXJhY3RlcnMpCiAgICAgICAgICAg
ICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKTsKQEAgLTk5NSw5ICs5ODQsOCBA
QCBib29sIEhUTUxUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRTCiAgICAgICAgICAgICBB
U1NFUlQoZGVjb2RlZEVudGl0eS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgbV90b2tlbi0+YXBw
ZW5kVG9BdHRyaWJ1dGVWYWx1ZSgnJicpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
VmVjdG9yPFVDaGFyPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlY29kZWRFbnRpdHkuYmVnaW4o
KTsKLSAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGRlY29kZWRFbnRpdHkuZW5kKCk7ICsraXRl
cikKLSAgICAgICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKCppdGVy
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWNvZGVkRW50aXR5Lmxl
bmd0aCgpOyArK2kpCisgICAgICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVW
YWx1ZShkZWNvZGVkRW50aXR5W2ldKTsKICAgICAgICAgfQogICAgICAgICAvLyBXZSdyZSBzdXBw
b3NlZCB0byBzd2l0Y2ggYmFjayB0byB0aGUgYXR0cmlidXRlIHZhbHVlIHN0YXRlIHRoYXQKICAg
ICAgICAgLy8gd2Ugd2VyZSBpbiB3aGVuIHdlIHdlcmUgc3dpdGNoZWQgaW50byB0aGlzIHN0YXRl
LiBSYXRoZXIgdGhhbgpAQCAtMTU5OSw3ICsxNTg3LDcgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjp1
cGRhdGVTdGF0ZUZvcihjb25zdAogCiBpbmxpbmUgYm9vbCBIVE1MVG9rZW5pemVyOjp0ZW1wb3Jh
cnlCdWZmZXJJcyhjb25zdCBTdHJpbmcmIGV4cGVjdGVkU3RyaW5nKQogewotICAgIHJldHVybiB2
ZWN0b3JFcXVhbHNTdHJpbmcobV90ZW1wb3JhcnlCdWZmZXIsIGV4cGVjdGVkU3RyaW5nKTsKKyAg
ICByZXR1cm4gbV90ZW1wb3JhcnlCdWZmZXIgPT0gZXhwZWN0ZWRTdHJpbmc7CiB9CiAKIGlubGlu
ZSB2b2lkIEhUTUxUb2tlbml6ZXI6OmFkZFRvUG9zc2libGVFbmRUYWcoVUNoYXIgY2MpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5oCShyZXZpc2lvbiA5
MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTk1LDE3ICsxOTUsMTcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgaW5s
aW5lIGJvb2wgaXNBcHByb3ByaWF0ZUVuZFRhZygpOwogCi0gICAgVmVjdG9yPFVDaGFyLCAzMj4g
bV9hcHByb3ByaWF0ZUVuZFRhZ05hbWU7CisgICAgU3RyaW5nQnVpbGRlciBtX2FwcHJvcHJpYXRl
RW5kVGFnTmFtZTsKIAogICAgIGJvb2wgbV9zaG91bGRBbGxvd0NEQVRBOwogCiAgICAgLy8gaHR0
cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jdGVtcG9yYXJ5
LWJ1ZmZlcgotICAgIFZlY3RvcjxVQ2hhciwgMzI+IG1fdGVtcG9yYXJ5QnVmZmVyOworICAgIFN0
cmluZ0J1aWxkZXIgbV90ZW1wb3JhcnlCdWZmZXI7CiAKICAgICAvLyBXZSBvY2NhdGlvbmFsbHkg
d2FudCB0byBlbWl0IGJvdGggYSBjaGFyYWN0ZXIgdG9rZW4gYW5kIGFuIGVuZCB0YWcKICAgICAv
LyB0b2tlbiAoZS5nLiwgd2hlbiBsZXhpbmcgc2NyaXB0KS4gV2UgYnVmZmVyIHRoZSBuYW1lIG9m
IHRoZSBlbmQgdGFnCiAgICAgLy8gdG9rZW4gaGVyZSBzbyB3ZSByZW1lbWJlciBpdCBuZXh0IHRp
bWUgd2UgcmUtZW50ZXIgdGhlIHRva2VuaXplci4KLSAgICBWZWN0b3I8VUNoYXIsIDMyPiBtX2J1
ZmZlcmVkRW5kVGFnTmFtZTsKKyAgICBTdHJpbmdCdWlsZGVyIG1fYnVmZmVyZWRFbmRUYWdOYW1l
OwogICAgIAogICAgIGJvb2wgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrczsKIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAJKHJldmlz
aW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4LDggKzI0OCw4IEBAIGNsYXNzIEhUTUxUcmVlQnVp
bGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXIKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFeHRlcm5h
bENoYXJhY3RlclRva2VuQnVmZmVyKTsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBFeHRlcm5hbENo
YXJhY3RlclRva2VuQnVmZmVyKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCi0gICAgICAgIDogbV9j
dXJyZW50KHRva2VuLmNoYXJhY3RlcnMoKS5kYXRhKCkpCi0gICAgICAgICwgbV9lbmQobV9jdXJy
ZW50ICsgdG9rZW4uY2hhcmFjdGVycygpLnNpemUoKSkKKyAgICAgICAgOiBtX2N1cnJlbnQodG9r
ZW4uY2hhcmFjdGVycygpLmNoYXJhY3RlcnMoKSkKKyAgICAgICAgLCBtX2VuZChtX2N1cnJlbnQg
KyB0b2tlbi5jaGFyYWN0ZXJzKCkubGVuZ3RoKCkpCiAgICAgewogICAgICAgICBBU1NFUlQoIWlz
RW1wdHkoKSk7CiAgICAgfQpAQCAtMjkxLDcgKzI5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIFN0cmluZyhzdGFydCwgbV9jdXJyZW50IC0gc3RhcnQpOwogICAgIH0KIAotICAgIHZvaWQg
Z2l2ZVJlbWFpbmluZ1RvKFZlY3RvcjxVQ2hhcj4mIHJlY2lwaWVudCkKKyAgICB2b2lkIGdpdmVS
ZW1haW5pbmdUbyhTdHJpbmdCdWlsZGVyJiByZWNpcGllbnQpCiAgICAgewogICAgICAgICByZWNp
cGllbnQuYXBwZW5kKG1fY3VycmVudCwgbV9lbmQgLSBtX2N1cnJlbnQpOwogICAgICAgICBtX2N1
cnJlbnQgPSBtX2VuZDsKQEAgLTMwMCw3ICszMDAsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRh
a2VSZW1haW5pbmdXaGl0ZXNwYWNlKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgp
KTsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiB3aGl0ZXNwYWNlOworICAgICAgICBTdHJpbmdCdWls
ZGVyIHdoaXRlc3BhY2U7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIFVDaGFyIGNjID0gKm1f
Y3VycmVudCsrOwogICAgICAgICAgICAgaWYgKGlzSFRNTFNwYWNlKGNjKSkKQEAgLTMxMSw3ICsz
MTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRvIGluc2VydCBhIHRleHQgbm9kZSAoYXMgb3Bw
b3NlZCB0byBpbnNlcnRpbmcgYW4gZW1wdHkgdGV4dCBub2RlKS4KICAgICAgICAgaWYgKHdoaXRl
c3BhY2UuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICBy
ZXR1cm4gU3RyaW5nOjphZG9wdCh3aGl0ZXNwYWNlKTsKKyAgICAgICAgcmV0dXJuIHdoaXRlc3Bh
Y2UudG9TdHJpbmcoKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0yNzE4LDcgKzI3MTgsNyBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckFmdGVySGVhCiAKIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpkZWZhdWx0Rm9ySW5UYWJsZVRleHQoKQogewotICAgIFN0cmluZyBjaGFyYWN0ZXJz
ID0gU3RyaW5nOjphZG9wdChtX3BlbmRpbmdUYWJsZUNoYXJhY3RlcnMpOworICAgIFN0cmluZyBj
aGFyYWN0ZXJzID0gbV9wZW5kaW5nVGFibGVDaGFyYWN0ZXJzLnJlbGVhc2VTdHJpbmcoKTsKICAg
ICBpZiAoIWlzQWxsV2hpdGVzcGFjZShjaGFyYWN0ZXJzKSkgewogICAgICAgICAvLyBGSVhNRTog
cGFyc2UgZXJyb3IKICAgICAgICAgSFRNTENvbnN0cnVjdGlvblNpdGU6OlJlZGlyZWN0VG9Gb3N0
ZXJQYXJlbnRHdWFyZCByZWRpcmVjdGVyKG1fdHJlZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjQxLDcgKzI0MSw3IEBAIHByaXZhdGU6CiAgICAgSW5zZXJ0aW9uTW9kZSBtX29yaWdpbmFs
SW5zZXJ0aW9uTW9kZTsKIAogICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWIt
YXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlvbi5odG1sI3BlbmRpbmctdGFi
bGUtY2hhcmFjdGVyLXRva2VucwotICAgIFZlY3RvcjxVQ2hhcj4gbV9wZW5kaW5nVGFibGVDaGFy
YWN0ZXJzOworICAgIFN0cmluZ0J1aWxkZXIgbV9wZW5kaW5nVGFibGVDaGFyYWN0ZXJzOwogCiAg
ICAgLy8gV2UgYWNjZXNzIHBhcnNlciBiZWNhdXNlIEhUTUw1IHNwZWMgcmVxdWlyZXMgdGhhdCB3
ZSBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHRva2VuaXplcgogICAgIC8vIGZy
b20gd2l0aGluIHBhcnNlciBhY3Rpb25zLiBXZSBhbHNvIG5lZWQgaXQgdG8gdHJhY2sgdGhlIGN1
cnJlbnQgcG9zaXRpb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVmll
d1NvdXJjZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFZpZXdTb3VyY2VQYXJzZXIuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxWaWV3U291cmNlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlUGFyc2VyOjp1cGRhdGVUb2tl
bml6CiAgICAgaWYgKG1fdG9rZW4udHlwZSgpICE9IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZykK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQXRvbWljU3RyaW5nIHRhZ05hbWUobV90b2tlbi5uYW1l
KCkuZGF0YSgpLCBtX3Rva2VuLm5hbWUoKS5zaXplKCkpOworICAgIEF0b21pY1N0cmluZyB0YWdO
YW1lKG1fdG9rZW4ubmFtZSgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKICAgICBtX3Rv
a2VuaXplci0+dXBkYXRlU3RhdGVGb3IodGFnTmFtZSwgZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCShyZXZp
c2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMyArNjksMTMgQEAgc3RhdGljIGJvb2wgaXNSZXF1aXJl
ZEZvckluamVjdGlvbihVQ2hhcgogCiBzdGF0aWMgYm9vbCBoYXNOYW1lKGNvbnN0IEhUTUxUb2tl
biYgdG9rZW4sIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIGVxdWFs
SWdub3JpbmdOdWxsaXR5KHRva2VuLm5hbWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nJj4o
bmFtZS5sb2NhbE5hbWUoKSkpOworICAgIHJldHVybiBlcXVhbElnbm9yaW5nTnVsbGl0eSh0b2tl
bi5uYW1lKCkudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCksIHN0YXRpY19jYXN0PGNvbnN0IFN0
cmluZyY+KG5hbWUubG9jYWxOYW1lKCkpKTsKIH0KIAogc3RhdGljIGJvb2wgZmluZEF0dHJpYnV0
ZVdpdGhOYW1lKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIHNpemVfdCYgaW5kZXhPZk1hdGNoaW5nQXR0cmlidXRlKQogewogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdG9rZW4uYXR0cmlidXRlcygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChlcXVhbElnbm9yaW5nTnVsbGl0eSh0b2tlbi5hdHRyaWJ1dGVzKCkuYXQoaSkubV9uYW1lLCBu
YW1lLmxvY2FsTmFtZSgpKSkgeworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ051bGxpdHkodG9r
ZW4uYXR0cmlidXRlcygpLmF0KGkpLm1fbmFtZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSwg
bmFtZS5sb2NhbE5hbWUoKSkpIHsKICAgICAgICAgICAgIGluZGV4T2ZNYXRjaGluZ0F0dHJpYnV0
ZSA9IGk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtODMsMTAgKzgz
LDEwIEBAIHN0YXRpYyBib29sIGZpbmRBdHRyaWJ1dGVXaXRoTmFtZShjb25zdCAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGlzTmFtZU9mSW5saW5lRXZlbnRIYW5kbGVyKGNv
bnN0IFZlY3RvcjxVQ2hhciwgMzI+JiBuYW1lKQorc3RhdGljIGJvb2wgaXNOYW1lT2ZJbmxpbmVF
dmVudEhhbmRsZXIoY29uc3QgU3RyaW5nQnVpbGRlciYgbmFtZSkKIHsKICAgICBjb25zdCBzaXpl
X3QgbGVuZ3RoT2ZTaG9ydGVzdElubGluZUV2ZW50SGFuZGxlck5hbWUgPSA1OyAvLyBUbyB3aXQ6
IG9uY3V0LgotICAgIGlmIChuYW1lLnNpemUoKSA8IGxlbmd0aE9mU2hvcnRlc3RJbmxpbmVFdmVu
dEhhbmRsZXJOYW1lKQorICAgIGlmIChuYW1lLmxlbmd0aCgpIDwgbGVuZ3RoT2ZTaG9ydGVzdElu
bGluZUV2ZW50SGFuZGxlck5hbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4g
bmFtZVswXSA9PSAnbycgJiYgbmFtZVsxXSA9PSAnbic7CiB9CkBAIC05NywyMSArOTcsMjEgQEAg
c3RhdGljIGJvb2wgaXNEYW5nZXJvdXNIVFRQRXF1aXYoY29uc3QgUwogICAgIHJldHVybiBlcXVh
bElnbm9yaW5nQ2FzZShlcXVpdiwgInJlZnJlc2giKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShlcXVp
diwgInNldC1jb29raWUiKTsKIH0KIAotc3RhdGljIGJvb2wgY29udGFpbnNKYXZhU2NyaXB0VVJM
KGNvbnN0IFZlY3RvcjxVQ2hhciwgMzI+JiB2YWx1ZSkKK3N0YXRpYyBib29sIGNvbnRhaW5zSmF2
YVNjcmlwdFVSTChjb25zdCBTdHJpbmdCdWlsZGVyJiB2YWx1ZSkKIHsKICAgICBzdGF0aWMgY29u
c3QgY2hhciBqYXZhU2NyaXB0U2NoZW1lW10gPSAiamF2YXNjcmlwdDoiOwogICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgbGVuZ3RoT2ZKYXZhU2NyaXB0U2NoZW1lID0gc2l6ZW9mKGphdmFTY3JpcHRT
Y2hlbWUpIC0gMTsKIAogICAgIHNpemVfdCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCB2YWx1ZS5z
aXplKCk7ICsraSkgeworICAgIGZvciAoaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGgoKTsgKytpKSB7
CiAgICAgICAgIGlmICghaXNIVE1MU3BhY2UodmFsdWVbaV0pKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgaWYgKHZhbHVlLnNpemUoKSAtIGkgPCBsZW5ndGhPZkphdmFTY3JpcHRT
Y2hlbWUpCisgICAgaWYgKHZhbHVlLmxlbmd0aCgpIC0gaSA8IGxlbmd0aE9mSmF2YVNjcmlwdFNj
aGVtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdD
YXNlKHZhbHVlLmRhdGEoKSArIGksIGphdmFTY3JpcHRTY2hlbWUsIGxlbmd0aE9mSmF2YVNjcmlw
dFNjaGVtZSk7CisgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLmNoYXJhY3RlcnMo
KSArIGksIGphdmFTY3JpcHRTY2hlbWUsIGxlbmd0aE9mSmF2YVNjcmlwdFNjaGVtZSk7CiB9CiAK
IHN0YXRpYyBTdHJpbmcgZGVjb2RlVVJMKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBUZXh0
RW5jb2RpbmcmIGVuY29kaW5nKQpAQCAtMzIzLDcgKzMyMyw3IEBAIGJvb2wgWFNTQXVkaXRvcjo6
ZmlsdGVyUGFyYW1Ub2tlbihIVE1MVG8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29u
c3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmIG5hbWVBdHRyaWJ1dGUgPSB0b2tlbi5hdHRyaWJ1dGVz
KCkuYXQoaW5kZXhPZk5hbWVBdHRyaWJ1dGUpOwotICAgIFN0cmluZyBuYW1lID0gU3RyaW5nKG5h
bWVBdHRyaWJ1dGUubV92YWx1ZS5kYXRhKCksIG5hbWVBdHRyaWJ1dGUubV92YWx1ZS5zaXplKCkp
OworICAgIFN0cmluZyBuYW1lID0gbmFtZUF0dHJpYnV0ZS5tX3ZhbHVlLnRvU3RyaW5nUHJlc2Vy
dmVDYXBhY2l0eSgpOwogCiAgICAgaWYgKCFIVE1MUGFyYW1FbGVtZW50Ojppc1VSTFBhcmFtZXRl
cihuYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDIyLDkgKzQyMiw5IEBAIGJvb2wg
WFNTQXVkaXRvcjo6ZXJhc2VBdHRyaWJ1dGVJZkluamVjdGUKICAgICBpZiAoZmluZEF0dHJpYnV0
ZVdpdGhOYW1lKHRva2VuLCBhdHRyaWJ1dGVOYW1lLCBpbmRleE9mQXR0cmlidXRlKSkgewogICAg
ICAgICBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYgYXR0cmlidXRlID0gdG9rZW4uYXR0cmli
dXRlcygpLmF0KGluZGV4T2ZBdHRyaWJ1dGUpOwogICAgICAgICBpZiAoaXNDb250YWluZWRJblJl
cXVlc3Qoc25pcHBldEZvckF0dHJpYnV0ZSh0b2tlbiwgYXR0cmlidXRlKSkpIHsKLSAgICAgICAg
ICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IHNyY0F0dHIgJiYgaXNTYW1lT3JpZ2luUmVzb3VyY2Uo
U3RyaW5nKGF0dHJpYnV0ZS5tX3ZhbHVlLmRhdGEoKSwgYXR0cmlidXRlLm1fdmFsdWUuc2l6ZSgp
KSkpCisgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBzcmNBdHRyICYmIGlzU2FtZU9y
aWdpblJlc291cmNlKGF0dHJpYnV0ZS5tX3ZhbHVlLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgp
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoYXR0cmli
dXRlTmFtZSA9PSBodHRwX2VxdWl2QXR0ciAmJiAhaXNEYW5nZXJvdXNIVFRQRXF1aXYoU3RyaW5n
KGF0dHJpYnV0ZS5tX3ZhbHVlLmRhdGEoKSwgYXR0cmlidXRlLm1fdmFsdWUuc2l6ZSgpKSkpCisg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBodHRwX2VxdWl2QXR0ciAmJiAhaXNEYW5n
ZXJvdXNIVFRQRXF1aXYoYXR0cmlidXRlLm1fdmFsdWUudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHRva2VuLmVy
YXNlVmFsdWVPZkF0dHJpYnV0ZShpbmRleE9mQXR0cmlidXRlKTsKICAgICAgICAgICAgIGlmICgh
cmVwbGFjZW1lbnRWYWx1ZS5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsNyBAQAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlIDx3dGYvRGVjaW1h
bE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0yNjEsNyArMjYyLDcgQEAgaW5saW5lIGludCBoZXhUb0ludChV
Q2hhciBjKQogICAgIHJldHVybiAwOwogfQogCi1ib29sIGRlY29kZVN0cmluZyhjb25zdCBVQ2hh
ciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkKK2Jvb2wg
ZGVjb2RlU3RyaW5nKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5n
QnVpbGRlciogb3V0cHV0KQogewogICAgIHdoaWxlIChzdGFydCA8IGVuZCkgewogICAgICAgICBV
Q2hhciBjID0gKnN0YXJ0Kys7CkBAIC0zMjEsMTEgKzMyMiwxMSBAQCBib29sIGRlY29kZVN0cmlu
Zyhjb25zdCBVQ2hhciogc3RhcnQsIGNvCiAgICAgfQogICAgIGlmIChzdGFydCA+IGVuZCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyOworICAgIFN0cmlu
Z0J1aWxkZXIgYnVmZmVyOwogICAgIGJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkoZW5kIC0gc3RhcnQp
OwogICAgIGlmICghZGVjb2RlU3RyaW5nKHN0YXJ0LCBlbmQsICZidWZmZXIpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgKm91dHB1dCA9IFN0cmluZyhidWZmZXIuZGF0YSgpLCBidWZmZXIu
c2l6ZSgpKTsgICAgCisgICAgKm91dHB1dCA9IGJ1ZmZlci50b1N0cmluZygpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC00NDQsNyArNDQ1LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gYnVpbGRWYWx1ZShjbwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1pbmxp
bmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFyIGMsIFZlY3RvcjxVQ2hhcj4qIGRzdCkKK2lubGluZSBi
b29sIGVzY2FwZUNoYXIoVUNoYXIgYywgU3RyaW5nQnVpbGRlciogZHN0KQogewogICAgIHN3aXRj
aCAoYykgewogICAgIGNhc2UgJ1xiJzogZHN0LT5hcHBlbmQoIlxcYiIsIDIpOyBicmVhazsKQEAg
LTQ2MCw3ICs0NjEsNyBAQCBpbmxpbmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFyIGMsIFZlY3RvcjxV
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIGRvdWJsZVF1b3RlU3RyaW5nKGNv
bnN0IFN0cmluZyYgc3RyLCBWZWN0b3I8VUNoYXI+KiBkc3QpCitpbmxpbmUgdm9pZCBkb3VibGVR
dW90ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgU3RyaW5nQnVpbGRlciogZHN0KQogewogICAg
IGRzdC0+YXBwZW5kKCciJyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0ci5sZW5n
dGgoKTsgKytpKSB7CkBAIC01NTYsMTMgKzU1NywxMyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBJbnNwZWN0b3JWYWx1CiAKIFN0cmluZyBJbnNwZWN0b3JWYWx1ZTo6dG9KU09OU3RyaW5n
KCkgY29uc3QKIHsKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVy
IHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDUxMik7CiAgICAgd3JpdGVKU09O
KCZyZXN1bHQpOwotICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUo
KSk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi12b2lkIEluc3BlY3RvclZh
bHVlOjp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAordm9pZCBJbnNwZWN0
b3JWYWx1ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKICAgICBB
U1NFUlQobV90eXBlID09IFR5cGVOdWxsKTsKICAgICBvdXRwdXQtPmFwcGVuZChudWxsU3RyaW5n
LCA0KTsKQEAgLTYxNiw3ICs2MTcsNyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVt
YmVyKHVuc2lnCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQmFzaWNWYWx1
ZTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKK3ZvaWQgSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKICAg
ICBBU1NFUlQodHlwZSgpID09IFR5cGVCb29sZWFuIHx8IHR5cGUoKSA9PSBUeXBlTnVtYmVyKTsK
ICAgICBpZiAodHlwZSgpID09IFR5cGVCb29sZWFuKSB7CkBAIC02NTIsNyArNjUzLDcgQEAgYm9v
bCBJbnNwZWN0b3JTdHJpbmc6OmFzU3RyaW5nKFN0cmluZyogbwogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1
dCkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yU3RyaW5nOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciog
b3V0cHV0KSBjb25zdAogewogICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZVN0cmluZyk7CiAgICAg
ZG91YmxlUXVvdGVTdHJpbmcobV9zdHJpbmdWYWx1ZSwgb3V0cHV0KTsKQEAgLTcyNCw3ICs3MjUs
NyBAQCB2b2lkIEluc3BlY3Rvck9iamVjdDo6cmVtb3ZlKGNvbnN0IFN0cmluCiAgICAgfQogfQog
Ci12b2lkIEluc3BlY3Rvck9iamVjdDo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkg
Y29uc3QKK3ZvaWQgSW5zcGVjdG9yT2JqZWN0Ojp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0
cHV0KSBjb25zdAogewogICAgIG91dHB1dC0+YXBwZW5kKCd7Jyk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX29yZGVyLnNpemUoKTsgKytpKSB7CkBAIC03NjEsNyArNzYyLDcgQEAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQXJyYQogICAgIHJldHVybiB0aGlzOwog
fQogCi12b2lkIEluc3BlY3RvckFycmF5Ojp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0
KSBjb25zdAordm9pZCBJbnNwZWN0b3JBcnJheTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91
dHB1dCkgY29uc3QKIHsKICAgICBvdXRwdXQtPmFwcGVuZCgnWycpOwogICAgIGZvciAoVmVjdG9y
PFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuYmVn
aW4oKTsgaXQgIT0gbV9kYXRhLmVuZCgpOyArK2l0KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODcs
NyArODcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHBhcnNlSlNPTihjb25zdCBTdHJpbmcmIGpzb24pOwogCiAgICAgU3RyaW5nIHRvSlNPTlN0cmlu
ZygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0
cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91
dHB1dCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBJbnNwZWN0b3JWYWx1ZShU
eXBlIHR5cGUpIDogbV90eXBlKHR5cGUpIHsgfQpAQCAtMTIxLDcgKzEyMSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIodW5zaWduZWQgbG9uZyogb3V0cHV0KSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIodW5zaWduZWQgaW50KiBvdXRwdXQpIGNvbnN0Owog
Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25z
dDsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGJvb2wgdmFs
dWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZUJvb2xlYW4pLCBtX2Jvb2xWYWx1ZSh2YWx1ZSkgeyB9
CkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGFzU3RyaW5n
KFN0cmluZyogb3V0cHV0KSBjb25zdDsgICAgCiAKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09O
KFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNP
TihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0
IEluc3BlY3RvclN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5
cGVTdHJpbmcpLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0KQEAgLTE5OSw3ICsxOTksNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdmly
dHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdDsKIAogICAg
IGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KICAgICBpdGVyYXRv
ciBlbmQoKSB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KQEAgLTIzMyw3ICsyMzMsNyBAQCBwdWJs
aWM6CiAKICAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBnZXQoc2l6ZV90IGluZGV4KTsK
IAotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yQXJyYXkoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCShyZXZpc2lv
biA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRy
b2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTExNSwxOSArMTE2LDE5IEBAIFJlc291cmNlUmVxdWVz
dCBjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmwKICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiByZXF1
ZXN0SGVhZGVyRmllbGRzID0gcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CiAKICAgICBpZiAo
cmVxdWVzdEhlYWRlckZpZWxkcy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIFZlY3RvcjxVQ2hhcj4g
aGVhZGVyQnVmZmVyOworICAgICAgICBTdHJpbmdCdWlsZGVyIGhlYWRlckJ1ZmZlcjsKICAgICAg
ICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVyRmllbGRz
LmJlZ2luKCk7Ci0gICAgICAgIGFwcGVuZChoZWFkZXJCdWZmZXIsIGl0LT5maXJzdCk7CisgICAg
ICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmZpcnN0KTsKICAgICAgICAgKytpdDsKIAogICAg
ICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXF1ZXN0SGVhZGVyRmll
bGRzLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAg
ICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcsJyk7CiAgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBw
ZW5kKCcgJyk7Ci0gICAgICAgICAgICBhcHBlbmQoaGVhZGVyQnVmZmVyLCBpdC0+Zmlyc3QpOwor
ICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+Zmlyc3QpOwogICAgICAgICB9CiAK
LSAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250
cm9sLVJlcXVlc3QtSGVhZGVycyIsIFN0cmluZzo6YWRvcHQoaGVhZGVyQnVmZmVyKSk7CisgICAg
ICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJBY2Nlc3MtQ29udHJvbC1S
ZXF1ZXN0LUhlYWRlcnMiLCBoZWFkZXJCdWZmZXIudG9TdHJpbmcoKSk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHByZWZsaWdodFJlcXVlc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHJldmlz
aW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtODM2LDE3ICs4MzcsMTcgQEAg
Ym9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbAogICAgIC8vIFRoZW4sIGlu
c2VydCB0aGUgcmVzb3VyY2UKICAgICAKICAgICAvLyBTZXJpYWxpemUgdGhlIGhlYWRlcnMKLSAg
ICBWZWN0b3I8VUNoYXI+IHN0cmluZ0J1aWxkZXI7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwogICAgIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJl
c291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0
cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC5sZW5ndGgo
KSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknOicpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQpOwogICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgoVUNoYXIpJ1xuJyk7CiAgICAgfQogICAgIAotICAgIFN0cmluZyBoZWFkZXJz
ID0gU3RyaW5nOjphZG9wdChzdHJpbmdCdWlsZGVyKTsKKyAgICBTdHJpbmcgaGVhZGVycyA9IHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICAKICAgICBTUUxpdGVTdGF0ZW1lbnQgcmVzb3Vy
Y2VTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2VzICh1cmws
IHN0YXR1c0NvZGUsIHJlc3BvbnNlVVJMLCBoZWFkZXJzLCBkYXRhLCBtaW1lVHlwZSwgdGV4dEVu
Y29kaW5nTmFtZSkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/KSIpOwogICAgIGlmIChyZXNv
dXJjZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWUuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgpAQCAtNDI4LDEzICs0Mjks
MTMgQEAgdm9pZCBDaHJvbWU6OnNldFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlcwogICAgICAgICAg
ICAgICAgICAgICBGaWxlTGlzdCogZmlsZXMgPSBpbnB1dC0+ZmlsZXMoKTsKICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbGlzdFNpemUgPSBmaWxlcy0+bGVuZ3RoKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChsaXN0U2l6ZSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxVQ2hhcj4gbmFtZXM7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVy
IG5hbWVzOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
aXN0U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG5hbWVz
LCBmaWxlcy0+aXRlbShpKS0+ZmlsZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZXMuYXBwZW5kKGZpbGVzLT5pdGVtKGkpLT5maWxlTmFtZSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaSAhPSBsaXN0U2l6ZSAtIDEpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZCgnXG4nKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXAgPSBTdHJpbmc6OmFkb3B0KG5h
bWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXAgPSBuYW1lcy50b1N0cmluZygp
OwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlsZW5hbWUgYWx3YXlzIGRpc3BsYXkgYXMg
TFRSLgogICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcERpcmVjdGlvbiA9IExUUjsKICAg
ICAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAJ
KHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyMiwxNCArMjIyLDE0IEBAIHZvaWQgRXZlbnRTb3VyY2U6OmRp
ZFJlY2VpdmVSZXNwb25zZSh1bnMKIAogdm9pZCBFdmVudFNvdXJjZTo6ZGlkUmVjZWl2ZURhdGEo
Y29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBhcHBlbmQobV9yZWNlaXZlQnVm
LCBtX2RlY29kZXItPmRlY29kZShkYXRhLCBsZW5ndGgpKTsKKyAgICBtX3JlY2VpdmVCdWYuYXBw
ZW5kKG1fZGVjb2Rlci0+ZGVjb2RlKGRhdGEsIGxlbmd0aCkpOwogICAgIHBhcnNlRXZlbnRTdHJl
YW0oKTsKIH0KIAogdm9pZCBFdmVudFNvdXJjZTo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBs
b25nLCBkb3VibGUpCiB7Ci0gICAgaWYgKG1fcmVjZWl2ZUJ1Zi5zaXplKCkgPiAwIHx8IG1fZGF0
YS5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGFwcGVuZChtX3JlY2VpdmVCdWYsICJcblxuIik7Cisg
ICAgaWYgKG1fcmVjZWl2ZUJ1Zi5sZW5ndGgoKSA+IDAgfHwgbV9kYXRhLmxlbmd0aCgpID4gMCkg
eworICAgICAgICBtX3JlY2VpdmVCdWYuYXBwZW5kKCJcblxuIik7CiAgICAgICAgIHBhcnNlRXZl
bnRTdHJlYW0oKTsKICAgICB9CiAgICAgbV9zdGF0ZSA9IENPTk5FQ1RJTkc7CkBAIC0yNTMsNyAr
MjUzLDcgQEAgdm9pZCBFdmVudFNvdXJjZTo6ZGlkRmFpbFJlZGlyZWN0Q2hlY2soKQogdm9pZCBF
dmVudFNvdXJjZTo6cGFyc2VFdmVudFN0cmVhbSgpCiB7CiAgICAgdW5zaWduZWQgaW50IGJ1ZlBv
cyA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGJ1ZlNpemUgPSBtX3JlY2VpdmVCdWYuc2l6ZSgpOwor
ICAgIHVuc2lnbmVkIGludCBidWZTaXplID0gbV9yZWNlaXZlQnVmLmxlbmd0aCgpOwogICAgIHdo
aWxlIChidWZQb3MgPCBidWZTaXplKSB7CiAgICAgICAgIGlmIChtX2Rpc2NhcmRUcmFpbGluZ05l
d2xpbmUpIHsKICAgICAgICAgICAgIGlmIChtX3JlY2VpdmVCdWZbYnVmUG9zXSA9PSAnXG4nKQpA
QCAtMjk0LDcgKzI5NCw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6OnBhcnNlRXZlbnRTdHJlYW1MaW5l
KHUKIHsKICAgICBpZiAoIWxpbmVMZW5ndGgpIHsKICAgICAgICAgaWYgKCFtX2RhdGEuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBtX2RhdGEucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgbV9k
YXRhLnNocmluayhtX2RhdGEubGVuZ3RoKCkgLSAxKTsKICAgICAgICAgICAgIGRpc3BhdGNoRXZl
bnQoY3JlYXRlTWVzc2FnZUV2ZW50KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghbV9ldmVu
dE5hbWUuaXNFbXB0eSgpKQpAQCAtMzQzLDcgKzM0Myw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6OnN0
b3AoKQogUGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IEV2ZW50U291cmNlOjpjcmVhdGVNZXNzYWdl
RXZlbnQoKQogewogICAgIFJlZlB0cjxNZXNzYWdlRXZlbnQ+IGV2ZW50ID0gTWVzc2FnZUV2ZW50
OjpjcmVhdGUoKTsKLSAgICBldmVudC0+aW5pdE1lc3NhZ2VFdmVudChtX2V2ZW50TmFtZS5pc0Vt
cHR5KCkgPyBldmVudE5hbWVzKCkubWVzc2FnZUV2ZW50IDogQXRvbWljU3RyaW5nKG1fZXZlbnRO
YW1lKSwgZmFsc2UsIGZhbHNlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShTdHJpbmc6
OmFkb3B0KG1fZGF0YSkpLCBtX29yaWdpbiwgbV9sYXN0RXZlbnRJZCwgMCwgMCk7CisgICAgZXZl
bnQtPmluaXRNZXNzYWdlRXZlbnQobV9ldmVudE5hbWUuaXNFbXB0eSgpID8gZXZlbnROYW1lcygp
Lm1lc3NhZ2VFdmVudCA6IEF0b21pY1N0cmluZyhtX2V2ZW50TmFtZSksIGZhbHNlLCBmYWxzZSwg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUobV9kYXRhLnJlbGVhc2VTdHJpbmcoKSksIG1f
b3JpZ2luLCBtX2xhc3RFdmVudElkLCAwLCAwKTsKICAgICByZXR1cm4gZXZlbnQucmVsZWFzZSgp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCShyZXZpc2lvbiA5MzcwMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQAogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKICNpbmNs
dWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTExMCwxMyArMTEwLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKICAgICAgICAgUmVm
UHRyPFRocmVhZGFibGVMb2FkZXI+IG1fbG9hZGVyOwogICAgICAgICBUaW1lcjxFdmVudFNvdXJj
ZT4gbV9yZWNvbm5lY3RUaW1lcjsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBtX3JlY2VpdmVCdWY7
CisgICAgICAgIFN0cmluZ0J1aWxkZXIgbV9yZWNlaXZlQnVmOwogICAgICAgICBib29sIG1fZGlz
Y2FyZFRyYWlsaW5nTmV3bGluZTsKICAgICAgICAgYm9vbCBtX2ZhaWxTaWxlbnRseTsKICAgICAg
ICAgYm9vbCBtX3JlcXVlc3RJbkZsaWdodDsKIAogICAgICAgICBTdHJpbmcgbV9ldmVudE5hbWU7
Ci0gICAgICAgIFZlY3RvcjxVQ2hhcj4gbV9kYXRhOworICAgICAgICBTdHJpbmdCdWlsZGVyIG1f
ZGF0YTsKICAgICAgICAgU3RyaW5nIG1fbGFzdEV2ZW50SWQ7CiAgICAgICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBtX3JlY29ubmVjdERlbGF5OwogICAgICAgICBTdHJpbmcgbV9vcmlnaW47CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkocmV2aXNpb24gOTM3MDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTYsOSArOTYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2VyaWFsaXplck1hcmt1cEFj
Y3VtdWxhdG9yKCk7CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChW
ZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVu
dChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50
KiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxk
ZXImIG91dCwgVGV4dCopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1
aWxkZXImIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqLCBOYW1lc3Bh
Y2VzKik7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVuZFRhZyhOb2RlKik7CiAKIHByaXZhdGU6
CkBAIC0xMjAsMjcgKzEyMCwyOCBAQCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6On5TZXJp
YWxpemVyCiB7CiB9CiAKLXZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRU
ZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCogdGV4dCkKK3ZvaWQgU2VyaWFsaXplck1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCogdGV4dCkK
IHsKICAgICBFbGVtZW50KiBwYXJlbnQgPSB0ZXh0LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgaWYg
KHBhcmVudCAmJiAhc2hvdWxkSWdub3JlRWxlbWVudChwYXJlbnQpKQogICAgICAgICBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kVGV4dChvdXQsIHRleHQpOwogfQogCi12b2lkIFNlcmlhbGl6ZXJN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1l
bnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIFNlcmlhbGl6ZXJNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQq
IGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgaWYgKCFzaG91bGRJZ25v
cmVFbGVtZW50KGVsZW1lbnQpKQogICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxl
bWVudChvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwogCiAgICAgaWYgKGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSkgewotICAgICAgICBTdHJpbmcgbWV0YSA9ICI8bWV0
YSBjaGFyc2V0PVwiIiArIG1fZG9jdW1lbnQtPmNoYXJzZXQoKSArICJcIj4iOwotICAgICAgICBv
dXQuYXBwZW5kKG1ldGEuY2hhcmFjdGVycygpLCBtZXRhLmxlbmd0aCgpKTsKKyAgICAgICAgb3V0
LmFwcGVuZCgiPG1ldGEgY2hhcnNldD1cIiIpOworICAgICAgICBvdXQuYXBwZW5kKG1fZG9jdW1l
bnQtPmNoYXJzZXQoKSk7CisgICAgICAgIG91dC5hcHBlbmQoIlwiPiIpOwogICAgIH0KIAogICAg
IC8vIEZJWE1FOiBGb3Igb2JqZWN0IChwbHVnaW5zKSB0YWdzIGFuZCB2aWRlbyB0YWcgd2UgY291
bGQgcmVwbGFjZSB0aGVtIGJ5IGFuIGltYWdlIG9mIHRoZWlyIGN1cnJlbnQgY29udGVudHMuCiB9
CiAKLXZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1
dGVzKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFt
ZXNwYWNlcykKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21B
dHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNl
cyogbmFtZXNwYWNlcykKIHsKICAgICBpZiAoIWVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9y
aWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdp
bi5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9y
aWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTY2hl
bWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOTYsMTggKzM5NywxOCBAQCBTdHJpbmcgU2VjdXJp
dHlPcmlnaW46OnRvU3RyaW5nKCkgY29uc3QKICAgICAgICAgcmV0dXJuICJmaWxlOi8vIjsKICAg
ICB9CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX3Byb3RvY29sLmxlbmd0aCgpICsgbV9ob3N0Lmxlbmd0aCgpICsgMTApOwot
ICAgIGFwcGVuZChyZXN1bHQsIG1fcHJvdG9jb2wpOwotICAgIGFwcGVuZChyZXN1bHQsICI6Ly8i
KTsKLSAgICBhcHBlbmQocmVzdWx0LCBtX2hvc3QpOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0
OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobV9wcm90b2NvbC5sZW5ndGgoKSArIG1faG9z
dC5sZW5ndGgoKSArIDEwKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fcHJvdG9jb2wpOworICAgIHJl
c3VsdC5hcHBlbmQoIjovLyIpOworICAgIHJlc3VsdC5hcHBlbmQobV9ob3N0KTsKIAogICAgIGlm
IChtX3BvcnQpIHsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgIjoiKTsKLSAgICAgICAgYXBwZW5k
KHJlc3VsdCwgU3RyaW5nOjpudW1iZXIobV9wb3J0KSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
IjoiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmc6Om51bWJlcihtX3BvcnQpKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQudG9TdHJpbmcoKTsKIH0KIAogUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gU2VjdXJpdHlP
cmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gOTM3MDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKIAogI2luY2x1ZGUgPHd0
Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODAsOCArODEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2hvdWxkRXNjYXBlVUNoYXIoVUNoCiBTdHJpbmcgZW5jb2RlRm9yRmlsZU5hbWUoY29uc3QgU3Ry
aW5nJiBpbnB1dFN0cikKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dFN0ci5sZW5ndGgo
KTsKLSAgICBWZWN0b3I8VUNoYXIsIDUxMj4gYnVmZmVyKGxlbmd0aCAqIDMgKyAxKTsKLSAgICBV
Q2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7CisgICAgU3RyaW5nQnVpbGRlciBidWZmZXI7CisgICAg
YnVmZmVyLnJlc2l6ZShsZW5ndGggKiAzICsgMSk7CisgICAgVUNoYXIqIHAgPSBidWZmZXIuY2hh
cmFjdGVycygpOwogCiAgICAgY29uc3QgVUNoYXIqIHN0ciA9IGlucHV0U3RyLmNoYXJhY3RlcnMo
KTsKICAgICBjb25zdCBVQ2hhciogc3RyRW5kID0gc3RyICsgbGVuZ3RoOwpAQCAtOTUsOSArOTcs
MTAgQEAgU3RyaW5nIGVuY29kZUZvckZpbGVOYW1lKGNvbnN0IFN0cmluZyYgaQogICAgICAgICAg
ICAgKnArKyA9IGM7CiAgICAgfQogCi0gICAgQVNTRVJUKHAgLSBidWZmZXIuZGF0YSgpIDw9IHN0
YXRpY19jYXN0PGludD4oYnVmZmVyLnNpemUoKSkpOworICAgIEFTU0VSVChwIC0gYnVmZmVyLmNo
YXJhY3RlcnMoKSA8PSBzdGF0aWNfY2FzdDxpbnQ+KGJ1ZmZlci5sZW5ndGgoKSkpOwogCi0gICAg
cmV0dXJuIFN0cmluZyhidWZmZXIuZGF0YSgpLCBwIC0gYnVmZmVyLmRhdGEoKSk7CisgICAgYnVm
ZmVyLnNocmluayhwIC0gYnVmZmVyLmNoYXJhY3RlcnMoKSk7CisgICAgcmV0dXJuIGJ1ZmZlci50
b1N0cmluZygpOwogfQogCiAjaWYgIVBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0tVUkwuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tV
UkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8d3RmL0hl
eE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogI2lmIFVTRShJQ1VfVU5JQ09ERSkKQEAg
LTg4OSwyMiArODkwLDIyIEBAIFN0cmluZyBLVVJMOjpkZXByZWNhdGVkU3RyaW5nKCkgY29uc3QK
ICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuIG1fc3RyaW5nOwogCi0gICAgVmVj
dG9yPFVDaGFyPiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKLSAgICBhcHBl
bmQocmVzdWx0LCBwcm90b2NvbCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKHByb3RvY29sKCkpOwog
ICAgIHJlc3VsdC5hcHBlbmQoJzonKTsKIAotICAgIFZlY3RvcjxVQ2hhcj4gYXV0aG9yaXR5Owor
ICAgIFN0cmluZ0J1aWxkZXIgYXV0aG9yaXR5OwogCiAgICAgaWYgKG1faG9zdEVuZCAhPSBtX3Bh
c3N3b3JkRW5kKSB7CiAgICAgICAgIGlmIChtX3VzZXJFbmQgIT0gbV91c2VyU3RhcnQpIHsKLSAg
ICAgICAgICAgIGFwcGVuZChhdXRob3JpdHksIHVzZXIoKSk7CisgICAgICAgICAgICBhdXRob3Jp
dHkuYXBwZW5kKHVzZXIoKSk7CiAgICAgICAgICAgICBhdXRob3JpdHkuYXBwZW5kKCdAJyk7CiAg
ICAgICAgIH0KLSAgICAgICAgYXBwZW5kKGF1dGhvcml0eSwgaG9zdCgpKTsKKyAgICAgICAgYXV0
aG9yaXR5LmFwcGVuZChob3N0KCkpOwogICAgICAgICBpZiAoaGFzUG9ydCgpKSB7CiAgICAgICAg
ICAgICBhdXRob3JpdHkuYXBwZW5kKCc6Jyk7Ci0gICAgICAgICAgICBhcHBlbmQoYXV0aG9yaXR5
LCBTdHJpbmc6Om51bWJlcihwb3J0KCkpKTsKKyAgICAgICAgICAgIGF1dGhvcml0eS5hcHBlbmQo
U3RyaW5nOjpudW1iZXIocG9ydCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTkxNywxOSAr
OTE4LDE5IEBAIFN0cmluZyBLVVJMOjpkZXByZWNhdGVkU3RyaW5nKCkgY29uc3QKICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnLycpOwogICAgIH0KIAotICAgIGFwcGVuZChyZXN1bHQsIHBhdGgoKSk7
CisgICAgcmVzdWx0LmFwcGVuZChwYXRoKCkpOwogCiAgICAgaWYgKG1fcGF0aEVuZCAhPSBtX3F1
ZXJ5RW5kKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJz8nKTsKLSAgICAgICAgYXBwZW5kKHJl
c3VsdCwgcXVlcnkoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocXVlcnkoKSk7CiAgICAgfQog
CiAgICAgaWYgKG1fZnJhZ21lbnRFbmQgIT0gbV9xdWVyeUVuZCkgewogICAgICAgICByZXN1bHQu
YXBwZW5kKCcjJyk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIGZyYWdtZW50SWRlbnRpZmllcigp
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChmcmFnbWVudElkZW50aWZpZXIoKSk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRv
U3RyaW5nKCk7CiB9CiAKIFN0cmluZyBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3Ry
aW5nJiBzdHIpCkBAIC05MzksNyArOTQwLDcgQEAgU3RyaW5nIGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyhjb25zdCBTdAogCiBTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0
cmluZyYgc3RyLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewotICAgIFZlY3RvcjxV
Q2hhcj4gcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogCiAgICAgQ2hhckJ1ZmZl
ciBidWZmZXI7CiAKQEAgLTk3OCwxMyArOTc5LDEzIEBAIFN0cmluZyBkZWNvZGVVUkxFc2NhcGVT
ZXF1ZW5jZXMoY29uc3QgU3QKIAogICAgICAgICAvLyBCdWlsZCB1cCB0aGUgc3RyaW5nIHdpdGgg
d2hhdCB3ZSBqdXN0IHNraXBwZWQgYW5kIHdoYXQgd2UganVzdCBkZWNvZGVkLgogICAgICAgICBy
ZXN1bHQuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCkgKyBkZWNvZGVkUG9zaXRpb24sIGVuY29kZWRS
dW5Qb3NpdGlvbiAtIGRlY29kZWRQb3NpdGlvbik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZGVj
b2RlZC5jaGFyYWN0ZXJzKCksIGRlY29kZWQubGVuZ3RoKCkpOworICAgICAgICByZXN1bHQuYXBw
ZW5kKGRlY29kZWQpOwogICAgICAgICBkZWNvZGVkUG9zaXRpb24gPSBlbmNvZGVkUnVuRW5kOwog
ICAgIH0KIAogICAgIHJlc3VsdC5hcHBlbmQoc3RyLmNoYXJhY3RlcnMoKSArIGRlY29kZWRQb3Np
dGlvbiwgbGVuZ3RoIC0gZGVjb2RlZFBvc2l0aW9uKTsKIAotICAgIHJldHVybiBTdHJpbmc6OmFk
b3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiAvLyBDYXV0
aW9uOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGJvdW5kcyBjaGVjay4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiTGlua0hhc2guaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCkBAIC03OSw5ICs4MCw5IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBjb250YWluc0NvbG9uU2xhc2hTbGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMoVmVjdG9yPFVDaGFyLCA1MTI+
JiBzdHJpbmcpCitzdGF0aWMgaW5saW5lIHZvaWQgc3F1ZWV6ZU91dE51bGxDaGFyYWN0ZXJzKFN0
cmluZ0J1aWxkZXImIHN0cmluZykKIHsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0cmluZy5zaXplKCk7
CisgICAgc2l6ZV90IHNpemUgPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgc2l6ZV90IGkgPSAwOwog
ICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgaWYgKCFzdHJpbmdbaV0p
CkBAIC05NSwxNCArOTYsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNxdWVlemVPdXROdWxsQ2hh
cmFjdAogICAgICAgICAgICAgc3RyaW5nW2orK10gPSBjaGFyYWN0ZXI7CiAgICAgfQogICAgIEFT
U0VSVChqIDwgc2l6ZSk7Ci0gICAgc3RyaW5nLnNocmluayhqKTsKKyAgICBzdHJpbmcucmVzaXpl
KGopOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhblNsYXNoRG90RG90U2xhc2hlcyhWZWN0b3I8VUNo
YXIsIDUxMj4mIHBhdGgsIHNpemVfdCBmaXJzdFNsYXNoKQorc3RhdGljIHZvaWQgY2xlYW5TbGFz
aERvdERvdFNsYXNoZXMoU3RyaW5nQnVpbGRlciYgcGF0aCwgc2l6ZV90IGZpcnN0U2xhc2gpCiB7
CiAgICAgc2l6ZV90IHNsYXNoID0gZmlyc3RTbGFzaDsKICAgICBkbyB7Ci0gICAgICAgIHNpemVf
dCBwcmV2aW91c1NsYXNoID0gc2xhc2ggPyByZXZlcnNlRmluZChwYXRoLmRhdGEoKSwgcGF0aC5z
aXplKCksICcvJywgc2xhc2ggLSAxKSA6IG5vdEZvdW5kOworICAgICAgICBzaXplX3QgcHJldmlv
dXNTbGFzaCA9IHNsYXNoID8gcmV2ZXJzZUZpbmQocGF0aC5jaGFyYWN0ZXJzKCksIHBhdGgubGVu
Z3RoKCksICcvJywgc2xhc2ggLSAxKSA6IG5vdEZvdW5kOwogICAgICAgICAvLyBEb24ndCByZW1v
dmUgdGhlIGhvc3QsIGkuZS4gaHR0cDovL2Zvby5vcmcvLi4vZm9vLmh0bWwKICAgICAgICAgaWYg
KHByZXZpb3VzU2xhc2ggPT0gbm90Rm91bmQgfHwgKHByZXZpb3VzU2xhc2ggPiAzICYmIHBhdGhb
cHJldmlvdXNTbGFzaCAtIDJdID09ICc6JyAmJiBwYXRoW3ByZXZpb3VzU2xhc2ggLSAxXSA9PSAn
LycpKSB7CiAgICAgICAgICAgICBwYXRoW3NsYXNoXSA9IDA7CkBAIC0xMTMsMTUgKzExNCwxNSBA
QCBzdGF0aWMgdm9pZCBjbGVhblNsYXNoRG90RG90U2xhc2hlcyhWZWN0CiAgICAgICAgICAgICAg
ICAgcGF0aFtpXSA9IDA7CiAgICAgICAgIH0KICAgICAgICAgc2xhc2ggKz0gMzsKLSAgICB9IHdo
aWxlICgoc2xhc2ggPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXpl
KCksIHNsYXNoKSkgIT0gbm90Rm91bmQpOworICAgIH0gd2hpbGUgKChzbGFzaCA9IGZpbmRTbGFz
aERvdERvdFNsYXNoKHBhdGguY2hhcmFjdGVycygpLCBwYXRoLmxlbmd0aCgpLCBzbGFzaCkpICE9
IG5vdEZvdW5kKTsKICAgICBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMocGF0aCk7CiB9CiAKLXN0
YXRpYyB2b2lkIG1lcmdlRG91YmxlU2xhc2hlcyhWZWN0b3I8VUNoYXIsIDUxMj4mIHBhdGgsIHNp
emVfdCBmaXJzdFNsYXNoKQorc3RhdGljIHZvaWQgbWVyZ2VEb3VibGVTbGFzaGVzKFN0cmluZ0J1
aWxkZXImIHBhdGgsIHNpemVfdCBmaXJzdFNsYXNoKQogewotICAgIHNpemVfdCByZWZQb3MgPSBm
aW5kKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJyMnKTsKKyAgICBzaXplX3QgcmVmUG9zID0g
ZmluZChwYXRoLmNoYXJhY3RlcnMoKSwgcGF0aC5sZW5ndGgoKSwgJyMnKTsKICAgICBpZiAoIXJl
ZlBvcyB8fCByZWZQb3MgPT0gbm90Rm91bmQpCi0gICAgICAgIHJlZlBvcyA9IHBhdGguc2l6ZSgp
OworICAgICAgICByZWZQb3MgPSBwYXRoLmxlbmd0aCgpOwogCiAgICAgc2l6ZV90IHNsYXNoID0g
Zmlyc3RTbGFzaDsKICAgICB3aGlsZSAoc2xhc2ggPCByZWZQb3MpIHsKQEAgLTEyOSwzNyArMTMw
LDM3IEBAIHN0YXRpYyB2b2lkIG1lcmdlRG91YmxlU2xhc2hlcyhWZWN0b3I8VUMKICAgICAgICAg
ICAgIHBhdGhbc2xhc2grK10gPSAwOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzbGFzaCAr
PSAyOwotICAgICAgICBpZiAoKHNsYXNoID0gZmluZFNsYXNoU2xhc2gocGF0aC5kYXRhKCksIHBh
dGguc2l6ZSgpLCBzbGFzaCkpID09IG5vdEZvdW5kKQorICAgICAgICBpZiAoKHNsYXNoID0gZmlu
ZFNsYXNoU2xhc2gocGF0aC5jaGFyYWN0ZXJzKCksIHBhdGgubGVuZ3RoKCksIHNsYXNoKSkgPT0g
bm90Rm91bmQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgc3F1ZWV6ZU91dE51bGxD
aGFyYWN0ZXJzKHBhdGgpOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhblNsYXNoRG90U2xhc2hlcyhW
ZWN0b3I8VUNoYXIsIDUxMj4mIHBhdGgsIHNpemVfdCBmaXJzdFNsYXNoKQorc3RhdGljIHZvaWQg
Y2xlYW5TbGFzaERvdFNsYXNoZXMoU3RyaW5nQnVpbGRlciYgcGF0aCwgc2l6ZV90IGZpcnN0U2xh
c2gpCiB7CiAgICAgc2l6ZV90IHNsYXNoID0gZmlyc3RTbGFzaDsKICAgICBkbyB7CiAgICAgICAg
IHBhdGhbc2xhc2hdID0gMDsKICAgICAgICAgcGF0aFtzbGFzaCArIDFdID0gMDsKICAgICAgICAg
c2xhc2ggKz0gMjsKLSAgICB9IHdoaWxlICgoc2xhc2ggPSBmaW5kU2xhc2hEb3RTbGFzaChwYXRo
LmRhdGEoKSwgcGF0aC5zaXplKCksIHNsYXNoKSkgIT0gbm90Rm91bmQpOworICAgIH0gd2hpbGUg
KChzbGFzaCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguY2hhcmFjdGVycygpLCBwYXRoLmxlbmd0
aCgpLCBzbGFzaCkpICE9IG5vdEZvdW5kKTsKICAgICBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMo
cGF0aCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhblBhdGgoVmVjdG9yPFVDaGFyLCA1
MTI+JiBwYXRoKQorc3RhdGljIGlubGluZSB2b2lkIGNsZWFuUGF0aChTdHJpbmdCdWlsZGVyJiBw
YXRoKQogewogICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IGRvIHRoaXMgaW4gdGhlIHF1ZXJ5IG9y
IGFuY2hvciBwYXJ0IG9mIHRoZSBVUkwuCi0gICAgc2l6ZV90IGZpcnN0U2xhc2ggPSBmaW5kU2xh
c2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIDApOworICAgIHNpemVfdCBm
aXJzdFNsYXNoID0gZmluZFNsYXNoRG90RG90U2xhc2gocGF0aC5jaGFyYWN0ZXJzKCksIHBhdGgu
bGVuZ3RoKCksIDApOwogICAgIGlmIChmaXJzdFNsYXNoICE9IG5vdEZvdW5kKQogICAgICAgICBj
bGVhblNsYXNoRG90RG90U2xhc2hlcyhwYXRoLCBmaXJzdFNsYXNoKTsKIAogICAgIC8vIEZJWE1F
OiBTaG91bGQgbm90IGRvIHRoaXMgaW4gdGhlIHF1ZXJ5IHBhcnQuCi0gICAgZmlyc3RTbGFzaCA9
IGZpbmRTbGFzaFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgMCk7CisgICAgZmlyc3RT
bGFzaCA9IGZpbmRTbGFzaFNsYXNoKHBhdGguY2hhcmFjdGVycygpLCBwYXRoLmxlbmd0aCgpLCAw
KTsKICAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKICAgICAgICAgbWVyZ2VEb3VibGVT
bGFzaGVzKHBhdGgsIGZpcnN0U2xhc2gpOwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgZG8g
dGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yIHBhcnQuCi0gICAgZmlyc3RTbGFzaCA9IGZpbmRT
bGFzaERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgMCk7CisgICAgZmlyc3RTbGFz
aCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguY2hhcmFjdGVycygpLCBwYXRoLmxlbmd0aCgpLCAw
KTsKICAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKICAgICAgICAgY2xlYW5TbGFzaERv
dFNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7CiB9CkBAIC0yMDUsNyArMjA2LDcgQEAgTGlua0hh
c2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFyKiB1cgogICAgIHJldHVybiB2aXNpdGVkTGlu
a0hhc2hJbmxpbmUodXJsLCBsZW5ndGgpOwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSB2b2lk
IHZpc2l0ZWRVUkxJbmxpbmUoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBh
dHRyaWJ1dGVVUkwsIFZlY3RvcjxVQ2hhciwgNTEyPiYgYnVmZmVyKQorc3RhdGljIEFMV0FZU19J
TkxJTkUgdm9pZCB2aXNpdGVkVVJMSW5saW5lKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IEF0b21p
Y1N0cmluZyYgYXR0cmlidXRlVVJMLCBTdHJpbmdCdWlsZGVyJiBidWZmZXIpCiB7CiAgICAgaWYg
KGF0dHJpYnV0ZVVSTC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjI3LDcgKzIyOCw3
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRlZFVSTElubGkKICAgICBib29sIGhh
c0NvbG9uU2xhc2hTbGFzaCA9IGNvbnRhaW5zQ29sb25TbGFzaFNsYXNoKGNoYXJhY3RlcnMsIGxl
bmd0aCk7CiAKICAgICBpZiAoaGFzQ29sb25TbGFzaFNsYXNoICYmICFuZWVkc1RyYWlsaW5nU2xh
c2goY2hhcmFjdGVycywgbGVuZ3RoKSkgewotICAgICAgICBidWZmZXIuYXBwZW5kKGF0dHJpYnV0
ZVVSTC5jaGFyYWN0ZXJzKCksIGF0dHJpYnV0ZVVSTC5sZW5ndGgoKSk7CisgICAgICAgIGJ1ZmZl
ci5hcHBlbmQoYXR0cmlidXRlVVJMKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjQx
LDcgKzI0Miw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRlZFVSTElubGkKICAg
ICB9CiAKICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgYnVmZmVyLmFwcGVuZChiYXNlLnN0cmlu
ZygpLmNoYXJhY3RlcnMoKSwgYmFzZS5zdHJpbmcoKS5sZW5ndGgoKSk7CisgICAgICAgIGJ1ZmZl
ci5hcHBlbmQoYmFzZS5zdHJpbmcoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHN3aXRjaCAoY2hh
cmFjdGVyc1swXSkgewogICAgICAgICAgICAgY2FzZSAnLyc6CkBAIC0yNTcsNyArMjU4LDcgQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdGVkVVJMSW5saQogICAgIH0KICAgICBidWZm
ZXIuYXBwZW5kKGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgY2xlYW5QYXRoKGJ1ZmZlcik7Ci0g
ICAgaWYgKG5lZWRzVHJhaWxpbmdTbGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSkg
eworICAgIGlmIChuZWVkc1RyYWlsaW5nU2xhc2goYnVmZmVyLmNoYXJhY3RlcnMoKSwgYnVmZmVy
Lmxlbmd0aCgpKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmNvcnJlY3QgZm9yIFVS
THMgdGhhdCBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yOyB0aGUgIi8iIG5lZWRzIHRvIGdvIGF0IHRo
ZQogICAgICAgICAvLyBlbmQgb2YgdGhlIHBhdGgsICpiZWZvcmUqIHRoZSBxdWVyeSBvciBhbmNo
b3IuCiAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJy8nKTsKQEAgLTI2NiwxOSArMjY3LDIwIEBAIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRlZFVSTElubGkKICAgICByZXR1cm47CiB9CiAK
LXZvaWQgdmlzaXRlZFVSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0
dHJpYnV0ZVVSTCwgVmVjdG9yPFVDaGFyLCA1MTI+JiBidWZmZXIpCit2b2lkIHZpc2l0ZWRVUkwo
Y29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwsIFN0cmlu
Z0J1aWxkZXImIGJ1ZmZlcikKIHsKICAgICByZXR1cm4gdmlzaXRlZFVSTElubGluZShiYXNlLCBh
dHRyaWJ1dGVVUkwsIGJ1ZmZlcik7CiB9CiAKIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25z
dCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKIHsKLSAgICBW
ZWN0b3I8VUNoYXIsIDUxMj4gdXJsOworICAgIFN0cmluZ0J1aWxkZXIgdXJsOworICAgIHVybC5y
ZXNlcnZlQ2FwYWNpdHkoNTEyKTsKICAgICB2aXNpdGVkVVJMSW5saW5lKGJhc2UsIGF0dHJpYnV0
ZVVSTCwgdXJsKTsKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICByZXR1cm4gdmlzaXRlZExpbmtIYXNoSW5saW5lKHVybC5kYXRhKCksIHVybC5zaXplKCkp
OworICAgIHJldHVybiB2aXNpdGVkTGlua0hhc2hJbmxpbmUodXJsLmNoYXJhY3RlcnMoKSwgdXJs
Lmxlbmd0aCgpKTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTGlua0hhc2guaAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9MaW5rSGFzaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIExpbmtI
YXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXMKIC8vIFJlc29sdmVzIHRoZSBwb3Rl
bnRpYWxseSByZWxhdGl2ZSBVUkwgImF0dHJpYnV0ZVVSTCIgcmVsYXRpdmUgdG8gdGhlIGdpdmVu
CiAvLyBiYXNlIFVSTCwgYW5kIHJldHVybnMgdGhlIGhhc2ggb2YgdGhlIHN0cmluZyB0aGF0IHdp
bGwgYmUgdXNlZCBmb3IgdmlzaXRlZC4KIC8vIEl0IHdpbGwgcmV0dXJuIGFuIGVtcHR5IFZlY3Rv
ciBpbiBjYXNlIG9mIGVycm9ycy4KLXZvaWQgdmlzaXRlZFVSTChjb25zdCBLVVJMJiBiYXNlLCBj
b25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCwgVmVjdG9yPFVDaGFyLCA1MTI+Jik7Cit2
b2lkIHZpc2l0ZWRVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRy
aWJ1dGVVUkwsIFN0cmluZ0J1aWxkZXImKTsKIAogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNp
b24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5NSwxNiArMTk1LDE2IEBAIFN0cmluZyBDb2xvcjo6c2VyaWFs
aXplZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQog
Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoMjgpOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZl
Q2FwYWNpdHkoMjgpOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgcmdiYVBhcmVuKTsKLSAgICBhcHBl
bmROdW1iZXIocmVzdWx0LCByZWQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWFTcGFjZSk7
Ci0gICAgYXBwZW5kTnVtYmVyKHJlc3VsdCwgZ3JlZW4oKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwg
Y29tbWFTcGFjZSk7Ci0gICAgYXBwZW5kTnVtYmVyKHJlc3VsdCwgYmx1ZSgpKTsKLSAgICBhcHBl
bmQocmVzdWx0LCBjb21tYVNwYWNlKTsKKyAgICByZXN1bHQuYXBwZW5kKHJnYmFQYXJlbik7Cisg
ICAgcmVzdWx0LmFwcGVuZE51bWJlcihyZWQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYVNw
YWNlKTsKKyAgICByZXN1bHQuYXBwZW5kTnVtYmVyKGdyZWVuKCkpOworICAgIHJlc3VsdC5hcHBl
bmQoY29tbWFTcGFjZSk7CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihibHVlKCkpOworICAgIHJl
c3VsdC5hcHBlbmQoY29tbWFTcGFjZSk7CiAKICAgICBpZiAoIWFscGhhKCkpCiAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJzAnKTsKQEAgLTIxNSw3ICsyMTUsNyBAQCBTdHJpbmcgQ29sb3I6OnNlcmlh
bGl6ZWQoKSBjb25zdAogICAgIH0KIAogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1
cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsK
IH0KIAogU3RyaW5nIENvbG9yOjpuYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCShyZXZp
c2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIm1hcmt1cC5o
IgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTExMCwxNCArMTExLDE0IEBAIHZvaWQgRGF0YU9iamVjdEd0azo6c2V0VVJMKGNv
bnN0IEtVUkwmIHUKICAgICBpZiAoYWN0dWFsTGFiZWwuaXNFbXB0eSgpKQogICAgICAgICBhY3R1
YWxMYWJlbCA9IHVybDsKIAotICAgIFZlY3RvcjxVQ2hhcj4gbWFya3VwOwotICAgIGFwcGVuZCht
YXJrdXAsICI8YSBocmVmPVwiIik7Ci0gICAgYXBwZW5kKG1hcmt1cCwgdXJsLnN0cmluZygpKTsK
LSAgICBhcHBlbmQobWFya3VwLCAiXCI+Iik7CisgICAgU3RyaW5nQnVpbGRlciBtYXJrdXA7Cisg
ICAgbWFya3VwLmFwcGVuZCgiPGEgaHJlZj1cIiIpOworICAgIG1hcmt1cC5hcHBlbmQodXJsLnN0
cmluZygpKTsKKyAgICBtYXJrdXAuYXBwZW5kKCJcIj4iKTsKICAgICBHT3duUHRyPGdjaGFyPiBl
c2NhcGVkKGdfbWFya3VwX2VzY2FwZV90ZXh0KGFjdHVhbExhYmVsLnV0ZjgoKS5kYXRhKCksIC0x
KSk7Ci0gICAgYXBwZW5kKG1hcmt1cCwgU3RyaW5nOjpmcm9tVVRGOChlc2NhcGVkLmdldCgpKSk7
Ci0gICAgYXBwZW5kKG1hcmt1cCwgIjwvYT4iKTsKLSAgICBzZXRNYXJrdXAoU3RyaW5nOjphZG9w
dChtYXJrdXApKTsKKyAgICBtYXJrdXAuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoZXNjYXBlZC5n
ZXQoKSkpOworICAgIG1hcmt1cC5hcHBlbmQoIjwvYT4iKTsKKyAgICBzZXRNYXJrdXAobWFya3Vw
LnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIERhdGFPYmplY3RHdGs6OmNsZWFyVGV4dCgpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAko
cmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQ
YXJzZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV1RGOwpAQCAtMTk2LDcgKzE5Nyw3IEBAIFN0cmluZyBmaWxlbmFt
ZUZyb21IVFRQQ29udGVudERpc3Bvc2l0aW8KIAogU3RyaW5nIGV4dHJhY3RNSU1FVHlwZUZyb21N
ZWRpYVR5cGUoY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUpCiB7Ci0gICAgVmVjdG9yPFVDaGFyLCA2
ND4gbWltZVR5cGU7CisgICAgU3RyaW5nQnVpbGRlciBtaW1lVHlwZTsKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBtZWRpYVR5cGUubGVuZ3RoKCk7CiAgICAgbWltZVR5cGUucmVzZXJ2ZUNhcGFjaXR5
KGxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBA
IC0yMjQsOSArMjI1LDkgQEAgU3RyaW5nIGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29u
cwogICAgICAgICBtaW1lVHlwZS5hcHBlbmQoYyk7CiAgICAgfQogCi0gICAgaWYgKG1pbWVUeXBl
LnNpemUoKSA9PSBsZW5ndGgpCisgICAgaWYgKG1pbWVUeXBlLmxlbmd0aCgpID09IGxlbmd0aCkK
ICAgICAgICAgcmV0dXJuIG1lZGlhVHlwZTsKLSAgICByZXR1cm4gU3RyaW5nKG1pbWVUeXBlLmRh
dGEoKSwgbWltZVR5cGUuc2l6ZSgpKTsKKyAgICByZXR1cm4gbWltZVR5cGUudG9TdHJpbmcoKTsK
IH0KIAogU3RyaW5nIGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb25zdCBTdHJpbmcmIG1l
ZGlhVHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNV
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y0lDVS5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNJQ1UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIHVzaW5n
IHN0ZDo6bWluOwpAQCAtMzA4LDcgKzMwOSw3IEBAIFN0cmluZyBUZXh0Q29kZWNJQ1U6OmRlY29k
ZShjb25zdCBjaGFyKiAKICAgICAKICAgICBFcnJvckNhbGxiYWNrU2V0dGVyIGNhbGxiYWNrU2V0
dGVyKG1fY29udmVydGVySUNVLCBzdG9wT25FcnJvcik7CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJl
c3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKIAogICAgIFVDaGFyIGJ1ZmZlcltDb252
ZXJzaW9uQnVmZmVyU2l6ZV07CiAgICAgVUNoYXIqIGJ1ZmZlckxpbWl0ID0gYnVmZmVyICsgQ29u
dmVyc2lvbkJ1ZmZlclNpemU7CkBAIC0zMzAsNyArMzMxLDcgQEAgU3RyaW5nIFRleHRDb2RlY0lD
VTo6ZGVjb2RlKGNvbnN0IGNoYXIqIAogICAgICAgICBzYXdFcnJvciA9IHRydWU7CiAgICAgfQog
Ci0gICAgU3RyaW5nIHJlc3VsdFN0cmluZyA9IFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICBT
dHJpbmcgcmVzdWx0U3RyaW5nID0gcmVzdWx0LnRvU3RyaW5nKCk7CiAKICAgICAvLyA8aHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTQ+CiAgICAgLy8gU2ltcGxpZmll
ZCBDaGluZXNlIHBhZ2VzIHVzZSB0aGUgY29kZSBBM0EwIHRvIG1lYW4gImZ1bGwtd2lkdGggc3Bh
Y2UiLCBidXQgSUNVIGRlY29kZXMgaXQgYXMgVStFNUU1LgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg1LDEyICs4NSwxMCBAQCBUZXh0U3RyZWFtJiBUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGRvdWJs
CiBUZXh0U3RyZWFtJiBUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0IGNoYXIqIHN0cmluZykK
IHsKICAgICBzaXplX3Qgc3RyaW5nTGVuZ3RoID0gc3RybGVuKHN0cmluZyk7Ci0gICAgc2l6ZV90
IHRleHRMZW5ndGggPSBtX3RleHQuc2l6ZSgpOworICAgIHNpemVfdCB0ZXh0TGVuZ3RoID0gbV90
ZXh0Lmxlbmd0aCgpOwogICAgIGlmIChzdHJpbmdMZW5ndGggPiBudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKSAtIHRleHRMZW5ndGgpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgbV90ZXh0Lmdy
b3codGV4dExlbmd0aCArIHN0cmluZ0xlbmd0aCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdHJpbmdMZW5ndGg7ICsraSkKLSAgICAgICAgbV90ZXh0W3RleHRMZW5ndGggKyBpXSA9IHN0
cmluZ1tpXTsKKyAgICBtX3RleHQuYXBwZW5kKHN0cmluZywgc3RyaW5nTGVuZ3RoKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEwMywxMyArMTAxLDEzIEBAIFRleHRTdHJlYW0mIFRleHRT
dHJlYW06Om9wZXJhdG9yPDwoY29uc3QKIAogVGV4dFN0cmVhbSYgVGV4dFN0cmVhbTo6b3BlcmF0
b3I8PChjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhcHBlbmQobV90ZXh0LCBzdHJpbmcp
OworICAgIG1fdGV4dC5hcHBlbmQoc3RyaW5nKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKIFN0
cmluZyBUZXh0U3RyZWFtOjpyZWxlYXNlKCkKIHsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdCht
X3RleHQpOworICAgIHJldHVybiBtX3RleHQucmVsZWFzZVN0cmluZygpOwogfQogCiAjaWYgT1Mo
V0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dFN0cmVhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dFN0cmVhbS5oCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dFN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAj
ZGVmaW5lIFRleHRTdHJlYW1faAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2lu
Y2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHJlbGVhc2UoKTsKIAogcHJpdmF0ZToK
LSAgICBWZWN0b3I8VUNoYXI+IG1fdGV4dDsKKyAgICBTdHJpbmdCdWlsZGVyIG1fdGV4dDsKIH07
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAJKHJldmlz
aW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2Fk
ZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogLy8gV2UgdXNlIC0yIGhlcmUgYmVjYXVzZSBzb21l
IHBsdWdpbnMgbGlrZSB0byByZXR1cm4gLTEgdG8gaW5kaWNhdGUgZXJyb3IKQEAgLTEzOCwyMSAr
MTM5LDIxIEBAIHZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSgpCiAgICAgbG9uZyBsb25n
IGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1fcmVzb3VyY2VSZXNwb25zZS5leHBlY3RlZENvbnRl
bnRMZW5ndGgoKTsKIAogICAgIGlmIChtX3Jlc291cmNlUmVzcG9uc2UuaXNIVFRQKCkpIHsKLSAg
ICAgICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAgICAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIFN0cmluZyBzZXBhcmF0b3IoIjogIik7CiAKICAgICAg
ICAgU3RyaW5nIHN0YXR1c0xpbmUgPSAiSFRUUCAiICsgU3RyaW5nOjpudW1iZXIobV9yZXNvdXJj
ZVJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpICsgIiBPS1xuIjsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoc3RhdHVzTGluZS5jaGFyYWN0ZXJzKCksIHN0YXR1c0xpbmUubGVuZ3RoKCkp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzdGF0dXNMaW5lKTsKIAogICAgICAgICBI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0
cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC5sZW5ndGgoKSk7Ci0gICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0b3IuY2hhcmFjdGVycygpLCBzZXBhcmF0b3Iu
bGVuZ3RoKCkpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZC5j
aGFyYWN0ZXJzKCksIGl0LT5zZWNvbmQubGVuZ3RoKCkpOworICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHNlcGFyYXRvcik7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25k
KTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgICAgICB9CiAK
LSAgICAgICAgbV9oZWFkZXJzID0gU3RyaW5nOjphZG9wdChzdHJpbmdCdWlsZGVyKS51dGY4KCk7
CisgICAgICAgIG1faGVhZGVycyA9IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7CiAK
ICAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgaXMgZW5jb2RlZCAobW9zdCBsaWtlbHkgY29tcHJl
c3NlZCksIHRoZW4gZG9uJ3Qgc2VuZCBpdHMgbGVuZ3RoIHRvIHRoZSBwbHVnaW4sCiAgICAgICAg
IC8vIHdoaWNoIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZGVjb2RlZCBsZW5ndGgsIG5vdCB5
ZXQga25vd24gYXQgdGhlIG1vbWVudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsOCArMTY4LDgg
QEAgc3RhdGljIHZvaWQgYWRqdXN0Q2hhcmFjdGVyc0FuZExlbmd0aEZvcgogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgaHlwaGVuU3RyaW5nID0gc3R5bGUtPmh5cGhlblN0cmluZygpOwogICAgIGNo
YXJhY3RlcnNXaXRoSHlwaGVuLnJlc2VydmVDYXBhY2l0eShsZW5ndGggKyBoeXBoZW5TdHJpbmcu
bGVuZ3RoKCkpOwogICAgIGNoYXJhY3RlcnNXaXRoSHlwaGVuLmFwcGVuZChjaGFyYWN0ZXJzLCBs
ZW5ndGgpOwotICAgIGNoYXJhY3RlcnNXaXRoSHlwaGVuLmFwcGVuZChoeXBoZW5TdHJpbmcuY2hh
cmFjdGVycygpLCBoeXBoZW5TdHJpbmcubGVuZ3RoKCkpOwotICAgIGNoYXJhY3RlcnMgPSBjaGFy
YWN0ZXJzV2l0aEh5cGhlbi5kYXRhKCk7CisgICAgY2hhcmFjdGVyc1dpdGhIeXBoZW4uYXBwZW5k
KGh5cGhlblN0cmluZyk7CisgICAgY2hhcmFjdGVycyA9IGNoYXJhY3RlcnNXaXRoSHlwaGVuLmNo
YXJhY3RlcnMoKTsKICAgICBsZW5ndGggKz0gaHlwaGVuU3RyaW5nLmxlbmd0aCgpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDkz
NzAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIklubGluZUJveC5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHQuaCIgLy8gc28gdGV4dFJlbmRlcmVyKCkgY2FuIGJlIGlubGluZQogI2lu
Y2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzQsNyArMzUsMTEgQEAgY2xhc3MgRG9jdW1lbnRN
YXJrZXI7CiAKIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNOb1RydW5jYXRpb24gPSBVU0hSVF9NQVg7
CiBjb25zdCB1bnNpZ25lZCBzaG9ydCBjRnVsbFRydW5jYXRpb24gPSBVU0hSVF9NQVggLSAxOwot
dHlwZWRlZiBWZWN0b3I8VUNoYXIsIDI1Nj4gQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuOworCitj
bGFzcyBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4gOiBwdWJsaWMgU3RyaW5nQnVpbGRlciB7Citw
dWJsaWM6CisgICAgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKCkgeyByZXNlcnZlQ2FwYWNpdHko
MjU2KTsgfQorfTsKIAogLy8gSGVscGVyIGZ1bmN0aW9ucyBzaGFyZWQgYnkgSW5saW5lVGV4dEJv
eCAvIFNWR1Jvb3RJbmxpbmVCb3gKIHZvaWQgdXBkYXRlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xv
ciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBDb2xvclNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBA
IC0zNzAsMTcgKzM3MSwxNyBAQCBTdHJpbmcgUmVuZGVyTGlzdEl0ZW06Om1hcmtlclRleHRXaXRo
U3VmCiAKICAgICBjb25zdCBTdHJpbmcmIG1hcmtlclRleHQgPSBtX21hcmtlci0+dGV4dCgpOwog
ICAgIGNvbnN0IFN0cmluZyBtYXJrZXJTdWZmaXggPSBtX21hcmtlci0+c3VmZml4KCk7Ci0gICAg
VmVjdG9yPFVDaGFyPiByZXN1bHRWZWN0b3I7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAK
ICAgICBpZiAoIW1fbWFya2VyLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0g
ICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQobWFya2VyU3VmZml4LmNoYXJhY3RlcnMoKSwgbWFy
a2VyU3VmZml4Lmxlbmd0aCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtYXJrZXJTdWZmaXgp
OwogCi0gICAgcmVzdWx0VmVjdG9yLmFwcGVuZChtYXJrZXJUZXh0LmNoYXJhY3RlcnMoKSwgbWFy
a2VyVGV4dC5sZW5ndGgoKSk7CisgICAgcmVzdWx0LmFwcGVuZChtYXJrZXJUZXh0KTsKIAogICAg
IGlmIChtX21hcmtlci0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAg
ICByZXN1bHRWZWN0b3IuYXBwZW5kKG1hcmtlclN1ZmZpeC5jaGFyYWN0ZXJzKCksIG1hcmtlclN1
ZmZpeC5sZW5ndGgoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobWFya2VyU3VmZml4KTsKIAot
ICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdFZlY3Rvcik7CisgICAgcmV0dXJuIHJlc3Vs
dC50b1N0cmluZygpOwogfQogCiB2b2lkIFJlbmRlckxpc3RJdGVtOjpleHBsaWNpdFZhbHVlQ2hh
bmdlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2lu
Y2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CkBAIC0xMjMsMTIgKzEyNCwxMiBAQCBzdGF0aWMgU3RyaW5nIHRvU3ltYm9saWMoaW50IG51
bWJlciwgY29uCiAgICAgLS1udW1iZXJTaGFkb3c7CiAKICAgICAvLyBUaGUgYXN0ZXJpc2tzIGxp
c3Qtc3R5bGUtdHlwZSBpcyB0aGUgd29yc3QgY2FzZTsgd2Ugc2hvdyB8bnVtYmVyU2hhZG93fCBh
c3Rlcmlza3MuCi0gICAgVmVjdG9yPFVDaGFyPiBsZXR0ZXJzOworICAgIFN0cmluZ0J1aWxkZXIg
bGV0dGVyczsKICAgICBsZXR0ZXJzLmFwcGVuZChzeW1ib2xzW251bWJlclNoYWRvdyAlIHN5bWJv
bHNTaXplXSk7CiAgICAgdW5zaWduZWQgbnVtU3ltYm9scyA9IG51bWJlclNoYWRvdyAvIHN5bWJv
bHNTaXplOwogICAgIHdoaWxlIChudW1TeW1ib2xzLS0pCiAgICAgICAgIGxldHRlcnMuYXBwZW5k
KHN5bWJvbHNbbnVtYmVyU2hhZG93ICUgc3ltYm9sc1NpemVdKTsKLSAgICByZXR1cm4gU3RyaW5n
OjphZG9wdChsZXR0ZXJzKTsKKyAgICByZXR1cm4gbGV0dGVycy50b1N0cmluZygpOwogfQogCiBz
dGF0aWMgU3RyaW5nIHRvQWxwaGFiZXRpYyhpbnQgbnVtYmVyLCBjb25zdCBVQ2hhciogYWxwaGFi
ZXQsIHVuc2lnbmVkIGFscGhhYmV0U2l6ZSkKQEAgLTEyNzQsMTMgKzEyNzUsMTMgQEAgdm9pZCBS
ZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgICAgICAvLyBUZXh0IGlzIG5v
dCBhcmJpdHJhcnkuIFdlIGNhbiBqdWRnZSB3aGV0aGVyIGl0J3MgUlRMIGZyb20gdGhlIGZpcnN0
IGNoYXJhY3RlciwKICAgICAgICAgLy8gYW5kIHdlIG9ubHkgbmVlZCB0byBoYW5kbGUgdGhlIGRp
cmVjdGlvbiBSaWdodFRvTGVmdCBmb3Igbm93LgogICAgICAgICBib29sIHRleHROZWVkc1JldmVy
c2luZyA9IGRpcmVjdGlvbihtX3RleHRbMF0pID09IFJpZ2h0VG9MZWZ0OwotICAgICAgICBWZWN0
b3I8VUNoYXI+IHJldmVyc2VkVGV4dDsKKyAgICAgICAgU3RyaW5nQnVpbGRlciByZXZlcnNlZFRl
eHQ7CiAgICAgICAgIGlmICh0ZXh0TmVlZHNSZXZlcnNpbmcpIHsKICAgICAgICAgICAgIGludCBs
ZW5ndGggPSBtX3RleHQubGVuZ3RoKCk7CiAgICAgICAgICAgICByZXZlcnNlZFRleHQuZ3Jvdyhs
ZW5ndGgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAg
ICAgICAgICAgICAgICByZXZlcnNlZFRleHRbbGVuZ3RoIC0gaSAtIDFdID0gbV90ZXh0W2ldOwot
ICAgICAgICAgICAgdGV4dFJ1bi5zZXRUZXh0KHJldmVyc2VkVGV4dC5kYXRhKCksIGxlbmd0aCk7
CisgICAgICAgICAgICB0ZXh0UnVuLnNldFRleHQocmV2ZXJzZWRUZXh0LmNoYXJhY3RlcnMoKSwg
bGVuZ3RoKTsKICAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IFVDaGFyIHN1ZmZpeCA9IGxpc3RN
YXJrZXJTdWZmaXgodHlwZSwgbV9saXN0SXRlbS0+dmFsdWUoKSk7CkBAIC0xNTUyLDE4ICsxNTUz
LDE4IEBAIFN0cmluZyBSZW5kZXJMaXN0TWFya2VyOjpzdWZmaXgoKSBjb25zdAogICAgIEVMaXN0
U3R5bGVUeXBlIHR5cGUgPSBzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCk7CiAgICAgY29uc3QgVUNo
YXIgc3VmZml4ID0gbGlzdE1hcmtlclN1ZmZpeCh0eXBlLCBtX2xpc3RJdGVtLT52YWx1ZSgpKTsK
IAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0VmVjdG9yOwotICAgIHJlc3VsdFZlY3Rvci5hcHBl
bmQoc3VmZml4KTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5k
KHN1ZmZpeCk7CiAKICAgICAvLyBJZiB0aGUgc3VmZml4IGlzIG5vdCAnICcsIGFuIGV4dHJhIHNw
YWNlIGlzIG5lZWRlZAogICAgIGlmIChzdWZmaXggIT0gJyAnKSB7CiAgICAgICAgIGlmIChzdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICByZXN1bHRWZWN0b3Iu
YXBwZW5kKCcgJyk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJlc3VsdFZlY3Rvci5wcmVwZW5kKCcgJyk7CisgICAgICAgICAgICBy
ZXN1bHQucHJlcGVuZCgnICcpOwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJl
c3VsdFZlY3Rvcik7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBib29sIFJl
bmRlckxpc3RNYXJrZXI6OmlzSW5zaWRlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTcsNyArMTk3LDcgQEAgc3RhdGljIGJvb2wgaXNFbXB0eU9yVW5zdHlsZWRBcHBsZVN0
eWxlUwogCiBTdHJpbmcgcXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKGNvbnN0IFN0cmluZyYg
cykKIHsKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3Vs
dDsKICAgICByZXN1bHQuYXBwZW5kKCciJyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAh
PSBzLmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgVUNoYXIgYyA9IHNbaV07CkBAIC0yMjIsNyAr
MjIyLDcgQEAgU3RyaW5nIHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyhjb25zdAogICAgICAg
ICB9CiAgICAgfQogICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKLSAgICByZXR1cm4gU3RyaW5nOjph
ZG9wdChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogdm9pZCBS
ZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvLCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZl
bmNlZC5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MT3Bl
cmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCkBAIC02NCwxMiArNjUs
MTIgQEAgdm9pZCBSZW5kZXJNYXRoTUxGZW5jZWQ6OnVwZGF0ZUZyb21FbGVtZQogICAgIAogICAg
IEF0b21pY1N0cmluZyBzZXBhcmF0b3JzID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZlbmNlZCkt
PmdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6c2VwYXJhdG9yc0F0dHIpOwogICAgIGlmICghc2Vw
YXJhdG9ycy5pc051bGwoKSkgewotICAgICAgICBWZWN0b3I8VUNoYXI+IGNoYXJhY3RlcnM7Cisg
ICAgICAgIFN0cmluZ0J1aWxkZXIgY2hhcmFjdGVyczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBzZXBhcmF0b3JzLmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgICAgIGlm
ICghaXNTcGFjZU9yTmV3bGluZShzZXBhcmF0b3JzW2ldKSkKICAgICAgICAgICAgICAgICBjaGFy
YWN0ZXJzLmFwcGVuZChzZXBhcmF0b3JzW2ldKTsKICAgICAgICAgfQotICAgICAgICBtX3NlcGFy
YXRvcnMgPSAhY2hhcmFjdGVycy5zaXplKCkgPyAwIDogU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJh
Y3RlcnMuZGF0YSgpICwgY2hhcmFjdGVycy5zaXplKCkpOworICAgICAgICBtX3NlcGFyYXRvcnMg
PSAhY2hhcmFjdGVycy5sZW5ndGgoKSA/IDAgOiBjaGFyYWN0ZXJzLnRvU3RyaW5nKCkuaW1wbCgp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRoZSBzZXBhcmF0b3IgZGVmYXVsdHMgdG8gYSBz
aW5nbGUgY29tbWEuCiAgICAgICAgIG1fc2VwYXJhdG9ycyA9IFN0cmluZ0ltcGw6OmNyZWF0ZSgi
LCIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3Bw
CShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNv
ZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIklE
QktleS5oIgogI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAogLy8gTGV2ZWxEQiBzdG9yZXMga2V5L3ZhbHVlIHBhaXJzLiBLZXlz
IGFuZCB2YWx1ZXMgYXJlIHN0cmluZ3Mgb2YgYnl0ZXMsIG5vcm1hbGx5IG9mIHR5cGUgVmVjdG9y
PGNoYXI+LgogLy8KQEAgLTI2NCwxNiArMjY1LDE3IEBAIFN0cmluZyBkZWNvZGVTdHJpbmcoY29u
c3QgY2hhciogcCwgY29uc3QKICAgICBBU1NFUlQoISgoZW5kIC0gcCkgJSAyKSk7CiAKICAgICBz
aXplX3QgbGVuID0gKGVuZCAtIHApIC8gMjsKLSAgICBWZWN0b3I8VUNoYXI+IHZlY3RvcihsZW4p
OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5ncm93KGxlbik7CiAKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgIHVuc2lnbmVkIGNo
YXIgaGkgPSAqcCsrOwogICAgICAgICB1bnNpZ25lZCBjaGFyIGxvID0gKnArKzsKIAotICAgICAg
ICB2ZWN0b3JbaV0gPSAoaGkgPDwgOCkgfCBsbzsKKyAgICAgICAgcmVzdWx0W2ldID0gKGhpIDw8
IDgpIHwgbG87CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQodmVjdG9yKTsKKyAg
ICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFZlY3RvcjxjaGFyPiBlbmNvZGVTdHJp
bmdXaXRoTGVuZ3RoKGNvbnN0IFN0cmluZyYgcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzQsNyArODc0LDcgQEAgU3RyaW5n
IFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYQogICAgICAgICByZXR1cm4gIiI7CiAg
ICAgfQogCi0gICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMo
KS5iZWdpbigpOyBpdCE9IGVuZDsgKytpdCkgewpAQCAtODkwLDE1ICs4OTAsMTUgQEAgU3RyaW5n
IFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYQogICAgICAgICBpZiAoIW1fc2FtZU9y
aWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3Qo
aXQtPmZpcnN0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC5sZW5ndGgoKSk7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CiAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcgJyk7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+
c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29u
ZCk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdccicpOwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChz
dHJpbmdCdWlsZGVyKTsKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQog
CiBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDkzNzAzKQorKysgU291cmNlL1dlYkNvcmUv
eG1sL1hQYXRoRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAog
I2luY2x1ZGUgIlhQYXRoVXRpbC5oIgogI2luY2x1ZGUgIlhQYXRoVmFsdWUuaCIKICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFhQYXRoIHsKQEAgLTMxOCwyNiArMzE5
LDI2IEBAIFZhbHVlIEZ1blBvc2l0aW9uOjpldmFsdWF0ZSgpIGNvbnN0CiBWYWx1ZSBGdW5JZDo6
ZXZhbHVhdGUoKSBjb25zdAogewogICAgIFZhbHVlIGEgPSBhcmcoMCktPmV2YWx1YXRlKCk7Ci0g
ICAgVmVjdG9yPFVDaGFyPiBpZExpc3Q7IC8vIEEgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBv
ZiBJRHMKKyAgICBTdHJpbmdCdWlsZGVyIGlkTGlzdDsgLy8gQSB3aGl0ZXNwYWNlLXNlcGFyYXRl
ZCBsaXN0IG9mIElEcwogCiAgICAgaWYgKGEuaXNOb2RlU2V0KCkpIHsKICAgICAgICAgY29uc3Qg
Tm9kZVNldCYgbm9kZXMgPSBhLnRvTm9kZVNldCgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG5vZGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBTdHJpbmcgc3RyID0gc3Ry
aW5nVmFsdWUobm9kZXNbaV0pOwotICAgICAgICAgICAgaWRMaXN0LmFwcGVuZChzdHIuY2hhcmFj
dGVycygpLCBzdHIubGVuZ3RoKCkpOworICAgICAgICAgICAgaWRMaXN0LmFwcGVuZChzdHIpOwog
ICAgICAgICAgICAgaWRMaXN0LmFwcGVuZCgnICcpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgU3RyaW5nIHN0ciA9IGEudG9TdHJpbmcoKTsKLSAgICAgICAgaWRMaXN0LmFwcGVu
ZChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkpOworICAgICAgICBpZExpc3QuYXBwZW5k
KHN0cik7CiAgICAgfQogICAgIAogICAgIFRyZWVTY29wZSogY29udGV4dFNjb3BlID0gZXZhbHVh
dGlvbkNvbnRleHQoKS5ub2RlLT50cmVlU2NvcGUoKTsKICAgICBOb2RlU2V0IHJlc3VsdDsKICAg
ICBIYXNoU2V0PE5vZGUqPiByZXN1bHRTZXQ7CiAKLSAgICBzaXplX3Qgc3RhcnRQb3MgPSAwOwot
ICAgIHNpemVfdCBsZW5ndGggPSBpZExpc3Quc2l6ZSgpOworICAgIHVuc2lnbmVkIHN0YXJ0UG9z
ID0gMDsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBpZExpc3QubGVuZ3RoKCk7CiAgICAgd2hpbGUg
KHRydWUpIHsKICAgICAgICAgd2hpbGUgKHN0YXJ0UG9zIDwgbGVuZ3RoICYmIGlzV2hpdGVzcGFj
ZShpZExpc3Rbc3RhcnRQb3NdKSkKICAgICAgICAgICAgICsrc3RhcnRQb3M7CkBAIC00MzYsMTUg
KzQzNywxNiBAQCBWYWx1ZSBGdW5TdHJpbmc6OmV2YWx1YXRlKCkgY29uc3QKIAogVmFsdWUgRnVu
Q29uY2F0OjpldmFsdWF0ZSgpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFVDaGFyLCAxMDI0PiByZXN1
bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0
eSgxMDI0KTsKIAogICAgIHVuc2lnbmVkIGNvdW50ID0gYXJnQ291bnQoKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBTdHJpbmcgc3RyKGFyZyhp
KS0+ZXZhbHVhdGUoKS50b1N0cmluZygpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIuY2hh
cmFjdGVycygpLCBzdHIubGVuZ3RoKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKHN0cik7CiAg
ICAgfQogCi0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsK
KyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFZhbHVlIEZ1blN0YXJ0c1dpdGg6
OmV2YWx1YXRlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCShyZXZpc2lv
biA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaWYgRU5BQkxFKFhQQVRIKQogCiAjaW5jbHVkZSAiQ29u
dGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFhQYXRoIHsKQEAgLTUxLDE3ICs1MiwxNyBAQCBT
dHJpbmcgc3RyaW5nVmFsdWUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIHJldHVybiBub2RlLT5u
b2RlVmFsdWUoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmIChpc1Jvb3REb21O
b2RlKG5vZGUpIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7Ci0g
ICAgICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgICAgICAgICAgICAgU3Ry
aW5nQnVpbGRlciByZXN1bHQ7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0
eSgxMDI0KTsKIAogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IG5vZGUtPmZpcnN0Q2hp
bGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobm9kZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiBub2RlVmFsdWUgPSBuLT5ub2RlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQobm9kZVZhbHVlLmNoYXJhY3RlcnMoKSwgbm9kZVZhbHVlLmxl
bmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobm9kZVZhbHVl
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwogICAgICAgICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAkocmV2aXNpb24g
OTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjgsOSArMTY4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldFhT
TFRMb2FkQ2FsbEJhY2soeAogICAgIGdsb2JhbENhY2hlZFJlc291cmNlTG9hZGVyID0gY2FjaGVk
UmVzb3VyY2VMb2FkZXI7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVUb1ZlY3Rvcih2b2lkKiBjb250
ZXh0LCBjb25zdCBjaGFyKiBidWZmZXIsIGludCBsZW4pCitzdGF0aWMgaW50IHdyaXRlVG9TdHJp
bmdCdWlsZGVyKHZvaWQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50IGxlbikKIHsK
LSAgICBWZWN0b3I8VUNoYXI+JiByZXN1bHRPdXRwdXQgPSAqc3RhdGljX2Nhc3Q8VmVjdG9yPFVD
aGFyPio+KGNvbnRleHQpOworICAgIFN0cmluZ0J1aWxkZXImIHJlc3VsdE91dHB1dCA9ICpzdGF0
aWNfY2FzdDxTdHJpbmdCdWlsZGVyKj4oY29udGV4dCk7CiAKICAgICBpZiAoIWxlbikKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC0xOTcsOSArMTk3LDkgQEAgc3RhdGljIGJvb2wgc2F2ZVJlc3VsdFRv
U3RyaW5nKHhtbERvY1B0cgogICAgIGlmICghb3V0cHV0QnVmKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdFZlY3RvcjsKLSAgICBvdXRwdXRCdWYtPmNv
bnRleHQgPSAmcmVzdWx0VmVjdG9yOwotICAgIG91dHB1dEJ1Zi0+d3JpdGVjYWxsYmFjayA9IHdy
aXRlVG9WZWN0b3I7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHRCdWlsZGVyOworICAgIG91dHB1
dEJ1Zi0+Y29udGV4dCA9ICZyZXN1bHRCdWlsZGVyOworICAgIG91dHB1dEJ1Zi0+d3JpdGVjYWxs
YmFjayA9IHdyaXRlVG9TdHJpbmdCdWlsZGVyOwogCiAgICAgaW50IHJldHZhbCA9IHhzbHRTYXZl
UmVzdWx0VG8ob3V0cHV0QnVmLCByZXN1bHREb2MsIHNoZWV0KTsKICAgICB4bWxPdXRwdXRCdWZm
ZXJDbG9zZShvdXRwdXRCdWYpOwpAQCAtMjA3LDEwICsyMDcsMTAgQEAgc3RhdGljIGJvb2wgc2F2
ZVJlc3VsdFRvU3RyaW5nKHhtbERvY1B0cgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAv
LyBXb3JrYXJvdW5kIGZvciA8aHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDk1NjY4PjogbGlieHNsdCBhcHBlbmRzIGFuIGV4dHJhIGxpbmUgZmVlZCB0byB0aGUgcmVz
dWx0LgotICAgIGlmIChyZXN1bHRWZWN0b3Iuc2l6ZSgpID4gMCAmJiByZXN1bHRWZWN0b3JbcmVz
dWx0VmVjdG9yLnNpemUoKSAtIDFdID09ICdcbicpCi0gICAgICAgIHJlc3VsdFZlY3Rvci5yZW1v
dmVMYXN0KCk7CisgICAgaWYgKHJlc3VsdEJ1aWxkZXIubGVuZ3RoKCkgPiAwICYmIHJlc3VsdEJ1
aWxkZXJbcmVzdWx0QnVpbGRlci5sZW5ndGgoKSAtIDFdID09ICdcbicpCisgICAgICAgIHJlc3Vs
dEJ1aWxkZXIuc2hyaW5rKHJlc3VsdEJ1aWxkZXIubGVuZ3RoKCkgLSAxKTsKIAotICAgIHJlc3Vs
dFN0cmluZyA9IFN0cmluZzo6YWRvcHQocmVzdWx0VmVjdG9yKTsKKyAgICByZXN1bHRTdHJpbmcg
PSByZXN1bHRCdWlsZGVyLnRvU3RyaW5nKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5l
TWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFj
dGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiA5MzcwMykKKysrIFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0
aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIENoYXJhY3Rl
clJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHNfaAogI2RlZmluZSBDaGFyYWN0ZXJSZWZlcmVu
Y2VQYXJzZXJJbmxpbmVNZXRob2RzX2gKIAotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMzYsMTkgKzM2LDE5IEBAIGlubGluZSBib29sIGlzSGV4RGlnaXQoVUNoYXIgY2MpCiAgICAg
cmV0dXJuIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKSB8fCAoY2MgPj0gJ2EnICYmIGNjIDw9ICdm
JykgfHwgKGNjID49ICdBJyAmJiBjYyA8PSAnRicpOwogfQogCi1pbmxpbmUgdm9pZCB1bmNvbnN1
bWVDaGFyYWN0ZXJzKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBjb25zdCBWZWN0b3I8VUNoYXIs
IDEwPiYgY29uc3VtZWRDaGFyYWN0ZXJzKQoraW5saW5lIHZvaWQgdW5jb25zdW1lQ2hhcmFjdGVy
cyhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nQnVpbGRlciYgY29uc3VtZWRD
aGFyYWN0ZXJzKQogewotICAgIGlmIChjb25zdW1lZENoYXJhY3RlcnMuc2l6ZSgpID09IDEpCisg
ICAgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5ndGgoKSA9PSAxKQogICAgICAgICBzb3VyY2Uu
cHVzaChjb25zdW1lZENoYXJhY3RlcnNbMF0pOwotICAgIGVsc2UgaWYgKGNvbnN1bWVkQ2hhcmFj
dGVycy5zaXplKCkgPT0gMikgeworICAgIGVsc2UgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5n
dGgoKSA9PSAyKSB7CiAgICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1swXSk7
CiAgICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1sxXSk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIHNvdXJjZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoY29uc3VtZWRD
aGFyYWN0ZXJzLmRhdGEoKSwgY29uc3VtZWRDaGFyYWN0ZXJzLnNpemUoKSkpKTsKKyAgICAgICAg
c291cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5nKGNvbnN1bWVkQ2hhcmFjdGVycy50b1N0cmlu
Z1ByZXNlcnZlQ2FwYWNpdHkoKSkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgUGFyc2VyRnVu
Y3Rpb25zPgotYm9vbCBjb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYg
c291cmNlLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5v
dWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpCitib29sIGNv
bnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1
aWxkZXImIGRlY29kZWRDaGFyYWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFy
IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQogewogICAgIEFTU0VSVCghYWRkaXRpb25hbEFs
bG93ZWRDaGFyYWN0ZXIgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJyInIHx8IGFk
ZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICdcJycgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFy
YWN0ZXIgPT0gJz4nKTsKICAgICBBU1NFUlQoIW5vdEVub3VnaENoYXJhY3RlcnMpOwpAQCAtNjUs
NyArNjUsNyBAQCBib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkCiAgICAg
fTsKICAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSA9IEluaXRpYWw7CiAgICAgVUNoYXIzMiBy
ZXN1bHQgPSAwOwotICAgIFZlY3RvcjxVQ2hhciwgMTA+IGNvbnN1bWVkQ2hhcmFjdGVyczsKKyAg
ICBTdHJpbmdCdWlsZGVyIGNvbnN1bWVkQ2hhcmFjdGVyczsKICAgICAKICAgICB3aGlsZSAoIXNv
dXJjZS5pc0VtcHR5KCkpIHsKICAgICAgICAgVUNoYXIgY2MgPSAqc291cmNlOwpJbmRleDogU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuQmFzZS5oCShyZXZpc2lvbiA5Mzcw
MykKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKICNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVk
ZSA8c3RkaW8uaD4KQEAgLTQ4LDggKzQ5LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBtX2hhc1B1
YmxpY0lkZW50aWZpZXI7CiAgICAgYm9vbCBtX2hhc1N5c3RlbUlkZW50aWZpZXI7Ci0gICAgV1RG
OjpWZWN0b3I8VUNoYXI+IG1fcHVibGljSWRlbnRpZmllcjsKLSAgICBXVEY6OlZlY3RvcjxVQ2hh
cj4gbV9zeXN0ZW1JZGVudGlmaWVyOworICAgIFN0cmluZ0J1aWxkZXIgbV9wdWJsaWNJZGVudGlm
aWVyOworICAgIFN0cmluZ0J1aWxkZXIgbV9zeXN0ZW1JZGVudGlmaWVyOwogfTsKIAogY2xhc3Mg
QXR0cmlidXRlQmFzZSB7CkBAIC02Miw4ICs2Myw4IEBAIHB1YmxpYzoKIAogICAgIFJhbmdlIG1f
bmFtZVJhbmdlOwogICAgIFJhbmdlIG1fdmFsdWVSYW5nZTsKLSAgICBXVEY6OlZlY3RvcjxVQ2hh
ciwgMzI+IG1fbmFtZTsKLSAgICBXVEY6OlZlY3RvcjxVQ2hhciwgMzI+IG1fdmFsdWU7CisgICAg
U3RyaW5nQnVpbGRlciBtX25hbWU7CisgICAgU3RyaW5nQnVpbGRlciBtX3ZhbHVlOwogfTsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgVHlwZVNldCwgdHlwZW5hbWUgRG9jdHlwZURhdGFUeXBlID0gRG9j
dHlwZURhdGFCYXNlLCB0eXBlbmFtZSBBdHRyaWJ1dGVUeXBlID0gQXR0cmlidXRlQmFzZT4KQEAg
LTc1LDEwICs3NiwxMyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBBdHRyaWJ1dGVUeXBlIEF0dHJp
YnV0ZTsKICAgICB0eXBlZGVmIERvY3R5cGVEYXRhVHlwZSBEb2N0eXBlRGF0YTsKIAotICAgIHR5
cGVkZWYgV1RGOjpWZWN0b3I8QXR0cmlidXRlLCAxMD4gQXR0cmlidXRlTGlzdDsKLSAgICB0eXBl
ZGVmIFdURjo6VmVjdG9yPFVDaGFyLCAxMDI0PiBEYXRhVmVjdG9yOworICAgIHR5cGVkZWYgVmVj
dG9yPEF0dHJpYnV0ZSwgMTA+IEF0dHJpYnV0ZUxpc3Q7CiAKLSAgICBNYXJrdXBUb2tlbkJhc2Uo
KSB7IGNsZWFyKCk7IH0KKyAgICBNYXJrdXBUb2tlbkJhc2UoKQorICAgIHsKKyAgICAgICAgY2xl
YXIoKTsKKyAgICAgICAgbV9kYXRhLnJlc2VydmVDYXBhY2l0eSgxMDI0KTsKKyAgICB9CiAgICAg
dmlydHVhbCB+TWFya3VwVG9rZW5CYXNlKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIo
KQpAQCAtMjM4LDcgKzI0Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCghdmFs
dWUuaXNFbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlU2V0OjpTdGFydFRh
ZyB8fCBtX3R5cGUgPT0gVHlwZVNldDo6RW5kVGFnKTsKLSAgICAgICAgbV9hdHRyaWJ1dGVzW2ld
Lm1fdmFsdWUuYXBwZW5kKHZhbHVlLmNoYXJhY3RlcnMoKSwgdmFsdWUubGVuZ3RoKCkpOworICAg
ICAgICBtX2F0dHJpYnV0ZXNbaV0ubV92YWx1ZS5hcHBlbmQodmFsdWUpOwogICAgIH0KIAogICAg
IHR5cGVuYW1lIFR5cGU6OlR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQpAQCAt
MjczLDI3ICsyNzcsMjcgQEAgcHVibGljOgogICAgICAgICBtX2F0dHJpYnV0ZXNbaV0ubV92YWx1
ZS5jbGVhcigpOwogICAgIH0KIAotICAgIGNvbnN0IERhdGFWZWN0b3ImIGNoYXJhY3RlcnMoKSBj
b25zdAorICAgIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNoYXJhY3RlcnMoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlU2V0OjpDaGFyYWN0ZXIpOwogICAgICAgICBy
ZXR1cm4gbV9kYXRhOwogICAgIH0KIAotICAgIGNvbnN0IERhdGFWZWN0b3ImIGNvbW1lbnQoKSBj
b25zdAorICAgIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNvbW1lbnQoKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlU2V0OjpDb21tZW50KTsKICAgICAgICAgcmV0dXJu
IG1fZGF0YTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogRGlzdGluZ3Vpc2ggYmV0d2VlbiBhIG1p
c3NpbmcgcHVibGljIGlkZW50aWZlciBhbmQgYW4gZW1wdHkgb25lLgotICAgIGNvbnN0IFdURjo6
VmVjdG9yPFVDaGFyPiYgcHVibGljSWRlbnRpZmllcigpIGNvbnN0CisgICAgY29uc3QgU3RyaW5n
QnVpbGRlciYgcHVibGljSWRlbnRpZmllcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
bV90eXBlID09IFR5cGVTZXQ6OkRPQ1RZUEUpOwogICAgICAgICByZXR1cm4gbV9kb2N0eXBlRGF0
YS0+bV9wdWJsaWNJZGVudGlmaWVyOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBEaXN0aW5ndWlz
aCBiZXR3ZWVuIGEgbWlzc2luZyBzeXN0ZW0gaWRlbnRpZmVyIGFuZCBhbiBlbXB0eSBvbmUuCi0g
ICAgY29uc3QgV1RGOjpWZWN0b3I8VUNoYXI+JiBzeXN0ZW1JZGVudGlmaWVyKCkgY29uc3QKKyAg
ICBjb25zdCBTdHJpbmdCdWlsZGVyJiBzeXN0ZW1JZGVudGlmaWVyKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZVNldDo6RE9DVFlQRSk7CiAgICAgICAgIHJldHVy
biBtX2RvY3R5cGVEYXRhLT5tX3N5c3RlbUlkZW50aWZpZXI7CkBAIC0zMzIsMTEgKzMzNiwxMCBA
QCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAKICNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBwcmludFN0
cmluZyhjb25zdCBEYXRhVmVjdG9yJiBzdHJpbmcpIGNvbnN0CisgICAgdm9pZCBwcmludFN0cmlu
Zyhjb25zdCBTdHJpbmdCdWlsZGVyJiBzdHJpbmcpIGNvbnN0CiAgICAgewotICAgICAgICBEYXRh
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc3RyaW5nLmJlZ2luKCk7Ci0gICAgICAgIGZv
ciAoOyBpdGVyICE9IHN0cmluZy5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICIlbGMiLCB3Y2hhcl90KCppdGVyKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiJWxjIiwgd2NoYXJfdChzdHJpbmdbaV0pKTsKICAgICB9CiAjZW5kaWYgLy8gTkRFQlVHCiAK
QEAgLTM0Niw3ICszNDksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fZGF0YS5hcHBlbmQoY2hh
cmFjdGVyKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIGNvbnN0IERhdGFWZWN0b3ImIG5hbWUo
KSBjb25zdAorICAgIGlubGluZSBjb25zdCBTdHJpbmdCdWlsZGVyJiBuYW1lKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX2RhdGE7CiAgICAgfQpAQCAtMzYwLDcgKzM2Myw3IEBAIHBy
b3RlY3RlZDoKICAgICB0eXBlbmFtZSBUeXBlOjpUeXBlIG1fdHlwZTsKICAgICB0eXBlbmFtZSBB
dHRyaWJ1dGU6OlJhbmdlIG1fcmFuZ2U7IC8vIEFsd2F5cyBzdGFydHMgYXQgemVyby4KICAgICBp
bnQgbV9iYXNlT2Zmc2V0OwotICAgIERhdGFWZWN0b3IgbV9kYXRhOworICAgIFN0cmluZ0J1aWxk
ZXIgbV9kYXRhOwogCiAgICAgLy8gRm9yIERPQ1RZUEUKICAgICBPd25QdHI8RG9jdHlwZURhdGE+
IG1fZG9jdHlwZURhdGE7CkBAIC0zODcsNyArMzkwLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBU
b2tlbjo6VHlwZTo6RE9DVFlQRToKLSAgICAgICAgICAgIG1fbmFtZSA9IEF0b21pY1N0cmluZyh0
b2tlbi0+bmFtZSgpLmRhdGEoKSwgdG9rZW4tPm5hbWUoKS5zaXplKCkpOworICAgICAgICAgICAg
bV9uYW1lID0gQXRvbWljU3RyaW5nKHRva2VuLT5uYW1lKCkudG9TdHJpbmdQcmVzZXJ2ZUNhcGFj
aXR5KCkpOwogICAgICAgICAgICAgbV9kb2N0eXBlRGF0YSA9IHRva2VuLT5tX2RvY3R5cGVEYXRh
LnJlbGVhc2UoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRva2VuOjpUeXBl
OjpFbmRPZkZpbGU6CkBAIC0zOTUsMTIgKzM5OCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
VG9rZW46OlR5cGU6OlN0YXJ0VGFnOgogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpFbmRUYWc6
IHsKICAgICAgICAgICAgIG1fc2VsZkNsb3NpbmcgPSB0b2tlbi0+c2VsZkNsb3NpbmcoKTsKLSAg
ICAgICAgICAgIG1fbmFtZSA9IEF0b21pY1N0cmluZyh0b2tlbi0+bmFtZSgpLmRhdGEoKSwgdG9r
ZW4tPm5hbWUoKS5zaXplKCkpOworICAgICAgICAgICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKHRv
a2VuLT5uYW1lKCkudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgaW5p
dGlhbGl6ZUF0dHJpYnV0ZXModG9rZW4tPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpDb21tZW50OgotICAgICAg
ICAgICAgbV9kYXRhID0gU3RyaW5nKHRva2VuLT5jb21tZW50KCkuZGF0YSgpLCB0b2tlbi0+Y29t
bWVudCgpLnNpemUoKSk7CisgICAgICAgICAgICBtX2RhdGEgPSB0b2tlbi0+Y29tbWVudCgpLnRv
U3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgVG9rZW46OlR5cGU6OkNoYXJhY3RlcjoKICAgICAgICAgICAgIG1fZXh0ZXJuYWxDaGFyYWN0
ZXJzID0gJnRva2VuLT5jaGFyYWN0ZXJzKCk7CkBAIC00NTgsNyArNDYxLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVzLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICBjb25z
dCB0eXBlbmFtZSBUb2tlbjo6RGF0YVZlY3RvciYgY2hhcmFjdGVycygpIGNvbnN0CisgICAgY29u
c3QgU3RyaW5nQnVpbGRlciYgY2hhcmFjdGVycygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NF
UlQobV90eXBlID09IFRva2VuOjpUeXBlOjpDaGFyYWN0ZXIpOwogICAgICAgICByZXR1cm4gKm1f
ZXh0ZXJuYWxDaGFyYWN0ZXJzOwpAQCAtNDcxLDE0ICs0NzQsMTQgQEAgcHVibGljOgogICAgIH0K
IAogICAgIC8vIEZJWE1FOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWlzc2luZyBwdWJsaWMgaWRl
bnRpZmVyIGFuZCBhbiBlbXB0eSBvbmUuCi0gICAgV1RGOjpWZWN0b3I8VUNoYXI+JiBwdWJsaWNJ
ZGVudGlmaWVyKCkgY29uc3QKKyAgICBTdHJpbmdCdWlsZGVyJiBwdWJsaWNJZGVudGlmaWVyKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVG9rZW46OlR5cGU6OkRPQ1RZ
UEUpOwogICAgICAgICByZXR1cm4gbV9kb2N0eXBlRGF0YS0+bV9wdWJsaWNJZGVudGlmaWVyOwog
ICAgIH0KIAogICAgIC8vIEZJWE1FOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWlzc2luZyBzeXN0
ZW0gaWRlbnRpZmVyIGFuZCBhbiBlbXB0eSBvbmUuCi0gICAgV1RGOjpWZWN0b3I8VUNoYXI+JiBz
eXN0ZW1JZGVudGlmaWVyKCkgY29uc3QKKyAgICBTdHJpbmdCdWlsZGVyJiBzeXN0ZW1JZGVudGlm
aWVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVG9rZW46OlR5cGU6
OkRPQ1RZUEUpOwogICAgICAgICByZXR1cm4gbV9kb2N0eXBlRGF0YS0+bV9zeXN0ZW1JZGVudGlm
aWVyOwpAQCAtNTA4LDcgKzUxMSw3IEBAIHByb3RlY3RlZDoKICAgICAvLwogICAgIC8vIEZJWE1F
OiBBZGQgYSBtZWNoYW5pc20gZm9yICJpbnRlcm5hbGl6aW5nIiB0aGUgY2hhcmFjdGVycyB3aGVu
IHRoZQogICAgIC8vICAgICAgICBIVE1MVG9rZW4gaXMgZGVzdHJ1Y3RlZC4KLSAgICBjb25zdCB0
eXBlbmFtZSBUb2tlbjo6RGF0YVZlY3RvciogbV9leHRlcm5hbENoYXJhY3RlcnM7CisgICAgY29u
c3QgU3RyaW5nQnVpbGRlciogbV9leHRlcm5hbENoYXJhY3RlcnM7CiAKICAgICAvLyBGb3IgRE9D
VFlQRQogICAgIE93blB0cjx0eXBlbmFtZSBUb2tlbjo6RG9jdHlwZURhdGE+IG1fZG9jdHlwZURh
dGE7CkBAIC01NDAsNyArNTQzLDcgQEAgaW5saW5lIHZvaWQgQXRvbWljTWFya3VwVG9rZW5CYXNl
PFRva2VuPgogICAgICAgICBBU1NFUlQoYXR0cmlidXRlLm1fdmFsdWVSYW5nZS5tX3N0YXJ0KTsK
ICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZS5tX3ZhbHVlUmFuZ2UubV9lbmQpOwogCi0gICAgICAg
IFN0cmluZyB2YWx1ZShhdHRyaWJ1dGUubV92YWx1ZS5kYXRhKCksIGF0dHJpYnV0ZS5tX3ZhbHVl
LnNpemUoKSk7CisgICAgICAgIFN0cmluZyB2YWx1ZShhdHRyaWJ1dGUubV92YWx1ZS50b1N0cmlu
Z1ByZXNlcnZlQ2FwYWNpdHkoKSk7CiAgICAgICAgIG1fYXR0cmlidXRlcy0+aW5zZXJ0QXR0cmli
dXRlKEF0dHJpYnV0ZTo6Y3JlYXRlTWFwcGVkKG5hbWVGb3JBdHRyaWJ1dGUoYXR0cmlidXRlKSwg
dmFsdWUpLCBmYWxzZSk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcAkocmV2aXNp
b24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAgaW5saW5lIHN0YXRpYyBib29sIGNv
bnZlcnRUb1VURjE2KFVDaGFyMzIgdmFsdWUsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkQ2hh
cmFjdGVyKQorICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb252ZXJ0VG9VVEYxNihVQ2hhcjMyIHZh
bHVlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkQ2hhcmFjdGVyKQogICAgIHsKICAgICAgICAgaWYg
KFVfSVNfQk1QKHZhbHVlKSkgewogICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBzdGF0aWNfY2Fz
dDxVQ2hhcj4odmFsdWUpOwpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAKICAgICBpbmxpbmUg
c3RhdGljIGJvb2wgYWNjZXB0TWFsZm9ybWVkKCkgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGlu
bGluZSBzdGF0aWMgYm9vbCBjb25zdW1lTmFtZWRFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiwgVmVj
dG9yPFVDaGFyLCAxNj4mLCBib29sJiwgVUNoYXIsIFVDaGFyJikKKyAgICBpbmxpbmUgc3RhdGlj
IGJvb2wgY29uc3VtZU5hbWVkRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIFN0cmluZ0J1aWxkZXIm
LCBib29sJiwgVUNoYXIsIFVDaGFyJikKICAgICB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKIAog
fQogCi1ib29sIGNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiBz
b3VyY2UsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91
Z2hDaGFyYWN0ZXJzKQorYm9vbCBjb25zdW1lWE1MQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBu
b3RFbm91Z2hDaGFyYWN0ZXJzKQogewogICAgIHJldHVybiBjb25zdW1lQ2hhcmFjdGVyUmVmZXJl
bmNlPFhNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcj4oc291cmNlLCBkZWNvZGVkQ2hhcmFjdGVy
LCBub3RFbm91Z2hDaGFyYWN0ZXJzLCAwKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaAkocmV2aXNp
b24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAKLWJvb2wgY29uc3VtZVhNTENoYXJhY3RlclJlZmVyZW5jZShTZWdt
ZW50ZWRTdHJpbmcmLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYg
bm90RW5vdWdoQ2hhcmFjdGVycyk7Citib29sIGNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2Uo
U2VnbWVudGVkU3RyaW5nJiwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYg
bm90RW5vdWdoQ2hhcmFjdGVycyk7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9YTUxUb2tlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MVG9rZW4uaAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L1hNTFRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogY2xh
c3MgUHJlZml4ZWRBdHRyaWJ1dGUgOiBwdWJsaWMgQXR0cmlidXRlQmFzZSB7CiBwdWJsaWM6CiAg
ICAgUmFuZ2UgbV9wcmVmaXhSYW5nZTsKLSAgICBXVEY6OlZlY3RvcjxVQ2hhciwgMzI+IG1fcHJl
Zml4OworICAgIFN0cmluZ0J1aWxkZXIgbV9wcmVmaXg7CiB9OwogCiBjbGFzcyBYTUxUb2tlbiA6
IHB1YmxpYyBNYXJrdXBUb2tlbkJhc2U8WE1MVG9rZW5UeXBlcywgRG9jdHlwZURhdGFCYXNlLCBQ
cmVmaXhlZEF0dHJpYnV0ZT4gewpAQCAtNzAsOCArNzAsOCBAQCBwdWJsaWM6CiAgICAgICAgIGJv
b2wgbV9oYXNTdGFuZGFsb25lOwogICAgICAgICBib29sIG1faGFzRW5jb2Rpbmc7CiAgICAgICAg
IGJvb2wgbV9zdGFuZGFsb25lOwotICAgICAgICBXVEY6OlZlY3RvcjxVQ2hhcj4gbV9lbmNvZGlu
ZzsKLSAgICAgICAgV1RGOjpWZWN0b3I8VUNoYXI+IG1fdmVyc2lvbjsKKyAgICAgICAgU3RyaW5n
QnVpbGRlciBtX2VuY29kaW5nOworICAgICAgICBTdHJpbmdCdWlsZGVyIG1fdmVyc2lvbjsKICAg
ICB9OwogCiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkKQEAgLTg2LDI1ICs4NiwyNSBAQCBwdWJs
aWM6CiAgICAgICAgIE1hcmt1cFRva2VuQmFzZTxYTUxUb2tlblR5cGVzLCBEb2N0eXBlRGF0YUJh
c2UsIFByZWZpeGVkQXR0cmlidXRlPjo6YXBwZW5kVG9OYW1lKGNoYXJhY3Rlcik7CiAgICAgfQog
Ci0gICAgY29uc3QgRGF0YVZlY3RvciYgbmFtZSgpIGNvbnN0CisgICAgY29uc3QgU3RyaW5nQnVp
bGRlciYgbmFtZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IFhNTFRv
a2VuVHlwZXM6OlN0YXJ0VGFnIHx8IG1fdHlwZSA9PSBYTUxUb2tlblR5cGVzOjpFbmRUYWcgfHwg
bV90eXBlID09IFhNTFRva2VuVHlwZXM6OkRPQ1RZUEUgfHwgbV90eXBlID09IFhNTFRva2VuVHlw
ZXM6OkVudGl0eSk7CiAgICAgICAgIHJldHVybiBNYXJrdXBUb2tlbkJhc2U8WE1MVG9rZW5UeXBl
cywgRG9jdHlwZURhdGFCYXNlLCBQcmVmaXhlZEF0dHJpYnV0ZT46Om5hbWUoKTsKICAgICB9CiAK
LSAgICBjb25zdCBEYXRhVmVjdG9yJiB0YXJnZXQoKSBjb25zdAorICAgIGNvbnN0IFN0cmluZ0J1
aWxkZXImIHRhcmdldCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IFhN
TFRva2VuVHlwZXM6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbik7CiAgICAgICAgIHJldHVybiBtX3Rh
cmdldDsKICAgICB9CiAKLSAgICBjb25zdCBEYXRhVmVjdG9yJiBkYXRhKCkgY29uc3QKKyAgICBj
b25zdCBTdHJpbmdCdWlsZGVyJiBkYXRhKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X3R5cGUgPT0gWE1MVG9rZW5UeXBlczo6Q0RBVEEgfHwgbV90eXBlID09IFhNTFRva2VuVHlwZXM6
OlByb2Nlc3NpbmdJbnN0cnVjdGlvbik7CiAgICAgICAgIHJldHVybiBtX2RhdGE7CiAgICAgfQog
Ci0gICAgY29uc3QgRGF0YVZlY3RvciYgcHJlZml4KCkgY29uc3QKKyAgICBjb25zdCBTdHJpbmdC
dWlsZGVyJiBwcmVmaXgoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBY
TUxUb2tlblR5cGVzOjpTdGFydFRhZyB8fCBtX3R5cGUgPT0gWE1MVG9rZW5UeXBlczo6RW5kVGFn
KTsKICAgICAgICAgcmV0dXJuIG1fdGFyZ2V0OwpAQCAtMjEwLDcgKzIxMCw3IEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc1ByZWZpeCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBl
ID09IFhNTFRva2VuVHlwZXM6OlN0YXJ0VGFnIHx8IG1fdHlwZSA9PSBYTUxUb2tlblR5cGVzOjpF
bmRUYWcpOwotICAgICAgICByZXR1cm4gbV90YXJnZXQuc2l6ZSgpOworICAgICAgICByZXR1cm4g
bV90YXJnZXQubGVuZ3RoKCk7CiAgICAgfQogCiAgICAgdm9pZCBiZWdpbkNEQVRBKCkKQEAgLTM5
Myw3ICszOTMsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBdG9taWNYTUxUb2tlbjsK
IAogICAgIC8vICJ0YXJnZXQiIGZvciBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sICJwcmVmaXgiIGZv
ciBTdGFydFRhZyBhbmQgRW5kVGFnCi0gICAgRGF0YVZlY3RvciBtX3RhcmdldDsKKyAgICBTdHJp
bmdCdWlsZGVyIG1fdGFyZ2V0OwogCiAgICAgLy8gRm9yIFhNTCBEZWNsYXJhdGlvbgogICAgIE93
blB0cjxYTUxEZWNsYXJhdGlvbkRhdGE+IG1feG1sRGVjbGFyYXRpb25EYXRhOwpAQCAtNDA3LDI0
ICs0MDcsMjQgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAg
ICAgICAgY2FzZSBYTUxUb2tlblR5cGVzOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Ci0gICAgICAg
ICAgICBtX25hbWUgPSBBdG9taWNTdHJpbmcodG9rZW4udGFyZ2V0KCkuZGF0YSgpLCB0b2tlbi50
YXJnZXQoKS5zaXplKCkpOwotICAgICAgICAgICAgbV9kYXRhID0gU3RyaW5nKHRva2VuLmRhdGEo
KS5kYXRhKCksIHRva2VuLmRhdGEoKS5zaXplKCkpOworICAgICAgICAgICAgbV9uYW1lID0gQXRv
bWljU3RyaW5nKHRva2VuLnRhcmdldCgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKKyAg
ICAgICAgICAgIG1fZGF0YSA9IHRva2VuLmRhdGEoKS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHko
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFhNTFRva2VuVHlwZXM6OlhNTERl
Y2xhcmF0aW9uOgogICAgICAgICAgICAgbV94bWxEZWNsYXJhdGlvbkRhdGEgPSB0b2tlbi5tX3ht
bERlY2xhcmF0aW9uRGF0YS5yZWxlYXNlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBYTUxUb2tlblR5cGVzOjpTdGFydFRhZzoKICAgICAgICAgY2FzZSBYTUxUb2tlblR5cGVz
OjpFbmRUYWc6IHsKLSAgICAgICAgICAgIGlmICh0b2tlbi5wcmVmaXgoKS5zaXplKCkpCi0gICAg
ICAgICAgICAgICAgbV9wcmVmaXggPSBBdG9taWNTdHJpbmcodG9rZW4ucHJlZml4KCkuZGF0YSgp
LCB0b2tlbi5wcmVmaXgoKS5zaXplKCkpOworICAgICAgICAgICAgaWYgKHRva2VuLnByZWZpeCgp
Lmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIG1fcHJlZml4ID0gQXRvbWljU3RyaW5nKHRva2Vu
LnByZWZpeCgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgIGluaXRp
YWxpemVBdHRyaWJ1dGVzKHRva2VuLmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIFhNTFRva2VuVHlwZXM6OkNEQVRBOgotICAgICAgICAg
ICAgbV9kYXRhID0gU3RyaW5nKHRva2VuLmRhdGEoKS5kYXRhKCksIHRva2VuLmRhdGEoKS5zaXpl
KCkpOworICAgICAgICAgICAgbV9kYXRhID0gdG9rZW4uZGF0YSgpLnRvU3RyaW5nUHJlc2VydmVD
YXBhY2l0eSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgWE1MVG9rZW5UeXBl
czo6RW50aXR5OgotICAgICAgICAgICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKHRva2VuLm5hbWUo
KS5kYXRhKCksIHRva2VuLm5hbWUoKS5zaXplKCkpOworICAgICAgICAgICAgbV9uYW1lID0gQXRv
bWljU3RyaW5nKHRva2VuLm5hbWUoKS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NDU0LDcgKzQ1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZGF0YTsKICAgICB9CiAK
LSAgICBXVEY6OlZlY3RvcjxVQ2hhcj4mIHhtbFZlcnNpb24oKSBjb25zdAorICAgIFN0cmluZ0J1
aWxkZXImIHhtbFZlcnNpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9
PSBYTUxUb2tlblR5cGVzOjpYTUxEZWNsYXJhdGlvbik7CiAgICAgICAgIHJldHVybiBtX3htbERl
Y2xhcmF0aW9uRGF0YS0+bV92ZXJzaW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvWE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gOTM3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdGVtcGxhdGU8PgogUXVhbGlmaWVkTmFtZSBBdG9taWNN
YXJrdXBUb2tlbkJhc2U8WE1MVG9rZW4+OjpuYW1lRm9yQXR0cmlidXRlKGNvbnN0IFhNTFRva2Vu
OjpBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gUXVhbGlmaWVkTmFt
ZShhdHRyaWJ1dGUubV9wcmVmaXguaXNFbXB0eSgpID8gbnVsbEF0b20gOiBBdG9taWNTdHJpbmco
YXR0cmlidXRlLm1fcHJlZml4LmRhdGEoKSwgYXR0cmlidXRlLm1fcHJlZml4LnNpemUoKSksIEF0
b21pY1N0cmluZyhhdHRyaWJ1dGUubV9uYW1lLmRhdGEoKSwgYXR0cmlidXRlLm1fbmFtZS5zaXpl
KCkpLCBudWxsQXRvbSk7CisgICAgcmV0dXJuIFF1YWxpZmllZE5hbWUoYXR0cmlidXRlLm1fcHJl
Zml4LmlzRW1wdHkoKSA/IG51bGxBdG9tIDogQXRvbWljU3RyaW5nKGF0dHJpYnV0ZS5tX3ByZWZp
eC50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSksIEF0b21pY1N0cmluZyhhdHRyaWJ1dGUubV9u
YW1lLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKSwgbnVsbEF0b20pOwogfQogCiB0ZW1wbGF0
ZTw+CkBAIC0yNTEsMTEgKzI1MSwxMCBAQCBib29sIFhNTFRva2VuaXplcjo6bmV4dFRva2VuKFNl
Z21lbnRlZFN0CiAgICAgWE1MX0JFR0lOX1NUQVRFKENoYXJhY3RlclJlZmVyZW5jZVN0YXJ0U3Rh
dGUpIHsKICAgICAgICAgaWYgKGNjID09ICcjJykgewogICAgICAgICAgICAgYm9vbCBub3RFbm91
Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBWZWN0b3I8VUNoYXIsIDE2PiBkZWNv
ZGVkQ2hhcmFjdGVyOworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBkZWNvZGVkQ2hhcmFjdGVy
OwogICAgICAgICAgICAgaWYgKGNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2Uoc291cmNlLCBk
ZWNvZGVkQ2hhcmFjdGVyLCBub3RFbm91Z2hDaGFyYWN0ZXJzKSkgewotICAgICAgICAgICAgICAg
IFZlY3RvcjxVQ2hhciwgMTY+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZGVjb2RlZENoYXJhY3Rl
ci5iZWdpbigpOwotICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGRlY29kZWRDaGFyYWN0
ZXIuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCpp
dGVyKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVjb2RlZENo
YXJhY3Rlci5sZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBidWZmZXJDaGFyYWN0
ZXIoZGVjb2RlZENoYXJhY3RlcltpXSk7CiAgICAgICAgICAgICAgICAgWE1MX1NXSVRDSF9UTyhE
YXRhU3RhdGUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChub3RFbm91Z2hDaGFyYWN0ZXJzKQog
ICAgICAgICAgICAgICAgIHJldHVybiBoYXZlQnVmZmVyZWRDaGFyYWN0ZXJUb2tlbigpOwpAQCAt
NDM3LDEyICs0MzYsMTEgQEAgYm9vbCBYTUxUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRT
dAogICAgIFhNTF9CRUdJTl9TVEFURShDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVl
U3RhdGUpIHsKICAgICAgICAgaWYgKGNjID09ICcjJykgewogICAgICAgICAgICAgYm9vbCBub3RF
bm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBWZWN0b3I8VUNoYXIsIDE2PiBk
ZWNvZGVkQ2hhcmFjdGVyOworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBkZWNvZGVkQ2hhcmFj
dGVyOwogICAgICAgICAgICAgc291cmNlLnB1c2goY2MpOwogICAgICAgICAgICAgaWYgKGNvbnN1
bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2Uoc291cmNlLCBkZWNvZGVkQ2hhcmFjdGVyLCBub3RFbm91
Z2hDaGFyYWN0ZXJzKSkgewotICAgICAgICAgICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+Ojpjb25z
dF9pdGVyYXRvciBpdGVyID0gZGVjb2RlZENoYXJhY3Rlci5iZWdpbigpOwotICAgICAgICAgICAg
ICAgIGZvciAoOyBpdGVyICE9IGRlY29kZWRDaGFyYWN0ZXIuZW5kKCk7ICsraXRlcikKLSAgICAg
ICAgICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZSgqaXRlcik7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlY29kZWRDaGFyYWN0ZXIu
bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9BdHRy
aWJ1dGVWYWx1ZShkZWNvZGVkQ2hhcmFjdGVyW2ldKTsKICAgICAgICAgICAgICAgICBYTUxfQURW
QU5DRV9UTyhBdHRyaWJ1dGVWYWx1ZVF1b3RlZFN0YXRlKTsKICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobm90RW5vdWdoQ2hhcmFjdGVycykKICAgICAgICAgICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZl
cmVkQ2hhcmFjdGVyVG9rZW4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1M
VHJlZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MVHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiA5MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgy
LDcgQEAgdm9pZCBYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1hNTERlY2xhcmF0aQogCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAKLSAgICBtX2RvY3VtZW50LT5zZXRYTUxWZXJzaW9uKFN0cmlu
Zyh0b2tlbi54bWxWZXJzaW9uKCkpLCBlYyk7CisgICAgbV9kb2N1bWVudC0+c2V0WE1MVmVyc2lv
bih0b2tlbi54bWxWZXJzaW9uKCkudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCksIGVjKTsKICAg
ICBpZiAoZWMpCiAgICAgICAgIG1fcGFyc2VyLT5zdG9wUGFyc2luZygpOwogCkBAIC0yMDcsOCAr
MjA3LDggQEAgdm9pZCBYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0RPQ1RZUEUoY29ucwogICAgIGlm
ICghZmFpbE9uVGV4dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBdG9taWNTdHJpbmcgcHVi
bGljSWRlbnRpZmllcih0b2tlbi5wdWJsaWNJZGVudGlmaWVyKCkuZGF0YSgpLCB0b2tlbi5wdWJs
aWNJZGVudGlmaWVyKCkuc2l6ZSgpKTsKLSAgICBBdG9taWNTdHJpbmcgc3lzdGVtSWRlbnRpZmll
cih0b2tlbi5zeXN0ZW1JZGVudGlmaWVyKCkuZGF0YSgpLCB0b2tlbi5zeXN0ZW1JZGVudGlmaWVy
KCkuc2l6ZSgpKTsKKyAgICBBdG9taWNTdHJpbmcgcHVibGljSWRlbnRpZmllcih0b2tlbi5wdWJs
aWNJZGVudGlmaWVyKCkudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpOworICAgIEF0b21pY1N0
cmluZyBzeXN0ZW1JZGVudGlmaWVyKHRva2VuLnN5c3RlbUlkZW50aWZpZXIoKS50b1N0cmluZ1By
ZXNlcnZlQ2FwYWNpdHkoKSk7CiAgICAgUmVmUHRyPERvY3VtZW50VHlwZT4gZG9jdHlwZSA9IERv
Y3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRva2VuLm5hbWUoKSwgcHVibGljSWRlbnRp
Zmllciwgc3lzdGVtSWRlbnRpZmllcik7CiAgICAgbV9kb2N1bWVudC0+c2V0RG9jVHlwZShkb2N0
eXBlKTsKICAgICBtX2RvY3VtZW50LT5wYXJzZXJBZGRDaGlsZChkb2N0eXBlKTsKQEAgLTI3MCw3
ICsyNzAsNyBAQCB2b2lkIFhNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKGNvbnN0CiAKIHZv
aWQgWE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIoY29uc3QgQXRvbWljWE1MVG9rZW4m
IHRva2VuKQogewotICAgIGFwcGVuZFRvVGV4dCh0b2tlbi5jaGFyYWN0ZXJzKCkuZGF0YSgpLCB0
b2tlbi5jaGFyYWN0ZXJzKCkuc2l6ZSgpKTsKKyAgICBhcHBlbmRUb1RleHQodG9rZW4uY2hhcmFj
dGVycygpLmNoYXJhY3RlcnMoKSwgdG9rZW4uY2hhcmFjdGVycygpLmxlbmd0aCgpKTsKIH0KIAog
dm9pZCBYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NEQVRBKGNvbnN0IEF0b21pY1hNTFRva2VuJiB0
b2tlbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5Mzc2MSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMTEtMDgtMjQgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXBsYWNlIHNvbWUgdXNhZ2VzIG9mIFZlY3RvcjxVQ2hhcj4gdG8g
U3RyaW5nQnVpbGRlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY2NjYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBpcyBwYXJ0IG9mIHdvcmsgdG8gc3VwcG9ydCA4LWJpdCBzdHJpbmcgYnVmZmVy
cy4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL1N0cmluZ0J1aWxk
ZXJUZXN0LmNwcDogQWRkZWQuIFRlc3QgZm9yIFN0cmluZ0J1aWxkZXIuCisKIDIwMTEtMDgtMjQg
IEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQg
YSBrZXlwYXRoIHBhcnNlciBzdHJpY3RseSBmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb24KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQkocmV2aXNpb24gOTM3MDMpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2
Nyw3IEBACiAgICAgICAgICAgICAndGVzdHMvUE9ESW50ZXJ2YWxUcmVlVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1BPRFJlZEJsYWNrVHJlZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9TY3JvbGxBbmltYXRvck5vbmVUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvU3Ry
aW5nQnVpbGRlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UaWxpbmdEYXRhVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvVHJlZVRlc3RIZWxwZXJzLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1N0cmluZ0J1aWxkZXJUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1N0cmluZ0J1aWxkZXJUZXN0LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvU3RyaW5nQnVpbGRlclRlc3QuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIEJhc2ljIHRlc3RzIHRoYXQgdmVyaWZ5
IG91ciBLVVJMJ3MgaW50ZXJmYWNlIGJlaGF2ZXMgdGhlIHNhbWUgYXMgdGhlCisvLyBvcmlnaW5h
bCBLVVJMJ3MuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSB7CisKKyNkZWZpbmUgRVhQRUNUX0NPTlRFTlQoc3RyLCBi
dWlsZGVyKSBcCisgICAgRVhQRUNUX1NUUkVRKHN0ciwgU3RyaW5nKGJ1aWxkZXIuY2hhcmFjdGVy
cygpLCBidWlsZGVyLmxlbmd0aCgpKS5hc2NpaSgpLmRhdGEoKSkKKwordm9pZCBleHBlY3RFbXB0
eShjb25zdCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQoreworICAgIEVYUEVDVF9FUSgwVSwgYnVp
bGRlci5sZW5ndGgoKSk7CisgICAgRVhQRUNUX1RSVUUoYnVpbGRlci5pc0VtcHR5KCkpOworICAg
IEVYUEVDVF9FUSgwLCBidWlsZGVyLmNoYXJhY3RlcnMoKSk7CisgICAgRVhQRUNUX0NPTlRFTlQo
IiIsIGJ1aWxkZXIpOworfQorCitURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCBkZWZhdWx0Q29uc3Ry
dWN0b3IpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGV4cGVjdEVtcHR5KGJ1
aWxkZXIpOworICAgIEVYUEVDVF9FUSgwVSwgYnVpbGRlci5jYXBhY2l0eSgpKTsKK30KKy8qCitU
RVNUKFN0cmluZ0J1aWxkZXJUZXN0LCBjb25zdHJ1Y3RvcldpdGhJbml0aWFsTGVuZ3RoKQorewor
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcigxNik7CisgICAgRVhQRUNUX0VRKDE2LCBidWlsZGVy
Lmxlbmd0aCgpKTsKK30KKyovCitURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCByZXNlcnZlQ2FwYWNp
dHkpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCIw
MTIzNDU2Nzg5Iik7CisgICAgRVhQRUNUX0xUKDBVLCBidWlsZGVyLmNhcGFjaXR5KCkpOworICAg
IHVuc2lnbmVkIG5ld0NhcGFjaXR5ID0gNSAqIGJ1aWxkZXIuY2FwYWNpdHkoKTsKKyAgICBidWls
ZGVyLnJlc2VydmVDYXBhY2l0eShuZXdDYXBhY2l0eSk7CisgICAgRVhQRUNUX0xFKG5ld0NhcGFj
aXR5LCBidWlsZGVyLmNhcGFjaXR5KCkpOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2Nzg5
IiwgYnVpbGRlcik7Cit9CisKK1RFU1QoU3RyaW5nQnVpbGRlclRlc3QsIGluc2VydCkKK3sKKyAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5pbnNlcnQoU3RyaW5nKCIwMTIz
NDU2Nzg5IiksIDApOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2Nzg5IiwgYnVpbGRlcik7
CisgICAgYnVpbGRlci5pbnNlcnQoImFiY2QiLCAwKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiYWJj
ZDAxMjM0NTY3ODkiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLmluc2VydCgiZWZnaCIsIDMsIGJ1
aWxkZXIubGVuZ3RoKCkpOworICAgIEVYUEVDVF9DT05URU5UKCJhYmNkMDEyMzQ1Njc4OWVmZyIs
IGJ1aWxkZXIpOworICAgIGJ1aWxkZXIuaW5zZXJ0KFN0cmluZygiWFlaIiksIDkpOworICAgIEVY
UEVDVF9DT05URU5UKCJhYmNkMDEyMzRYWVo1Njc4OWVmZyIsIGJ1aWxkZXIpOworICAgIGJ1aWxk
ZXIuaW5zZXJ0KCIiLCA5KTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiYWJjZDAxMjM0WFlaNTY3ODll
ZmciLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLmluc2VydCgnIycsIDEwKTsKKyAgICBFWFBFQ1Rf
Q09OVEVOVCgiYWJjZDAxMjM0WCNZWjU2Nzg5ZWZnIiwgYnVpbGRlcik7CisKKyAgICBidWlsZGVy
LnRvU3RyaW5nKCk7IC8vIFRlc3QgYWZ0ZXIgcmVpZnlTdHJpbmcoKS4KKyAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXIxOworICAgIGJ1aWxkZXIuaW5zZXJ0KGJ1aWxkZXIxLCAxMCk7CisgICAgRVhQ
RUNUX0NPTlRFTlQoImFiY2QwMTIzNFgjWVo1Njc4OWVmZyIsIGJ1aWxkZXIpOworICAgIGJ1aWxk
ZXIxLmluc2VydChidWlsZGVyLCAwKTsKKyAgICBidWlsZGVyLmluc2VydChidWlsZGVyMSwgMTUp
OworICAgIEVYUEVDVF9DT05URU5UKCJhYmNkMDEyMzRYI1laNTZhYmNkMDEyMzRYI1laNTY3ODll
Zmc3ODllZmciLCBidWlsZGVyKTsKK30KKworVEVTVChTdHJpbmdCdWlsZGVyVGVzdCwgcHJlcGVu
ZCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5wcmVwZW5kKFN0
cmluZygiMDEyMzQ1Njc4OSIpKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQ1Njc4OSIsIGJ1
aWxkZXIpOworICAgIGJ1aWxkZXIucHJlcGVuZCgiYWJjZCIpOworICAgIEVYUEVDVF9DT05URU5U
KCJhYmNkMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIucHJlcGVuZCgiZWZnaCIs
IDMpOworICAgIEVYUEVDVF9DT05URU5UKCJlZmdhYmNkMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOwor
ICAgIGJ1aWxkZXIucHJlcGVuZCgiIik7CisgICAgRVhQRUNUX0NPTlRFTlQoImVmZ2FiY2QwMTIz
NDU2Nzg5IiwgYnVpbGRlcik7CisgICAgYnVpbGRlci5wcmVwZW5kKCcjJyk7CisgICAgRVhQRUNU
X0NPTlRFTlQoIiNlZmdhYmNkMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOworCisgICAgYnVpbGRlci50
b1N0cmluZygpOyAvLyBUZXN0IGFmdGVyIHJlaWZ5U3RyaW5nKCkuCisgICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyMTsKKyAgICBidWlsZGVyLnByZXBlbmQoYnVpbGRlcjEpOworICAgIEVYUEVDVF9D
T05URU5UKCIjZWZnYWJjZDAxMjM0NTY3ODkiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyMS5wcmVw
ZW5kKGJ1aWxkZXIpOworICAgIGJ1aWxkZXIxLnByZXBlbmQoIlhZWiIpOworICAgIGJ1aWxkZXIu
cHJlcGVuZChidWlsZGVyMSk7CisgICAgRVhQRUNUX0NPTlRFTlQoIlhZWiNlZmdhYmNkMDEyMzQ1
Njc4OSNlZmdhYmNkMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOworfQorCitURVNUKFN0cmluZ0J1aWxk
ZXJUZXN0LCBhcHBlbmQpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxk
ZXIuYXBwZW5kKFN0cmluZygiMDEyMzQ1Njc4OSIpKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEy
MzQ1Njc4OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIuYXBwZW5kKCJhYmNkIik7CisgICAgRVhQ
RUNUX0NPTlRFTlQoIjAxMjM0NTY3ODlhYmNkIiwgYnVpbGRlcik7CisgICAgYnVpbGRlci5hcHBl
bmQoImVmZ2giLCAzKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQ1Njc4OWFiY2RlZmciLCBi
dWlsZGVyKTsKKyAgICBidWlsZGVyLmFwcGVuZCgiIik7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAx
MjM0NTY3ODlhYmNkZWZnIiwgYnVpbGRlcik7CisgICAgYnVpbGRlci5hcHBlbmQoJyMnKTsKKyAg
ICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQ1Njc4OWFiY2RlZmcjIiwgYnVpbGRlcik7CisKKyAgICBi
dWlsZGVyLnRvU3RyaW5nKCk7IC8vIFRlc3QgYWZ0ZXIgcmVpZnlTdHJpbmcoKS4KKyAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXIxOworICAgIGJ1aWxkZXIuYXBwZW5kKGJ1aWxkZXIxKTsKKyAgICBF
WFBFQ1RfQ09OVEVOVCgiMDEyMzQ1Njc4OWFiY2RlZmcjIiwgYnVpbGRlcik7CisgICAgYnVpbGRl
cjEuYXBwZW5kKGJ1aWxkZXIpOworICAgIGJ1aWxkZXIxLmFwcGVuZCgiWFlaIik7CisgICAgYnVp
bGRlci5hcHBlbmQoYnVpbGRlcjEpOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2Nzg5YWJj
ZGVmZyMwMTIzNDU2Nzg5YWJjZGVmZyNYWVoiLCBidWlsZGVyKTsKK30KKworVEVTVChTdHJpbmdC
dWlsZGVyVGVzdCwgcmVtb3ZlKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBi
dWlsZGVyLmFwcGVuZCgiMDEyMzQ1Njc4OSIpOworICAgIGJ1aWxkZXIucmVtb3ZlKDAsIDApOwor
ICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2Nzg5IiwgYnVpbGRlcik7CisgICAgYnVpbGRlci5y
ZW1vdmUoNSwgMCk7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAxMjM0NTY3ODkiLCBidWlsZGVyKTsK
KyAgICBidWlsZGVyLnJlbW92ZShidWlsZGVyLmxlbmd0aCgpIC0gMSwgMSk7CisgICAgRVhQRUNU
X0NPTlRFTlQoIjAxMjM0NTY3OCIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIucmVtb3ZlKDAsIDEp
OworICAgIEVYUEVDVF9DT05URU5UKCIxMjM0NTY3OCIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIu
cmVtb3ZlKDUsIDIpOworICAgIEVYUEVDVF9DT05URU5UKCIxMjM0NTgiLCBidWlsZGVyKTsKKyAg
ICBidWlsZGVyLnJlbW92ZSgwLCA2KTsKKyAgICBleHBlY3RFbXB0eShidWlsZGVyKTsKK30KKwor
VEVTVChTdHJpbmdCdWlsZGVyVGVzdCwgY2xlYXIpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCIwMTIzNDU2Nzg5Iik7CisgICAgYnVpbGRlci5jbGVh
cigpOworICAgIGV4cGVjdEVtcHR5KGJ1aWxkZXIpOworICAgIEVYUEVDVF9FUSgwVSwgYnVpbGRl
ci5jYXBhY2l0eSgpKTsKK30KKworVEVTVChTdHJpbmdCdWlsZGVyVGVzdCwgY2hhcmFjdGVycykK
K3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmQoIjAxMjM0
NTY3ODkiKTsKKyAgICBVQ2hhciogY2hhcmFjdGVycyA9IGJ1aWxkZXIuY2hhcmFjdGVycygpOwor
ICAgIEVYUEVDVF9FUSgnMCcsIHN0YXRpY19jYXN0PGNoYXI+KGNoYXJhY3RlcnNbMF0pKTsKKyAg
ICBFWFBFQ1RfRVEoJzknLCBzdGF0aWNfY2FzdDxjaGFyPihjaGFyYWN0ZXJzWzldKSk7CisgICAg
Y2hhcmFjdGVyc1s1XSA9ICcjJzsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQjNjc4OSIsIGJ1
aWxkZXIpOworICAgIGJ1aWxkZXIudG9TdHJpbmcoKTsgLy8gVGVzdCBhZnRlciByZWlmeVN0cmlu
ZygpLgorICAgIGJ1aWxkZXIuY2hhcmFjdGVycygpWzZdID0gJ0AnOworICAgIEVYUEVDVF9DT05U
RU5UKCIwMTIzNCNANzg5IiwgYnVpbGRlcik7Cit9CisKK1RFU1QoU3RyaW5nQnVpbGRlclRlc3Qs
IGFycmF5KQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVu
ZCgiMDEyMzQ1Njc4OSIpOworICAgIEVYUEVDVF9FUSgnMCcsIHN0YXRpY19jYXN0PGNoYXI+KGJ1
aWxkZXJbMF0pKTsKKyAgICBFWFBFQ1RfRVEoJzknLCBzdGF0aWNfY2FzdDxjaGFyPihidWlsZGVy
WzldKSk7CisgICAgYnVpbGRlcls1XSA9ICcjJzsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQj
Njc4OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIudG9TdHJpbmcoKTsgLy8gVGVzdCBhZnRlciBy
ZWlmeVN0cmluZygpLgorICAgIGJ1aWxkZXJbNl0gPSAnQCc7CisgICAgRVhQRUNUX0NPTlRFTlQo
IjAxMjM0I0A3ODkiLCBidWlsZGVyKTsKK30KKworVEVTVChTdHJpbmdCdWlsZGVyVGVzdCwgY29u
c3RCdWlsZGVyKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFw
cGVuZCgiMDEyMzQ1Njc4OSIpOworICAgIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNvbnN0QnVpbGRl
ciA9IGJ1aWxkZXI7CisgICAgRVhQRUNUX0VRKCcwJywgc3RhdGljX2Nhc3Q8Y2hhcj4oY29uc3RC
dWlsZGVyWzBdKSk7CisgICAgRVhQRUNUX0VRKCc5Jywgc3RhdGljX2Nhc3Q8Y2hhcj4oY29uc3RC
dWlsZGVyWzldKSk7CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBjb25zdEJ1aWxkZXIu
Y2hhcmFjdGVycygpOworICAgIEVYUEVDVF9FUSgnMCcsIHN0YXRpY19jYXN0PGNoYXI+KGNoYXJh
Y3RlcnNbMF0pKTsKKyAgICBFWFBFQ1RfRVEoJzknLCBzdGF0aWNfY2FzdDxjaGFyPihjaGFyYWN0
ZXJzWzldKSk7Cit9CisKK1RFU1QoU3RyaW5nQnVpbGRlclRlc3QsIGFwcGVuZE51bWJlcikKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoMCk7
CisgICAgRVhQRUNUX0NPTlRFTlQoIjAiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLmFwcGVuZE51
bWJlcigxKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEiLCBidWlsZGVyKTsKKyAgICBidWlsZGVy
LmFwcGVuZE51bWJlcigyNTUpOworICAgIEVYUEVDVF9DT05URU5UKCIwMTI1NSIsIGJ1aWxkZXIp
OworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKDk5KTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEy
NTU5OSIsIGJ1aWxkZXIpOworfQorCitURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCByZXNpemUpCit7
CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCIwMTIzNDU2
Nzg5Iik7CisgICAgdW5zaWduZWQgY2FwYWNpdHkgPSBidWlsZGVyLmNhcGFjaXR5KCk7CisgICAg
YnVpbGRlci5yZXNpemUoMTApOworICAgIEVYUEVDVF9FUSgxMFUsIGJ1aWxkZXIubGVuZ3RoKCkp
OworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2Nzg5IiwgYnVpbGRlcik7CisgICAgRVhQRUNU
X0VRKGNhcGFjaXR5LCBidWlsZGVyLmNhcGFjaXR5KCkpOworICAgIGJ1aWxkZXIucmVzaXplKDgp
OworICAgIEVYUEVDVF9FUSg4VSwgYnVpbGRlci5sZW5ndGgoKSk7CisgICAgRVhQRUNUX0NPTlRF
TlQoIjAxMjM0NTY3IiwgYnVpbGRlcik7CisgICAgRVhQRUNUX0VRKGNhcGFjaXR5LCBidWlsZGVy
LmNhcGFjaXR5KCkpOworCisgICAgYnVpbGRlci50b1N0cmluZygpOworICAgIGJ1aWxkZXIucmVz
aXplKDcpOworICAgIEVYUEVDVF9FUSg3VSwgYnVpbGRlci5sZW5ndGgoKSk7CisgICAgRVhQRUNU
X0NPTlRFTlQoIjAxMjM0NTYiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLnJlc2l6ZSgyMCk7Cisg
ICAgRVhQRUNUX0VRKDIwVSwgYnVpbGRlci5sZW5ndGgoKSk7CisgICAgRVhQRUNUX0VRKCcwJywg
YnVpbGRlclswXSk7CisgICAgRVhQRUNUX0VRKCc3JywgYnVpbGRlcls3XSk7CisgICAgYnVpbGRl
ci5yZXNpemUoMCk7CisgICAgZXhwZWN0RW1wdHkoYnVpbGRlcik7Cit9CisKK30gLy8gbmFtZXNw
YWNlCg==
</data>
<flag name="commit-queue"
          id="101203"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105330</attachid>
            <date>2011-08-26 01:21:44 -0700</date>
            <delta_ts>2011-08-26 02:16:46 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>patch-66661c</filename>
            <type>text/plain</type>
            <size>196888</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAK
KzIwMTEtMDgtMjQgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXBsYWNlIHNvbWUgdXNhZ2VzIG9mIFZlY3RvcjxVQ2hhcj4gdG8gU3RyaW5nQnVp
bGRlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2
NjYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBpcyBwYXJ0IG9mIHdvcmsgdG8gc3VwcG9ydCA4LWJpdCBzdHJpbmcgYnVmZmVycy4KKyAgICAg
ICAgVGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG9yaWduYWwgU3RyaW5nQnVpbGRlciBhcmUgZXh0
ZW5kZWQgdG8gc3VwcG9ydAorICAgICAgICB0aGUgb3JpZ2luYWwgdXNhZ2VzIG9mIFZlY3RvcjxV
Q2hhcj4uCisKKyAgICAgICAgKiB3dGYvRm9yd2FyZC5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmlu
Zyk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlbW92ZSk6CisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6OnNocmluayk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6Omdy
b3cpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6Omluc2VydFVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoV1RGOjpTdHJp
bmdCdWlsZGVyOjppbnNlcnQpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpzaHJpbmtU
b0ZpdCk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oOgorICAgICAgICAoV1RG
OjpTdHJpbmdCdWlsZGVyOjpTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVp
bGRlcjo6YXBwZW5kKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kTnVtYmVy
KToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6cHJlcGVuZCk6CisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6Omluc2VydCk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnRv
U3RyaW5nUHJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJl
bGVhc2VTdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpsZW5ndGgpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNpemUpOgorICAgICAgICAoV1RGOjpTdHJpbmdC
dWlsZGVyOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmNoYXJhY3RlcnMpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjbGVhcik6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxk
ZXI6OnN3YXApOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjYXBhY2l0eSk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnRyeVJldGFpbik6CisgICAgICAgICogd3RmL3RleHQv
V1RGU3RyaW5nLmg6CisKIDIwMTEtMDgtMjUgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJn
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXhpbmcgYnJva2VuIGJ1aWxkIGR1ZSB0byB1bnVzZWQg
dmFyaWFibGVzIGluIHJlbGVhc2UgbW9kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMiwxMiArNDAyLDE2IEBA
IF9fWk4zV1RGMTJjcmVhdGVUaHJlYWRFUEZQdlMwX0VTMF9QS2MKIF9fWk4zV1RGMTJkZXRhY2hU
aHJlYWRFagogX19aTjNXVEYxMmlzTWFpblRocmVhZEV2CiBfX1pOM1dURjEycmFuZG9tTnVtYmVy
RXYKLV9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyMTFyZWlmeVN0cmluZ0V2CiBfX1pOM1dURjEzU3Ry
aW5nQnVpbGRlcjExc2hyaW5rVG9GaXRFdgorX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNGFsbG9j
YXRlQnVmZmVyRVBLdGpqagogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0
eUVqCi1fX1pOM1dURjEzU3RyaW5nQnVpbGRlcjZhcHBlbmRFUEtjagotX19aTjNXVEYxM1N0cmlu
Z0J1aWxkZXI2YXBwZW5kRVBLdGoKLV9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyNnJlc2l6ZUVqCitf
X1pOM1dURjEzU3RyaW5nQnVpbGRlcjE5aW5zZXJ0VW5pbml0aWFsaXplZEVqagorX19aTjNXVEYx
M1N0cmluZ0J1aWxkZXI0Z3Jvd0VqCitfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjZpbnNlcnRFUEtj
amoKK19fWk4zV1RGMTNTdHJpbmdCdWlsZGVyNmluc2VydEVQS3RqagorX19aTjNXVEYxM1N0cmlu
Z0J1aWxkZXI2cmVtb3ZlRWpqCitfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjZzaHJpbmtFagorX19a
TkszV1RGMTNTdHJpbmdCdWlsZGVyMTFyZWlmeVN0cmluZ0V2CiBfX1pOM1dURjEzV1RGVGhyZWFk
RGF0YTEwc3RhdGljRGF0YUUKIF9fWk4zV1RGMTNXVEZUaHJlYWREYXRhQzFFdgogX19aTjNXVEYx
M1dURlRocmVhZERhdGFEMUV2CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Zvcndh
cmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0ZvcndhcmQuaAko
cmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0ZvcndhcmQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBjbGFz
cyBFbmNvZGVyOwogICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFzcyBTdHJpbmdCdWZmZXI7Cisg
ICAgY2xhc3MgU3RyaW5nQnVpbGRlcjsKICAgICBjbGFzcyBTdHJpbmdJbXBsOwogfQogCkBAIC01
OSw2ICs2MCw3IEBAIHVzaW5nIFdURjo6RW5jb2RlcjsKIHVzaW5nIFdURjo6RGVjb2RlcjsKIHVz
aW5nIFdURjo6U3RyaW5nOwogdXNpbmcgV1RGOjpTdHJpbmdCdWZmZXI7Cit1c2luZyBXVEY6OlN0
cmluZ0J1aWxkZXI7CiB1c2luZyBXVEY6OlN0cmluZ0ltcGw7CiAKICNlbmRpZiAvLyBXVEZfRm9y
d2FyZF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOSBA
QAogCiBuYW1lc3BhY2UgV1RGIHsKIAotdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygp
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUNhcGFjaXR5ID0gMTY7CisKK3ZvaWQgU3Ry
aW5nQnVpbGRlcjo6cmVpZnlTdHJpbmcoKSBjb25zdAogewogICAgIC8vIENoZWNrIGlmIHRoZSBz
dHJpbmcgYWxyZWFkeSBleGlzdHMuCiAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkgewpAQCAt
NTEsNyArNTMsMjEgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygpCiAgICAgICAg
IDogU3RyaW5nSW1wbDo6Y3JlYXRlKG1fYnVmZmVyLCAwLCBtX2xlbmd0aCk7CiB9CiAKLXZvaWQg
U3RyaW5nQnVpbGRlcjo6cmVzaXplKHVuc2lnbmVkIG5ld1NpemUpCit2b2lkIFN0cmluZ0J1aWxk
ZXI6OnJlbW92ZSh1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFT
U0VSVChwb3NpdGlvbiA8IG1fbGVuZ3RoKTsKKyAgICBBU1NFUlQocG9zaXRpb24gKyBsZW5ndGgg
PD0gbV9sZW5ndGgpOworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAocG9zaXRpb24gKyBsZW5ndGggPCBtX2xlbmd0aCkgeworICAgICAgICBVQ2hhciogYnVmZmVy
ID0gY2hhcmFjdGVycygpOworICAgICAgICBtZW1tb3ZlKGJ1ZmZlciArIHBvc2l0aW9uLCBidWZm
ZXIgKyBwb3NpdGlvbiArIGxlbmd0aCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aCAtIHBv
c2l0aW9uIC0gbGVuZ3RoKSAqIHNpemVvZihVQ2hhcikpOworICAgIH0KKyAgICBtX2xlbmd0aCAt
PSBsZW5ndGg7Cit9CisKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6c2hyaW5rKHVuc2lnbmVkIG5ld1Np
emUpCiB7CiAgICAgLy8gQ2hlY2sgbmV3U2l6ZSA8IG1fbGVuZ3RoLCBoZW5jZSBtX2xlbmd0aCA+
IDAuCiAgICAgQVNTRVJUKG5ld1NpemUgPD0gbV9sZW5ndGgpOwpAQCAtNjIsNyArNzgsNyBAQCB2
b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2l6ZSh1bnNpZ25lZCBuZXdTCiAgICAgLy8gSWYgdGhlcmUg
aXMgYSBidWZmZXIsIHdlIG9ubHkgbmVlZCB0byBkdXBsaWNhdGUgaXQgaWYgaXQgaGFzIG1vcmUg
dGhhbiBvbmUgcmVmLgogICAgIGlmIChtX2J1ZmZlcikgewogICAgICAgICBpZiAoIW1fYnVmZmVy
LT5oYXNPbmVSZWYoKSkKLSAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFy
YWN0ZXJzKCksIG1fYnVmZmVyLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZl
cihtX2J1ZmZlci0+Y2hhcmFjdGVycygpLCBtX2J1ZmZlci0+bGVuZ3RoKCksIDAsIDApOwogICAg
ICAgICBtX2xlbmd0aCA9IG5ld1NpemU7CiAgICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTc2LDI2ICs5MiwzOCBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OnJl
c2l6ZSh1bnNpZ25lZCBuZXdTCiAgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGUobV9z
dHJpbmcuaW1wbCgpLCAwLCBuZXdTaXplKTsKIH0KIAordm9pZCBTdHJpbmdCdWlsZGVyOjpncm93
KHVuc2lnbmVkIG5ld1NpemUpCit7CisgICAgQVNTRVJUKG5ld1NpemUgPj0gbV9sZW5ndGgpOwor
ICAgIGlmIChuZXdTaXplID09IG1fbGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnNl
cnRVbmluaXRpYWxpemVkKG5ld1NpemUgLSBtX2xlbmd0aCwgbV9sZW5ndGgpOworfQorCiB2b2lk
IFN0cmluZ0J1aWxkZXI6OnJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0eSkKIHsK
ICAgICBpZiAobV9idWZmZXIpIHsKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIGJ1
ZmZlciwgdGhlbiBncm93IGlmIG5lY2Vzc2FyeS4KICAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4g
bV9idWZmZXItPmxlbmd0aCgpKQotICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXIt
PmNoYXJhY3RlcnMoKSwgbmV3Q2FwYWNpdHkpOworICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIo
bV9idWZmZXItPmNoYXJhY3RlcnMoKSwgbmV3Q2FwYWNpdHksIDAsIDApOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIC8vIEdyb3cgdGhlIHN0cmluZywgaWYgbmVjZXNzYXJ5LgogICAgICAgICBpZiAo
bmV3Q2FwYWNpdHkgPiBtX2xlbmd0aCkKLSAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3Ry
aW5nLmNoYXJhY3RlcnMoKSwgbmV3Q2FwYWNpdHkpOworICAgICAgICAgICAgYWxsb2NhdGVCdWZm
ZXIobV9zdHJpbmcuY2hhcmFjdGVycygpLCBuZXdDYXBhY2l0eSwgMCwgMCk7CiAgICAgfQogfQog
CiAvLyBBbGxvY2F0ZSBhIG5ldyBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENoYXJhY3RlcnMg
KHRoZXNlIG1heSBjb21lIGZyb20gZWl0aGVyIG1fc3RyaW5nCiAvLyBvciBtX2J1ZmZlciwgIG5l
aXRoZXIgd2lsbCBiZSByZWFzc2lnbmVkIHVudGlsIHRoZSBjb3B5IGhhcyBjb21wbGV0ZWQpLgot
dm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciogY3VycmVudENo
YXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQordm9pZCBTdHJpbmdCdWlsZGVyOjph
bGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJl
cXVpcmVkQ2FwYWNpdHksIHVuc2lnbmVkIGluc2VydExlbmd0aCwgdW5zaWduZWQgaW5zZXJ0UG9z
aXRpb24pCiB7CiAgICAgLy8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRvIGEgbmV3IGJ1ZmZl
ciwgc2V0IHJlc3VsdCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBkYXRhLgot
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBidWZmZXIgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRp
YWxpemVkKHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnMpOwotICAgIG1lbWNweSht
X2J1ZmZlckNoYXJhY3RlcnMsIGN1cnJlbnRDaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+
KG1fbGVuZ3RoKSAqIHNpemVvZihVQ2hhcikpOyAvLyBUaGlzIGNhbid0IG92ZXJmbG93LgorICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBidWZmZXIgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxp
emVkKHJlcXVpcmVkQ2FwYWNpdHksIG1fYnVmZmVyQ2hhcmFjdGVycyk7CisgICAgaWYgKGluc2Vy
dFBvc2l0aW9uID4gMCkKKyAgICAgICAgbWVtY3B5KG1fYnVmZmVyQ2hhcmFjdGVycywgY3VycmVu
dENoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4oaW5zZXJ0UG9zaXRpb24pICogc2l6ZW9m
KFVDaGFyKSk7CisgICAgaWYgKGluc2VydFBvc2l0aW9uIDwgbV9sZW5ndGgpCisgICAgICAgIG1l
bWNweShtX2J1ZmZlckNoYXJhY3RlcnMgKyBpbnNlcnRQb3NpdGlvbiArIGluc2VydExlbmd0aCwg
Y3VycmVudENoYXJhY3RlcnMgKyBpbnNlcnRQb3NpdGlvbiwgc3RhdGljX2Nhc3Q8c2l6ZV90Piht
X2xlbmd0aCAtIGluc2VydFBvc2l0aW9uKSAqIHNpemVvZihVQ2hhcikpOwogCiAgICAgLy8gVXBk
YXRlIHRoZSBidWlsZGVyIHN0YXRlLgogICAgIG1fYnVmZmVyID0gYnVmZmVyLnJlbGVhc2UoKTsK
QEAgLTEwNCw3ICsxMzIsNyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNv
bnN0CiAKIC8vIE1ha2UgJ2xlbmd0aCcgYWRkaXRpb25hbCBjYXBhY2l0eSBiZSBhdmFpbGFibGUg
aW4gbV9idWZmZXIsIHVwZGF0ZSBtX3N0cmluZyAmIG1fbGVuZ3RoLAogLy8gcmV0dXJuIGEgcG9p
bnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHN0b3JhZ2UuCi1VQ2hhciogU3RyaW5nQnVpbGRl
cjo6YXBwZW5kVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCitVQ2hhciogU3RyaW5nQnVp
bGRlcjo6aW5zZXJ0VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHBvc2l0
aW9uKQogewogICAgIEFTU0VSVChsZW5ndGgpOwogCkBAIC0xMTksNDAgKzE0Nyw0MiBAQCBVQ2hh
ciogU3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplCiAKICAgICAgICAgLy8gQ2hlY2sg
aWYgdGhlIGJ1ZmZlciBhbHJlYWR5IGhhcyBzdWZmaWNpZW50IGNhcGFjaXR5LgogICAgICAgICBp
ZiAocmVxdWlyZWRMZW5ndGggPD0gbV9idWZmZXItPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBjdXJyZW50TGVuZ3RoID0gbV9sZW5ndGg7CiAgICAgICAgICAgICBtX3N0cmluZyA9
IFN0cmluZygpOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgbV9sZW5ndGgpCisgICAgICAg
ICAgICAgICAgbWVtbW92ZShtX2J1ZmZlckNoYXJhY3RlcnMgKyBwb3NpdGlvbiArIGxlbmd0aCwg
bV9idWZmZXJDaGFyYWN0ZXJzICsgcG9zaXRpb24sIHN0YXRpY19jYXN0PHNpemVfdD4obV9sZW5n
dGggLSBwb3NpdGlvbikgKiBzaXplb2YoVUNoYXIpKTsKICAgICAgICAgICAgIG1fbGVuZ3RoID0g
cmVxdWlyZWRMZW5ndGg7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWZmZXJDaGFyYWN0ZXJzICsg
Y3VycmVudExlbmd0aDsKKyAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnMgKyBw
b3NpdGlvbjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVhbGxvYyB0aGUg
YnVmZmVyLgotICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVycygpLCBz
dGQ6Om1heChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXItPmxlbmd0aCgpICogMikpOworICAgICAg
ICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlckNoYXJhY3RlcnMsIHN0ZDo6bWF4KHJlcXVpcmVkTGVu
Z3RoLCBzdGQ6Om1heChtaW5pbXVtQ2FwYWNpdHksIG1fYnVmZmVyLT5sZW5ndGgoKSAqIDIpKSwg
bGVuZ3RoLCBwb3NpdGlvbik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fc3RyaW5n
Lmxlbmd0aCgpID09IG1fbGVuZ3RoKTsKLSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9zdHJpbmcu
Y2hhcmFjdGVycygpLCBzdGQ6Om1heChyZXF1aXJlZExlbmd0aCwgcmVxdWlyZWRMZW5ndGggKiAy
KSk7CisgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RkOjpt
YXgocmVxdWlyZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgbV9sZW5ndGggKiAy
KSksIGxlbmd0aCwgcG9zaXRpb24pOwogICAgIH0KIAotICAgIFVDaGFyKiByZXN1bHQgPSBtX2J1
ZmZlckNoYXJhY3RlcnMgKyBtX2xlbmd0aDsKICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3Ro
OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFjdGVycyArIHBv
c2l0aW9uOwogfQogCi12b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBTdHJpbmdCdWlsZGVyOjppbnNlcnQoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgcG9zaXRpb24p
CiB7CiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoY2hhcmFj
dGVycyk7CisgICAgQVNTRVJUKHBvc2l0aW9uIDw9IG1fbGVuZ3RoKTsKIAotICAgIG1lbWNweShh
cHBlbmRVbmluaXRpYWxpemVkKGxlbmd0aCksIGNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVf
dD4obGVuZ3RoKSAqIDIpOworICAgIG1lbWNweShpbnNlcnRVbmluaXRpYWxpemVkKGxlbmd0aCwg
cG9zaXRpb24pLCBjaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiAyKTsK
IH0KIAotdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgY2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoKQordm9pZCBTdHJpbmdCdWlsZGVyOjppbnNlcnQoY29uc3QgY2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBwb3NpdGlvbikKIHsKICAgICBp
ZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKKyAg
ICBBU1NFUlQocG9zaXRpb24gPD0gbV9sZW5ndGgpOwogCi0gICAgVUNoYXIqIGRlc3QgPSBhcHBl
bmRVbmluaXRpYWxpemVkKGxlbmd0aCk7CisgICAgVUNoYXIqIGRlc3QgPSBpbnNlcnRVbmluaXRp
YWxpemVkKGxlbmd0aCwgcG9zaXRpb24pOwogICAgIGNvbnN0IGNoYXIqIGVuZCA9IGNoYXJhY3Rl
cnMgKyBsZW5ndGg7CiAgICAgd2hpbGUgKGNoYXJhY3RlcnMgPCBlbmQpCiAgICAgICAgICooZGVz
dCsrKSA9ICooY29uc3QgdW5zaWduZWQgY2hhciopKGNoYXJhY3RlcnMrKyk7CkBAIC0xNjQsOCAr
MTk0LDkgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpzaHJpbmtUb0ZpdCgpCiAgICAgaWYgKG1fYnVm
ZmVyICYmIG1fYnVmZmVyLT5sZW5ndGgoKSA+IChtX2xlbmd0aCArIChtX2xlbmd0aCA+PiAyKSkp
IHsKICAgICAgICAgVUNoYXIqIHJlc3VsdDsKICAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBs
OjpjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCByZXN1bHQpOwotICAgICAgICBtZW1jcHko
cmVzdWx0LCBtX2J1ZmZlci0+Y2hhcmFjdGVycygpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVu
Z3RoKSAqIDIpOyAvLyBUaGlzIGNhbid0IG92ZXJmbG93LgorICAgICAgICBtZW1jcHkocmVzdWx0
LCBtX2J1ZmZlckNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obV9sZW5ndGgpICogMik7
IC8vIFRoaXMgY2FuJ3Qgb3ZlcmZsb3cuCiAgICAgICAgIG1fYnVmZmVyID0gMDsKKyAgICAgICAg
bV9idWZmZXJDaGFyYWN0ZXJzID0gMDsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAkocmV2aXNpb24gOTM4NDgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSwyMyArMzUsMzAgQEAgY2xhc3MgU3RyaW5nQnVpbGRlciB7CiBwdWJsaWM6
CiAgICAgU3RyaW5nQnVpbGRlcigpCiAgICAgICAgIDogbV9sZW5ndGgoMCkKKyAgICAgICAgLCBt
X2J1ZmZlckNoYXJhY3RlcnMoMCkKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmQoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCk7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciosIHVuc2ln
bmVkKTsKKyAgICBTdHJpbmdCdWlsZGVyKGNvbnN0IFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCisg
ICAgICAgIDogbV9sZW5ndGgoMCkKKyAgICB7CisgICAgICAgIGFwcGVuZChidWlsZGVyKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoKQorICAgIHsKKyAgICAgICAgaW5zZXJ0KGNoYXJhY3RlcnMsIGxlbmd0aCwgbV9sZW5n
dGgpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIGluc2VydChjaGFyYWN0ZXJzLCBsZW5ndGgs
IG1fbGVuZ3RoKTsKKyAgICB9CiAKICAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHN0cmlu
ZykKICAgICB7Ci0gICAgICAgIC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0byBhbiBlbXB0eSBzdHJp
bmcsIGFuZCB0aGVyZSBpcyBub3QgYnVmZmVyCi0gICAgICAgIC8vIChpbiBjYXNlIHJlc2VydmVD
YXBhY2l0eSBoYXMgYmVlbiBjYWxsZWQpIHRoZW4ganVzdCByZXRhaW4gdGhlCi0gICAgICAgIC8v
IHN0cmluZy4KLSAgICAgICAgaWYgKCFtX2xlbmd0aCAmJiAhbV9idWZmZXIpIHsKLSAgICAgICAg
ICAgIG1fc3RyaW5nID0gc3RyaW5nOwotICAgICAgICAgICAgbV9sZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYXBwZW5kKHN0
cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGlmICghdHJ5UmV0
YWluKHN0cmluZykpCisgICAgICAgICAgICBhcHBlbmQoc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3Ry
aW5nLmxlbmd0aCgpKTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiBjaGFy
YWN0ZXJzKQpAQCAtNjgsMTQgKzc1LDkyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGFwcGVuZCgm
YywgMSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmQoY2hhciBjKQorICAgIHZvaWQgYXBwZW5k
KGNvbnN0IFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCiAgICAgewotICAgICAgICBpZiAobV9idWZm
ZXIgJiYgbV9sZW5ndGggPCBtX2J1ZmZlci0+bGVuZ3RoKCkgJiYgbV9zdHJpbmcuaXNOdWxsKCkp
Ci0gICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnNbbV9sZW5ndGgrK10gPSAodW5zaWduZWQg
Y2hhciljOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmQoJmMsIDEpOworICAgICAg
ICBpZiAoIXRyeVJldGFpbihidWlsZGVyKSkKKyAgICAgICAgICAgIGFwcGVuZChidWlsZGVyLmNo
YXJhY3RlcnMoKSwgYnVpbGRlci5sZW5ndGgoKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRO
dW1iZXIodW5zaWduZWQgY2hhciBudW1iZXIpCisgICAgeworICAgICAgICB1bnNpZ25lZCBudW1i
ZXJMZW5ndGggPSBudW1iZXIgPiA5OSA/IDMgOiAobnVtYmVyID4gOSA/IDIgOiAxKTsKKyAgICAg
ICAgVUNoYXIqIGJ1ZmZlciA9IGluc2VydFVuaW5pdGlhbGl6ZWQobnVtYmVyTGVuZ3RoLCBtX2xl
bmd0aCk7CisKKyAgICAgICAgc3dpdGNoIChudW1iZXJMZW5ndGgpIHsKKyAgICAgICAgY2FzZSAz
OgorICAgICAgICAgICAgYnVmZmVyWzJdID0gbnVtYmVyICUgMTAgKyAnMCc7CisgICAgICAgICAg
ICBudW1iZXIgLz0gMTA7CisgICAgICAgICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICAgICAgY2Fz
ZSAyOgorICAgICAgICAgICAgYnVmZmVyWzFdID0gbnVtYmVyICUgMTAgKyAnMCc7CisgICAgICAg
ICAgICBudW1iZXIgLz0gMTA7CisgICAgICAgICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICAgICAg
Y2FzZSAxOgorICAgICAgICAgICAgYnVmZmVyWzBdID0gbnVtYmVyICUgMTAgKyAnMCc7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHByZXBlbmQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIGluc2VydChjaGFyYWN0ZXJzLCBsZW5n
dGgsIDApOworICAgIH0KKworICAgIHZvaWQgcHJlcGVuZChjb25zdCBjaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBpbnNlcnQoY2hhcmFjdGVycywgbGVu
Z3RoLCAwKTsKKyAgICB9CisKKyAgICB2b2lkIHByZXBlbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcp
CisgICAgeworICAgICAgICBpZiAoIXRyeVJldGFpbihzdHJpbmcpKQorICAgICAgICAgICAgcHJl
cGVuZChzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgIH0KKworICAg
IHZvaWQgcHJlcGVuZChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQorICAgIHsKKyAgICAgICAgaWYg
KGNoYXJhY3RlcnMpCisgICAgICAgICAgICBwcmVwZW5kKGNoYXJhY3RlcnMsIHN0cmxlbihjaGFy
YWN0ZXJzKSk7CisgICAgfQorCisgICAgdm9pZCBwcmVwZW5kKFVDaGFyIGMpCisgICAgeworICAg
ICAgICBwcmVwZW5kKCZjLCAxKTsKKyAgICB9CisKKyAgICB2b2lkIHByZXBlbmQoY29uc3QgU3Ry
aW5nQnVpbGRlciYgYnVpbGRlcikKKyAgICB7CisgICAgICAgIGlmICghdHJ5UmV0YWluKGJ1aWxk
ZXIpKQorICAgICAgICAgICAgcHJlcGVuZChidWlsZGVyLmNoYXJhY3RlcnMoKSwgYnVpbGRlci5s
ZW5ndGgoKSk7CisgICAgfQorCisgICAgdm9pZCBpbnNlcnQoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgcG9zaXRpb24pOworICAgIHZvaWQgaW5zZXJ0
KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgcG9zaXRp
b24pOworCisgICAgdm9pZCBpbnNlcnQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHBv
c2l0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCF0cnlSZXRhaW4oc3RyaW5nKSkKKyAgICAgICAg
ICAgIGluc2VydChzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCksIHBvc2l0aW9u
KTsKKyAgICB9CisKKyAgICB2b2lkIGluc2VydChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBwb3NpdGlvbikKKyAgICB7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzKQorICAgICAgICAg
ICAgaW5zZXJ0KGNoYXJhY3RlcnMsIHN0cmxlbihjaGFyYWN0ZXJzKSwgcG9zaXRpb24pOwogICAg
IH0KIAorICAgIHZvaWQgaW5zZXJ0KFVDaGFyIGMsIHVuc2lnbmVkIHBvc2l0aW9uKQorICAgIHsK
KyAgICAgICAgaW5zZXJ0KCZjLCAxLCBwb3NpdGlvbik7CisgICAgfQorCisgICAgdm9pZCBpbnNl
cnQoY29uc3QgU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgdW5zaWduZWQgcG9zaXRpb24pCisgICAg
eworICAgICAgICBpZiAoIXRyeVJldGFpbihidWlsZGVyKSkKKyAgICAgICAgICAgIGluc2VydChi
dWlsZGVyLmNoYXJhY3RlcnMoKSwgYnVpbGRlci5sZW5ndGgoKSwgcG9zaXRpb24pOworICAgIH0K
KworICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgpOwor
CiAgICAgU3RyaW5nIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIGlmIChtX3N0cmluZy5pc051
bGwoKSkgewpAQCAtODUsMzMgKzE3MCw4MiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3N0
cmluZzsKICAgICB9CiAKLSAgICBTdHJpbmcgdG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkKKyAg
ICBTdHJpbmcgdG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkgY29uc3QKICAgICB7CiAgICAgICAg
IGlmIChtX3N0cmluZy5pc051bGwoKSkKICAgICAgICAgICAgIHJlaWZ5U3RyaW5nKCk7CiAgICAg
ICAgIHJldHVybiBtX3N0cmluZzsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dAorICAgIFN0cmluZyByZWxlYXNlU3RyaW5nKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xl
bmd0aDsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHRvU3RyaW5nKCk7CisgICAgICAgIGNsZWFy
KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFsZW5ndGgoKTsgfQogCiAgICAgdm9pZCByZXNlcnZlQ2FwYWNpdHkodW5zaWdu
ZWQgbmV3Q2FwYWNpdHkpOwogCi0gICAgdm9pZCByZXNpemUodW5zaWduZWQgbmV3U2l6ZSk7Cisg
ICAgLy8gU2hyaW5rIHRoZSBzaXplIHRvIG5ld1NpemUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGNh
cGFjaXR5LgorICAgIHZvaWQgc2hyaW5rKHVuc2lnbmVkIG5ld1NpemUpOworCisgICAgLy8gR3Jv
dyB0aGUgc2l6ZSB0byBuZXdTaXplIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBjYXBhY2l0eS4KKyAg
ICB2b2lkIGdyb3codW5zaWduZWQgbmV3U2l6ZSk7CisKKyAgICB2b2lkIHJlc2l6ZSh1bnNpZ25l
ZCBuZXdTaXplKQorICAgIHsKKyAgICAgICAgaWYgKG5ld1NpemUgPiBtX2xlbmd0aCkKKyAgICAg
ICAgICAgIGdyb3cobmV3U2l6ZSk7CisgICAgICAgIGVsc2UgaWYgKG5ld1NpemUgPCBtX2xlbmd0
aCkKKyAgICAgICAgICAgIHNocmluayhuZXdTaXplKTsKKyAgICB9CiAKKyAgICAvLyBTaHJpbmtz
IHRoZSBidWZmZXIgdG8gdGhlIGN1cnJlbnQgbGVuZ3RoLgogICAgIHZvaWQgc2hyaW5rVG9GaXQo
KTsKIAogICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gY2hhcmFjdGVycygpW2ld
OworICAgIH0KKworICAgIFVDaGFyJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpCisgICAgeworICAg
ICAgICBBU1NFUlQoaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnMoKVtp
XTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nJiBzdHJpbmcpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gdG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkgPT0g
c3RyaW5nOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmdCdWlsZGVy
JiBidWlsZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvU3RyaW5nUHJlc2VydmVD
YXBhY2l0eSgpID09IGJ1aWxkZXIudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCk7CisgICAgfQor
CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCFtX2xlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoIW1fc3RyaW5n
LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5nW2ldOworICAgICAgICAgICAg
cmV0dXJuIG1fc3RyaW5nLmNoYXJhY3RlcnMoKTsKICAgICAgICAgQVNTRVJUKG1fYnVmZmVyKTsK
LSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzKClbaV07CisgICAgICAgIHJldHVy
biBtX2J1ZmZlci0+Y2hhcmFjdGVycygpOworICAgIH0KKworICAgIFVDaGFyKiBjaGFyYWN0ZXJz
KCkKKyAgICB7CisgICAgICAgIGlmICghbV9sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgaWYgKCFtX2J1ZmZlckNoYXJhY3RlcnMpCisgICAgICAgICAgICBhbGxvY2F0ZUJ1
ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzKCksIG1fbGVuZ3RoLCAwLCAwKTsKKyAgICAgICAgcmV0
dXJuIG1fYnVmZmVyQ2hhcmFjdGVyczsKICAgICB9CiAKICAgICB2b2lkIGNsZWFyKCkKQEAgLTEx
OSwxNSArMjUzLDUzIEBAIHB1YmxpYzoKICAgICAgICAgbV9sZW5ndGggPSAwOwogICAgICAgICBt
X3N0cmluZyA9IFN0cmluZygpOwogICAgICAgICBtX2J1ZmZlciA9IDA7CisgICAgICAgIG1fYnVm
ZmVyQ2hhcmFjdGVycyA9IDA7CisgICAgfQorCisgICAgdm9pZCBzd2FwKFN0cmluZ0J1aWxkZXIm
IGJ1aWxkZXIpCisgICAgeworICAgICAgICBzdGQ6OnN3YXAobV9sZW5ndGgsIGJ1aWxkZXIubV9s
ZW5ndGgpOworICAgICAgICBtX3N0cmluZy5zd2FwKGJ1aWxkZXIubV9zdHJpbmcpOworICAgICAg
ICBtX2J1ZmZlci5zd2FwKGJ1aWxkZXIubV9idWZmZXIpOworICAgICAgICBzdGQ6OnN3YXAobV9i
dWZmZXJDaGFyYWN0ZXJzLCBidWlsZGVyLm1fYnVmZmVyQ2hhcmFjdGVycyk7CiAgICAgfQogCisg
ICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnVm
ZmVyID8gbV9idWZmZXItPmxlbmd0aCgpIDogbV9sZW5ndGg7CisgICAgfQogcHJpdmF0ZToKLSAg
ICB2b2lkIGFsbG9jYXRlQnVmZmVyKGNvbnN0IFVDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5z
aWduZWQgcmVxdWlyZWRMZW5ndGgpOwotICAgIFVDaGFyKiBhcHBlbmRVbmluaXRpYWxpemVkKHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgdm9pZCByZWlmeVN0cmluZygpOworICAgIGJvb2wgdHJ5UmV0
YWluKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgLy8gSWYgd2UncmUgYXBw
ZW5kaW5nL3ByZXBlbmRpbmcvaW5zZXJ0aW5nIHRvIGFuIGVtcHR5IHN0cmluZywgYW5kIHRoZXJl
IGlzIG5vdCBidWZmZXIKKyAgICAgICAgLy8gKGluIGNhc2UgcmVzZXJ2ZUNhcGFjaXR5IGhhcyBi
ZWVuIGNhbGxlZCkgdGhlbiBqdXN0IHJldGFpbiB0aGUgc3RyaW5nLgorICAgICAgICBpZiAoIW1f
bGVuZ3RoICYmICFtX2J1ZmZlcikgeworICAgICAgICAgICAgbV9zdHJpbmcgPSBzdHJpbmc7Cisg
ICAgICAgICAgICBtX2xlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBi
b29sIHRyeVJldGFpbihjb25zdCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQorICAgIHsKKyAgICAg
ICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nL3ByZXBlbmRpbmcvaW5zZXJ0aW5nIHRvIGFuIGVtcHR5
IHN0cmluZywgYW5kIHRoZXJlIGlzIG5vdCBidWZmZXIKKyAgICAgICAgLy8gKGluIGNhc2UgcmVz
ZXJ2ZUNhcGFjaXR5IGhhcyBiZWVuIGNhbGxlZCkgdGhlbiBqdXN0IHJldGFpbiB0aGUgc3RyaW5n
LgorICAgICAgICBpZiAoIW1fbGVuZ3RoICYmICFtX2J1ZmZlcikgeworICAgICAgICAgICAgU3Ry
aW5nIHN0cmluZyA9IGJ1aWxkZXIudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCk7CisgICAgICAg
ICAgICBtX3N0cmluZyA9IHN0cmluZzsKKyAgICAgICAgICAgIG1fbGVuZ3RoID0gc3RyaW5nLmxl
bmd0aCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoY29uc3QgVUNoYXIq
IGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5LCB1bnNpZ25lZCBp
bnNlcnRMZW5ndGgsIHVuc2lnbmVkIGluc2VydFBvc2l0aW9uKTsKKyAgICBVQ2hhciogaW5zZXJ0
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGluc2VydFBvc2l0aW9uKTsK
KyAgICB2b2lkIHJlaWZ5U3RyaW5nKCkgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBtX2xlbmd0aDsK
LSAgICBTdHJpbmcgbV9zdHJpbmc7CisgICAgbXV0YWJsZSBTdHJpbmcgbV9zdHJpbmc7CiAgICAg
UmVmUHRyPFN0cmluZ0ltcGw+IG1fYnVmZmVyOwogICAgIFVDaGFyKiBtX2J1ZmZlckNoYXJhY3Rl
cnM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcu
aAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RG
U3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1NiwzMSArNDU2LDYgQEAgaW5saW5lIHNpemVf
dCByZXZlcnNlRmluZChjb25zdCBVQ2hhciogYwogICAgIHJldHVybiBpbmRleDsKIH0KIAotaW5s
aW5lIHZvaWQgYXBwZW5kKFZlY3RvcjxVQ2hhcj4mIHZlY3RvciwgY29uc3QgU3RyaW5nJiBzdHJp
bmcpCi17Ci0gICAgdmVjdG9yLmFwcGVuZChzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVu
Z3RoKCkpOwotfQotCi1pbmxpbmUgdm9pZCBhcHBlbmROdW1iZXIoVmVjdG9yPFVDaGFyPiYgdmVj
dG9yLCB1bnNpZ25lZCBjaGFyIG51bWJlcikKLXsKLSAgICBpbnQgbnVtYmVyTGVuZ3RoID0gbnVt
YmVyID4gOTkgPyAzIDogKG51bWJlciA+IDkgPyAyIDogMSk7Ci0gICAgc2l6ZV90IHZlY3RvclNp
emUgPSB2ZWN0b3Iuc2l6ZSgpOwotICAgIHZlY3Rvci5ncm93KHZlY3RvclNpemUgKyBudW1iZXJM
ZW5ndGgpOwotCi0gICAgc3dpdGNoIChudW1iZXJMZW5ndGgpIHsKLSAgICBjYXNlIDM6Ci0gICAg
ICAgIHZlY3Rvclt2ZWN0b3JTaXplICsgMl0gPSBudW1iZXIgJSAxMCArICcwJzsKLSAgICAgICAg
bnVtYmVyIC89IDEwOwotCi0gICAgY2FzZSAyOgotICAgICAgICB2ZWN0b3JbdmVjdG9yU2l6ZSAr
IDFdID0gbnVtYmVyICUgMTAgKyAnMCc7Ci0gICAgICAgIG51bWJlciAvPSAxMDsKLQotICAgIGNh
c2UgMToKLSAgICAgICAgdmVjdG9yW3ZlY3RvclNpemVdID0gbnVtYmVyICUgMTAgKyAnMCc7Ci0g
ICAgfQotfQotCiB0ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhcik+IGlubGlu
ZSBib29sIGlzQWxsU3BlY2lhbENoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNp
emVfdCBsZW5ndGgpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewpAQCAtNTExLDggKzQ4Niw2IEBAIFdURl9FWFBPUlRfUFJJVkFURSBjb25zdCBTdHJpbmcmIGVt
cHR5U3QKIHVzaW5nIFdURjo6Q1N0cmluZzsKIHVzaW5nIFdURjo6U3RyaW5nOwogdXNpbmcgV1RG
OjplbXB0eVN0cmluZzsKLXVzaW5nIFdURjo6YXBwZW5kOwotdXNpbmcgV1RGOjphcHBlbmROdW1i
ZXI7CiB1c2luZyBXVEY6OmNoYXJhY3RlcnNBcmVBbGxBU0NJSTsKIHVzaW5nIFdURjo6Y2hhcmFj
dGVyc0FyZUFsbExhdGluMTsKIHVzaW5nIFdURjo6Y2hhcmFjdGVyc1RvSW50U3RyaWN0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNDYgQEAKKzIwMTEtMDgtMjQgIFhpYW56aHUgV2Fu
ZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXBsYWNlIHNvbWUgdXNh
Z2VzIG9mIFZlY3RvcjxVQ2hhcj4gdG8gU3RyaW5nQnVpbGRlci4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NjYxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIHdvcmsgdG8gc3Vw
cG9ydCA4LWJpdCBzdHJpbmcgYnVmZmVycy4KKyAgICAgICAgTm8gbmV3IHRlc3RzLiBBbGwgZXhp
c3RpbmcgdW5pdCB0ZXN0cyBhbmQgbGF5b3V0IHRlc3RzIHNob3VsZCBydW4gYXMKKyAgICAgICAg
YmVmb3JlLgorCisgICAgICAgICogY3NzL0NTU09NVXRpbHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YXBwZW5kQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUNoYXJhY3Rl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVDaGFyYWN0ZXJBc0NvZGVQb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlcmlhbGl6ZVN0cmluZyk6CisgICAgICAgICogY3NzL0NTU09NVXRpbHMuaDoKKyAgICAgICAg
KiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0
aXZlVmFsdWU6OmNzc1RleHQpOgorICAgICAgICAqIGNzcy9DU1NXcmFwU2hhcGVzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1dyYXBTaGFwZVJlY3Q6OmNzc1RleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTV3JhcFNoYXBlQ2lyY2xlOjpjc3NUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1dyYXBTaGFwZUVsbGlwc2U6OmNzc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTV3JhcFNo
YXBlUG9seWdvbjo6Y3NzVGV4dCk6CisgICAgICAgICogZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1h
dCk6CisgICAgICAgICogZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjphcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFya3VwQWNjdW11bGF0b3I6OnNlcmlhbGl6ZU5vZGVzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydFRhZyk6CisgICAgICAgIChXZWJDb3Jl
OjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKToKKyAgICAgICAgKFdlYkNvcmU6Ok1h
cmt1cEFjY3VtdWxhdG9yOjpjb25jYXRlbmF0ZU1hcmt1cCk6CisgICAgICAgIChXZWJDb3JlOjpN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5hbWVzcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ29tbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE9wZW5UYWcpOgor
ICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENsb3NlVGFnKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENEQVRBU2VjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXApOgor
ICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZE1hcmt1cCk6Cisg
ICAgICAgICogZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oOgorICAgICAgICAqIGVkaXRpbmcv
VGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3Rlckl0ZXJhdG9yOjpz
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V29yZEF3YXJlSXRlcmF0b3I6Omxlbmd0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JkQXdhcmVJdGVyYXRvcjo6Y2hhcmFjdGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpub3JtYWxpemVDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJj
aEJ1ZmZlcjo6U2VhcmNoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZlcjo6
YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZlcjo6cHJlcGVuZENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjppc0JhZE1hdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXRjaCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWFyY2hCdWZmZXI6OnNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpwbGFpblRleHRU
b01hbGxvY0FsbG9jYXRlZEJ1ZmZlcik6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3Iu
aDoKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnN0cmluZ1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZSk6CisgICAgICAgICogZWRpdGluZy9tYXJr
dXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6Ondy
YXBXaXRoTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6
d3JhcFdpdGhTdHlsZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9wZW5UYWcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OnRha2VSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
ZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnVybFRv
TWFya3VwKToKKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6cHJldmlvdXNCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0Qm91bmRh
cnkpOgorICAgICAgICAqIGh0bWwvRE9NVG9rZW5MaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVRva2VuTGlzdDo6cmVtb3ZlVG9rZW4pOgorICAgICAgICAqIGh0bWwvSFRNTEZvbnRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRm9udFNpemUpOgorICAgICAgICAqIGh0
bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN0cmlwcGVkUGxhY2Vob2xkZXIpOgorICAgICAgICAq
IGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Vmlld1NvdXJjZURvY3VtZW50Ojpwcm9jZXNzVGFnVG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByZWxvYWRT
Y2FubmVyOjpzY2FuKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByZWxvYWRTY2FubmVyOjplbWl0
UnVsZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaDoKKyAgICAg
ICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0RG9jdHlwZSk6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1l
SFRNTEVudGl0eSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5oOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnByb2Nlc3NNZXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6Y2hlY2tGb3JNZXRhQ2hhcnNldCk6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpwYXJzZUhUTUxJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSFRNTE5vbk5l
Z2F0aXZlSW50ZWdlcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lczo6UHJlbG9hZFRhc2s6OlByZWxvYWRU
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lczo6UHJlbG9hZFRhc2s6OnByb2Nlc3NB
dHRyaWJ1dGVzKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVG9rZW4uaDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUb2tlbjo6bmFtZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRv
a2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6Om5hbWVGb3JBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6cHJvY2Vzc0VudGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpuZXh0VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRva2VuaXplcjo6dGVtcG9yYXJ5QnVmZmVySXMpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxUb2tlbml6ZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpFeHRlcm5hbENoYXJhY3RlclRv
a2VuQnVmZmVyOjpFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6Z2l2ZVJl
bWFpbmluZ1RvKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxD
aGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6dGFrZVJlbWFpbmluZ1doaXRlc3BhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5UYWJsZVRleHQpOgorICAgICAg
ICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxWaWV3U291cmNlUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWV3U291
cmNlUGFyc2VyOjp1cGRhdGVUb2tlbml6ZXJTdGF0ZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIv
WFNTQXVkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNOYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRBdHRyaWJ1dGVXaXRoTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjppc05hbWVP
ZklubGluZUV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpjb250YWluc0phdmFTY3Jp
cHRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyUGFyYW1Ub2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjplcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yVmFsdWU6OnRvSlNPTlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJh
c2ljVmFsdWU6OndyaXRlSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHJpbmc6
OndyaXRlSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPYmplY3Q6OndyaXRlSlNP
Tik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcnJheTo6d3JpdGVKU09OKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg6CisgICAgICAgICogbG9hZGVyL0Nyb3Nz
T3JpZ2luQWNjZXNzQ29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBY2Nlc3ND
b250cm9sUHJlZmxpZ2h0UmVxdWVzdCk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpzdG9yZSk6CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21lOjpzZXRUb29sVGlwKToKKyAgICAgICAgKiBwYWdlL0V2ZW50U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaWRSZWNlaXZlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cGFyc2VFdmVudFN0cmVhbSk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudFNvdXJjZTo6cGFyc2VFdmVudFN0cmVhbUxpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRTb3VyY2U6OmNyZWF0ZU1lc3NhZ2VFdmVudCk6CisgICAgICAgICogcGFnZS9FdmVu
dFNvdXJjZS5oOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1
c3RvbUF0dHJpYnV0ZXMpOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OnRvU3RyaW5nKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUZvckZpbGVOYW1l
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6
OmRlcHJlY2F0ZWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlVVJMRXNjYXBlU2Vx
dWVuY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW5rSGFzaC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYW5T
bGFzaERvdERvdFNsYXNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VEb3VibGVTbGFzaGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFuU2xhc2hEb3RTbGFzaGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OmNsZWFuUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpdGVkVVJMSW5saW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OnZpc2l0ZWRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRl
ZExpbmtIYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW5rSGFzaC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXJp
YWxpemVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpzZXRVUkwpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdE1JTUVU
eXBlRnJvbU1lZGlhVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjpkZWNvZGUpOgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0U3Ry
ZWFtOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRTdHJlYW06OnJlbGVhc2Up
OgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5oOgorICAgICAgICAqIHBsdWdp
bnMvUGx1Z2luU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6c3Rh
cnRTdHJlYW0pOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmFkanVzdENoYXJhY3RlcnNBbmRMZW5ndGhGb3JIeXBoZW4pOgorICAgICAg
ICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJG
b3JBcHBlbmRpbmdIeXBoZW46OkJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RJdGVtOjptYXJrZXJUZXh0V2l0aFN1ZmZpeCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9TeW1ib2xpYyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaXN0TWFya2VyOjpzdWZmaXgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxl
cyk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MRmVuY2VkOjp1cGRhdGVGcm9tRWxlbWVudCk6
CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQkxldmVsREJDb2Rpbmc6OmRlY29kZVN0cmluZyk6CisgICAgICAgICogeG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxS
ZXNwb25zZUhlYWRlcnMpOgorICAgICAgICAqIHhtbC9YUGF0aEZ1bmN0aW9ucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuSWQ6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpGdW5Db25jYXQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB4bWwvWFBhdGhVdGlsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpzdHJpbmdWYWx1ZSk6CisgICAgICAgICogeG1s
L1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVG9TdHJp
bmdCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNhdmVSZXN1bHRUb1N0cmluZyk6CisgICAg
ICAgICogeG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmg6
CisgICAgICAgIChXZWJDb3JlOjp1bmNvbnN1bWVDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UpOgorICAgICAgICAqIHhtbC9wYXJzZXIvTWFy
a3VwVG9rZW5CYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tlbkJhc2U6Ok1hcmt1
cFRva2VuQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tlbkJhc2U6OmFwcGVuZFRv
QXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5CYXNlOjpjaGFy
YWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cFRva2VuQmFzZTo6Y29tbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tlbkJhc2U6OnB1YmxpY0lkZW50aWZpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5CYXNlOjpzeXN0ZW1JZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hcmt1cFRva2VuQmFzZTo6cHJpbnRTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFya3VwVG9rZW5CYXNlOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01h
cmt1cFRva2VuQmFzZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkF0b21pY01hcmt1cFRva2VuQmFzZTo6Y2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpB
dG9taWNNYXJrdXBUb2tlbkJhc2U6OnB1YmxpY0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlOjpzeXN0ZW1JZGVudGlmaWVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ojo6aW5pdGlhbGl6ZUF0dHJpYnV0ZXMpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1M
Q2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVY
TUxDaGFyYWN0ZXJSZWZlcmVuY2UpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MQ2hhcmFjdGVy
UmVmZXJlbmNlUGFyc2VyLmg6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxUb2tlbi5oOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MVG9rZW46Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9r
ZW46OnRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbjo6ZGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpYTUxUb2tlbjo6cHJlZml4KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2Vu
OjpoYXNQcmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljWE1MVG9rZW46OkF0b21pY1hN
TFRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY1hNTFRva2VuOjp4bWxWZXJzaW9uKToK
KyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojo6Om5hbWVGb3JBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpu
ZXh0VG9rZW4pOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NYTUxEZWNsYXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0RPQ1RZUEUpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIpOgorCiAyMDExLTA4
LTI1ICBMdWtlIE1hY3BoZXJzb24gICA8bWFjcGhlcnNvbkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgSW1wbGVtZW50IGFuaW1hdGlvbiBhbmQgdHJhbnNpdGlvbiBwcm9wZXJ0aWVzIGluIENTU1N0
eWxlQXBwbHlQcm9wZXJ0eS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NPTVV0aWxzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTT01VdGlscy5jcHAJKHJldmlz
aW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU09NVXRpbHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiwxMCArMzIsMTEgQEAKICNpbmNsdWRlICJDU1NPTVV0aWxzLmgiCiAKICNp
bmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lkIGFwcGVuZENoYXJhY3Rl
cihVQ2hhcjMyIGMsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKQorc3RhdGljIHZvaWQgYXBwZW5k
Q2hhcmFjdGVyKFVDaGFyMzIgYywgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pCiB7CiAgICAgaWYg
KFUxNl9MRU5HVEgoYykgPT0gMSkKICAgICAgICAgYXBwZW5kVG8uYXBwZW5kKHN0YXRpY19jYXN0
PFVDaGFyPihjKSk7CkBAIC00NSwxMyArNDYsMTMgQEAgc3RhdGljIHZvaWQgYXBwZW5kQ2hhcmFj
dGVyKFVDaGFyMzIgYywgVgogICAgIH0KIH0KIAotdm9pZCBzZXJpYWxpemVDaGFyYWN0ZXIoVUNo
YXIzMiBjLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbykKK3ZvaWQgc2VyaWFsaXplQ2hhcmFjdGVy
KFVDaGFyMzIgYywgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pCiB7CiAgICAgYXBwZW5kVG8uYXBw
ZW5kKCdcXCcpOwogICAgIGFwcGVuZENoYXJhY3RlcihjLCBhcHBlbmRUbyk7CiB9CiAKLXZvaWQg
c2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIzMiBjLCBWZWN0b3I8VUNoYXI+JiBh
cHBlbmRUbykKK3ZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIzMiBjLCBT
dHJpbmdCdWlsZGVyJiBhcHBlbmRUbykKIHsKICAgICBhcHBlbmRUby5hcHBlbmQoJ1xcJyk7CiAg
ICAgYXBwZW5kVW5zaWduZWRBc0hleChjLCBhcHBlbmRUbywgTG93ZXJjYXNlKTsKQEAgLTYwLDEy
ICs2MSwxMiBAQCB2b2lkIHNlcmlhbGl6ZUNoYXJhY3RlckFzQ29kZVBvaW50KFVDaGFyCiAKIHZv
aWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFN0cmluZyYg
YXBwZW5kVG8pCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBhZGRlbmQ7CisgICAgU3RyaW5nQnVpbGRl
ciBhZGRlbmQ7CiAgICAgc2VyaWFsaXplSWRlbnRpZmllcihpZGVudGlmaWVyLCBhZGRlbmQpOwot
ICAgIGFwcGVuZFRvLmFwcGVuZChTdHJpbmc6OmFkb3B0KGFkZGVuZCkpOworICAgIGFwcGVuZFRv
LmFwcGVuZChhZGRlbmQudG9TdHJpbmcoKSk7CiB9CiAKLXZvaWQgc2VyaWFsaXplSWRlbnRpZmll
cihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKQordm9p
ZCBzZXJpYWxpemVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgU3RyaW5nQnVp
bGRlciYgYXBwZW5kVG8pCiB7CiAgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKICAgICBib29sIGlz
U2Vjb25kID0gZmFsc2U7CkBAIC05NiwxMiArOTcsMTIgQEAgdm9pZCBzZXJpYWxpemVJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgaQogCiB2b2lkIHNlcmlhbGl6ZVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgU3RyaW5nJiBhcHBlbmRUbykKIHsKLSAgICBWZWN0b3I8VUNoYXI+IGFkZGVuZDsK
KyAgICBTdHJpbmdCdWlsZGVyIGFkZGVuZDsKICAgICBzZXJpYWxpemVTdHJpbmcoc3RyaW5nLCBh
ZGRlbmQpOwotICAgIGFwcGVuZFRvLmFwcGVuZChTdHJpbmc6OmFkb3B0KGFkZGVuZCkpOworICAg
IGFwcGVuZFRvLmFwcGVuZChhZGRlbmQudG9TdHJpbmcoKSk7CiB9CiAKLXZvaWQgc2VyaWFsaXpl
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbykKK3Zv
aWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBTdHJpbmdCdWlsZGVyJiBh
cHBlbmRUbykKIHsKICAgICBhcHBlbmRUby5hcHBlbmQoJ1wiJyk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NPTVV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU09NVXRpbHMuaAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
T01VdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogLy8gQ29tbW9uIHNlcmlhbGl6aW5nIG1ldGhvZHMuIFNlZTogaHR0cDovL2Rl
di53My5vcmcvY3Nzd2cvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXMKLXZvaWQgc2Vy
aWFsaXplQ2hhcmFjdGVyKFVDaGFyMzIsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKTsKLXZvaWQg
c2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIzMiwgVmVjdG9yPFVDaGFyPiYgYXBw
ZW5kVG8pOwordm9pZCBzZXJpYWxpemVDaGFyYWN0ZXIoVUNoYXIzMiwgU3RyaW5nQnVpbGRlciYg
YXBwZW5kVG8pOwordm9pZCBzZXJpYWxpemVDaGFyYWN0ZXJBc0NvZGVQb2ludChVQ2hhcjMyLCBT
dHJpbmdCdWlsZGVyJiBhcHBlbmRUbyk7CiB2b2lkIHNlcmlhbGl6ZUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJiBpZGVudGlmaWVyLCBTdHJpbmcmIGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFsaXplSWRl
bnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRv
KTsKLXZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBTdHJpbmcmIGFw
cGVuZFRvKTsKLXZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBWZWN0
b3I8VUNoYXI+JiBhcHBlbmRUbyk7Cit2b2lkIHNlcmlhbGl6ZUlkZW50aWZpZXIoY29uc3QgU3Ry
aW5nJiBpZGVudGlmaWVyLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbyk7Cit2b2lkIHNlcmlhbGl6
ZVN0cmluZyhjb25zdCBTdHJpbmcmLCBTdHJpbmcmIGFwcGVuZFRvKTsKK3ZvaWQgc2VyaWFsaXpl
U3RyaW5nKGNvbnN0IFN0cmluZyYsIFN0cmluZ0J1aWxkZXImIGFwcGVuZFRvKTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZl
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVW
YWx1ZS5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUg
PHd0Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICNpbmNsdWRlICJE
YXNoYm9hcmRSZWdpb24uaCIKQEAgLTcwOCwxNCArNzA5LDE0IEBAIFN0cmluZyBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3NzVGV4dCgpIGNvbnMKICAgICAgICAgY2FzZSBDU1NfQVRUUjogewogICAgICAg
ICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGF0dHJQYXJlbiwgKCJhdHRy
KCIpKTsKIAotICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAgICAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg2ICsgbV92YWx1ZS5zdHJpbmctPmxlbmd0aCgp
KTsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0
LnJlc2VydmVDYXBhY2l0eSg2ICsgbV92YWx1ZS5zdHJpbmctPmxlbmd0aCgpKTsKIAotICAgICAg
ICAgICAgYXBwZW5kKHJlc3VsdCwgYXR0clBhcmVuKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1
bHQsIG1fdmFsdWUuc3RyaW5nKTsKLSAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
JyknKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXR0clBhcmVuKTsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQobV92YWx1ZS5zdHJpbmcpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnKScpOwogCi0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAg
ICAgICAgICAgdGV4dCA9IHJlc3VsdC50b1N0cmluZygpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NfQ09VTlRFUl9OQU1FOgpAQCAtNzMzLDIzICs3MzQs
MjMgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29ucwogICAgICAgICAg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHJlY3RQYXJlbiwgKCJyZWN0KCIp
KTsKIAogICAgICAgICAgICAgUmVjdCogcmVjdFZhbCA9IGdldFJlY3RWYWx1ZSgpOwotICAgICAg
ICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSgzMik7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCByZWN0UGFyZW4p
OworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQu
cmVzZXJ2ZUNhcGFjaXR5KDMyKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjdFBhcmVu
KTsKIAotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgcmVjdFZhbC0+dG9wKCktPmNzc1RleHQo
KSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlY3RWYWwtPnRvcCgpLT5jc3NUZXh0KCkp
OwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwogCi0gICAgICAgICAgICBhcHBlbmQo
cmVzdWx0LCByZWN0VmFsLT5yaWdodCgpLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChyZWN0VmFsLT5yaWdodCgpLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnICcpOwogCi0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCByZWN0VmFsLT5ib3R0
b20oKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjdFZhbC0+Ym90
dG9tKCktPmNzc1RleHQoKSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CiAKLSAg
ICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlY3RWYWwtPmxlZnQoKS0+Y3NzVGV4dCgpKTsKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjdFZhbC0+bGVmdCgpLT5jc3NUZXh0KCkpOwogICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwogCi0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5n
OjphZG9wdChyZXN1bHQpOworICAgICAgICAgICAgdGV4dCA9IHJlc3VsdC50b1N0cmluZygpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NfUkdCQ09MT1I6
CkBAIC03NjMsMjcgKzc2NCwyNyBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmNzc1RleHQo
KSBjb25zCiAgICAgICAgICAgICAgICAgQ29sb3I6OnBhcnNlSGV4Q29sb3IobV92YWx1ZS5zdHJp
bmcsIHJnYkNvbG9yKTsKICAgICAgICAgICAgIENvbG9yIGNvbG9yKHJnYkNvbG9yKTsKIAotICAg
ICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eSgzMik7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsK
KyAgICAgICAgICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOwogICAgICAgICAgICAgaWYg
KGNvbG9yLmhhc0FscGhhKCkpCi0gICAgICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgcmdiYVBh
cmVuKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJnYmFQYXJlbik7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgcmdiUGFyZW4pOworICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmdiUGFyZW4pOwogCi0gICAgICAgICAgICBhcHBl
bmROdW1iZXIocmVzdWx0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjb2xvci5yZWQoKSkp
OwotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgY29tbWFTcGFjZSk7CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGNvbG9yLnJlZCgp
KSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbW1hU3BhY2UpOwogCi0gICAgICAgICAg
ICBhcHBlbmROdW1iZXIocmVzdWx0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjb2xvci5n
cmVlbigpKSk7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBjb21tYVNwYWNlKTsKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmROdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oY29s
b3IuZ3JlZW4oKSkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb21tYVNwYWNlKTsKIAot
ICAgICAgICAgICAgYXBwZW5kTnVtYmVyKHJlc3VsdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oY29sb3IuYmx1ZSgpKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kTnVtYmVyKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KGNvbG9yLmJsdWUoKSkpOwogICAgICAgICAgICAgaWYgKGNv
bG9yLmhhc0FscGhhKCkpIHsKLSAgICAgICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBjb21tYVNw
YWNlKTsKLSAgICAgICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBTdHJpbmc6Om51bWJlcihjb2xv
ci5hbHBoYSgpIC8gMjU2LjBmKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb21t
YVNwYWNlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFN0cmluZzo6bnVtYmVyKGNv
bG9yLmFscGhhKCkgLyAyNTYuMGYpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnKScpOwotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6YWRvcHQocmVzdWx0
KTsKKyAgICAgICAgICAgIHRleHQgPSByZXN1bHQudG9TdHJpbmcoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTX1BBSVI6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYg
KzEwOSw3IEBACiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KIAogI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyYXRlZ2llcy5oIgpAQCAtODM4LDcgKzgzOSw3IEBAIEVJbnNpZGVMaW5rIENTU1N0
eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2gKICAgICAgICAgcmV0dXJuIE5vdEluc2lkZUxpbms7CiAK
ICNpZiBQTEFURk9STShRVCkKLSAgICBWZWN0b3I8VUNoYXIsIDUxMj4gdXJsOworICAgIFN0cmlu
Z0J1aWxkZXIgdXJsOwogICAgIHZpc2l0ZWRVUkwobV9kb2N1bWVudC0+YmFzZVVSTCgpLCAqYXR0
ciwgdXJsKTsKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEluc2lkZVVu
dmlzaXRlZExpbms7CkBAIC04NDcsOSArODQ4LDkgQEAgRUluc2lkZUxpbmsgQ1NTU3R5bGVTZWxl
Y3Rvcjo6U2VsZWN0b3JDaAogICAgIC8vIHRvIHRoZSBvbGQgZ2xvYmFsIGhpc3RvcnkuCiAgICAg
UVdlYkhpc3RvcnlJbnRlcmZhY2UqIGlmYWNlID0gUVdlYkhpc3RvcnlJbnRlcmZhY2U6OmRlZmF1
bHRJbnRlcmZhY2UoKTsKICAgICBpZiAoaWZhY2UpCi0gICAgICAgIHJldHVybiBpZmFjZS0+aGlz
dG9yeUNvbnRhaW5zKFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxRQ2hhcio+KHVybC5kYXRhKCkp
LCB1cmwuc2l6ZSgpKSkgPyBJbnNpZGVWaXNpdGVkTGluayA6IEluc2lkZVVudmlzaXRlZExpbms7
CisgICAgICAgIHJldHVybiBpZmFjZS0+aGlzdG9yeUNvbnRhaW5zKFFTdHJpbmcocmVpbnRlcnBy
ZXRfY2FzdDxRQ2hhcio+KHVybC5jaGFyYWN0ZXJzKCkpLCB1cmwubGVuZ3RoKCkpKSA/IEluc2lk
ZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVkTGluazsKIAotICAgIExpbmtIYXNoIGhhc2gg
PSB2aXNpdGVkTGlua0hhc2godXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7CisgICAgTGlua0hhc2gg
aGFzaCA9IHZpc2l0ZWRMaW5rSGFzaCh1cmwuY2hhcmFjdGVycygpLCB1cmwubGVuZ3RoKCkpOwog
ICAgIGlmICghaGFzaCkKICAgICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7CiAjZWxz
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1dyYXBTaGFwZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NXcmFwU2hhcGVzLmNwcAkocmV2aXNpb24gOTM4NDgp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTV3JhcFNoYXBlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDggQEAKIAogI2luY2x1ZGUgIkNTU1dyYXBTaGFwZXMuaCIKIAorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsMzQgKzQyLDM0IEBAIFN0cmluZyBDU1NXcmFwU2hh
cGVSZWN0Ojpjc3NUZXh0KCkgY29uc3QKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
cmluZywgcmVjdFBhcmVuLCAoInJlY3QoIikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29u
c3QgU3RyaW5nLCBjb21tYSwgKCIsICIpKTsKICAgICAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3Vs
dDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7Ci0gICAgYXBwZW5kKHJl
c3VsdCwgcmVjdFBhcmVuKTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQu
cmVzZXJ2ZUNhcGFjaXR5KDMyKTsKKyAgICByZXN1bHQuYXBwZW5kKHJlY3RQYXJlbik7CiAKLSAg
ICBhcHBlbmQocmVzdWx0LCBtX2xlZnQtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwg
Y29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV9sZWZ0LT5jc3NUZXh0KCkpOworICAgIHJlc3Vs
dC5hcHBlbmQoY29tbWEpOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgbV90b3AtPmNzc1RleHQoKSk7
Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV90b3AtPmNz
c1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0
LCBtX3dpZHRoLT5jc3NUZXh0KCkpOwotICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hKTsKKyAgICBy
ZXN1bHQuYXBwZW5kKG1fd2lkdGgtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21t
YSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX2hlaWdodC0+Y3NzVGV4dCgpKTsKKyAgICByZXN1
bHQuYXBwZW5kKG1faGVpZ2h0LT5jc3NUZXh0KCkpOwogICAgIAogICAgIGlmIChtX3JhZGl1c1gu
Z2V0KCkpIHsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOwotICAgICAgICBhcHBlbmQo
cmVzdWx0LCBtX3JhZGl1c1gtPmNzc1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoY29t
bWEpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fcmFkaXVzWC0+Y3NzVGV4dCgpKTsKIAogICAg
ICAgICBpZiAobV9yYWRpdXNZLmdldCgpKSB7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBj
b21tYSk7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBtX3JhZGl1c1ktPmNzc1RleHQoKSk7
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQobV9yYWRpdXNZLT5jc3NUZXh0KCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IHJlc3VsdC5hcHBlbmQoJyknKTsKICAgICAgICAgICAgIAotICAgIHJldHVybiBTdHJpbmc6OmFk
b3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBTdHJpbmcg
Q1NTV3JhcFNoYXBlQ2lyY2xlOjpjc3NUZXh0KCkgY29uc3QKQEAgLTc1LDIwICs3NywyMCBAQCBT
dHJpbmcgQ1NTV3JhcFNoYXBlQ2lyY2xlOjpjc3NUZXh0KCkgY29uCiAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBTdHJpbmcsIGNpcmNsZVBhcmVuLCAoImNpcmNsZSgiKSk7CiAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGNvbW1hLCAoIiwgIikpOwogICAgIAotICAg
IFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDMyKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjaXJjbGVQYXJlbik7CisgICAgU3RyaW5nQnVpbGRl
ciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgzMik7CisgICAgcmVzdWx0LmFw
cGVuZChjaXJjbGVQYXJlbik7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX2xlZnQtPmNzc1RleHQo
KSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV9sZWZ0
LT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwogCi0gICAgYXBwZW5kKHJl
c3VsdCwgbV90b3AtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAg
IHJlc3VsdC5hcHBlbmQobV90b3AtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21t
YSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3JhZGl1cy0+Y3NzVGV4dCgpKTsKKyAgICByZXN1
bHQuYXBwZW5kKG1fcmFkaXVzLT5jc3NUZXh0KCkpOwogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsK
ICAgICAgICAgICAgIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBTdHJpbmcgQ1NTV3JhcFNoYXBlRWxsaXBzZTo6
Y3NzVGV4dCgpIGNvbnN0CkBAIC05NiwyMyArOTgsMjMgQEAgU3RyaW5nIENTU1dyYXBTaGFwZUVs
bGlwc2U6OmNzc1RleHQoKSBjbwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5n
LCBlbGxpcHNlUGFyZW4sICgiZWxsaXBzZSgiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBTdHJpbmcsIGNvbW1hLCAoIiwgIikpOwogICAgIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVz
dWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMyKTsKLSAgICBhcHBlbmQo
cmVzdWx0LCBlbGxpcHNlUGFyZW4pOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJl
c3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOworICAgIHJlc3VsdC5hcHBlbmQoZWxsaXBzZVBhcmVu
KTsKIAotICAgIGFwcGVuZChyZXN1bHQsIG1fbGVmdC0+Y3NzVGV4dCgpKTsKLSAgICBhcHBlbmQo
cmVzdWx0LCBjb21tYSk7CisgICAgcmVzdWx0LmFwcGVuZChtX2xlZnQtPmNzc1RleHQoKSk7Cisg
ICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3RvcC0+Y3Nz
VGV4dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7CisgICAgcmVzdWx0LmFwcGVuZCht
X3RvcC0+Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKIAotICAgIGFwcGVu
ZChyZXN1bHQsIG1fcmFkaXVzWC0+Y3NzVGV4dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21t
YSk7CisgICAgcmVzdWx0LmFwcGVuZChtX3JhZGl1c1gtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0
LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3JhZGl1c1ktPmNzc1RleHQo
KSk7CisgICAgcmVzdWx0LmFwcGVuZChtX3JhZGl1c1ktPmNzc1RleHQoKSk7CiAgICAgcmVzdWx0
LmFwcGVuZCgnKScpOwogICAgICAgICAgICAgCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBDU1NXcmFw
U2hhcGVQb2x5Z29uOjpjc3NUZXh0KCkgY29uc3QKQEAgLTEyMSwyNiArMTIzLDI2IEBAIFN0cmlu
ZyBDU1NXcmFwU2hhcGVQb2x5Z29uOjpjc3NUZXh0KCkgY28KICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IFN0cmluZywgcG9seWdvblBhcmVuTm9uWmVybywgKCJwb2x5Z29uKG5vbnplcm8s
ICIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgY29tbWEsICgiLCAi
KSk7CiAgICAgCi0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMzIpOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3Vs
dC5yZXNlcnZlQ2FwYWNpdHkoMzIpOwogICAgIGlmIChtX3dpbmRSdWxlID09IFJVTEVfRVZFTk9E
RCkKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgcG9seWdvblBhcmVuRXZlbk9kZCk7CisgICAgICAg
IHJlc3VsdC5hcHBlbmQocG9seWdvblBhcmVuRXZlbk9kZCk7CiAgICAgZWxzZQotICAgICAgICBh
cHBlbmQocmVzdWx0LCBwb2x5Z29uUGFyZW5Ob25aZXJvKTsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChwb2x5Z29uUGFyZW5Ob25aZXJvKTsKIAogICAgIEFTU0VSVCghKG1fdmFsdWVzLnNpemUoKSAl
IDIpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7IGkg
Kz0gMikgewogICAgICAgICBpZiAoaSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsK
LSAgICAgICAgYXBwZW5kKHJlc3VsdCwgbV92YWx1ZXMuYXQoaSktPmNzc1RleHQoKSk7Ci0gICAg
ICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgbV92YWx1
ZXMuYXQoaSArIDEpLT5jc3NUZXh0KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fdmFsdWVz
LmF0KGkpLT5jc3NUZXh0KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChtX3ZhbHVlcy5hdChpICsgMSktPmNzc1RleHQoKSk7CiAgICAgfQog
ICAgIAogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKICAgICAgICAgICAgIAotICAgIHJldHVybiBT
dHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0hU
TUxJbnRlcmNoYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9I
VE1MSW50ZXJjaGFuZ2UuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSFRNTEludGVyY2hhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsOCBA
QCBTdHJpbmcgY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hCiAgICAgaWYgKG5vZGUt
PnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5l
KCkpCiAgICAgICAgIHJldHVybiBpbjsKIAotICAgIFZlY3RvcjxVQ2hhcj4gczsKKyAgICBTdHJp
bmdCdWlsZGVyIHM7CisgICAgcy5yZXNlcnZlQ2FwYWNpdHkoaW4ubGVuZ3RoKCkpOwogCiAgICAg
dW5zaWduZWQgaSA9IDA7CiAgICAgdW5zaWduZWQgY29uc3VtZWQgPSAwOwpAQCAtNzQsMjggKzc1
LDI4IEBAIFN0cmluZyBjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWEKICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBhZGQgPSBjb3VudCAlIDM7CiAgICAgICAgICAgICAgICAgc3dpdGNo
IChhZGQpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzLmFwcGVuZCgnICcpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
KHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcy5h
cHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBh
ZGQgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDAgfHwgaSArIDEg
PT0gaW4ubGVuZ3RoKCkpIC8vIGF0IHN0YXJ0IG9yIGVuZCBvZiBzdHJpbmcKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmQocywgY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmcoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcy5hcHBlbmQoJyAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAw
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHN0YXJ0IG9mIHN0cmluZwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmlu
ZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFj
ZVN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZCgnICcpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpICsgMiA9PSBpbi5sZW5ndGgoKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCBlbmQgb2Ygc3RyaW5nCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChzLCBjb252ZXJ0ZWRTcGFjZVN0
cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChjb252ZXJ0ZWRT
cGFjZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChjb252
ZXJ0ZWRTcGFjZVN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5n
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKGNvbnZlcnRlZFNwYWNl
U3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKCcgJyk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTEwNyw3ICsxMDgsNyBAQCBTdHJpbmcgY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZv
cm1hCiAgICAgICAgIGkgKz0gY29uc3VtZWQ7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6
YWRvcHQocyk7CisgICAgcmV0dXJuIHMudG9TdHJpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRv
ci5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBB
Y2N1bXVsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNywxNCBAQAogI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRl
ICJYTUxOU05hbWVzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2lu
Y2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotdm9pZCBhcHBlbmRDaGFyYWN0ZXJz
UmVwbGFjaW5nRW50aXRpZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBVQ2hhciogY29udGVu
dCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQordm9pZCBhcHBlbmRDaGFy
YWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBVQ2hhciog
Y29udGVudCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQogewogICAgIERF
RklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBhbXBSZWZlcmVuY2UsICgiJmFtcDsiKSk7
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGx0UmVmZXJlbmNlLCAoIiZs
dDsiKSk7CkBAIC02NCw3ICs2NSw3IEBAIHZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0Vu
dGl0aWVzKFYKICAgICAgICAgZm9yIChzaXplX3QgbSA9IDA7IG0gPCBXVEZfQVJSQVlfTEVOR1RI
KGVudGl0eU1hcHMpOyArK20pIHsKICAgICAgICAgICAgIGlmIChjb250ZW50W2ldID09IGVudGl0
eU1hcHNbbV0uZW50aXR5ICYmIGVudGl0eU1hcHNbbV0ubWFzayAmIGVudGl0eU1hc2spIHsKICAg
ICAgICAgICAgICAgICBvdXQuYXBwZW5kKGNvbnRlbnQgKyBwb3NpdGlvbkFmdGVyTGFzdEVudGl0
eSwgaSAtIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5KTsKLSAgICAgICAgICAgICAgICBhcHBlbmQo
b3V0LCBlbnRpdHlNYXBzW21dLnJlZmVyZW5jZSk7CisgICAgICAgICAgICAgICAgb3V0LmFwcGVu
ZChlbnRpdHlNYXBzW21dLnJlZmVyZW5jZSk7CiAgICAgICAgICAgICAgICAgcG9zaXRpb25BZnRl
ckxhc3RFbnRpdHkgPSBpICsgMTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KQEAgLTg2LDExICs4NywxMSBAQCBNYXJrdXBBY2N1bXVsYXRvcjo6fk1hcmt1cEFjY3VtdWxh
dG9yKCkKIAogU3RyaW5nIE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2RlcyhOb2RlKiBu
b2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25seSkKIHsKLSAg
ICBWZWN0b3I8VUNoYXI+IG91dDsKKyAgICBTdHJpbmdCdWlsZGVyIG91dDsKICAgICBzZXJpYWxp
emVOb2Rlc1dpdGhOYW1lc3BhY2VzKG5vZGUsIG5vZGVUb1NraXAsIGNoaWxkcmVuT25seSwgMCk7
Ci0gICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKCkpOworICAgIG91dC5yZXNl
cnZlQ2FwYWNpdHkobGVuZ3RoKCkpOwogICAgIGNvbmNhdGVuYXRlTWFya3VwKG91dCk7Ci0gICAg
cmV0dXJuIFN0cmluZzo6YWRvcHQob3V0KTsKKyAgICByZXR1cm4gb3V0LnRvU3RyaW5nKCk7CiB9
CiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OnNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMo
Tm9kZSogbm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHks
IGNvbnN0IE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCkBAIC0xMzgsMTggKzEzOSwxOCBAQCB2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHJpbmcoY29uCiAKIHZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKE5vZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMp
CiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7CisgICAgU3RyaW5nQnVpbGRlciBtYXJrdXA7
CiAgICAgYXBwZW5kU3RhcnRNYXJrdXAobWFya3VwLCBub2RlLCBuYW1lc3BhY2VzKTsKLSAgICBh
cHBlbmRTdHJpbmcoU3RyaW5nOjphZG9wdChtYXJrdXApKTsKKyAgICBhcHBlbmRTdHJpbmcobWFy
a3VwLnRvU3RyaW5nKCkpOwogICAgIGlmIChtX25vZGVzKQogICAgICAgICBtX25vZGVzLT5hcHBl
bmQobm9kZSk7CiB9CiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhOb2Rl
KiBub2RlKQogewotICAgIFZlY3RvcjxVQ2hhcj4gbWFya3VwOworICAgIFN0cmluZ0J1aWxkZXIg
bWFya3VwOwogICAgIGFwcGVuZEVuZE1hcmt1cChtYXJrdXAsIG5vZGUpOwotICAgIGFwcGVuZFN0
cmluZyhTdHJpbmc6OmFkb3B0KG1hcmt1cCkpOworICAgIGFwcGVuZFN0cmluZyhtYXJrdXAudG9T
dHJpbmcoKSk7CiB9CiAKIHNpemVfdCBNYXJrdXBBY2N1bXVsYXRvcjo6dG90YWxMZW5ndGgoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHN0cmluZ3MpCkBAIC0xNjEsMjUgKzE2MiwyNSBAQCBzaXplX3Qg
TWFya3VwQWNjdW11bGF0b3I6OnRvdGFsTGVuZ3RoKGNvCiB9CiAKIC8vIEZJWE1FOiBUaGlzIGlz
IGEgdmVyeSBpbmVmZmljaWVudCB3YXkgb2YgYWNjdW11bGF0aW5nIHRoZSBtYXJrdXAuCi0vLyBX
ZSdyZSBjb252ZXJ0aW5nIHJlc3VsdHMgb2YgYXBwZW5kU3RhcnRNYXJrdXAgYW5kIGFwcGVuZEVu
ZE1hcmt1cCBmcm9tIFZlY3RvcjxVQ2hhcj4gdG8gU3RyaW5nCi0vLyBhbmQgdGhlbiBiYWNrIHRv
IFZlY3RvcjxVQ2hhcj4gYW5kIGFnYWluIHRvIFN0cmluZyBoZXJlLgotdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6Y29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KQorLy8gV2UncmUg
Y29udmVydGluZyByZXN1bHRzIG9mIGFwcGVuZFN0YXJ0TWFya3VwIGFuZCBhcHBlbmRFbmRNYXJr
dXAgZnJvbSBTdHJpbmdCdWlsZGVyIHRvIFN0cmluZworLy8gYW5kIHRoZW4gYmFjayB0byBTdHJp
bmdCdWlsZGVyIGFuZCBhZ2FpbiB0byBTdHJpbmcgaGVyZS4KK3ZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OmNvbmNhdGVuYXRlTWFya3VwKFN0cmluZ0J1aWxkZXImIG91dCkKIHsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fc3VjY2VlZGluZ01hcmt1cC5zaXplKCk7ICsraSkKLSAgICAgICAg
YXBwZW5kKG91dCwgbV9zdWNjZWVkaW5nTWFya3VwW2ldKTsKKyAgICAgICAgb3V0LmFwcGVuZCht
X3N1Y2NlZWRpbmdNYXJrdXBbaV0pOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgYXR0
cmlidXRlLCBib29sIGRvY3VtZW50SXNIVE1MKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0
dHJpYnV0ZSwgYm9vbCBkb2N1bWVudElzSFRNTCkKIHsKICAgICBhcHBlbmRDaGFyYWN0ZXJzUmVw
bGFjaW5nRW50aXRpZXMocmVzdWx0LCBhdHRyaWJ1dGUuY2hhcmFjdGVycygpLCBhdHRyaWJ1dGUu
bGVuZ3RoKCksCiAgICAgICAgIGRvY3VtZW50SXNIVE1MID8gRW50aXR5TWFza0luSFRNTEF0dHJp
YnV0ZVZhbHVlIDogRW50aXR5TWFza0luQXR0cmlidXRlVmFsdWUpOwogfQogCi12b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVt
ZW50KiwgTmFtZXNwYWNlcyopCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21B
dHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopCiB7CiB9CiAK
LXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFZl
Y3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmli
dXRlJiBhdHRyaWJ1dGUpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxB
dHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogewogICAgIEFTU0VSVChlbGVtZW50LT5p
c1VSTEF0dHJpYnV0ZShjb25zdF9jYXN0PEF0dHJpYnV0ZSo+KCZhdHRyaWJ1dGUpKSk7CiAgICAg
Y29uc3QgU3RyaW5nIHJlc29sdmVkVVJMU3RyaW5nID0gcmVzb2x2ZVVSTElmTmVlZGVkKGVsZW1l
bnQsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKQEAgLTE5NCw3ICsxOTUsNyBAQCB2b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBCiAgICAgICAgICAgICAgICAgcXVvdGVDaGFyID0g
J1wnJzsKICAgICAgICAgfQogICAgICAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hhcik7Ci0gICAg
ICAgIGFwcGVuZChyZXN1bHQsIHN0cmlwcGVkVVJMU3RyaW5nKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChzdHJpcHBlZFVSTFN0cmluZyk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQocXVvdGVDaGFy
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIwNSw3ICsyMDYsNyBAQCB2b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBCiAgICAgcmVzdWx0LmFwcGVuZChxdW90ZUNo
YXIpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVmFsdWUoVmVjdG9y
PFVDaGFyPiYgb3V0LCBjb25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UsIEVudGl0
eU1hc2sgZW50aXR5TWFzaykKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVWYWx1
ZShTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5n
ZSwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQogewogICAgIFN0cmluZyBzdHIgPSBub2RlLT5ub2Rl
VmFsdWUoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHN0ci5jaGFyYWN0ZXJzKCk7
CkBAIC0yNTUsNyArMjU2LDcgQEAgYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6c2hvdWxkQWRkTmFt
ZXNwYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmROYW1lc3BhY2UoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmIG5hbWVz
cGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROYW1lc3BhY2UoU3RyaW5nQnVp
bGRlciYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmIG5hbWVzcGFjZXMpCiB7CiAgICAgbmFtZXNw
YWNlcy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgaWYgKG5hbWVzcGFjZVVSSS5pc0VtcHR5KCkp
CkBAIC0yNjcsMTAgKzI2OCwxMCBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROYW1l
c3BhY2UoCiAgICAgaWYgKGZvdW5kTlMgIT0gbmFtZXNwYWNlVVJJLmltcGwoKSkgewogICAgICAg
ICBuYW1lc3BhY2VzLnNldChwcmUsIG5hbWVzcGFjZVVSSS5pbXBsKCkpOwogICAgICAgICByZXN1
bHQuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIHhtbG5zQXRvbS5zdHJpbmco
KSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoeG1sbnNBdG9tLnN0cmluZygpKTsKICAgICAgICAg
aWYgKCFwcmVmaXguaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCc6Jyk7
Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBwcmVmaXgpOworICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChwcmVmaXgpOwogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnPScp
OwpAQCAtMjkyLDU5ICsyOTMsNTkgQEAgRW50aXR5TWFzayBNYXJrdXBBY2N1bXVsYXRvcjo6ZW50
aXR5TWFzawogICAgIHJldHVybiB0ZXh0LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpID8g
RW50aXR5TWFza0luSFRNTFBDREFUQSA6IEVudGl0eU1hc2tJblBDREFUQTsKIH0KIAotdm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqIHRl
eHQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91
dCwgVGV4dCogdGV4dCkKIHsKICAgICBhcHBlbmROb2RlVmFsdWUob3V0LCB0ZXh0LCBtX3Jhbmdl
LCBlbnRpdHlNYXNrRm9yVGV4dCh0ZXh0KSk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZENvbW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQp
Cit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KFN0cmluZ0J1aWxkZXImIG91
dCwgY29uc3QgU3RyaW5nJiBjb21tZW50KQogewogICAgIC8vIEZJWE1FOiBDb21tZW50IGNvbnRl
bnQgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIg
Y2FsbGVycykgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRlcyAiLS0+Ii4K
LSAgICBhcHBlbmQob3V0LCAiPCEtLSIpOwotICAgIGFwcGVuZChvdXQsIGNvbW1lbnQpOwotICAg
IGFwcGVuZChvdXQsICItLT4iKTsKKyAgICBvdXQuYXBwZW5kKCI8IS0tIik7CisgICAgb3V0LmFw
cGVuZChjb21tZW50KTsKKyAgICBvdXQuYXBwZW5kKCItLT4iKTsKIH0KIAotdm9pZCBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29u
c3QgRG9jdW1lbnRUeXBlKiBuKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1l
bnRUeXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKiBuKQogewog
ICAgIGlmIChuLT5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhcHBl
bmQocmVzdWx0LCAiPCFET0NUWVBFICIpOwotICAgIGFwcGVuZChyZXN1bHQsIG4tPm5hbWUoKSk7
CisgICAgcmVzdWx0LmFwcGVuZCgiPCFET0NUWVBFICIpOworICAgIHJlc3VsdC5hcHBlbmQobi0+
bmFtZSgpKTsKICAgICBpZiAoIW4tPnB1YmxpY0lkKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGFw
cGVuZChyZXN1bHQsICIgUFVCTElDIFwiIik7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIG4tPnB1
YmxpY0lkKCkpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCAiXCIiKTsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZCgiIFBVQkxJQyBcIiIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG4tPnB1YmxpY0lk
KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiIpOwogICAgICAgICBpZiAoIW4tPnN5c3Rl
bUlkKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCAiIFwiIik7Ci0g
ICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBuLT5zeXN0ZW1JZCgpKTsKLSAgICAgICAgICAgIGFw
cGVuZChyZXN1bHQsICJcIiIpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiIFwiIik7Cisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgiXCIiKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoIW4tPnN5c3RlbUlk
KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsICIgU1lTVEVNIFwiIik7Ci0g
ICAgICAgIGFwcGVuZChyZXN1bHQsIG4tPnN5c3RlbUlkKCkpOwotICAgICAgICBhcHBlbmQocmVz
dWx0LCAiXCIiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiIFNZU1RFTSBcIiIpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJc
IiIpOwogICAgIH0KICAgICBpZiAoIW4tPmludGVybmFsU3Vic2V0KCkuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGFwcGVuZChyZXN1bHQsICIgWyIpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBuLT5p
bnRlcm5hbFN1YnNldCgpKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgIl0iKTsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZCgiIFsiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChuLT5pbnRlcm5hbFN1
YnNldCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiXSIpOwogICAgIH0KLSAgICBhcHBlbmQo
cmVzdWx0LCAiPiIpOworICAgIHJlc3VsdC5hcHBlbmQoIj4iKTsKIH0KIAotdm9pZCBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91
dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3ZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihTdHJpbmdCdWlsZGVyJiBv
dXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpCiB7CiAgICAgLy8g
RklYTUU6IFBJIGRhdGEgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9z
c2libHkgb3RoZXIgY2FsbGVycykgdGhpcyBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0
IGluY2x1ZGVzICI/PiIuCi0gICAgYXBwZW5kKG91dCwgIjw/Iik7Ci0gICAgYXBwZW5kKG91dCwg
dGFyZ2V0KTsKLSAgICBhcHBlbmQob3V0LCAiICIpOwotICAgIGFwcGVuZChvdXQsIGRhdGEpOwot
ICAgIGFwcGVuZChvdXQsICI/PiIpOworICAgIG91dC5hcHBlbmQoIjw/Iik7CisgICAgb3V0LmFw
cGVuZCh0YXJnZXQpOworICAgIG91dC5hcHBlbmQoIiAiKTsKKyAgICBvdXQuYXBwZW5kKGRhdGEp
OworICAgIG91dC5hcHBlbmQoIj8+Iik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3Bh
Y2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChT
dHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFj
ZXMpCiB7CiAgICAgYXBwZW5kT3BlblRhZyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwogCkBA
IC0zNTksMTUgKzM2MCwxNSBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50
KFZlCiAgICAgYXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVtZW50KTsKIH0KIAotdm9pZCBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVs
ZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRPcGVuVGFnKFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNw
YWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBvdXQuYXBwZW5kKCc8Jyk7Ci0gICAgYXBwZW5kKG91
dCwgZWxlbWVudC0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKKyAgICBvdXQuYXBwZW5kKGVs
ZW1lbnQtPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CiAgICAgaWYgKCFlbGVtZW50LT5kb2N1
bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYmIG5hbWVzcGFjZXMgJiYgc2hvdWxkQWRkTmFtZXNw
YWNlRWxlbWVudChlbGVtZW50KSkKICAgICAgICAgYXBwZW5kTmFtZXNwYWNlKG91dCwgZWxlbWVu
dC0+cHJlZml4KCksIGVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpLCAqbmFtZXNwYWNlcyk7ICAgIAog
fQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhWZWN0b3I8VUNoYXI+
JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRD
bG9zZVRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgaWYg
KHNob3VsZFNlbGZDbG9zZShlbGVtZW50KSkgewogICAgICAgICBpZiAoZWxlbWVudC0+aXNIVE1M
RWxlbWVudCgpKQpAQCAtMzc3LDE2ICszNzgsMTYgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kQ2xvc2VUYWcoVgogICAgIG91dC5hcHBlbmQoJz4nKTsKIH0KIAotdm9pZCBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFj
ZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRl
ciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFt
ZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsKIAogICAgIG91dC5hcHBlbmQoJyAnKTsK
IAogICAgIGlmIChkb2N1bWVudElzSFRNTCkKLSAgICAgICAgYXBwZW5kKG91dCwgYXR0cmlidXRl
Lm5hbWUoKS5sb2NhbE5hbWUoKSk7CisgICAgICAgIG91dC5hcHBlbmQoYXR0cmlidXRlLm5hbWUo
KS5sb2NhbE5hbWUoKSk7CiAgICAgZWxzZQotICAgICAgICBhcHBlbmQob3V0LCBhdHRyaWJ1dGUu
bmFtZSgpLnRvU3RyaW5nKCkpOworICAgICAgICBvdXQuYXBwZW5kKGF0dHJpYnV0ZS5uYW1lKCku
dG9TdHJpbmcoKSk7CiAKICAgICBvdXQuYXBwZW5kKCc9Jyk7CiAKQEAgLTQwMiwxNSArNDAzLDE1
IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZSgKICAgICAgICAgYXBw
ZW5kTmFtZXNwYWNlKG91dCwgYXR0cmlidXRlLnByZWZpeCgpLCBhdHRyaWJ1dGUubmFtZXNwYWNl
VVJJKCksICpuYW1lc3BhY2VzKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
Q0RBVEFTZWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKQor
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKFN0cmluZ0J1aWxkZXIm
IG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKQogewogICAgIC8vIEZJWE1FOiBDREFUQSBjb250
ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVy
IGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMgIl1dPiIu
Ci0gICAgYXBwZW5kKG91dCwgIjwhW0NEQVRBWyIpOwotICAgIGFwcGVuZChvdXQsIHNlY3Rpb24p
OwotICAgIGFwcGVuZChvdXQsICJdXT4iKTsKKyAgICBvdXQuYXBwZW5kKCI8IVtDREFUQVsiKTsK
KyAgICBvdXQuYXBwZW5kKHNlY3Rpb24pOworICAgIG91dC5hcHBlbmQoIl1dPiIpOwogfQogCi12
b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNoYXI+JiBy
ZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQs
IGNvbnN0IE5vZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgaWYgKG5h
bWVzcGFjZXMpCiAgICAgICAgIG5hbWVzcGFjZXMtPmNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTQ3
NiwxNCArNDc3LDE0IEBAIGJvb2wgTWFya3VwQWNjdW11bGF0b3I6OmVsZW1lbnRDYW5ub3RIYXYK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKS0+aWVGb3Ji
aWRzSW5zZXJ0SFRNTCgpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRN
YXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKiBub2RlKQordm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kTWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29u
c3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSB8fCBzaG91
bGRTZWxmQ2xvc2Uobm9kZSkgfHwgKCFub2RlLT5oYXNDaGlsZE5vZGVzKCkgJiYgZWxlbWVudENh
bm5vdEhhdmVFbmRUYWcobm9kZSkpKQogICAgICAgICByZXR1cm47CiAKICAgICByZXN1bHQuYXBw
ZW5kKCc8Jyk7CiAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwotICAgIGFwcGVuZChyZXN1bHQsIHN0
YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKS0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgp
KTsKKyAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKS0+
bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKICAgICByZXN1bHQuYXBwZW5kKCc+Jyk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgJKHJldmlz
aW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NywzNCArNzcsMzQgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAgIHN0YXRpYyBzaXplX3QgdG90YWxMZW5n
dGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gdG90YWxMZW5ndGgobV9zdWNjZWVkaW5nTWFya3VwKTsgfQotICAgIHZvaWQgY29uY2F0
ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KTsKLSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0
ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUsIGJv
b2wgZG9jdW1lbnRJc0hUTUwpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1
dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBw
ZW5kTm9kZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgTm9kZSosIGNvbnN0IFJhbmdl
KiwgRW50aXR5TWFzayk7CisgICAgdm9pZCBjb25jYXRlbmF0ZU1hcmt1cChTdHJpbmdCdWlsZGVy
JiBvdXQpOworICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYgcmVz
dWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBkb2N1bWVudElzSFRNTCk7CisgICAg
dmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoU3RyaW5nQnVpbGRlciYsIEVsZW1l
bnQqLCBOYW1lc3BhY2VzKik7CisgICAgdm9pZCBhcHBlbmROb2RlVmFsdWUoU3RyaW5nQnVpbGRl
ciYgb3V0LCBjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqLCBFbnRpdHlNYXNrKTsKICAgICBib29s
IHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoY29uc3QgRWxlbWVudCopOwogICAgIGJvb2wgc2hv
dWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMmKTsK
LSAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IEF0
b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgTmFt
ZXNwYWNlcyYpOworICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFN0cmluZ0J1aWxkZXImIHJlc3Vs
dCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNw
YWNlVVJJLCBOYW1lc3BhY2VzJik7CiAgICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChU
ZXh0KikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYg
b3V0LCBUZXh0Kik7Ci0gICAgdm9pZCBhcHBlbmRDb21tZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwg
Y29uc3QgU3RyaW5nJiBjb21tZW50KTsKLSAgICB2b2lkIGFwcGVuZERvY3VtZW50VHlwZShWZWN0
b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSopOwotICAgIHZvaWQgYXBwZW5k
UHJvY2Vzc2luZ0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiB0
YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1l
bnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQg
YXBwZW5kT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7
Ci0gICAgdm9pZCBhcHBlbmRDbG9zZVRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqKTsK
LSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBj
b25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRDREFUQVNlY3Rp
b24oVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIHNlY3Rpb24pOwotICAgIHZvaWQg
YXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKiwgTmFt
ZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91
dCwgVGV4dCopOworICAgIHZvaWQgYXBwZW5kQ29tbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIGNv
bnN0IFN0cmluZyYgY29tbWVudCk7CisgICAgdm9pZCBhcHBlbmREb2N1bWVudFR5cGUoU3RyaW5n
QnVpbGRlciYgcmVzdWx0LCBjb25zdCBEb2N1bWVudFR5cGUqKTsKKyAgICB2b2lkIGFwcGVuZFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbihTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50
KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lkIGFw
cGVuZE9wZW5UYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwor
ICAgIHZvaWQgYXBwZW5kQ2xvc2VUYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50Kik7Cisg
ICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgY29u
c3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBwZW5kQ0RBVEFTZWN0aW9u
KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKTsKKyAgICB2b2lkIGFw
cGVuZFN0YXJ0TWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSosIE5hbWVz
cGFjZXMqKTsKICAgICBib29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlKik7CiAgICAgYm9v
bCBlbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhjb25zdCBOb2RlKiBub2RlKTsKLSAgICB2b2lkIGFw
cGVuZEVuZE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqKTsKKyAgICB2
b2lkIGFwcGVuZEVuZE1hcmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUqKTsK
IAogICAgIFZlY3RvcjxOb2RlKj4qIGNvbnN0IG1fbm9kZXM7CiAgICAgY29uc3QgUmFuZ2UqIGNv
bnN0IG1fcmFuZ2U7CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIHJlc29sdmVVUkxJZk5lZWRlZChj
b25zdCBFbGVtZW50KiwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0OwotICAgIHZvaWQg
YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25z
dCBFbGVtZW50KiwgY29uc3QgQXR0cmlidXRlJik7CisgICAgdm9pZCBhcHBlbmRRdW90ZWRVUkxB
dHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQqLCBjb25z
dCBBdHRyaWJ1dGUmKTsKICAgICB2b2lkIHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9k
ZSosIE5vZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHksIGNvbnN0IE5hbWVzcGFjZXMqKTsK
IAogICAgIFZlY3RvcjxTdHJpbmc+IG1fc3VjY2VlZGluZ01hcmt1cDsKQEAgLTExMiw3ICsxMTIs
NyBAQCBwcml2YXRlOgogfTsKIAogLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBiZSBpbnRl
Z3JhdGVkIHdpdGggTWFya3VwQWNjdW11bGF0b3IuCi12b2lkIGFwcGVuZENoYXJhY3RlcnNSZXBs
YWNpbmdFbnRpdGllcyhWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFVDaGFyKiBjb250ZW50LCBz
aXplX3QgbGVuZ3RoLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spOwordm9pZCBhcHBlbmRDaGFyYWN0
ZXJzUmVwbGFjaW5nRW50aXRpZXMoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBVQ2hhciogY29u
dGVudCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5TWFzayk7CiAKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDE1
ICs4OSwxNSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3RhcmdldDsKICAgICBGaW5kT3B0aW9u
cyBtX29wdGlvbnM7CiAKLSAgICBWZWN0b3I8VUNoYXI+IG1fYnVmZmVyOworICAgIFN0cmluZ0J1
aWxkZXIgbV9idWZmZXI7CiAgICAgc2l6ZV90IG1fb3ZlcmxhcDsKICAgICBzaXplX3QgbV9wcmVm
aXhMZW5ndGg7CiAgICAgYm9vbCBtX2F0QnJlYWs7CiAgICAgYm9vbCBtX25lZWRzTW9yZUNvbnRl
eHQ7CiAKICAgICBib29sIG1fdGFyZ2V0UmVxdWlyZXNLYW5hV29ya2Fyb3VuZDsKLSAgICBWZWN0
b3I8VUNoYXI+IG1fbm9ybWFsaXplZFRhcmdldDsKLSAgICBtdXRhYmxlIFZlY3RvcjxVQ2hhcj4g
bV9ub3JtYWxpemVkTWF0Y2g7CisgICAgU3RyaW5nQnVpbGRlciBtX25vcm1hbGl6ZWRUYXJnZXQ7
CisgICAgbXV0YWJsZSBTdHJpbmdCdWlsZGVyIG1fbm9ybWFsaXplZE1hdGNoOwogCiAjZWxzZQog
CkBAIC0xMDgsNyArMTA4LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV90YXJnZXQ7CiAgICAg
RmluZE9wdGlvbnMgbV9vcHRpb25zOwogCi0gICAgVmVjdG9yPFVDaGFyPiBtX2J1ZmZlcjsKKyAg
ICBTdHJpbmdCdWlsZGVyIG1fYnVmZmVyOwogICAgIFZlY3Rvcjxib29sPiBtX2lzQ2hhcmFjdGVy
U3RhcnRCdWZmZXI7CiAgICAgYm9vbCBtX2lzQnVmZmVyRnVsbDsKICAgICBzaXplX3QgbV9jdXJz
b3I7CkBAIC0xNDI1LDE1ICsxNDI1LDE1IEBAIHZvaWQgQ2hhcmFjdGVySXRlcmF0b3I6OmFkdmFu
Y2UoaW50IGNvdW4KIAogU3RyaW5nIENoYXJhY3Rlckl0ZXJhdG9yOjpzdHJpbmcoaW50IG51bUNo
YXJzKQogewotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG51bUNoYXJzKTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICBy
ZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KG51bUNoYXJzKTsKICAgICB3aGlsZSAobnVtQ2hhcnMgPiAw
ICYmICFhdEVuZCgpKSB7CiAgICAgICAgIGludCBydW5TaXplID0gbWluKG51bUNoYXJzLCBsZW5n
dGgoKSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVycygpLCBydW5TaXplKTsKICAg
ICAgICAgbnVtQ2hhcnMgLT0gcnVuU2l6ZTsKICAgICAgICAgYWR2YW5jZShydW5TaXplKTsKICAg
ICB9Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
LnRvU3RyaW5nKCk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBjaGFyYWN0ZXJTdWJy
YW5nZShDaGFyYWN0ZXJJdGVyYXRvciYgaXQsIGludCBvZmZzZXQsIGludCBsZW5ndGgpCkBAIC0x
NjA2LDcgKzE2MDYsNyBAQCB2b2lkIFdvcmRBd2FyZUl0ZXJhdG9yOjphZHZhbmNlKCkKIGludCBX
b3JkQXdhcmVJdGVyYXRvcjo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICBpZiAoIW1fYnVmZmVyLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsKKyAgICAgICAgcmV0dXJu
IG1fYnVmZmVyLmxlbmd0aCgpOwogICAgIGlmIChtX3ByZXZpb3VzVGV4dCkKICAgICAgICAgcmV0
dXJuIG1fcHJldmlvdXNMZW5ndGg7CiAgICAgcmV0dXJuIG1fdGV4dEl0ZXJhdG9yLmxlbmd0aCgp
OwpAQCAtMTYxNSw3ICsxNjE1LDcgQEAgaW50IFdvcmRBd2FyZUl0ZXJhdG9yOjpsZW5ndGgoKSBj
b25zdAogY29uc3QgVUNoYXIqIFdvcmRBd2FyZUl0ZXJhdG9yOjpjaGFyYWN0ZXJzKCkgY29uc3QK
IHsKICAgICBpZiAoIW1fYnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVy
LmRhdGEoKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmNoYXJhY3RlcnMoKTsKICAgICBpZiAo
bV9wcmV2aW91c1RleHQpCiAgICAgICAgIHJldHVybiBtX3ByZXZpb3VzVGV4dDsKICAgICByZXR1
cm4gbV90ZXh0SXRlcmF0b3IuY2hhcmFjdGVycygpOwpAQCAtMTg4NSwxNCArMTg4NSwxNCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNLYW5hTGV0dGVycyhjCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1zdGF0aWMgdm9pZCBub3JtYWxpemVDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFZlY3RvcjxVQ2hhcj4mIGJ1ZmZlcikKK3N0YXRpYyB2
b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCwgU3RyaW5nQnVpbGRlciYgYnVmZmVyKQogewogICAgIEFTU0VSVChsZW5ndGgpOwog
CiAgICAgYnVmZmVyLnJlc2l6ZShsZW5ndGgpOwogCiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBV
X1pFUk9fRVJST1I7Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSB1bm9ybV9ub3JtYWxpemUoY2hh
cmFjdGVycywgbGVuZ3RoLCBVTk9STV9ORkMsIDAsIGJ1ZmZlci5kYXRhKCksIGxlbmd0aCwgJnN0
YXR1cyk7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSB1bm9ybV9ub3JtYWxpemUoY2hhcmFjdGVy
cywgbGVuZ3RoLCBVTk9STV9ORkMsIDAsIGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGxlbmd0aCwgJnN0
YXR1cyk7CiAgICAgQVNTRVJUKHN0YXR1cyA9PSBVX1pFUk9fRVJST1IgfHwgc3RhdHVzID09IFVf
U1RSSU5HX05PVF9URVJNSU5BVEVEX1dBUk5JTkcgfHwgc3RhdHVzID09IFVfQlVGRkVSX09WRVJG
TE9XX0VSUk9SKTsKICAgICBBU1NFUlQoYnVmZmVyU2l6ZSk7CiAKQEAgLTE5MDIsNyArMTkwMiw3
IEBAIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVUMKICAgICAgICAgcmV0
dXJuOwogCiAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgIHVub3JtX25vcm1hbGl6ZShj
aGFyYWN0ZXJzLCBsZW5ndGgsIFVOT1JNX05GQywgMCwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyU2l6
ZSwgJnN0YXR1cyk7CisgICAgdW5vcm1fbm9ybWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCwgVU5P
Uk1fTkZDLCAwLCBidWZmZXIuY2hhcmFjdGVycygpLCBidWZmZXJTaXplLCAmc3RhdHVzKTsKICAg
ICBBU1NFUlQoc3RhdHVzID09IFVfU1RSSU5HX05PVF9URVJNSU5BVEVEX1dBUk5JTkcpOwogfQog
CkBAIC0xOTU2LDcgKzE5NTYsNyBAQCBpbmxpbmUgU2VhcmNoQnVmZmVyOjpTZWFyY2hCdWZmZXIo
Y29uc3QgCiAgICAgZm9sZFF1b3RlTWFya3NBbmRTb2Z0SHlwaGVucyhtX3RhcmdldCk7CiAKICAg
ICBzaXplX3QgdGFyZ2V0TGVuZ3RoID0gbV90YXJnZXQubGVuZ3RoKCk7Ci0gICAgbV9idWZmZXIu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtYXgodGFyZ2V0TGVuZ3RoICogOCwgbWluaW11bVNlYXJj
aEJ1ZmZlclNpemUpKTsKKyAgICBtX2J1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobWF4KHRhcmdldExl
bmd0aCAqIDgsIG1pbmltdW1TZWFyY2hCdWZmZXJTaXplKSk7CiAgICAgbV9vdmVybGFwID0gbV9i
dWZmZXIuY2FwYWNpdHkoKSAvIDQ7CiAKICAgICBpZiAoKG1fb3B0aW9ucyAmIEF0V29yZFN0YXJ0
cykgJiYgdGFyZ2V0TGVuZ3RoKSB7CkBAIC0yMDExLDE3ICsyMDExLDE3IEBAIGlubGluZSBzaXpl
X3QgU2VhcmNoQnVmZmVyOjphcHBlbmQoY29uc3QKICAgICAgICAgbV9idWZmZXIuc2hyaW5rKDAp
OwogICAgICAgICBtX3ByZWZpeExlbmd0aCA9IDA7CiAgICAgICAgIG1fYXRCcmVhayA9IGZhbHNl
OwotICAgIH0gZWxzZSBpZiAobV9idWZmZXIuc2l6ZSgpID09IG1fYnVmZmVyLmNhcGFjaXR5KCkp
IHsKLSAgICAgICAgbWVtY3B5KG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuZGF0YSgpICsgbV9i
dWZmZXIuc2l6ZSgpIC0gbV9vdmVybGFwLCBtX292ZXJsYXAgKiBzaXplb2YoVUNoYXIpKTsKLSAg
ICAgICAgbV9wcmVmaXhMZW5ndGggLT0gbWluKG1fcHJlZml4TGVuZ3RoLCBtX2J1ZmZlci5zaXpl
KCkgLSBtX292ZXJsYXApOworICAgIH0gZWxzZSBpZiAobV9idWZmZXIubGVuZ3RoKCkgPT0gbV9i
dWZmZXIuY2FwYWNpdHkoKSkgeworICAgICAgICBtZW1jcHkobV9idWZmZXIuY2hhcmFjdGVycygp
LCBtX2J1ZmZlci5jaGFyYWN0ZXJzKCkgKyBtX2J1ZmZlci5sZW5ndGgoKSAtIG1fb3ZlcmxhcCwg
bV9vdmVybGFwICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIG1fcHJlZml4TGVuZ3RoIC09IG1p
bihtX3ByZWZpeExlbmd0aCwgbV9idWZmZXIubGVuZ3RoKCkgLSBtX292ZXJsYXApOwogICAgICAg
ICBtX2J1ZmZlci5zaHJpbmsobV9vdmVybGFwKTsKICAgICB9CiAKLSAgICBzaXplX3Qgb2xkTGVu
Z3RoID0gbV9idWZmZXIuc2l6ZSgpOworICAgIHNpemVfdCBvbGRMZW5ndGggPSBtX2J1ZmZlci5s
ZW5ndGgoKTsKICAgICBzaXplX3QgdXNhYmxlTGVuZ3RoID0gbWluKG1fYnVmZmVyLmNhcGFjaXR5
KCkgLSBvbGRMZW5ndGgsIGxlbmd0aCk7CiAgICAgQVNTRVJUKHVzYWJsZUxlbmd0aCk7CiAgICAg
bV9idWZmZXIuYXBwZW5kKGNoYXJhY3RlcnMsIHVzYWJsZUxlbmd0aCk7Ci0gICAgZm9sZFF1b3Rl
TWFya3NBbmRTb2Z0SHlwaGVucyhtX2J1ZmZlci5kYXRhKCkgKyBvbGRMZW5ndGgsIHVzYWJsZUxl
bmd0aCk7CisgICAgZm9sZFF1b3RlTWFya3NBbmRTb2Z0SHlwaGVucyhtX2J1ZmZlci5jaGFyYWN0
ZXJzKCkgKyBvbGRMZW5ndGgsIHVzYWJsZUxlbmd0aCk7CiAgICAgcmV0dXJuIHVzYWJsZUxlbmd0
aDsKIH0KIApAQCAtMjAzMyw3ICsyMDMzLDcgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjpu
ZWVkc01vcmVDb250ZQogaW5saW5lIHZvaWQgU2VhcmNoQnVmZmVyOjpwcmVwZW5kQ29udGV4dChj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBBU1NFUlQobV9u
ZWVkc01vcmVDb250ZXh0KTsKLSAgICBBU1NFUlQobV9wcmVmaXhMZW5ndGggPT0gbV9idWZmZXIu
c2l6ZSgpKTsKKyAgICBBU1NFUlQobV9wcmVmaXhMZW5ndGggPT0gbV9idWZmZXIubGVuZ3RoKCkp
OwogCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybjsKQEAgLTIwNzUsMTEgKzIwNzUs
MTEgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjppc0JhZE1hdGNoKGNvbgogICAgIC8vIGNy
ZWF0aW5nIGEgbmV3IG9uZSBlYWNoIHRpbWUuCiAgICAgbm9ybWFsaXplQ2hhcmFjdGVycyhtYXRj
aCwgbWF0Y2hMZW5ndGgsIG1fbm9ybWFsaXplZE1hdGNoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBh
ID0gbV9ub3JtYWxpemVkVGFyZ2V0LmJlZ2luKCk7Ci0gICAgY29uc3QgVUNoYXIqIGFFbmQgPSBt
X25vcm1hbGl6ZWRUYXJnZXQuZW5kKCk7CisgICAgY29uc3QgVUNoYXIqIGEgPSBtX25vcm1hbGl6
ZWRUYXJnZXQuY2hhcmFjdGVycygpOworICAgIGNvbnN0IFVDaGFyKiBhRW5kID0gbV9ub3JtYWxp
emVkVGFyZ2V0LmNoYXJhY3RlcnMoKSArIG1fbm9ybWFsaXplZFRhcmdldC5sZW5ndGgoKTsKIAot
ICAgIGNvbnN0IFVDaGFyKiBiID0gbV9ub3JtYWxpemVkTWF0Y2guYmVnaW4oKTsKLSAgICBjb25z
dCBVQ2hhciogYkVuZCA9IG1fbm9ybWFsaXplZE1hdGNoLmVuZCgpOworICAgIGNvbnN0IFVDaGFy
KiBiID0gbV9ub3JtYWxpemVkTWF0Y2guY2hhcmFjdGVycygpOworICAgIGNvbnN0IFVDaGFyKiBi
RW5kID0gbV9ub3JtYWxpemVkTWF0Y2guY2hhcmFjdGVycygpICsgbV9ub3JtYWxpemVkTWF0Y2gu
bGVuZ3RoKCk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBTa2lwIHJ1bnMgb2Yg
bm9uLWthbmEtbGV0dGVyIGNoYXJhY3RlcnMuIFRoaXMgaXMgbmVjZXNzYXJ5IHNvIHdlIGNhbgpA
QCAtMjEzMSwxNCArMjEzMSwxNCBAQCBpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzV29yZFN0
YXJ0TWF0CiAgICAgaWYgKCFzdGFydCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpbnQg
c2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKKyAgICBpbnQgc2l6ZSA9IG1fYnVmZmVyLmxlbmd0aCgp
OwogICAgIGludCBvZmZzZXQgPSBzdGFydDsKICAgICBVQ2hhcjMyIGZpcnN0Q2hhcmFjdGVyOwot
ICAgIFUxNl9HRVQobV9idWZmZXIuZGF0YSgpLCAwLCBvZmZzZXQsIHNpemUsIGZpcnN0Q2hhcmFj
dGVyKTsKKyAgICBVMTZfR0VUKG1fYnVmZmVyLmNoYXJhY3RlcnMoKSwgMCwgb2Zmc2V0LCBzaXpl
LCBmaXJzdENoYXJhY3Rlcik7CiAKICAgICBpZiAobV9vcHRpb25zICYgVHJlYXRNZWRpYWxDYXBp
dGFsQXNXb3JkU3RhcnQpIHsKICAgICAgICAgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlcjsKLSAg
ICAgICAgVTE2X1BSRVYobV9idWZmZXIuZGF0YSgpLCAwLCBvZmZzZXQsIHByZXZpb3VzQ2hhcmFj
dGVyKTsKKyAgICAgICAgVTE2X1BSRVYobV9idWZmZXIuY2hhcmFjdGVycygpLCAwLCBvZmZzZXQs
IHByZXZpb3VzQ2hhcmFjdGVyKTsKIAogICAgICAgICBpZiAoaXNTZXBhcmF0b3IoZmlyc3RDaGFy
YWN0ZXIpKSB7CiAgICAgICAgICAgICAvLyBUaGUgc3RhcnQgb2YgYSBzZXBhcmF0b3IgcnVuIGlz
IGEgd29yZCBzdGFydCAoIi5vcmciIGluICJ3ZWJraXQub3JnIikuCkBAIC0yMTUxLDEwICsyMTUx
LDEwIEBAIGlubGluZSBib29sIFNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXQKICAgICAgICAg
ICAgIC8vIFRoZSBsYXN0IGNoYXJhY3RlciBvZiBhbiB1cHBlcmNhc2UgcnVuIGZvbGxvd2VkIGJ5
IGEgbm9uLXNlcGFyYXRvciwgbm9uLWRpZ2l0CiAgICAgICAgICAgICAvLyBpcyBhIHdvcmQgc3Rh
cnQgKCJSZXF1ZXN0IiBpbiAiWE1MSFRUUFJlcXVlc3QiKS4KICAgICAgICAgICAgIG9mZnNldCA9
IHN0YXJ0OwotICAgICAgICAgICAgVTE2X0ZXRF8xKG1fYnVmZmVyLmRhdGEoKSwgb2Zmc2V0LCBz
aXplKTsKKyAgICAgICAgICAgIFUxNl9GV0RfMShtX2J1ZmZlci5jaGFyYWN0ZXJzKCksIG9mZnNl
dCwgc2l6ZSk7CiAgICAgICAgICAgICBVQ2hhcjMyIG5leHRDaGFyYWN0ZXIgPSAwOwogICAgICAg
ICAgICAgaWYgKG9mZnNldCA8IHNpemUpCi0gICAgICAgICAgICAgICAgVTE2X0dFVChtX2J1ZmZl
ci5kYXRhKCksIDAsIG9mZnNldCwgc2l6ZSwgbmV4dENoYXJhY3Rlcik7CisgICAgICAgICAgICAg
ICAgVTE2X0dFVChtX2J1ZmZlci5jaGFyYWN0ZXJzKCksIDAsIG9mZnNldCwgc2l6ZSwgbmV4dENo
YXJhY3Rlcik7CiAgICAgICAgICAgICBpZiAoIWlzQVNDSUlVcHBlcihuZXh0Q2hhcmFjdGVyKSAm
JiAhaXNBU0NJSURpZ2l0KG5leHRDaGFyYWN0ZXIpICYmICFpc1NlcGFyYXRvcihuZXh0Q2hhcmFj
dGVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmIChp
c0FTQ0lJRGlnaXQoZmlyc3RDaGFyYWN0ZXIpKSB7CkBAIC0yMTc1LDEzICsyMTc1LDEzIEBAIGlu
bGluZSBib29sIFNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXQKIAogICAgIHNpemVfdCB3b3Jk
QnJlYWtTZWFyY2hTdGFydCA9IHN0YXJ0ICsgbGVuZ3RoOwogICAgIHdoaWxlICh3b3JkQnJlYWtT
ZWFyY2hTdGFydCA+IHN0YXJ0KQotICAgICAgICB3b3JkQnJlYWtTZWFyY2hTdGFydCA9IGZpbmRO
ZXh0V29yZEZyb21JbmRleChtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUoKSwgd29yZEJy
ZWFrU2VhcmNoU3RhcnQsIGZhbHNlIC8qIGJhY2t3YXJkcyAqLyk7CisgICAgICAgIHdvcmRCcmVh
a1NlYXJjaFN0YXJ0ID0gZmluZE5leHRXb3JkRnJvbUluZGV4KG1fYnVmZmVyLmNoYXJhY3RlcnMo
KSwgbV9idWZmZXIubGVuZ3RoKCksIHdvcmRCcmVha1NlYXJjaFN0YXJ0LCBmYWxzZSAvKiBiYWNr
d2FyZHMgKi8pOwogICAgIHJldHVybiB3b3JkQnJlYWtTZWFyY2hTdGFydCA9PSBzdGFydDsKIH0K
IAogaW5saW5lIHNpemVfdCBTZWFyY2hCdWZmZXI6OnNlYXJjaChzaXplX3QmIHN0YXJ0KQogewot
ICAgIHNpemVfdCBzaXplID0gbV9idWZmZXIuc2l6ZSgpOworICAgIHNpemVfdCBzaXplID0gbV9i
dWZmZXIubGVuZ3RoKCk7CiAgICAgaWYgKG1fYXRCcmVhaykgewogICAgICAgICBpZiAoIXNpemUp
CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTIxOTMsNyArMjE5Myw3IEBAIGlubGluZSBzaXpl
X3QgU2VhcmNoQnVmZmVyOjpzZWFyY2goc2l6ZV8KICAgICBVU3RyaW5nU2VhcmNoKiBzZWFyY2hl
ciA9IFdlYkNvcmU6OnNlYXJjaGVyKCk7CiAKICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVS
T19FUlJPUjsKLSAgICB1c2VhcmNoX3NldFRleHQoc2VhcmNoZXIsIG1fYnVmZmVyLmRhdGEoKSwg
c2l6ZSwgJnN0YXR1cyk7CisgICAgdXNlYXJjaF9zZXRUZXh0KHNlYXJjaGVyLCBtX2J1ZmZlci5j
aGFyYWN0ZXJzKCksIHNpemUsICZzdGF0dXMpOwogICAgIEFTU0VSVChzdGF0dXMgPT0gVV9aRVJP
X0VSUk9SKTsKIAogICAgIHVzZWFyY2hfc2V0T2Zmc2V0KHNlYXJjaGVyLCBtX3ByZWZpeExlbmd0
aCwgJnN0YXR1cyk7CkBAIC0yMjE3LDExICsyMjE3LDExIEBAIG5leHRNYXRjaDoKICAgICAgICAg
ICAgIC8vIEVuc3VyZSB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQgY29udGV4dCBiZWZvcmUgbWF0
Y2hTdGFydCB0aGUgbmV4dCB0aW1lIGFyb3VuZCBmb3IKICAgICAgICAgICAgIC8vIGRldGVybWlu
aW5nIGlmIGl0IGlzIGF0IGEgd29yZCBib3VuZGFyeS4KICAgICAgICAgICAgIGludCB3b3JkQm91
bmRhcnlDb250ZXh0U3RhcnQgPSBtYXRjaFN0YXJ0OwotICAgICAgICAgICAgVTE2X0JBQ0tfMSht
X2J1ZmZlci5kYXRhKCksIDAsIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCk7Ci0gICAgICAgICAg
ICB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRl
eHQobV9idWZmZXIuZGF0YSgpLCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpOworICAgICAgICAg
ICAgVTE2X0JBQ0tfMShtX2J1ZmZlci5jaGFyYWN0ZXJzKCksIDAsIHdvcmRCb3VuZGFyeUNvbnRl
eHRTdGFydCk7CisgICAgICAgICAgICB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBzdGFydE9m
TGFzdFdvcmRCb3VuZGFyeUNvbnRleHQobV9idWZmZXIuY2hhcmFjdGVycygpLCB3b3JkQm91bmRh
cnlDb250ZXh0U3RhcnQpOwogICAgICAgICAgICAgb3ZlcmxhcCA9IG1pbihzaXplIC0gMSwgbWF4
KG92ZXJsYXAsIHNpemUgLSB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpKTsKICAgICAgICAgfQot
ICAgICAgICBtZW1jcHkobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5kYXRhKCkgKyBzaXplIC0g
b3ZlcmxhcCwgb3ZlcmxhcCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBtZW1jcHkobV9idWZm
ZXIuY2hhcmFjdGVycygpLCBtX2J1ZmZlci5jaGFyYWN0ZXJzKCkgKyBzaXplIC0gb3ZlcmxhcCwg
b3ZlcmxhcCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBtX3ByZWZpeExlbmd0aCAtPSBtaW4o
bV9wcmVmaXhMZW5ndGgsIHNpemUgLSBvdmVybGFwKTsKICAgICAgICAgbV9idWZmZXIuc2hyaW5r
KG92ZXJsYXApOwogICAgICAgICByZXR1cm4gMDsKQEAgLTIyMzEsMTQgKzIyMzEsMTQgQEAgbmV4
dE1hdGNoOgogICAgIEFTU0VSVChtYXRjaFN0YXJ0ICsgbWF0Y2hlZExlbmd0aCA8PSBzaXplKTsK
IAogICAgIC8vIElmIHRoaXMgbWF0Y2ggaXMgImJhZCIsIG1vdmUgb24gdG8gdGhlIG5leHQgbWF0
Y2guCi0gICAgaWYgKGlzQmFkTWF0Y2gobV9idWZmZXIuZGF0YSgpICsgbWF0Y2hTdGFydCwgbWF0
Y2hlZExlbmd0aCkgfHwgKChtX29wdGlvbnMgJiBBdFdvcmRTdGFydHMpICYmICFpc1dvcmRTdGFy
dE1hdGNoKG1hdGNoU3RhcnQsIG1hdGNoZWRMZW5ndGgpKSkgeworICAgIGlmIChpc0JhZE1hdGNo
KG1fYnVmZmVyLmNoYXJhY3RlcnMoKSArIG1hdGNoU3RhcnQsIG1hdGNoZWRMZW5ndGgpIHx8ICgo
bV9vcHRpb25zICYgQXRXb3JkU3RhcnRzKSAmJiAhaXNXb3JkU3RhcnRNYXRjaChtYXRjaFN0YXJ0
LCBtYXRjaGVkTGVuZ3RoKSkpIHsKICAgICAgICAgbWF0Y2hTdGFydCA9IHVzZWFyY2hfbmV4dChz
ZWFyY2hlciwgJnN0YXR1cyk7CiAgICAgICAgIEFTU0VSVChzdGF0dXMgPT0gVV9aRVJPX0VSUk9S
KTsKICAgICAgICAgZ290byBuZXh0TWF0Y2g7CiAgICAgfQogCiAgICAgc2l6ZV90IG5ld1NpemUg
PSBzaXplIC0gKG1hdGNoU3RhcnQgKyAxKTsKLSAgICBtZW1tb3ZlKG1fYnVmZmVyLmRhdGEoKSwg
bV9idWZmZXIuZGF0YSgpICsgbWF0Y2hTdGFydCArIDEsIG5ld1NpemUgKiBzaXplb2YoVUNoYXIp
KTsKKyAgICBtZW1tb3ZlKG1fYnVmZmVyLmNoYXJhY3RlcnMoKSwgbV9idWZmZXIuY2hhcmFjdGVy
cygpICsgbWF0Y2hTdGFydCArIDEsIG5ld1NpemUgKiBzaXplb2YoVUNoYXIpKTsKICAgICBtX3By
ZWZpeExlbmd0aCAtPSBtaW48c2l6ZV90PihtX3ByZWZpeExlbmd0aCwgbWF0Y2hTdGFydCArIDEp
OwogICAgIG1fYnVmZmVyLnNocmluayhuZXdTaXplKTsKIApAQCAtMjUxOCwyMSArMjUxOCwyMSBA
QCBVQ2hhciogcGxhaW5UZXh0VG9NYWxsb2NBbGxvY2F0ZWRCdWZmZXIoCiAgICAgYnVmZmVyTGVu
Z3RoID0gMDsKICAgICB0eXBlZGVmIHBhaXI8VUNoYXIqLCB1bnNpZ25lZD4gVGV4dFNlZ21lbnQ7
CiAgICAgT3duUHRyPFZlY3RvcjxUZXh0U2VnbWVudD4gPiB0ZXh0U2VnbWVudHM7Ci0gICAgVmVj
dG9yPFVDaGFyPiB0ZXh0QnVmZmVyOwotICAgIHRleHRCdWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShjTWF4U2VnbWVudFNpemUpOworICAgIFN0cmluZ0J1aWxkZXIgdGV4dEJ1ZmZlcjsKKyAg
ICB0ZXh0QnVmZmVyLnJlc2VydmVDYXBhY2l0eShjTWF4U2VnbWVudFNpemUpOwogICAgIFRleHRJ
dGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yID0gZGVmYXVsdEJlaGF2aW9yOwogICAgIGlmICghaXNE
aXNwbGF5U3RyaW5nKQogICAgICAgICBiZWhhdmlvciA9IHN0YXRpY19jYXN0PFRleHRJdGVyYXRv
ckJlaGF2aW9yPihiZWhhdmlvciB8IFRleHRJdGVyYXRvckVtaXRzVGV4dHNXaXRob3V0VHJhbnNj
b2RpbmcpOwogICAgIAogICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHIsIGJlaGF2aW9yKTsgIWl0
LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewotICAgICAgICBpZiAodGV4dEJ1ZmZlci5zaXplKCkg
JiYgdGV4dEJ1ZmZlci5zaXplKCkgKyBpdC5sZW5ndGgoKSA+IGNNYXhTZWdtZW50U2l6ZSkgewot
ICAgICAgICAgICAgVUNoYXIqIG5ld1NlZ21lbnRCdWZmZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcio+
KG1hbGxvYyh0ZXh0QnVmZmVyLnNpemUoKSAqIHNpemVvZihVQ2hhcikpKTsKKyAgICAgICAgaWYg
KHRleHRCdWZmZXIubGVuZ3RoKCkgJiYgdGV4dEJ1ZmZlci5sZW5ndGgoKSArIGl0Lmxlbmd0aCgp
ID4gY01heFNlZ21lbnRTaXplKSB7CisgICAgICAgICAgICBVQ2hhciogbmV3U2VnbWVudEJ1ZmZl
ciA9IHN0YXRpY19jYXN0PFVDaGFyKj4obWFsbG9jKHRleHRCdWZmZXIubGVuZ3RoKCkgKiBzaXpl
b2YoVUNoYXIpKSk7CiAgICAgICAgICAgICBpZiAoIW5ld1NlZ21lbnRCdWZmZXIpCiAgICAgICAg
ICAgICAgICAgZ290byBleGl0OwotICAgICAgICAgICAgbWVtY3B5KG5ld1NlZ21lbnRCdWZmZXIs
IHRleHRCdWZmZXIuZGF0YSgpLCB0ZXh0QnVmZmVyLnNpemUoKSAqIHNpemVvZihVQ2hhcikpOwor
ICAgICAgICAgICAgbWVtY3B5KG5ld1NlZ21lbnRCdWZmZXIsIHRleHRCdWZmZXIuY2hhcmFjdGVy
cygpLCB0ZXh0QnVmZmVyLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgICAgICAgICBp
ZiAoIXRleHRTZWdtZW50cykKICAgICAgICAgICAgICAgICB0ZXh0U2VnbWVudHMgPSBhZG9wdFB0
cihuZXcgVmVjdG9yPFRleHRTZWdtZW50Pik7Ci0gICAgICAgICAgICB0ZXh0U2VnbWVudHMtPmFw
cGVuZChtYWtlX3BhaXIobmV3U2VnbWVudEJ1ZmZlciwgKHVuc2lnbmVkKXRleHRCdWZmZXIuc2l6
ZSgpKSk7CisgICAgICAgICAgICB0ZXh0U2VnbWVudHMtPmFwcGVuZChtYWtlX3BhaXIobmV3U2Vn
bWVudEJ1ZmZlciwgKHVuc2lnbmVkKXRleHRCdWZmZXIubGVuZ3RoKCkpKTsKICAgICAgICAgICAg
IHRleHRCdWZmZXIuY2xlYXIoKTsKICAgICAgICAgfQogICAgICAgICB0ZXh0QnVmZmVyLmFwcGVu
ZChpdC5jaGFyYWN0ZXJzKCksIGl0Lmxlbmd0aCgpKTsKQEAgLTI1NTcsNyArMjU1Nyw3IEBAIFVD
aGFyKiBwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcigKICAgICAgICAgICAgICAgICBy
ZXN1bHRQb3MgKz0gc2VnbWVudC5zZWNvbmQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgbWVtY3B5KHJlc3VsdFBvcywgdGV4dEJ1ZmZlci5kYXRhKCksIHRleHRCdWZmZXIuc2l6
ZSgpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIG1lbWNweShyZXN1bHRQb3MsIHRleHRCdWZm
ZXIuY2hhcmFjdGVycygpLCB0ZXh0QnVmZmVyLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CiAg
ICAgfQogCiBleGl0OgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCShy
ZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJGaW5kT3B0aW9ucy5o
IgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0z
MTYsNyArMzE3LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9wcmV2aW91c0xlbmd0aDsKIAogICAg
IC8vIG1hbnkgY2h1bmtzIGZyb20gdGV4dEl0ZXJhdG9yIGNvbmNhdGVuYXRlZAotICAgIFZlY3Rv
cjxVQ2hhcj4gbV9idWZmZXI7CisgICAgU3RyaW5nQnVpbGRlciBtX2J1ZmZlcjsKICAgICAKICAg
ICAvLyBEaWQgd2UgaGF2ZSB0byBsb29rIGFoZWFkIGluIHRoZSB0ZXh0SXRlcmF0b3IgdG8gY29u
ZmlybSB0aGUgY3VycmVudCBjaHVuaz8KICAgICBib29sIG1fZGlkTG9va0FoZWFkOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzOCwxNyArMzM4LDE3IEBAIGludCBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhjb25zdCBOb2RlKiBu
b2QKIAogU3RyaW5nIHN0cmluZ1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZShjb25zdCBTdHJpbmcm
IHN0cmluZywgYm9vbCBzdGFydElzU3RhcnRPZlBhcmFncmFwaCwgYm9vbCBlbmRJc0VuZE9mUGFy
YWdyYXBoKQogewotICAgIFZlY3RvcjxVQ2hhcj4gcmViYWxhbmNlZFN0cmluZzsKLSAgICBhcHBl
bmQocmViYWxhbmNlZFN0cmluZywgc3RyaW5nKTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlYmFsYW5j
ZWRTdHJpbmc7CisgICAgcmViYWxhbmNlZFN0cmluZy5hcHBlbmQoc3RyaW5nKTsKIAogICAgIGJv
b2wgcHJldmlvdXNDaGFyYWN0ZXJXYXNTcGFjZSA9IGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmViYWxhbmNlZFN0cmluZy5zaXplKCk7IGkrKykgeworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmViYWxhbmNlZFN0cmluZy5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgIGlm
ICghaXNXaGl0ZXNwYWNlKHJlYmFsYW5jZWRTdHJpbmdbaV0pKSB7CiAgICAgICAgICAgICBwcmV2
aW91c0NoYXJhY3Rlcldhc1NwYWNlID0gZmFsc2U7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChwcmV2aW91c0NoYXJhY3Rlcldhc1NwYWNlIHx8ICghaSAm
JiBzdGFydElzU3RhcnRPZlBhcmFncmFwaCkgfHwgKGkgKyAxID09IHJlYmFsYW5jZWRTdHJpbmcu
c2l6ZSgpICYmIGVuZElzRW5kT2ZQYXJhZ3JhcGgpKSB7CisgICAgICAgIGlmIChwcmV2aW91c0No
YXJhY3Rlcldhc1NwYWNlIHx8ICghaSAmJiBzdGFydElzU3RhcnRPZlBhcmFncmFwaCkgfHwgKGkg
KyAxID09IHJlYmFsYW5jZWRTdHJpbmcubGVuZ3RoKCkgJiYgZW5kSXNFbmRPZlBhcmFncmFwaCkp
IHsKICAgICAgICAgICAgIHJlYmFsYW5jZWRTdHJpbmdbaV0gPSBub0JyZWFrU3BhY2U7CiAgICAg
ICAgICAgICBwcmV2aW91c0NoYXJhY3Rlcldhc1NwYWNlID0gZmFsc2U7CiAgICAgICAgIH0gZWxz
ZSB7CkBAIC0zNTgsNyArMzU4LDcgQEAgU3RyaW5nIHN0cmluZ1dpdGhSZWJhbGFuY2VkV2hpdGVz
cGFjZShjbwogICAgICAgICAgICAgCiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQo
cmViYWxhbmNlZFN0cmluZyk7CisgICAgcmV0dXJuIHJlYmFsYW5jZWRTdHJpbmcudG9TdHJpbmco
KTsKIH0KIAogYm9vbCBpc1RhYmxlU3RydWN0dXJlTm9kZShjb25zdCBOb2RlICpub2RlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCwxMyArMTI4
LDEzIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdGFrZVJlc3VsdHMoKTsKIAogcHJpdmF0ZToKLSAg
ICB2b2lkIGFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoVmVjdG9yPFVDaGFyPiYsIENTU1N0eWxlRGVj
bGFyYXRpb24qLCBEb2N1bWVudCosIGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKKyAgICB2b2lkIGFw
cGVuZFN0eWxlTm9kZU9wZW5UYWcoU3RyaW5nQnVpbGRlciYsIENTU1N0eWxlRGVjbGFyYXRpb24q
LCBEb2N1bWVudCosIGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKICAgICBjb25zdCBTdHJpbmcgc3R5
bGVOb2RlQ2xvc2VUYWcoYm9vbCBpc0Jsb2NrID0gZmFsc2UpOwotICAgIHZpcnR1YWwgdm9pZCBh
cHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCopOworICAgIHZpcnR1YWwgdm9pZCBh
cHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCopOwogICAgIFN0cmluZyByZW5kZXJl
ZFRleHQoY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKik7CiAgICAgU3RyaW5nIHN0cmluZ1ZhbHVl
Rm9yUmFuZ2UoY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKik7Ci0gICAgdm9pZCBhcHBlbmRFbGVt
ZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBhZGREaXNwbGF5
SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwotICAgIHZvaWQgYXBwZW5kRWxlbWVudChW
ZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqKSB7IGFwcGVu
ZEVsZW1lbnQob3V0LCBlbGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7IH0KKyAg
ICB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgYm9vbCBh
ZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUpOworICAgIHZvaWQgYXBwZW5k
RWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMq
KSB7IGFwcGVuZEVsZW1lbnQob3V0LCBlbGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9k
ZSk7IH0KIAogICAgIGVudW0gTm9kZVRyYXZlcnNhbE1vZGUgeyBFbWl0U3RyaW5nLCBEb05vdEVt
aXRTdHJpbmcgfTsKICAgICBOb2RlKiB0cmF2ZXJzZU5vZGVzRm9yU2VyaWFsaXphdGlvbihOb2Rl
KiBzdGFydE5vZGUsIE5vZGUqIHBhc3RFbmQsIE5vZGVUcmF2ZXJzYWxNb2RlKTsKQEAgLTE2Miwx
MiArMTYyLDEyIEBAIGlubGluZSBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6U3R5bGVkTWEKIAog
dm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhOb2RlKE5vZGUqIG5vZGUsIGJv
b2wgY29udmVydEJsb2Nrc1RvSW5saW5lcywgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVs
bHlTZWxlY3RzTm9kZSkKIHsKLSAgICBWZWN0b3I8VUNoYXI+IG1hcmt1cDsKKyAgICBTdHJpbmdC
dWlsZGVyIG1hcmt1cDsKICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICBh
cHBlbmRFbGVtZW50KG1hcmt1cCwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLCBjb252ZXJ0
QmxvY2tzVG9JbmxpbmVzICYmIGlzQmxvY2soY29uc3RfY2FzdDxOb2RlKj4obm9kZSkpLCByYW5n
ZUZ1bGx5U2VsZWN0c05vZGUpOwogICAgIGVsc2UKICAgICAgICAgYXBwZW5kU3RhcnRNYXJrdXAo
bWFya3VwLCBub2RlLCAwKTsKLSAgICBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwLmFwcGVuZChT
dHJpbmc6OmFkb3B0KG1hcmt1cCkpOworICAgIG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuYXBw
ZW5kKG1hcmt1cC50b1N0cmluZygpKTsKICAgICBhcHBlbmRFbmRUYWcobm9kZSk7CiAgICAgaWYg
KG1fbm9kZXMpCiAgICAgICAgIG1fbm9kZXMtPmFwcGVuZChub2RlKTsKQEAgLTE3NSwyMCArMTc1
LDIwIEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm8KIAogdm9pZCBT
dHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhTdHlsZU5vZGUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBpc0Jsb2NrKQogewotICAgIFZl
Y3RvcjxVQ2hhcj4gb3BlblRhZzsKKyAgICBTdHJpbmdCdWlsZGVyIG9wZW5UYWc7CiAgICAgYXBw
ZW5kU3R5bGVOb2RlT3BlblRhZyhvcGVuVGFnLCBzdHlsZSwgZG9jdW1lbnQsIGlzQmxvY2spOwot
ICAgIG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuYXBwZW5kKFN0cmluZzo6YWRvcHQob3BlblRh
ZykpOworICAgIG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuYXBwZW5kKG9wZW5UYWcudG9TdHJp
bmcoKSk7CiAgICAgYXBwZW5kU3RyaW5nKHN0eWxlTm9kZUNsb3NlVGFnKGlzQmxvY2spKTsKIH0K
IAotdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3R5bGVOb2RlT3BlblRhZyhW
ZWN0b3I8VUNoYXI+JiBvdXQsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKK3ZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFN0eWxlTm9kZU9wZW5UYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGlzQmxvY2spCiB7CiAgICAgLy8g
QWxsIHRleHQtZGVjb3JhdGlvbi1yZWxhdGVkIGVsZW1lbnRzIHNob3VsZCBoYXZlIGJlZW4gdHJl
YXRlZCBhcyBzcGVjaWFsIGFuY2VzdG9ycwogICAgIC8vIElmIHdlIGV2ZXIgaGl0IHRoaXMgQVNT
RVJULCB3ZSBzaG91bGQgZXhwb3J0IFN0eWxlQ2hhbmdlIGluIEFwcGx5U3R5bGVDb21tYW5kIGFu
ZCB1c2UgaXQgaGVyZQogICAgIEFTU0VSVChwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0
eWxlLCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKSAmJiBwcm9wZXJ0eU1pc3NpbmdPckVxdWFs
VG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KSk7
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGRpdlN0eWxlLCAoIjxkaXYg
c3R5bGU9XCIiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHN0eWxl
U3Bhbk9wZW4sICgiPHNwYW4gc3R5bGU9XCIiKSk7Ci0gICAgYXBwZW5kKG91dCwgaXNCbG9jayA/
IGRpdlN0eWxlIDogc3R5bGVTcGFuT3Blbik7CisgICAgb3V0LmFwcGVuZChpc0Jsb2NrID8gZGl2
U3R5bGUgOiBzdHlsZVNwYW5PcGVuKTsKICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIHN0
eWxlLT5jc3NUZXh0KCksIGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKTsKICAgICBvdXQuYXBw
ZW5kKCdcIicpOwogICAgIG91dC5hcHBlbmQoJz4nKTsKQEAgLTIwMywxOSArMjAzLDE5IEBAIGNv
bnN0IFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6c3QKIAogU3RyaW5nIFN0eWxlZE1h
cmt1cEFjY3VtdWxhdG9yOjp0YWtlUmVzdWx0cygpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1
bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodG90YWxMZW5ndGgobV9yZXZl
cnNlZFByZWNlZGluZ01hcmt1cCkgKyBsZW5ndGgoKSk7CisgICAgU3RyaW5nQnVpbGRlciByZXN1
bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSh0b3RhbExlbmd0aChtX3JldmVyc2VkUHJl
Y2VkaW5nTWFya3VwKSArIGxlbmd0aCgpKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX3JldmVy
c2VkUHJlY2VkaW5nTWFya3VwLnNpemUoKTsgaSA+IDA7IC0taSkKLSAgICAgICAgYXBwZW5kKHJl
c3VsdCwgbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cFtpIC0gMV0pOworICAgICAgICByZXN1bHQu
YXBwZW5kKG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXBbaSAtIDFdKTsKIAogICAgIGNvbmNhdGVu
YXRlTWFya3VwKHJlc3VsdCk7CiAKICAgICAvLyBXZSByZW1vdmUgJ1wwJyBjaGFyYWN0ZXJzIGJl
Y2F1c2UgdGhleSBhcmUgbm90IHZpc2libHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIuCi0gICAgcmV0
dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KS5yZXBsYWNlKDAsICIiKTsKKyAgICByZXR1cm4gcmVz
dWx0LnRvU3RyaW5nKCkucmVwbGFjZSgwLCAiIik7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0KiB0ZXh0KQordm9p
ZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQs
IFRleHQqIHRleHQpCiB7ICAgIAogICAgIGNvbnN0IGJvb2wgcGFyZW50SXNUZXh0YXJlYSA9IHRl
eHQtPnBhcmVudEVsZW1lbnQoKSAmJiB0ZXh0LT5wYXJlbnRFbGVtZW50KCktPnRhZ1FOYW1lKCkg
PT0gdGV4dGFyZWFUYWc7CiAgICAgY29uc3QgYm9vbCB3cmFwcGluZ1NwYW4gPSBzaG91bGRBcHBs
eVdyYXBwaW5nU3R5bGUodGV4dCkgJiYgIXBhcmVudElzVGV4dGFyZWE7CkBAIC0yMjcsOSArMjI3
LDkgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dAogICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgaW5jbHVkZWQgaW4gZm9yY2VJbmxpbmU/CiAgICAgICAg
IHdyYXBwaW5nU3R5bGUtPnN0eWxlKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RmxvYXQsIENT
U1ZhbHVlTm9uZSk7CiAKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBvcGVuVGFnOworICAgICAgICBT
dHJpbmdCdWlsZGVyIG9wZW5UYWc7CiAgICAgICAgIGFwcGVuZFN0eWxlTm9kZU9wZW5UYWcob3Bl
blRhZywgd3JhcHBpbmdTdHlsZS0+c3R5bGUoKSwgdGV4dC0+ZG9jdW1lbnQoKSk7Ci0gICAgICAg
IGFwcGVuZChvdXQsIFN0cmluZzo6YWRvcHQob3BlblRhZykpOworICAgICAgICBvdXQuYXBwZW5k
KG9wZW5UYWcpOwogICAgIH0KIAogICAgIGlmICghc2hvdWxkQW5ub3RhdGUoKSB8fCBwYXJlbnRJ
c1RleHRhcmVhKQpAQCAtMjM3LDEzICsyMzcsMTMgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kVGV4dAogICAgIGVsc2UgewogICAgICAgICBjb25zdCBib29sIHVzZVJlbmRl
cmVkVGV4dCA9ICFlbmNsb3NpbmdOb2RlV2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKHRleHQp
LCBzZWxlY3RUYWcpOwogICAgICAgICBTdHJpbmcgY29udGVudCA9IHVzZVJlbmRlcmVkVGV4dCA/
IHJlbmRlcmVkVGV4dCh0ZXh0LCBtX3JhbmdlKSA6IHN0cmluZ1ZhbHVlRm9yUmFuZ2UodGV4dCwg
bV9yYW5nZSk7Ci0gICAgICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyOworICAgICAgICBTdHJpbmdC
dWlsZGVyIGJ1ZmZlcjsKICAgICAgICAgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVz
KGJ1ZmZlciwgY29udGVudC5jaGFyYWN0ZXJzKCksIGNvbnRlbnQubGVuZ3RoKCksIEVudGl0eU1h
c2tJblBDREFUQSk7Ci0gICAgICAgIGFwcGVuZChvdXQsIGNvbnZlcnRIVE1MVGV4dFRvSW50ZXJj
aGFuZ2VGb3JtYXQoU3RyaW5nOjphZG9wdChidWZmZXIpLCB0ZXh0KSk7CisgICAgICAgIG91dC5h
cHBlbmQoY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hdChidWZmZXIudG9TdHJpbmco
KSwgdGV4dCkpOwogICAgIH0KIAogICAgIGlmICh3cmFwcGluZ1NwYW4pCi0gICAgICAgIGFwcGVu
ZChvdXQsIHN0eWxlTm9kZUNsb3NlVGFnKCkpOworICAgICAgICBvdXQuYXBwZW5kKHN0eWxlTm9k
ZUNsb3NlVGFnKCkpOwogfQogICAgIAogU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpy
ZW5kZXJlZFRleHQoY29uc3QgTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdlKQpAQCAtMjgw
LDcgKzI4MCw3IEBAIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6c3RyaW5nVmEKICAg
ICByZXR1cm4gc3RyOwogfQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRF
bGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBhZGREaXNw
bGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQor
dm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVy
JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgYWRkRGlzcGxheUlubGluZSwgUmFuZ2VGdWxs
eVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkKIHsKICAgICBjb25zdCBib29sIGRv
Y3VtZW50SXNIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsKICAg
ICBhcHBlbmRPcGVuVGFnKG91dCwgZWxlbWVudCwgMCk7CkBAIC0zMjUsNyArMzI1LDcgQEAgdm9p
ZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbQogCiAgICAgICAgIGlmICghbmV3
SW5saW5lU3R5bGUtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIHN0eWxlUHJlZml4LCAoIiBzdHlsZT1cIiIpKTsKLSAgICAgICAgICAg
IGFwcGVuZChvdXQsIHN0eWxlUHJlZml4KTsKKyAgICAgICAgICAgIG91dC5hcHBlbmQoc3R5bGVQ
cmVmaXgpOwogICAgICAgICAgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBuZXdJbmxpbmVT
dHlsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpLCBkb2N1bWVudElzSFRNTCk7CiAgICAgICAgICAgICBv
dXQuYXBwZW5kKCdcIicpOwogICAgICAgICB9CkBAIC05MTUsMTMgKzkxNSwxMyBAQCBTdHJpbmcg
Y3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5nZSogcmFuCiAKIFN0cmluZyB1cmxUb01hcmt1cChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgVmVjdG9yPFVDaGFy
PiBtYXJrdXA7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIjxhIGhyZWY9XCIiKTsKLSAgICBhcHBlbmQo
bWFya3VwLCB1cmwuc3RyaW5nKCkpOwotICAgIGFwcGVuZChtYXJrdXAsICJcIj4iKTsKKyAgICBT
dHJpbmdCdWlsZGVyIG1hcmt1cDsKKyAgICBtYXJrdXAuYXBwZW5kKCI8YSBocmVmPVwiIik7Cisg
ICAgbWFya3VwLmFwcGVuZCh1cmwuc3RyaW5nKCkpOworICAgIG1hcmt1cC5hcHBlbmQoIlwiPiIp
OwogICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhtYXJrdXAsIHRpdGxlLmNo
YXJhY3RlcnMoKSwgdGl0bGUubGVuZ3RoKCksIEVudGl0eU1hc2tJblBDREFUQSk7Ci0gICAgYXBw
ZW5kKG1hcmt1cCwgIjwvYT4iKTsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChtYXJrdXApOwor
ICAgIG1hcmt1cC5hcHBlbmQoIjwvYT4iKTsKKyAgICByZXR1cm4gbWFya3VwLnRvU3RyaW5nKCk7
CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAko
cmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY6
OlVuaWNvZGU7CiAKIGVudW0gQm91bmRhcnlTZWFyY2hDb250ZXh0QXZhaWxhYmlsaXR5IHsgRG9u
dEhhdmVNb3JlQ29udGV4dCwgTWF5SGF2ZU1vcmVDb250ZXh0IH07CiAKLXR5cGVkZWYgdW5zaWdu
ZWQgKCpCb3VuZGFyeVNlYXJjaEZ1bmN0aW9uKShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQgb2Zmc2V0LCBCb3VuZGFyeVNlYXJjaENvbnRleHRBdmFpbGFiaWxpdHksIGJv
b2wmIG5lZWRNb3JlQ29udGV4dCk7Cit0eXBlZGVmIHVuc2lnbmVkICgqQm91bmRhcnlTZWFyY2hG
dW5jdGlvbikoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBvZmZzZXQsIEJv
dW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSwgYm9vbCYgbmVlZE1vcmVDb250ZXh0KTsK
IAogc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2hGdW5jdGlvbiBzZWFyY2hGdW5jdGlvbikKIHsKQEAg
LTY1LDcgKzY1LDggQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KAog
ICAgIFBvc2l0aW9uIGVuZCA9IHBvcy5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBS
ZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkKTsKICAgICAKLSAgICBW
ZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZzsKKyAg
ICBzdHJpbmcucmVzZXJ2ZUNhcGFjaXR5KDEwMjQpOwogICAgIHVuc2lnbmVkIHN1ZmZpeExlbmd0
aCA9IDA7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTEwNSw5ICsxMDYsOSBAQCBz
dGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnkoCiAgICAgICAgICAgICAvLyBU
cmVhdCBidWxsZXRzIHVzZWQgaW4gdGhlIHRleHQgc2VjdXJpdHkgbW9kZSBhcyByZWd1bGFyIGNo
YXJhY3RlcnMgd2hlbiBsb29raW5nIGZvciBib3VuZGFyaWVzCiAgICAgICAgICAgICBTdHJpbmcg
aXRlcmF0b3JTdHJpbmcoaXQuY2hhcmFjdGVycygpLCBpdC5sZW5ndGgoKSk7CiAgICAgICAgICAg
ICBpdGVyYXRvclN0cmluZy5maWxsKCd4Jyk7Ci0gICAgICAgICAgICBzdHJpbmcucHJlcGVuZChp
dGVyYXRvclN0cmluZy5jaGFyYWN0ZXJzKCksIGl0ZXJhdG9yU3RyaW5nLmxlbmd0aCgpKTsKKyAg
ICAgICAgICAgIHN0cmluZy5wcmVwZW5kKGl0ZXJhdG9yU3RyaW5nKTsKICAgICAgICAgfQotICAg
ICAgICBuZXh0ID0gc2VhcmNoRnVuY3Rpb24oc3RyaW5nLmRhdGEoKSwgc3RyaW5nLnNpemUoKSwg
c3RyaW5nLnNpemUoKSAtIHN1ZmZpeExlbmd0aCwgTWF5SGF2ZU1vcmVDb250ZXh0LCBuZWVkTW9y
ZUNvbnRleHQpOworICAgICAgICBuZXh0ID0gc2VhcmNoRnVuY3Rpb24oc3RyaW5nLmNoYXJhY3Rl
cnMoKSwgc3RyaW5nLmxlbmd0aCgpLCBzdHJpbmcubGVuZ3RoKCkgLSBzdWZmaXhMZW5ndGgsIE1h
eUhhdmVNb3JlQ29udGV4dCwgbmVlZE1vcmVDb250ZXh0KTsKICAgICAgICAgaWYgKG5leHQgIT0g
MCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpdC5hZHZhbmNlKCk7CkBAIC0xMTUsNyAr
MTE2LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KAogICAgIGlm
IChuZWVkTW9yZUNvbnRleHQpIHsKICAgICAgICAgLy8gVGhlIGxhc3Qgc2VhcmNoIHJldHVybmVk
IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciBhbmQgYXNrZWQgZm9yIG1vcmUgY29udGV4dCwK
ICAgICAgICAgLy8gYnV0IHRoZXJlIGlzIG5vIGVhcmxpZXIgdGV4dC4gRm9yY2UgYSBzZWFyY2gg
d2l0aCB3aGF0J3MgYXZhaWxhYmxlLgotICAgICAgICBuZXh0ID0gc2VhcmNoRnVuY3Rpb24oc3Ry
aW5nLmRhdGEoKSwgc3RyaW5nLnNpemUoKSwgc3RyaW5nLnNpemUoKSAtIHN1ZmZpeExlbmd0aCwg
RG9udEhhdmVNb3JlQ29udGV4dCwgbmVlZE1vcmVDb250ZXh0KTsKKyAgICAgICAgbmV4dCA9IHNl
YXJjaEZ1bmN0aW9uKHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSwgc3RyaW5n
Lmxlbmd0aCgpIC0gc3VmZml4TGVuZ3RoLCBEb250SGF2ZU1vcmVDb250ZXh0LCBuZWVkTW9yZUNv
bnRleHQpOwogICAgICAgICBBU1NFUlQoIW5lZWRNb3JlQ29udGV4dCk7CiAgICAgfQogCkBAIC0x
MjksNyArMTMwLDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KAog
CiAgICAgLy8gVXNlIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBuZXh0
IHZhbHVlIGludG8gYSBET00gcG9zaXRpb24uCiAgICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0
b3IgY2hhckl0KHNlYXJjaFJhbmdlLmdldCgpKTsKLSAgICBjaGFySXQuYWR2YW5jZShzdHJpbmcu
c2l6ZSgpIC0gc3VmZml4TGVuZ3RoIC0gbmV4dCk7CisgICAgY2hhckl0LmFkdmFuY2Uoc3RyaW5n
Lmxlbmd0aCgpIC0gc3VmZml4TGVuZ3RoIC0gbmV4dCk7CiAgICAgLy8gRklYTUU6IGNoYXJJdCBj
YW4gZ2V0IG91dCBvZiBzaGFkb3cgaG9zdC4KICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNo
YXJJdC5yYW5nZSgpLT5lbmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKIH0KQEAgLTE0NSw3ICsx
NDYsOCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShjb25zCiAgICAgUmVm
UHRyPFJhbmdlPiBzZWFyY2hSYW5nZShkLT5jcmVhdGVSYW5nZSgpKTsKICAgICBQb3NpdGlvbiBz
dGFydChwb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogCi0gICAgVmVjdG9yPFVDaGFy
LCAxMDI0PiBzdHJpbmc7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmc7CisgICAgc3RyaW5nLnJl
c2VydmVDYXBhY2l0eSgxMDI0KTsKICAgICB1bnNpZ25lZCBwcmVmaXhMZW5ndGggPSAwOwogCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0xODAsMjEgKzE4MiwyMSBAQCBzdGF0aWMgVmlz
aWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShjb25zCiAgICAgICAgICAgICAvLyBUcmVhdCBidWxs
ZXRzIHVzZWQgaW4gdGhlIHRleHQgc2VjdXJpdHkgbW9kZSBhcyByZWd1bGFyIGNoYXJhY3RlcnMg
d2hlbiBsb29raW5nIGZvciBib3VuZGFyaWVzCiAgICAgICAgICAgICBTdHJpbmcgaXRlcmF0b3JT
dHJpbmcoaXQuY2hhcmFjdGVycygpLCBpdC5sZW5ndGgoKSk7CiAgICAgICAgICAgICBpdGVyYXRv
clN0cmluZy5maWxsKCd4Jyk7Ci0gICAgICAgICAgICBzdHJpbmcuYXBwZW5kKGl0ZXJhdG9yU3Ry
aW5nLmNoYXJhY3RlcnMoKSwgaXRlcmF0b3JTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICAgICAg
c3RyaW5nLmFwcGVuZChpdGVyYXRvclN0cmluZyk7CiAgICAgICAgIH0KLSAgICAgICAgbmV4dCA9
IHNlYXJjaEZ1bmN0aW9uKHN0cmluZy5kYXRhKCksIHN0cmluZy5zaXplKCksIHByZWZpeExlbmd0
aCwgTWF5SGF2ZU1vcmVDb250ZXh0LCBuZWVkTW9yZUNvbnRleHQpOwotICAgICAgICBpZiAobmV4
dCAhPSBzdHJpbmcuc2l6ZSgpKQorICAgICAgICBuZXh0ID0gc2VhcmNoRnVuY3Rpb24oc3RyaW5n
LmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpLCBwcmVmaXhMZW5ndGgsIE1heUhhdmVNb3Jl
Q29udGV4dCwgbmVlZE1vcmVDb250ZXh0KTsKKyAgICAgICAgaWYgKG5leHQgIT0gc3RyaW5nLmxl
bmd0aCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGl0LmFkdmFuY2UoKTsKICAgICB9
CiAgICAgaWYgKG5lZWRNb3JlQ29udGV4dCkgewogICAgICAgICAvLyBUaGUgbGFzdCBzZWFyY2gg
cmV0dXJuZWQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFuZCBhc2tlZCBmb3IgbW9yZSBjb250ZXh0
LAogICAgICAgICAvLyBidXQgdGhlcmUgaXMgbm8gZnVydGhlciB0ZXh0LiBGb3JjZSBhIHNlYXJj
aCB3aXRoIHdoYXQncyBhdmFpbGFibGUuCi0gICAgICAgIG5leHQgPSBzZWFyY2hGdW5jdGlvbihz
dHJpbmcuZGF0YSgpLCBzdHJpbmcuc2l6ZSgpLCBwcmVmaXhMZW5ndGgsIERvbnRIYXZlTW9yZUNv
bnRleHQsIG5lZWRNb3JlQ29udGV4dCk7CisgICAgICAgIG5leHQgPSBzZWFyY2hGdW5jdGlvbihz
dHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCksIHByZWZpeExlbmd0aCwgRG9udEhh
dmVNb3JlQ29udGV4dCwgbmVlZE1vcmVDb250ZXh0KTsKICAgICAgICAgQVNTRVJUKCFuZWVkTW9y
ZUNvbnRleHQpOwogICAgIH0KICAgICAKLSAgICBpZiAoaXQuYXRFbmQoKSAmJiBuZXh0ID09IHN0
cmluZy5zaXplKCkpIHsKKyAgICBpZiAoaXQuYXRFbmQoKSAmJiBuZXh0ID09IHN0cmluZy5sZW5n
dGgoKSkgewogICAgICAgICBwb3MgPSBpdC5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCk7CiAgICAg
fSBlbHNlIGlmIChuZXh0ICE9IHByZWZpeExlbmd0aCkgewogICAgICAgICAvLyBVc2UgdGhlIGNo
YXJhY3RlciBpdGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBw
b3NpdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5MaXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRva2VuTGlzdC5jcHAJKHJldmlzaW9u
IDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIFN0cmluZyBET01Ub2tlbkxpc3Q6OnJlbW92ZVRva2Vu
KGNvbnN0IEEKICAgICAvLyBBbGdvcml0aG0gZGVmaW5lZCBhdCBodHRwOi8vd3d3LndoYXR3Zy5v
cmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tb24tbWljcm9zeW50
YXhlcy5odG1sI3JlbW92ZS1hLXRva2VuLWZyb20tYS1zdHJpbmcKIAogICAgIHVuc2lnbmVkIGlu
cHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgVmVjdG9yPFVDaGFyPiBvdXRwdXQ7IC8v
IDMKKyAgICBTdHJpbmdCdWlsZGVyIG91dHB1dDsKICAgICBvdXRwdXQucmVzZXJ2ZUNhcGFjaXR5
KGlucHV0TGVuZ3RoKTsKICAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7IC8vIDQKIApAQCAtNzgs
NyArNzgsNyBAQCBTdHJpbmcgRE9NVG9rZW5MaXN0OjpyZW1vdmVUb2tlbihjb25zdCBBCiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBTdGVwIDcKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBzOworICAg
ICAgICBTdHJpbmdCdWlsZGVyIHM7CiAgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0TGVu
Z3RoICYmIGlzTm90SFRNTFNwYWNlKGlucHV0W3Bvc2l0aW9uXSkpCiAgICAgICAgICAgICBzLmFw
cGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CiAKQEAgLTg5LDcgKzg5LDcgQEAgU3RyaW5nIERPTVRv
a2VuTGlzdDo6cmVtb3ZlVG9rZW4oY29uc3QgQQogICAgICAgICAgICAgICAgICsrcG9zaXRpb247
CiAKICAgICAgICAgICAgIC8vIFN0ZXAgOC4yCi0gICAgICAgICAgICBzaXplX3QgaiA9IG91dHB1
dC5zaXplKCk7CisgICAgICAgICAgICBzaXplX3QgaiA9IG91dHB1dC5sZW5ndGgoKTsKICAgICAg
ICAgICAgIHdoaWxlIChqID4gMCAmJiBpc0hUTUxTcGFjZShvdXRwdXRbaiAtIDFdKSkKICAgICAg
ICAgICAgICAgICAtLWo7CiAgICAgICAgICAgICBvdXRwdXQucmVzaXplKGopOwpAQCAtMTAxLDgg
KzEwMSw3IEBAIFN0cmluZyBET01Ub2tlbkxpc3Q6OnJlbW92ZVRva2VuKGNvbnN0IEEKICAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQocyk7IC8vIFN0ZXAgOQogICAgIH0KIAotICAgIG91dHB1dC5z
aHJpbmtUb0ZpdCgpOwotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KG91dHB1dCk7CisgICAgcmV0
dXJuIG91dHB1dC50b1N0cmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5Mzg0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBA
IC04OSw3ICs5MCw4IEBAIHN0YXRpYyBib29sIHBhcnNlRm9udFNpemUoY29uc3QgU3RyaW5nJiAK
ICAgICB9CiAKICAgICAvLyBTdGVwIDYKLSAgICBWZWN0b3I8VUNoYXIsIDE2PiBkaWdpdHM7Cisg
ICAgU3RyaW5nQnVpbGRlciBkaWdpdHM7CisgICAgZGlnaXRzLnJlc2VydmVDYXBhY2l0eSgxNik7
CiAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7CiAgICAgICAgIGlmICghaXNBU0NJSURpZ2l0
KCpwb3NpdGlvbikpCiAgICAgICAgICAgICBicmVhazsKQEAgLTEwMSw3ICsxMDMsNyBAQCBzdGF0
aWMgYm9vbCBwYXJzZUZvbnRTaXplKGNvbnN0IFN0cmluZyYgCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIC8vIFN0ZXAgOAotICAgIGludCB2YWx1ZSA9IGNoYXJhY3RlcnNUb0ludFN0cmlj
dChkaWdpdHMuZGF0YSgpLCBkaWdpdHMuc2l6ZSgpKTsKKyAgICBpbnQgdmFsdWUgPSBjaGFyYWN0
ZXJzVG9JbnRTdHJpY3QoZGlnaXRzLmNoYXJhY3RlcnMoKSwgZGlnaXRzLmxlbmd0aCgpKTsKIAog
ICAgIC8vIFN0ZXAgOQogICAgIGlmIChtb2RlID09IFJlbGF0aXZlUGx1cykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgU3RyaW5nIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzdHJpcAogICAgIGlmICghYXR0cmlidXRlVmFsdWUu
Y29udGFpbnMobmV3bGluZUNoYXJhY3RlcikgJiYgIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKGNh
cnJpYWdlUmV0dXJuKSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlOwogCi0gICAgVmVj
dG9yPFVDaGFyPiBzdHJpcHBlZDsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmlwcGVkOwogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCgpOwogICAgIHN0cmlwcGVkLnJl
c2VydmVDYXBhY2l0eShsZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewpAQCAtMTE5LDcgKzExOSw3IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6c3RyaXAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBzdHJpcHBlZC5h
cHBlbmQoY2hhcmFjdGVyKTsKICAgICB9Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoc3RyaXBw
ZWQpOworICAgIHJldHVybiBzdHJpcHBlZC50b1N0cmluZygpOwogfQogCiBzdGF0aWMgYm9vbCBp
c05vdExpbmVCcmVhayhVQ2hhciBjaCkgeyByZXR1cm4gY2ggIT0gbmV3bGluZUNoYXJhY3RlciAm
JiBjaCAhPSBjYXJyaWFnZVJldHVybjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Vmlld1NvdXJjZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0MCw3ICsxNDAsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OnByb2Nlc3NUYWdU
CiB7CiAgICAgbV9jdXJyZW50ID0gYWRkU3BhbldpdGhDbGFzc05hbWUoIndlYmtpdC1odG1sLXRh
ZyIpOwogCi0gICAgQXRvbWljU3RyaW5nIHRhZ05hbWUodG9rZW4ubmFtZSgpLmRhdGEoKSwgdG9r
ZW4ubmFtZSgpLnNpemUoKSk7CisgICAgQXRvbWljU3RyaW5nIHRhZ05hbWUodG9rZW4ubmFtZSgp
LnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsK
ICAgICBIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0b2tl
bi5hdHRyaWJ1dGVzKCkuYmVnaW4oKTsKQEAgLTE1Miw4ICsxNTIsOCBAQCB2b2lkIEhUTUxWaWV3
U291cmNlRG9jdW1lbnQ6OnByb2Nlc3NUYWdUCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCi0gICAgICAgIEF0b21pY1N0cmluZyBuYW1lKGl0ZXItPm1fbmFtZS5kYXRhKCksIGl0ZXIt
Pm1fbmFtZS5zaXplKCkpOwotICAgICAgICBTdHJpbmcgdmFsdWUoaXRlci0+bV92YWx1ZS5kYXRh
KCksIGl0ZXItPm1fdmFsdWUuc2l6ZSgpKTsgCisgICAgICAgIEF0b21pY1N0cmluZyBuYW1lKGl0
ZXItPm1fbmFtZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSk7CisgICAgICAgIFN0cmluZyB2
YWx1ZShpdGVyLT5tX3ZhbHVlLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKIAogICAgICAg
ICBpbmRleCA9IGFkZFJhbmdlKHNvdXJjZSwgaW5kZXgsIGl0ZXItPm1fbmFtZVJhbmdlLm1fc3Rh
cnQgLSB0b2tlbi5zdGFydEluZGV4KCksICIiKTsKICAgICAgICAgaW5kZXggPSBhZGRSYW5nZShz
b3VyY2UsIGluZGV4LCBpdGVyLT5tX25hbWVSYW5nZS5tX2VuZCAtIHRva2VuLnN0YXJ0SW5kZXgo
KSwgIndlYmtpdC1odG1sLWF0dHJpYnV0ZS1uYW1lIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuY3BwCShyZXZpc2lvbiA5Mzg0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTMsOSArNTMsOSBAQCB2b2lkIENTU1ByZWxvYWRTY2FubmVyOjpzY2Fu
KGNvbnN0IEhUTUxUCiB7CiAgICAgbV9zY2FubmluZ0JvZHkgPSBzY2FubmluZ0JvZHk7CiAKLSAg
ICBjb25zdCBIVE1MVG9rZW46OkRhdGFWZWN0b3ImIGNoYXJhY3RlcnMgPSB0b2tlbi5jaGFyYWN0
ZXJzKCk7Ci0gICAgZm9yIChIVE1MVG9rZW46OkRhdGFWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBjaGFyYWN0ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gY2hhcmFjdGVycy5lbmQoKSAmJiBtX3N0
YXRlICE9IERvbmVQYXJzaW5nSW1wb3J0UnVsZXM7ICsraXRlcikKLSAgICAgICAgdG9rZW5pemUo
Kml0ZXIpOworICAgIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNoYXJhY3RlcnMgPSB0b2tlbi5jaGFy
YWN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3Ro
KCkgJiYgbV9zdGF0ZSAhPSBEb25lUGFyc2luZ0ltcG9ydFJ1bGVzOyArK2kpCisgICAgICAgIHRv
a2VuaXplKGNoYXJhY3RlcnNbaV0pOwogfQogCiBpbmxpbmUgdm9pZCBDU1NQcmVsb2FkU2Nhbm5l
cjo6dG9rZW5pemUoVUNoYXIgYykKQEAgLTE5MiwxNCArMTkyLDE0IEBAIHN0YXRpYyBTdHJpbmcg
cGFyc2VDU1NTdHJpbmdPclVSTChjb25zdCAKIAogdm9pZCBDU1NQcmVsb2FkU2Nhbm5lcjo6ZW1p
dFJ1bGUoKQogewotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSgiaW1wb3J0IiwgbV9ydWxlLmRh
dGEoKSwgbV9ydWxlLnNpemUoKSkpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFyc2VDU1NT
dHJpbmdPclVSTChtX3J1bGVWYWx1ZS5kYXRhKCksIG1fcnVsZVZhbHVlLnNpemUoKSk7CisgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKCJpbXBvcnQiLCBtX3J1bGUuY2hhcmFjdGVycygpLCBtX3J1
bGUubGVuZ3RoKCkpKSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlQ1NTU3RyaW5nT3JV
UkwobV9ydWxlVmFsdWUuY2hhcmFjdGVycygpLCBtX3J1bGVWYWx1ZS5sZW5ndGgoKSk7CiAgICAg
ICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdChtX2RvY3VtZW50LT5jb21wbGV0ZVVSTCh2YWx1ZSkpOwogICAgICAgICAgICAgbV9k
b2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6
Q1NTU3R5bGVTaGVldCwgcmVxdWVzdCwgU3RyaW5nKCksIG1fc2Nhbm5pbmdCb2R5KTsKICAgICAg
ICAgfQogICAgICAgICBtX3N0YXRlID0gSW5pdGlhbDsKLSAgICB9IGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKCJjaGFyc2V0IiwgbV9ydWxlLmRhdGEoKSwgbV9ydWxlLnNpemUoKSkpCisgICAg
fSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSgiY2hhcnNldCIsIG1fcnVsZS5jaGFyYWN0ZXJz
KCksIG1fcnVsZS5sZW5ndGgoKSkpCiAgICAgICAgIG1fc3RhdGUgPSBJbml0aWFsOwogICAgIGVs
c2UKICAgICAgICAgbV9zdGF0ZSA9IERvbmVQYXJzaW5nSW1wb3J0UnVsZXM7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmgJKHJldmlzaW9u
IDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBDU1NQcmVsb2FkU2Nh
bm5lcl9oCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNjEsOCArNjEsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZW1pdFJ1bGUo
KTsKIAogICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgVmVjdG9yPFVDaGFyLCAxNj4gbV9ydWxlOwot
ICAgIFZlY3RvcjxVQ2hhcj4gbV9ydWxlVmFsdWU7CisgICAgU3RyaW5nQnVpbGRlciBtX3J1bGU7
CisgICAgU3RyaW5nQnVpbGRlciBtX3J1bGVWYWx1ZTsKIAogICAgIGJvb2wgbV9zY2FubmluZ0Jv
ZHk7CiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCShyZXZpc2lvbiA5Mzg0
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlv
blNpdGU6Omluc2VydEhUTUxCb2QKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydERv
Y3R5cGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgp
ID09IEhUTUxUb2tlblR5cGVzOjpET0NUWVBFKTsKLSAgICBhdHRhY2gobV9hdHRhY2htZW50Um9v
dCwgRG9jdW1lbnRUeXBlOjpjcmVhdGUobV9kb2N1bWVudCwgdG9rZW4ubmFtZSgpLCBTdHJpbmc6
OmFkb3B0KHRva2VuLnB1YmxpY0lkZW50aWZpZXIoKSksIFN0cmluZzo6YWRvcHQodG9rZW4uc3lz
dGVtSWRlbnRpZmllcigpKSkpOworICAgIGF0dGFjaChtX2F0dGFjaG1lbnRSb290LCBEb2N1bWVu
dFR5cGU6OmNyZWF0ZShtX2RvY3VtZW50LCB0b2tlbi5uYW1lKCksIHRva2VuLnB1YmxpY0lkZW50
aWZpZXIoKS5yZWxlYXNlU3RyaW5nKCksIHRva2VuLnN5c3RlbUlkZW50aWZpZXIoKS5yZWxlYXNl
U3RyaW5nKCkpKTsKICAgICAKICAgICAvLyBET0NUWVBFIG5vZGVzIGFyZSBvbmx5IHByb2Nlc3Nl
ZCB3aGVuIHBhcnNpbmcgZnJhZ21lbnRzIHcvbyBjb250ZXh0RWxlbWVudHMsIHdoaWNoCiAgICAg
Ly8gbmV2ZXIgb2NjdXJzLiAgSG93ZXZlciwgaWYgd2UgZXZlciBjaG9zZSB0byBzdXBwb3J0IHN1
Y2gsIHRoaXMgY29kZSBpcyBzdWJ0bHkgd3JvbmcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAg
ICB9CiAKLSAgICBpbmxpbmUgc3RhdGljIGJvb2wgY29udmVydFRvVVRGMTYoVUNoYXIzMiB2YWx1
ZSwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRFbnRpdHkpCisgICAgaW5saW5lIHN0YXRpYyBi
b29sIGNvbnZlcnRUb1VURjE2KFVDaGFyMzIgdmFsdWUsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRF
bnRpdHkpCiAgICAgewogICAgICAgICBpZiAoVV9JU19CTVAodmFsdWUpKSB7CiAgICAgICAgICAg
ICBVQ2hhciBjaGFyYWN0ZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcj4odmFsdWUpOwpAQCAtODUsOSAr
ODUsOSBAQCBwdWJsaWM6CiAKICAgICBpbmxpbmUgc3RhdGljIGJvb2wgYWNjZXB0TWFsZm9ybWVk
KCkgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnN1bWVOYW1l
ZEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29k
ZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxv
d2VkQ2hhcmFjdGVyLCBVQ2hhciYgY2MpCisgICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnN1bWVO
YW1lZEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU3RyaW5nQnVpbGRlciYgZGVjb2Rl
ZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93
ZWRDaGFyYWN0ZXIsIFVDaGFyJiBjYykKICAgICB7Ci0gICAgICAgIFZlY3RvcjxVQ2hhciwgMTA+
IGNvbnN1bWVkQ2hhcmFjdGVyczsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zdW1lZENoYXJh
Y3RlcnM7CiAgICAgICAgIEhUTUxFbnRpdHlTZWFyY2ggZW50aXR5U2VhcmNoOwogICAgICAgICB3
aGlsZSAoIXNvdXJjZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNjID0gKnNvdXJjZTsKQEAg
LTEzOSw3ICsxMzksNyBAQCBwdWJsaWM6CiB9CiAKIAotYm9vbCBjb25zdW1lSFRNTEVudGl0eShT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRFbnRpdHks
IGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFj
dGVyKQorYm9vbCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU3Ry
aW5nQnVpbGRlciYgZGVjb2RlZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNo
YXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpCiB7CiAgICAgcmV0dXJuIGNvbnN1bWVDaGFy
YWN0ZXJSZWZlcmVuY2U8SFRNTEVudGl0eVBhcnNlcj4oc291cmNlLCBkZWNvZGVkRW50aXR5LCBu
b3RFbm91Z2hDaGFyYWN0ZXJzLCBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rlcik7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5oCShyZXZp
c2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJz
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWJvb2wgY29uc3VtZUhUTUxFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiwgVmVjdG9yPFVD
aGFyLCAxNj4mIGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFy
IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID0gJ1wwJyk7Citib29sIGNvbnN1bWVIVE1MRW50
aXR5KFNlZ21lbnRlZFN0cmluZyYsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRFbnRpdHksIGJvb2wm
IG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID0g
J1wwJyk7CiAKIC8vIFVzZWQgYnkgdGhlIFhNTCBwYXJzZXIuICBOb3Qgc3VpdGFibGUgZm9yIHVz
ZSBpbiBIVE1MIHBhcnNpbmcuICBVc2UgY29uc3VtZUhUTUxFbnRpdHkgaW5zdGVhZC4KIFVDaGFy
IGRlY29kZU5hbWVkRW50aXR5KGNvbnN0IGNoYXIqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAkocmV2aXNpb24g
OTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTEgKzEwNCw4IEBAIGJvb2wgSFRNTE1ldGFD
aGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YSgKIHsKICAgICBjb25zdCBIVE1MVG9rZW46OkF0dHJp
YnV0ZUxpc3QmIHRva2VuQXR0cmlidXRlcyA9IG1fdG9rZW4uYXR0cmlidXRlcygpOwogICAgIEF0
dHJpYnV0ZUxpc3QgYXR0cmlidXRlczsKLSAgICBmb3IgKEhUTUxUb2tlbjo6QXR0cmlidXRlTGlz
dDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRva2VuQXR0cmlidXRlcy5iZWdpbigpOyBpdGVyICE9
IHRva2VuQXR0cmlidXRlcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFN0cmluZyBhdHRyaWJ1
dGVOYW1lKGl0ZXItPm1fbmFtZS5kYXRhKCksIGl0ZXItPm1fbmFtZS5zaXplKCkpOwotICAgICAg
ICBTdHJpbmcgYXR0cmlidXRlVmFsdWUoaXRlci0+bV92YWx1ZS5kYXRhKCksIGl0ZXItPm1fdmFs
dWUuc2l6ZSgpKTsKLSAgICAgICAgYXR0cmlidXRlcy5hcHBlbmQobWFrZV9wYWlyKGF0dHJpYnV0
ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKSk7Ci0gICAgfQorICAgIGZvciAoSFRNTFRva2VuOjpBdHRy
aWJ1dGVMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gdG9rZW5BdHRyaWJ1dGVzLmJlZ2luKCk7
IGl0ZXIgIT0gdG9rZW5BdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgIGF0dHJpYnV0
ZXMuYXBwZW5kKG1ha2VfcGFpcihpdGVyLT5tX25hbWUudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5
KCksIGl0ZXItPm1fdmFsdWUudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpKTsKIAogICAgIG1f
ZW5jb2RpbmcgPSBlbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICBy
ZXR1cm4gbV9lbmNvZGluZy5pc1ZhbGlkKCk7CkBAIC0xNzcsNyArMTc0LDcgQEAgYm9vbCBIVE1M
TWV0YUNoYXJzZXRQYXJzZXI6OmNoZWNrRm9yTWV0YQogICAgIHdoaWxlIChtX3Rva2VuaXplci0+
bmV4dFRva2VuKG1faW5wdXQsIG1fdG9rZW4pKSB7CiAgICAgICAgIGJvb2wgZW5kID0gbV90b2tl
bi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZzsKICAgICAgICAgaWYgKGVuZCB8fCBt
X3Rva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpIHsKLSAgICAgICAgICAg
IEF0b21pY1N0cmluZyB0YWdOYW1lKG1fdG9rZW4ubmFtZSgpLmRhdGEoKSwgbV90b2tlbi5uYW1l
KCkuc2l6ZSgpKTsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWdOYW1lKG1fdG9rZW4ubmFt
ZSgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgIGlmICghZW5kKSB7
CiAgICAgICAgICAgICAgICAgbV90b2tlbml6ZXItPnVwZGF0ZVN0YXRlRm9yKHRhZ05hbWUsIDAp
OwogICAgICAgICAgICAgICAgIGlmICh0YWdOYW1lID09IG1ldGFUYWcgJiYgcHJvY2Vzc01ldGEo
KSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklk
aW9tcy5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFBhcnNlcklkaW9tcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsOCBAQCBi
b29sIHBhcnNlSFRNTEludGVnZXIoY29uc3QgU3RyaW5nJiBpbnB1CiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIFN0ZXAgOAotICAgIFZlY3RvcjxVQ2hhciwgMTY+IGRpZ2l0czsKKyAg
ICBTdHJpbmdCdWlsZGVyIGRpZ2l0czsKKyAgICBkaWdpdHMucmVzZXJ2ZUNhcGFjaXR5KDE2KTsK
ICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKICAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQo
KnBvc2l0aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjE2LDcgKzIxNyw3IEBAIGJvb2wg
cGFyc2VIVE1MSW50ZWdlcihjb25zdCBTdHJpbmcmIGlucHUKICAgICB9CiAKICAgICAvLyBTdGVw
IDkKLSAgICB2YWx1ZSA9IHNpZ24gKiBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoZGlnaXRzLmRhdGEo
KSwgZGlnaXRzLnNpemUoKSk7CisgICAgdmFsdWUgPSBzaWduICogY2hhcmFjdGVyc1RvSW50U3Ry
aWN0KGRpZ2l0cy5jaGFyYWN0ZXJzKCksIGRpZ2l0cy5sZW5ndGgoKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTI1NCw3ICsyNTUsOCBAQCBib29sIHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50
ZWdlcihjb25zdCBTCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFN0ZXAgOAotICAg
IFZlY3RvcjxVQ2hhciwgMTY+IGRpZ2l0czsKKyAgICBTdHJpbmdCdWlsZGVyIGRpZ2l0czsKKyAg
ICBkaWdpdHMucmVzZXJ2ZUNhcGFjaXR5KDE2KTsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQp
IHsKICAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoKnBvc2l0aW9uKSkKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjYyLDcgKzI2NCw3IEBAIGJvb2wgcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2Vy
KGNvbnN0IFMKICAgICB9CiAKICAgICAvLyBTdGVwIDkKLSAgICB2YWx1ZSA9IGNoYXJhY3RlcnNU
b1VJbnRTdHJpY3QoZGlnaXRzLmRhdGEoKSwgZGlnaXRzLnNpemUoKSk7CisgICAgdmFsdWUgPSBj
aGFyYWN0ZXJzVG9VSW50U3RyaWN0KGRpZ2l0cy5jaGFyYWN0ZXJzKCksIGRpZ2l0cy5sZW5ndGgo
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSB7CiBjbGFzcyBQcmVsb2FkVGFzayB7
CiBwdWJsaWM6CiAgICAgUHJlbG9hZFRhc2soY29uc3QgSFRNTFRva2VuJiB0b2tlbikKLSAgICAg
ICAgOiBtX3RhZ05hbWUodG9rZW4ubmFtZSgpLmRhdGEoKSwgdG9rZW4ubmFtZSgpLnNpemUoKSkK
KyAgICAgICAgOiBtX3RhZ05hbWUodG9rZW4ubmFtZSgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0
eSgpKQogICAgICAgICAsIG1fbGlua0lzU3R5bGVTaGVldChmYWxzZSkKICAgICAgICAgLCBtX2xp
bmtNZWRpYUF0dHJpYnV0ZUlzU2NyZWVuKHRydWUpCiAgICAgICAgICwgbV9pbnB1dElzSW1hZ2Uo
ZmFsc2UpCkBAIC02Niw4ICs2Niw4IEBAIHB1YmxpYzoKIAogICAgICAgICBmb3IgKEhUTUxUb2tl
bjo6QXR0cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGF0dHJpYnV0ZXMuYmVnaW4o
KTsKICAgICAgICAgICAgICBpdGVyICE9IGF0dHJpYnV0ZXMuZW5kKCk7ICsraXRlcikgewotICAg
ICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRhdGEoKSwg
aXRlci0+bV9uYW1lLnNpemUoKSk7Ci0gICAgICAgICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUo
aXRlci0+bV92YWx1ZS5kYXRhKCksIGl0ZXItPm1fdmFsdWUuc2l6ZSgpKTsKKyAgICAgICAgICAg
IEF0b21pY1N0cmluZyBhdHRyaWJ1dGVOYW1lKGl0ZXItPm1fbmFtZS50b1N0cmluZ1ByZXNlcnZl
Q2FwYWNpdHkoKSk7CisgICAgICAgICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUoaXRlci0+bV92
YWx1ZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSk7CiAKICAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVOYW1lID09IGNoYXJzZXRBdHRyKQogICAgICAgICAgICAgICAgIG1fY2hhcnNldCA9IGF0
dHJpYnV0ZVZhbHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2Vu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuLmgJ
KHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2Vu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgICAgICBNYXJr
dXBUb2tlbkJhc2U8SFRNTFRva2VuVHlwZXMsIEhUTUxUb2tlblR5cGVzOjpEb2N0eXBlRGF0YT46
OmFwcGVuZFRvTmFtZShjaGFyYWN0ZXIpOwogICAgIH0KICAgICAKLSAgICBjb25zdCBEYXRhVmVj
dG9yJiBuYW1lKCkgY29uc3QKKyAgICBjb25zdCBTdHJpbmdCdWlsZGVyJiBuYW1lKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFn
IHx8IG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnIHx8IG1fdHlwZSA9PSBIVE1MVG9r
ZW5UeXBlczo6RE9DVFlQRSk7CiAgICAgICAgIHJldHVybiBNYXJrdXBUb2tlbkJhc2U8SFRNTFRv
a2VuVHlwZXMsIEhUTUxUb2tlblR5cGVzOjpEb2N0eXBlRGF0YT46Om5hbWUoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiA5
Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiB0ZW1wbGF0ZTw+CiBRdWFsaWZpZWROYW1lIEF0b21pY01hcmt1cFRva2VuQmFzZTxIVE1MVG9r
ZW4+OjpuYW1lRm9yQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZUJhc2UmIGF0dHJpYnV0ZSkgY29u
c3QKIHsKLSAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgQXRvbWljU3RyaW5nKGF0
dHJpYnV0ZS5tX25hbWUuZGF0YSgpLCBhdHRyaWJ1dGUubV9uYW1lLnNpemUoKSksIG51bGxBdG9t
KTsKKyAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgQXRvbWljU3RyaW5nKGF0dHJp
YnV0ZS5tX25hbWUudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpLCBudWxsQXRvbSk7CiB9CiAK
IHRlbXBsYXRlPD4KQEAgLTc2LDE2ICs3Niw2IEBAIGlubGluZSBVQ2hhciB0b0xvd2VyQ2FzZShV
Q2hhciBjYykKICAgICByZXR1cm4gY2MgKyBsb3dlckNhc2VPZmZzZXQ7CiB9CiAKLWlubGluZSBi
b29sIHZlY3RvckVxdWFsc1N0cmluZyhjb25zdCBWZWN0b3I8VUNoYXIsIDMyPiYgdmVjdG9yLCBj
b25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBpZiAodmVjdG9yLnNpemUoKSAhPSBzdHJpbmcu
bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBVQ2hhciogc3RyaW5n
RGF0YSA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHZlY3RvckRhdGEg
PSB2ZWN0b3IuZGF0YSgpOwotICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBhIGhpZ2hlci1sZXZlbCBm
dW5jdGlvbiB3ZSBzaG91bGQgYmUgY2FsbGluZyBoZXJlPwotICAgIHJldHVybiAhbWVtY21wKHN0
cmluZ0RhdGEsIHZlY3RvckRhdGEsIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVUNoYXIpKTsKLX0K
LQogaW5saW5lIGJvb2wgaXNFbmRUYWdCdWZmZXJpbmdTdGF0ZShIVE1MVG9rZW5pemVyU3RhdGU6
OlN0YXRlIHN0YXRlKQogewogICAgIHN3aXRjaCAoc3RhdGUpIHsKQEAgLTE0NSw3ICsxMzUsNyBA
QCB2b2lkIEhUTUxUb2tlbml6ZXI6OnJlc2V0KCkKIGlubGluZSBib29sIEhUTUxUb2tlbml6ZXI6
OnByb2Nlc3NFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiB7CiAgICAgYm9vbCBub3RF
bm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAgVmVjdG9yPFVDaGFyLCAxNj4gZGVjb2RlZEVu
dGl0eTsKKyAgICBTdHJpbmdCdWlsZGVyIGRlY29kZWRFbnRpdHk7CiAgICAgYm9vbCBzdWNjZXNz
ID0gY29uc3VtZUhUTUxFbnRpdHkoc291cmNlLCBkZWNvZGVkRW50aXR5LCBub3RFbm91Z2hDaGFy
YWN0ZXJzKTsKICAgICBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTUzLDkgKzE0Myw4IEBAIGlubGluZSBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nl
c3NFbnRpdHkKICAgICAgICAgQVNTRVJUKGRlY29kZWRFbnRpdHkuaXNFbXB0eSgpKTsKICAgICAg
ICAgYnVmZmVyQ2hhcmFjdGVyKCcmJyk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVmVjdG9yPFVD
aGFyPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlY29kZWRFbnRpdHkuYmVnaW4oKTsKLSAgICAg
ICAgZm9yICg7IGl0ZXIgIT0gZGVjb2RlZEVudGl0eS5lbmQoKTsgKytpdGVyKQotICAgICAgICAg
ICAgYnVmZmVyQ2hhcmFjdGVyKCppdGVyKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRlY29kZWRFbnRpdHkubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgIGJ1ZmZlckNoYXJh
Y3RlcihkZWNvZGVkRW50aXR5W2ldKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC05
ODcsNyArOTc2LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpuZXh0VG9rZW4oU2VnbWVudGVkUwog
CiAgICAgSFRNTF9CRUdJTl9TVEFURShDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVl
U3RhdGUpIHsKICAgICAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAg
ICAgIFZlY3RvcjxVQ2hhciwgMTY+IGRlY29kZWRFbnRpdHk7CisgICAgICAgIFN0cmluZ0J1aWxk
ZXIgZGVjb2RlZEVudGl0eTsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gY29uc3VtZUhUTUxFbnRp
dHkoc291cmNlLCBkZWNvZGVkRW50aXR5LCBub3RFbm91Z2hDaGFyYWN0ZXJzLCBtX2FkZGl0aW9u
YWxBbGxvd2VkQ2hhcmFjdGVyKTsKICAgICAgICAgaWYgKG5vdEVub3VnaENoYXJhY3RlcnMpCiAg
ICAgICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKTsKQEAgLTk5NSw5
ICs5ODQsOCBAQCBib29sIEhUTUxUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRTCiAgICAg
ICAgICAgICBBU1NFUlQoZGVjb2RlZEVudGl0eS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgbV90
b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZSgnJicpOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgVmVjdG9yPFVDaGFyPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlY29kZWRFbnRp
dHkuYmVnaW4oKTsKLSAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGRlY29kZWRFbnRpdHkuZW5k
KCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb0F0dHJpYnV0ZVZh
bHVlKCppdGVyKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWNvZGVk
RW50aXR5Lmxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9B
dHRyaWJ1dGVWYWx1ZShkZWNvZGVkRW50aXR5W2ldKTsKICAgICAgICAgfQogICAgICAgICAvLyBX
ZSdyZSBzdXBwb3NlZCB0byBzd2l0Y2ggYmFjayB0byB0aGUgYXR0cmlidXRlIHZhbHVlIHN0YXRl
IHRoYXQKICAgICAgICAgLy8gd2Ugd2VyZSBpbiB3aGVuIHdlIHdlcmUgc3dpdGNoZWQgaW50byB0
aGlzIHN0YXRlLiBSYXRoZXIgdGhhbgpAQCAtMTU5OSw3ICsxNTg3LDcgQEAgdm9pZCBIVE1MVG9r
ZW5pemVyOjp1cGRhdGVTdGF0ZUZvcihjb25zdAogCiBpbmxpbmUgYm9vbCBIVE1MVG9rZW5pemVy
Ojp0ZW1wb3JhcnlCdWZmZXJJcyhjb25zdCBTdHJpbmcmIGV4cGVjdGVkU3RyaW5nKQogewotICAg
IHJldHVybiB2ZWN0b3JFcXVhbHNTdHJpbmcobV90ZW1wb3JhcnlCdWZmZXIsIGV4cGVjdGVkU3Ry
aW5nKTsKKyAgICByZXR1cm4gbV90ZW1wb3JhcnlCdWZmZXIgPT0gZXhwZWN0ZWRTdHJpbmc7CiB9
CiAKIGlubGluZSB2b2lkIEhUTUxUb2tlbml6ZXI6OmFkZFRvUG9zc2libGVFbmRUYWcoVUNoYXIg
Y2MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5oCShy
ZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDE3ICsxOTUsMTcgQEAgcHJpdmF0ZToKICAgICB9
CiAgICAgaW5saW5lIGJvb2wgaXNBcHByb3ByaWF0ZUVuZFRhZygpOwogCi0gICAgVmVjdG9yPFVD
aGFyLCAzMj4gbV9hcHByb3ByaWF0ZUVuZFRhZ05hbWU7CisgICAgU3RyaW5nQnVpbGRlciBtX2Fw
cHJvcHJpYXRlRW5kVGFnTmFtZTsKIAogICAgIGJvb2wgbV9zaG91bGRBbGxvd0NEQVRBOwogCiAg
ICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8j
dGVtcG9yYXJ5LWJ1ZmZlcgotICAgIFZlY3RvcjxVQ2hhciwgMzI+IG1fdGVtcG9yYXJ5QnVmZmVy
OworICAgIFN0cmluZ0J1aWxkZXIgbV90ZW1wb3JhcnlCdWZmZXI7CiAKICAgICAvLyBXZSBvY2Nh
dGlvbmFsbHkgd2FudCB0byBlbWl0IGJvdGggYSBjaGFyYWN0ZXIgdG9rZW4gYW5kIGFuIGVuZCB0
YWcKICAgICAvLyB0b2tlbiAoZS5nLiwgd2hlbiBsZXhpbmcgc2NyaXB0KS4gV2UgYnVmZmVyIHRo
ZSBuYW1lIG9mIHRoZSBlbmQgdGFnCiAgICAgLy8gdG9rZW4gaGVyZSBzbyB3ZSByZW1lbWJlciBp
dCBuZXh0IHRpbWUgd2UgcmUtZW50ZXIgdGhlIHRva2VuaXplci4KLSAgICBWZWN0b3I8VUNoYXIs
IDMyPiBtX2J1ZmZlcmVkRW5kVGFnTmFtZTsKKyAgICBTdHJpbmdCdWlsZGVyIG1fYnVmZmVyZWRF
bmRUYWdOYW1lOwogICAgIAogICAgIGJvb2wgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrczsKIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4LDggKzI0OCw4IEBAIGNsYXNzIEhU
TUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXIKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyKTsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBF
eHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCi0gICAg
ICAgIDogbV9jdXJyZW50KHRva2VuLmNoYXJhY3RlcnMoKS5kYXRhKCkpCi0gICAgICAgICwgbV9l
bmQobV9jdXJyZW50ICsgdG9rZW4uY2hhcmFjdGVycygpLnNpemUoKSkKKyAgICAgICAgOiBtX2N1
cnJlbnQodG9rZW4uY2hhcmFjdGVycygpLmNoYXJhY3RlcnMoKSkKKyAgICAgICAgLCBtX2VuZCht
X2N1cnJlbnQgKyB0b2tlbi5jaGFyYWN0ZXJzKCkubGVuZ3RoKCkpCiAgICAgewogICAgICAgICBB
U1NFUlQoIWlzRW1wdHkoKSk7CiAgICAgfQpAQCAtMjkxLDcgKzI5MSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIFN0cmluZyhzdGFydCwgbV9jdXJyZW50IC0gc3RhcnQpOwogICAgIH0KIAot
ICAgIHZvaWQgZ2l2ZVJlbWFpbmluZ1RvKFZlY3RvcjxVQ2hhcj4mIHJlY2lwaWVudCkKKyAgICB2
b2lkIGdpdmVSZW1haW5pbmdUbyhTdHJpbmdCdWlsZGVyJiByZWNpcGllbnQpCiAgICAgewogICAg
ICAgICByZWNpcGllbnQuYXBwZW5kKG1fY3VycmVudCwgbV9lbmQgLSBtX2N1cnJlbnQpOwogICAg
ICAgICBtX2N1cnJlbnQgPSBtX2VuZDsKQEAgLTMwMCw3ICszMDAsNyBAQCBwdWJsaWM6CiAgICAg
U3RyaW5nIHRha2VSZW1haW5pbmdXaGl0ZXNwYWNlKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
aXNFbXB0eSgpKTsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiB3aGl0ZXNwYWNlOworICAgICAgICBT
dHJpbmdCdWlsZGVyIHdoaXRlc3BhY2U7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIFVDaGFy
IGNjID0gKm1fY3VycmVudCsrOwogICAgICAgICAgICAgaWYgKGlzSFRNTFNwYWNlKGNjKSkKQEAg
LTMxMSw3ICszMTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRvIGluc2VydCBhIHRleHQgbm9k
ZSAoYXMgb3Bwb3NlZCB0byBpbnNlcnRpbmcgYW4gZW1wdHkgdGV4dCBub2RlKS4KICAgICAgICAg
aWYgKHdoaXRlc3BhY2UuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
ICAgICAgICByZXR1cm4gU3RyaW5nOjphZG9wdCh3aGl0ZXNwYWNlKTsKKyAgICAgICAgcmV0dXJu
IHdoaXRlc3BhY2UudG9TdHJpbmcoKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0yNzE4LDcgKzI3
MTgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckFmdGVySGVhCiAKIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5UYWJsZVRleHQoKQogewotICAgIFN0cmluZyBj
aGFyYWN0ZXJzID0gU3RyaW5nOjphZG9wdChtX3BlbmRpbmdUYWJsZUNoYXJhY3RlcnMpOworICAg
IFN0cmluZyBjaGFyYWN0ZXJzID0gbV9wZW5kaW5nVGFibGVDaGFyYWN0ZXJzLnJlbGVhc2VTdHJp
bmcoKTsKICAgICBpZiAoIWlzQWxsV2hpdGVzcGFjZShjaGFyYWN0ZXJzKSkgewogICAgICAgICAv
LyBGSVhNRTogcGFyc2UgZXJyb3IKICAgICAgICAgSFRNTENvbnN0cnVjdGlvblNpdGU6OlJlZGly
ZWN0VG9Gb3N0ZXJQYXJlbnRHdWFyZCByZWRpcmVjdGVyKG1fdHJlZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAkocmV2aXNpb24gOTM4NDgp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQxLDcgKzI0MSw3IEBAIHByaXZhdGU6CiAgICAgSW5zZXJ0aW9uTW9kZSBt
X29yaWdpbmFsSW5zZXJ0aW9uTW9kZTsKIAogICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9z
cGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlvbi5odG1sI3Bl
bmRpbmctdGFibGUtY2hhcmFjdGVyLXRva2VucwotICAgIFZlY3RvcjxVQ2hhcj4gbV9wZW5kaW5n
VGFibGVDaGFyYWN0ZXJzOworICAgIFN0cmluZ0J1aWxkZXIgbV9wZW5kaW5nVGFibGVDaGFyYWN0
ZXJzOwogCiAgICAgLy8gV2UgYWNjZXNzIHBhcnNlciBiZWNhdXNlIEhUTUw1IHNwZWMgcmVxdWly
ZXMgdGhhdCB3ZSBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHRva2VuaXplcgog
ICAgIC8vIGZyb20gd2l0aGluIHBhcnNlciBhY3Rpb25zLiBXZSBhbHNvIG5lZWQgaXQgdG8gdHJh
Y2sgdGhlIGN1cnJlbnQgcG9zaXRpb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVmlld1NvdXJjZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFZpZXdTb3VyY2VQYXJzZXIuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxWaWV3U291cmNlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlUGFyc2VyOjp1
cGRhdGVUb2tlbml6CiAgICAgaWYgKG1fdG9rZW4udHlwZSgpICE9IEhUTUxUb2tlblR5cGVzOjpT
dGFydFRhZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQXRvbWljU3RyaW5nIHRhZ05hbWUobV90
b2tlbi5uYW1lKCkuZGF0YSgpLCBtX3Rva2VuLm5hbWUoKS5zaXplKCkpOworICAgIEF0b21pY1N0
cmluZyB0YWdOYW1lKG1fdG9rZW4ubmFtZSgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsK
ICAgICBtX3Rva2VuaXplci0+dXBkYXRlU3RhdGVGb3IodGFnTmFtZSwgZG9jdW1lbnQoKS0+ZnJh
bWUoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3Iu
Y3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1
ZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMyArNjksMTMgQEAgc3RhdGljIGJvb2wg
aXNSZXF1aXJlZEZvckluamVjdGlvbihVQ2hhcgogCiBzdGF0aWMgYm9vbCBoYXNOYW1lKGNvbnN0
IEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiB7Ci0gICAgcmV0
dXJuIGVxdWFsSWdub3JpbmdOdWxsaXR5KHRva2VuLm5hbWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3Qg
U3RyaW5nJj4obmFtZS5sb2NhbE5hbWUoKSkpOworICAgIHJldHVybiBlcXVhbElnbm9yaW5nTnVs
bGl0eSh0b2tlbi5uYW1lKCkudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCksIHN0YXRpY19jYXN0
PGNvbnN0IFN0cmluZyY+KG5hbWUubG9jYWxOYW1lKCkpKTsKIH0KIAogc3RhdGljIGJvb2wgZmlu
ZEF0dHJpYnV0ZVdpdGhOYW1lKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIHNpemVfdCYgaW5kZXhPZk1hdGNoaW5nQXR0cmlidXRlKQogewogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdG9rZW4uYXR0cmlidXRlcygpLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nTnVsbGl0eSh0b2tlbi5hdHRyaWJ1dGVzKCkuYXQoaSku
bV9uYW1lLCBuYW1lLmxvY2FsTmFtZSgpKSkgeworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ051
bGxpdHkodG9rZW4uYXR0cmlidXRlcygpLmF0KGkpLm1fbmFtZS50b1N0cmluZ1ByZXNlcnZlQ2Fw
YWNpdHkoKSwgbmFtZS5sb2NhbE5hbWUoKSkpIHsKICAgICAgICAgICAgIGluZGV4T2ZNYXRjaGlu
Z0F0dHJpYnV0ZSA9IGk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAt
ODMsMTAgKzgzLDEwIEBAIHN0YXRpYyBib29sIGZpbmRBdHRyaWJ1dGVXaXRoTmFtZShjb25zdCAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGlzTmFtZU9mSW5saW5lRXZlbnRI
YW5kbGVyKGNvbnN0IFZlY3RvcjxVQ2hhciwgMzI+JiBuYW1lKQorc3RhdGljIGJvb2wgaXNOYW1l
T2ZJbmxpbmVFdmVudEhhbmRsZXIoY29uc3QgU3RyaW5nQnVpbGRlciYgbmFtZSkKIHsKICAgICBj
b25zdCBzaXplX3QgbGVuZ3RoT2ZTaG9ydGVzdElubGluZUV2ZW50SGFuZGxlck5hbWUgPSA1OyAv
LyBUbyB3aXQ6IG9uY3V0LgotICAgIGlmIChuYW1lLnNpemUoKSA8IGxlbmd0aE9mU2hvcnRlc3RJ
bmxpbmVFdmVudEhhbmRsZXJOYW1lKQorICAgIGlmIChuYW1lLmxlbmd0aCgpIDwgbGVuZ3RoT2ZT
aG9ydGVzdElubGluZUV2ZW50SGFuZGxlck5hbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXR1cm4gbmFtZVswXSA9PSAnbycgJiYgbmFtZVsxXSA9PSAnbic7CiB9CkBAIC05NywyMSAr
OTcsMjEgQEAgc3RhdGljIGJvb2wgaXNEYW5nZXJvdXNIVFRQRXF1aXYoY29uc3QgUwogICAgIHJl
dHVybiBlcXVhbElnbm9yaW5nQ2FzZShlcXVpdiwgInJlZnJlc2giKSB8fCBlcXVhbElnbm9yaW5n
Q2FzZShlcXVpdiwgInNldC1jb29raWUiKTsKIH0KIAotc3RhdGljIGJvb2wgY29udGFpbnNKYXZh
U2NyaXB0VVJMKGNvbnN0IFZlY3RvcjxVQ2hhciwgMzI+JiB2YWx1ZSkKK3N0YXRpYyBib29sIGNv
bnRhaW5zSmF2YVNjcmlwdFVSTChjb25zdCBTdHJpbmdCdWlsZGVyJiB2YWx1ZSkKIHsKICAgICBz
dGF0aWMgY29uc3QgY2hhciBqYXZhU2NyaXB0U2NoZW1lW10gPSAiamF2YXNjcmlwdDoiOwogICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgbGVuZ3RoT2ZKYXZhU2NyaXB0U2NoZW1lID0gc2l6ZW9mKGph
dmFTY3JpcHRTY2hlbWUpIC0gMTsKIAogICAgIHNpemVfdCBpOwotICAgIGZvciAoaSA9IDA7IGkg
PCB2YWx1ZS5zaXplKCk7ICsraSkgeworICAgIGZvciAoaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGgo
KTsgKytpKSB7CiAgICAgICAgIGlmICghaXNIVE1MU3BhY2UodmFsdWVbaV0pKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKHZhbHVlLnNpemUoKSAtIGkgPCBsZW5ndGhPZkph
dmFTY3JpcHRTY2hlbWUpCisgICAgaWYgKHZhbHVlLmxlbmd0aCgpIC0gaSA8IGxlbmd0aE9mSmF2
YVNjcmlwdFNjaGVtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGVxdWFs
SWdub3JpbmdDYXNlKHZhbHVlLmRhdGEoKSArIGksIGphdmFTY3JpcHRTY2hlbWUsIGxlbmd0aE9m
SmF2YVNjcmlwdFNjaGVtZSk7CisgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLmNo
YXJhY3RlcnMoKSArIGksIGphdmFTY3JpcHRTY2hlbWUsIGxlbmd0aE9mSmF2YVNjcmlwdFNjaGVt
ZSk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgZGVjb2RlVVJMKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBj
b25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQpAQCAtMzIzLDcgKzMyMyw3IEBAIGJvb2wgWFNT
QXVkaXRvcjo6ZmlsdGVyUGFyYW1Ub2tlbihIVE1MVG8KICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmIG5hbWVBdHRyaWJ1dGUgPSB0b2tlbi5h
dHRyaWJ1dGVzKCkuYXQoaW5kZXhPZk5hbWVBdHRyaWJ1dGUpOwotICAgIFN0cmluZyBuYW1lID0g
U3RyaW5nKG5hbWVBdHRyaWJ1dGUubV92YWx1ZS5kYXRhKCksIG5hbWVBdHRyaWJ1dGUubV92YWx1
ZS5zaXplKCkpOworICAgIFN0cmluZyBuYW1lID0gbmFtZUF0dHJpYnV0ZS5tX3ZhbHVlLnRvU3Ry
aW5nUHJlc2VydmVDYXBhY2l0eSgpOwogCiAgICAgaWYgKCFIVE1MUGFyYW1FbGVtZW50Ojppc1VS
TFBhcmFtZXRlcihuYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDIyLDkgKzQyMiw5
IEBAIGJvb2wgWFNTQXVkaXRvcjo6ZXJhc2VBdHRyaWJ1dGVJZkluamVjdGUKICAgICBpZiAoZmlu
ZEF0dHJpYnV0ZVdpdGhOYW1lKHRva2VuLCBhdHRyaWJ1dGVOYW1lLCBpbmRleE9mQXR0cmlidXRl
KSkgewogICAgICAgICBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYgYXR0cmlidXRlID0gdG9r
ZW4uYXR0cmlidXRlcygpLmF0KGluZGV4T2ZBdHRyaWJ1dGUpOwogICAgICAgICBpZiAoaXNDb250
YWluZWRJblJlcXVlc3Qoc25pcHBldEZvckF0dHJpYnV0ZSh0b2tlbiwgYXR0cmlidXRlKSkpIHsK
LSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IHNyY0F0dHIgJiYgaXNTYW1lT3JpZ2lu
UmVzb3VyY2UoU3RyaW5nKGF0dHJpYnV0ZS5tX3ZhbHVlLmRhdGEoKSwgYXR0cmlidXRlLm1fdmFs
dWUuc2l6ZSgpKSkpCisgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBzcmNBdHRyICYm
IGlzU2FtZU9yaWdpblJlc291cmNlKGF0dHJpYnV0ZS5tX3ZhbHVlLnRvU3RyaW5nUHJlc2VydmVD
YXBhY2l0eSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBp
ZiAoYXR0cmlidXRlTmFtZSA9PSBodHRwX2VxdWl2QXR0ciAmJiAhaXNEYW5nZXJvdXNIVFRQRXF1
aXYoU3RyaW5nKGF0dHJpYnV0ZS5tX3ZhbHVlLmRhdGEoKSwgYXR0cmlidXRlLm1fdmFsdWUuc2l6
ZSgpKSkpCisgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBodHRwX2VxdWl2QXR0ciAm
JiAhaXNEYW5nZXJvdXNIVFRQRXF1aXYoYXR0cmlidXRlLm1fdmFsdWUudG9TdHJpbmdQcmVzZXJ2
ZUNhcGFjaXR5KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IHRva2VuLmVyYXNlVmFsdWVPZkF0dHJpYnV0ZShpbmRleE9mQXR0cmlidXRlKTsKICAgICAgICAg
ICAgIGlmICghcmVwbGFjZW1lbnRWYWx1ZS5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlIDx3
dGYvRGVjaW1hbE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yNjEsNyArMjYyLDcgQEAgaW5saW5lIGludCBo
ZXhUb0ludChVQ2hhciBjKQogICAgIHJldHVybiAwOwogfQogCi1ib29sIGRlY29kZVN0cmluZyhj
b25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIFZlY3RvcjxVQ2hhcj4qIG91dHB1
dCkKK2Jvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVu
ZCwgU3RyaW5nQnVpbGRlciogb3V0cHV0KQogewogICAgIHdoaWxlIChzdGFydCA8IGVuZCkgewog
ICAgICAgICBVQ2hhciBjID0gKnN0YXJ0Kys7CkBAIC0zMjEsMTEgKzMyMiwxMSBAQCBib29sIGRl
Y29kZVN0cmluZyhjb25zdCBVQ2hhciogc3RhcnQsIGNvCiAgICAgfQogICAgIGlmIChzdGFydCA+
IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyOwor
ICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVyOwogICAgIGJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkoZW5k
IC0gc3RhcnQpOwogICAgIGlmICghZGVjb2RlU3RyaW5nKHN0YXJ0LCBlbmQsICZidWZmZXIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKm91dHB1dCA9IFN0cmluZyhidWZmZXIuZGF0YSgp
LCBidWZmZXIuc2l6ZSgpKTsgICAgCisgICAgKm91dHB1dCA9IGJ1ZmZlci50b1N0cmluZygpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00NDQsNyArNDQ1LDcgQEAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gYnVpbGRWYWx1ZShjbwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwog
fQogCi1pbmxpbmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFyIGMsIFZlY3RvcjxVQ2hhcj4qIGRzdCkK
K2lubGluZSBib29sIGVzY2FwZUNoYXIoVUNoYXIgYywgU3RyaW5nQnVpbGRlciogZHN0KQogewog
ICAgIHN3aXRjaCAoYykgewogICAgIGNhc2UgJ1xiJzogZHN0LT5hcHBlbmQoIlxcYiIsIDIpOyBi
cmVhazsKQEAgLTQ2MCw3ICs0NjEsNyBAQCBpbmxpbmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFyIGMs
IFZlY3RvcjxVCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIGRvdWJsZVF1b3Rl
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyLCBWZWN0b3I8VUNoYXI+KiBkc3QpCitpbmxpbmUgdm9p
ZCBkb3VibGVRdW90ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgU3RyaW5nQnVpbGRlciogZHN0
KQogewogICAgIGRzdC0+YXBwZW5kKCciJyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0ci5sZW5ndGgoKTsgKytpKSB7CkBAIC01NTYsMTMgKzU1NywxMyBAQCBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBJbnNwZWN0b3JWYWx1CiAKIFN0cmluZyBJbnNwZWN0b3JWYWx1ZTo6dG9K
U09OU3RyaW5nKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAgICBTdHJp
bmdCdWlsZGVyIHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDUxMik7CiAgICAg
d3JpdGVKU09OKCZyZXN1bHQpOwotICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVz
dWx0LnNpemUoKSk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi12b2lkIElu
c3BlY3RvclZhbHVlOjp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAordm9p
ZCBJbnNwZWN0b3JWYWx1ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QK
IHsKICAgICBBU1NFUlQobV90eXBlID09IFR5cGVOdWxsKTsKICAgICBvdXRwdXQtPmFwcGVuZChu
dWxsU3RyaW5nLCA0KTsKQEAgLTYxNiw3ICs2MTcsNyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFs
dWU6OmFzTnVtYmVyKHVuc2lnCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKK3ZvaWQg
SW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29u
c3QKIHsKICAgICBBU1NFUlQodHlwZSgpID09IFR5cGVCb29sZWFuIHx8IHR5cGUoKSA9PSBUeXBl
TnVtYmVyKTsKICAgICBpZiAodHlwZSgpID09IFR5cGVCb29sZWFuKSB7CkBAIC02NTIsNyArNjUz
LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHJpbmc6OmFzU3RyaW5nKFN0cmluZyogbwogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKFZlY3RvcjxVQ2hh
cj4qIG91dHB1dCkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yU3RyaW5nOjp3cml0ZUpTT04oU3RyaW5n
QnVpbGRlciogb3V0cHV0KSBjb25zdAogewogICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZVN0cmlu
Zyk7CiAgICAgZG91YmxlUXVvdGVTdHJpbmcobV9zdHJpbmdWYWx1ZSwgb3V0cHV0KTsKQEAgLTcy
NCw3ICs3MjUsNyBAQCB2b2lkIEluc3BlY3Rvck9iamVjdDo6cmVtb3ZlKGNvbnN0IFN0cmluCiAg
ICAgfQogfQogCi12b2lkIEluc3BlY3Rvck9iamVjdDo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4q
IG91dHB1dCkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yT2JqZWN0Ojp3cml0ZUpTT04oU3RyaW5nQnVp
bGRlciogb3V0cHV0KSBjb25zdAogewogICAgIG91dHB1dC0+YXBwZW5kKCd7Jyk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX29yZGVyLnNpemUoKTsgKytpKSB7CkBAIC03NjEsNyArNzYy
LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQXJyYQogICAgIHJldHVy
biB0aGlzOwogfQogCi12b2lkIEluc3BlY3RvckFycmF5Ojp3cml0ZUpTT04oVmVjdG9yPFVDaGFy
Piogb3V0cHV0KSBjb25zdAordm9pZCBJbnNwZWN0b3JBcnJheTo6d3JpdGVKU09OKFN0cmluZ0J1
aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKICAgICBvdXRwdXQtPmFwcGVuZCgnWycpOwogICAgIGZv
ciAoVmVjdG9yPFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2RhdGEuYmVnaW4oKTsgaXQgIT0gbV9kYXRhLmVuZCgpOyArK2l0KSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCShyZXZpc2lvbiA5Mzg0OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtODcsNyArODcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHBhcnNlSlNPTihjb25zdCBTdHJpbmcmIGpzb24pOwogCiAgICAgU3RyaW5nIHRv
SlNPTlN0cmluZygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVD
aGFyPiogb3V0cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1
aWxkZXIqIG91dHB1dCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBJbnNwZWN0
b3JWYWx1ZShUeXBlIHR5cGUpIDogbV90eXBlKHR5cGUpIHsgfQpAQCAtMTIxLDcgKzEyMSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIodW5zaWduZWQgbG9uZyogb3V0cHV0
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIodW5zaWduZWQgaW50KiBvdXRwdXQp
IGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRw
dXQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0
cHV0KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVl
KGJvb2wgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZUJvb2xlYW4pLCBtX2Jvb2xWYWx1ZSh2
YWx1ZSkgeyB9CkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29s
IGFzU3RyaW5nKFN0cmluZyogb3V0cHV0KSBjb25zdDsgICAgCiAKLSAgICB2aXJ0dWFsIHZvaWQg
d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKSA6IEluc3BlY3Rv
clZhbHVlKFR5cGVTdHJpbmcpLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0KQEAgLTE5OSw3ICsx
OTksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpOwog
Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25z
dDsKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KICAg
ICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KQEAgLTIzMyw3ICsyMzMs
NyBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBnZXQoc2l6ZV90
IGluZGV4KTsKIAotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0
cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91
dHB1dCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yQXJyYXkoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3Bw
CShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFj
Y2Vzc0NvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTExNSwxOSArMTE2LDE5IEBAIFJlc291
cmNlUmVxdWVzdCBjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmwKICAgICBjb25zdCBIVFRQSGVhZGVy
TWFwJiByZXF1ZXN0SGVhZGVyRmllbGRzID0gcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CiAK
ICAgICBpZiAocmVxdWVzdEhlYWRlckZpZWxkcy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIFZlY3Rv
cjxVQ2hhcj4gaGVhZGVyQnVmZmVyOworICAgICAgICBTdHJpbmdCdWlsZGVyIGhlYWRlckJ1ZmZl
cjsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVh
ZGVyRmllbGRzLmJlZ2luKCk7Ci0gICAgICAgIGFwcGVuZChoZWFkZXJCdWZmZXIsIGl0LT5maXJz
dCk7CisgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmZpcnN0KTsKICAgICAgICAgKytp
dDsKIAogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXF1ZXN0
SGVhZGVyRmllbGRzLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcsJyk7CiAgICAgICAgICAgICBoZWFkZXJC
dWZmZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgICAgICBhcHBlbmQoaGVhZGVyQnVmZmVyLCBpdC0+
Zmlyc3QpOworICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+Zmlyc3QpOwogICAg
ICAgICB9CiAKLSAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFj
Y2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycyIsIFN0cmluZzo6YWRvcHQoaGVhZGVyQnVmZmVy
KSk7CisgICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJBY2Nlc3Mt
Q29udHJvbC1SZXF1ZXN0LUhlYWRlcnMiLCBoZWFkZXJCdWZmZXIudG9TdHJpbmcoKSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIHByZWZsaWdodFJlcXVlc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5j
cHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBA
QAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtODM2LDE3ICs4
MzcsMTcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbAogICAgIC8v
IFRoZW4sIGluc2VydCB0aGUgcmVzb3VyY2UKICAgICAKICAgICAvLyBTZXJpYWxpemUgdGhlIGhl
YWRlcnMKLSAgICBWZWN0b3I8VUNoYXI+IHN0cmluZ0J1aWxkZXI7CisgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOwogICAgIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHJlc291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAg
ICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3VyY2UtPnJlc3Bv
bnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0IT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJz
dC5sZW5ndGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknOicpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgo
KSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQpOwogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJ1xuJyk7CiAgICAgfQogICAgIAotICAgIFN0cmlu
ZyBoZWFkZXJzID0gU3RyaW5nOjphZG9wdChzdHJpbmdCdWlsZGVyKTsKKyAgICBTdHJpbmcgaGVh
ZGVycyA9IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICAKICAgICBTUUxpdGVTdGF0ZW1l
bnQgcmVzb3VyY2VTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlUmVzb3Vy
Y2VzICh1cmwsIHN0YXR1c0NvZGUsIHJlc3BvbnNlVVJMLCBoZWFkZXJzLCBkYXRhLCBtaW1lVHlw
ZSwgdGV4dEVuY29kaW5nTmFtZSkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/KSIpOwogICAg
IGlmIChyZXNvdXJjZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgpAQCAtNDI4
LDEzICs0MjksMTMgQEAgdm9pZCBDaHJvbWU6OnNldFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlcwog
ICAgICAgICAgICAgICAgICAgICBGaWxlTGlzdCogZmlsZXMgPSBpbnB1dC0+ZmlsZXMoKTsKICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGlzdFNpemUgPSBmaWxlcy0+bGVuZ3RoKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChsaXN0U2l6ZSA+IDEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFZlY3RvcjxVQ2hhcj4gbmFtZXM7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJp
bmdCdWlsZGVyIG5hbWVzOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kKG5hbWVzLCBmaWxlcy0+aXRlbShpKS0+ZmlsZU5hbWUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGZpbGVzLT5pdGVtKGkpLT5maWxlTmFtZSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSBsaXN0U2l6ZSAtIDEpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZCgnXG4nKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXAgPSBTdHJpbmc6
OmFkb3B0KG5hbWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXAgPSBuYW1lcy50
b1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlsZW5hbWUgYWx3YXlzIGRp
c3BsYXkgYXMgTFRSLgogICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcERpcmVjdGlvbiA9
IExUUjsKICAgICAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudFNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNv
dXJjZS5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNv
dXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMywxNCArMjIzLDE0IEBAIHZvaWQgRXZlbnRT
b3VyY2U6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnMKIAogdm9pZCBFdmVudFNvdXJjZTo6ZGlkUmVj
ZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBhcHBlbmQobV9y
ZWNlaXZlQnVmLCBtX2RlY29kZXItPmRlY29kZShkYXRhLCBsZW5ndGgpKTsKKyAgICBtX3JlY2Vp
dmVCdWYuYXBwZW5kKG1fZGVjb2Rlci0+ZGVjb2RlKGRhdGEsIGxlbmd0aCkpOwogICAgIHBhcnNl
RXZlbnRTdHJlYW0oKTsKIH0KIAogdm9pZCBFdmVudFNvdXJjZTo6ZGlkRmluaXNoTG9hZGluZyh1
bnNpZ25lZCBsb25nLCBkb3VibGUpCiB7Ci0gICAgaWYgKG1fcmVjZWl2ZUJ1Zi5zaXplKCkgPiAw
IHx8IG1fZGF0YS5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGFwcGVuZChtX3JlY2VpdmVCdWYsICJc
blxuIik7CisgICAgaWYgKG1fcmVjZWl2ZUJ1Zi5sZW5ndGgoKSA+IDAgfHwgbV9kYXRhLmxlbmd0
aCgpID4gMCkgeworICAgICAgICBtX3JlY2VpdmVCdWYuYXBwZW5kKCJcblxuIik7CiAgICAgICAg
IHBhcnNlRXZlbnRTdHJlYW0oKTsKICAgICB9CiAgICAgbV9zdGF0ZSA9IENPTk5FQ1RJTkc7CkBA
IC0yNTQsNyArMjU0LDcgQEAgdm9pZCBFdmVudFNvdXJjZTo6ZGlkRmFpbFJlZGlyZWN0Q2hlY2so
KQogdm9pZCBFdmVudFNvdXJjZTo6cGFyc2VFdmVudFN0cmVhbSgpCiB7CiAgICAgdW5zaWduZWQg
aW50IGJ1ZlBvcyA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGJ1ZlNpemUgPSBtX3JlY2VpdmVCdWYu
c2l6ZSgpOworICAgIHVuc2lnbmVkIGludCBidWZTaXplID0gbV9yZWNlaXZlQnVmLmxlbmd0aCgp
OwogICAgIHdoaWxlIChidWZQb3MgPCBidWZTaXplKSB7CiAgICAgICAgIGlmIChtX2Rpc2NhcmRU
cmFpbGluZ05ld2xpbmUpIHsKICAgICAgICAgICAgIGlmIChtX3JlY2VpdmVCdWZbYnVmUG9zXSA9
PSAnXG4nKQpAQCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6OnBhcnNlRXZlbnRT
dHJlYW1MaW5lKHUKIHsKICAgICBpZiAoIWxpbmVMZW5ndGgpIHsKICAgICAgICAgaWYgKCFtX2Rh
dGEuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2RhdGEucmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgbV9kYXRhLnNocmluayhtX2RhdGEubGVuZ3RoKCkgLSAxKTsKICAgICAgICAgICAgIGRp
c3BhdGNoRXZlbnQoY3JlYXRlTWVzc2FnZUV2ZW50KCkpOwogICAgICAgICB9CiAgICAgICAgIGlm
ICghbV9ldmVudE5hbWUuaXNFbXB0eSgpKQpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgRXZlbnRT
b3VyY2U6OnN0b3AoKQogUGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IEV2ZW50U291cmNlOjpjcmVh
dGVNZXNzYWdlRXZlbnQoKQogewogICAgIFJlZlB0cjxNZXNzYWdlRXZlbnQ+IGV2ZW50ID0gTWVz
c2FnZUV2ZW50OjpjcmVhdGUoKTsKLSAgICBldmVudC0+aW5pdE1lc3NhZ2VFdmVudChtX2V2ZW50
TmFtZS5pc0VtcHR5KCkgPyBldmVudE5hbWVzKCkubWVzc2FnZUV2ZW50IDogQXRvbWljU3RyaW5n
KG1fZXZlbnROYW1lKSwgZmFsc2UsIGZhbHNlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShTdHJpbmc6OmFkb3B0KG1fZGF0YSkpLCBtX29yaWdpbiwgbV9sYXN0RXZlbnRJZCwgMCwgMCk7
CisgICAgZXZlbnQtPmluaXRNZXNzYWdlRXZlbnQobV9ldmVudE5hbWUuaXNFbXB0eSgpID8gZXZl
bnROYW1lcygpLm1lc3NhZ2VFdmVudCA6IEF0b21pY1N0cmluZyhtX2V2ZW50TmFtZSksIGZhbHNl
LCBmYWxzZSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUobV9kYXRhLnJlbGVhc2VTdHJp
bmcoKSksIG1fb3JpZ2luLCBtX2xhc3RFdmVudElkLCAwLCAwKTsKICAgICByZXR1cm4gZXZlbnQu
cmVsZWFzZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCShyZXZpc2lv
biA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQu
aCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTExMCwxMyArMTEwLDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKICAg
ICAgICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IG1fbG9hZGVyOwogICAgICAgICBUaW1lcjxF
dmVudFNvdXJjZT4gbV9yZWNvbm5lY3RUaW1lcjsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBtX3Jl
Y2VpdmVCdWY7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgbV9yZWNlaXZlQnVmOwogICAgICAgICBi
b29sIG1fZGlzY2FyZFRyYWlsaW5nTmV3bGluZTsKICAgICAgICAgYm9vbCBtX2ZhaWxTaWxlbnRs
eTsKICAgICAgICAgYm9vbCBtX3JlcXVlc3RJbkZsaWdodDsKIAogICAgICAgICBTdHJpbmcgbV9l
dmVudE5hbWU7Ci0gICAgICAgIFZlY3RvcjxVQ2hhcj4gbV9kYXRhOworICAgICAgICBTdHJpbmdC
dWlsZGVyIG1fZGF0YTsKICAgICAgICAgU3RyaW5nIG1fbGFzdEV2ZW50SWQ7CiAgICAgICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBtX3JlY29ubmVjdERlbGF5OwogICAgICAgICBTdHJpbmcgbV9vcmln
aW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkocmV2aXNpb24g
OTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTYsOSArOTYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2VyaWFsaXpl
ck1hcmt1cEFjY3VtdWxhdG9yKCk7CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0g
ICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYgb3V0
LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFN0
cmluZ0J1aWxkZXImIG91dCwgVGV4dCopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50
KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQq
LCBOYW1lc3BhY2VzKik7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVuZFRhZyhOb2RlKik7CiAK
IHByaXZhdGU6CkBAIC0xMjAsMjcgKzEyMCwyOCBAQCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0
b3I6On5TZXJpYWxpemVyCiB7CiB9CiAKLXZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCogdGV4dCkKK3ZvaWQgU2VyaWFs
aXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4
dCogdGV4dCkKIHsKICAgICBFbGVtZW50KiBwYXJlbnQgPSB0ZXh0LT5wYXJlbnRFbGVtZW50KCk7
CiAgICAgaWYgKHBhcmVudCAmJiAhc2hvdWxkSWdub3JlRWxlbWVudChwYXJlbnQpKQogICAgICAg
ICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChvdXQsIHRleHQpOwogfQogCi12b2lkIFNl
cmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBv
dXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIFNlcmlh
bGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQs
IEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgaWYgKCFz
aG91bGRJZ25vcmVFbGVtZW50KGVsZW1lbnQpKQogICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kRWxlbWVudChvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwogCiAgICAgaWYgKGVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSkgewotICAgICAgICBTdHJpbmcgbWV0
YSA9ICI8bWV0YSBjaGFyc2V0PVwiIiArIG1fZG9jdW1lbnQtPmNoYXJzZXQoKSArICJcIj4iOwot
ICAgICAgICBvdXQuYXBwZW5kKG1ldGEuY2hhcmFjdGVycygpLCBtZXRhLmxlbmd0aCgpKTsKKyAg
ICAgICAgb3V0LmFwcGVuZCgiPG1ldGEgY2hhcnNldD1cIiIpOworICAgICAgICBvdXQuYXBwZW5k
KG1fZG9jdW1lbnQtPmNoYXJzZXQoKSk7CisgICAgICAgIG91dC5hcHBlbmQoIlwiPiIpOwogICAg
IH0KIAogICAgIC8vIEZJWE1FOiBGb3Igb2JqZWN0IChwbHVnaW5zKSB0YWdzIGFuZCB2aWRlbyB0
YWcgd2UgY291bGQgcmVwbGFjZSB0aGVtIGJ5IGFuIGltYWdlIG9mIHRoZWlyIGN1cnJlbnQgY29u
dGVudHMuCiB9CiAKLXZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0
b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNw
YWNlcyogbmFtZXNwYWNlcykKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwg
TmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBpZiAoIWVsZW1lbnQtPmlzRnJhbWVPd25l
ckVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9T
ZWN1cml0eU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1
cml0eU9yaWdpbi5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9T
ZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOTUsMTggKzM5NiwxOCBAQCBTdHJp
bmcgU2VjdXJpdHlPcmlnaW46OnRvU3RyaW5nKCkgY29uc3QKICAgICAgICAgcmV0dXJuICJmaWxl
Oi8vIjsKICAgICB9CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Byb3RvY29sLmxlbmd0aCgpICsgbV9ob3N0Lmxlbmd0aCgp
ICsgMTApOwotICAgIGFwcGVuZChyZXN1bHQsIG1fcHJvdG9jb2wpOwotICAgIGFwcGVuZChyZXN1
bHQsICI6Ly8iKTsKLSAgICBhcHBlbmQocmVzdWx0LCBtX2hvc3QpOworICAgIFN0cmluZ0J1aWxk
ZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobV9wcm90b2NvbC5sZW5ndGgo
KSArIG1faG9zdC5sZW5ndGgoKSArIDEwKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fcHJvdG9jb2wp
OworICAgIHJlc3VsdC5hcHBlbmQoIjovLyIpOworICAgIHJlc3VsdC5hcHBlbmQobV9ob3N0KTsK
IAogICAgIGlmIChtX3BvcnQpIHsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgIjoiKTsKLSAgICAg
ICAgYXBwZW5kKHJlc3VsdCwgU3RyaW5nOjpudW1iZXIobV9wb3J0KSk7CisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIjoiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmc6Om51bWJlcihtX3Bv
cnQpKTsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4g
U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJp
bmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
OTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODAsOCArODEsOSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2hvdWxkRXNjYXBlVUNoYXIoVUNoCiBTdHJpbmcgZW5jb2RlRm9yRmlsZU5hbWUo
Y29uc3QgU3RyaW5nJiBpbnB1dFN0cikKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dFN0
ci5sZW5ndGgoKTsKLSAgICBWZWN0b3I8VUNoYXIsIDUxMj4gYnVmZmVyKGxlbmd0aCAqIDMgKyAx
KTsKLSAgICBVQ2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7CisgICAgU3RyaW5nQnVpbGRlciBidWZm
ZXI7CisgICAgYnVmZmVyLnJlc2l6ZShsZW5ndGggKiAzICsgMSk7CisgICAgVUNoYXIqIHAgPSBi
dWZmZXIuY2hhcmFjdGVycygpOwogCiAgICAgY29uc3QgVUNoYXIqIHN0ciA9IGlucHV0U3RyLmNo
YXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogc3RyRW5kID0gc3RyICsgbGVuZ3RoOwpAQCAt
OTUsOSArOTcsMTAgQEAgU3RyaW5nIGVuY29kZUZvckZpbGVOYW1lKGNvbnN0IFN0cmluZyYgaQog
ICAgICAgICAgICAgKnArKyA9IGM7CiAgICAgfQogCi0gICAgQVNTRVJUKHAgLSBidWZmZXIuZGF0
YSgpIDw9IHN0YXRpY19jYXN0PGludD4oYnVmZmVyLnNpemUoKSkpOworICAgIEFTU0VSVChwIC0g
YnVmZmVyLmNoYXJhY3RlcnMoKSA8PSBzdGF0aWNfY2FzdDxpbnQ+KGJ1ZmZlci5sZW5ndGgoKSkp
OwogCi0gICAgcmV0dXJuIFN0cmluZyhidWZmZXIuZGF0YSgpLCBwIC0gYnVmZmVyLmRhdGEoKSk7
CisgICAgYnVmZmVyLnNocmluayhwIC0gYnVmZmVyLmNoYXJhY3RlcnMoKSk7CisgICAgcmV0dXJu
IGJ1ZmZlci50b1N0cmluZygpOwogfQogCiAjaWYgIVBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0tVUkwuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0tVUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogI2lmIFVTRShJQ1VfVU5J
Q09ERSkKQEAgLTg4OSwyMiArODkwLDIyIEBAIFN0cmluZyBLVVJMOjpkZXByZWNhdGVkU3RyaW5n
KCkgY29uc3QKICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuIG1fc3RyaW5nOwog
Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAK
LSAgICBhcHBlbmQocmVzdWx0LCBwcm90b2NvbCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKHByb3Rv
Y29sKCkpOwogICAgIHJlc3VsdC5hcHBlbmQoJzonKTsKIAotICAgIFZlY3RvcjxVQ2hhcj4gYXV0
aG9yaXR5OworICAgIFN0cmluZ0J1aWxkZXIgYXV0aG9yaXR5OwogCiAgICAgaWYgKG1faG9zdEVu
ZCAhPSBtX3Bhc3N3b3JkRW5kKSB7CiAgICAgICAgIGlmIChtX3VzZXJFbmQgIT0gbV91c2VyU3Rh
cnQpIHsKLSAgICAgICAgICAgIGFwcGVuZChhdXRob3JpdHksIHVzZXIoKSk7CisgICAgICAgICAg
ICBhdXRob3JpdHkuYXBwZW5kKHVzZXIoKSk7CiAgICAgICAgICAgICBhdXRob3JpdHkuYXBwZW5k
KCdAJyk7CiAgICAgICAgIH0KLSAgICAgICAgYXBwZW5kKGF1dGhvcml0eSwgaG9zdCgpKTsKKyAg
ICAgICAgYXV0aG9yaXR5LmFwcGVuZChob3N0KCkpOwogICAgICAgICBpZiAoaGFzUG9ydCgpKSB7
CiAgICAgICAgICAgICBhdXRob3JpdHkuYXBwZW5kKCc6Jyk7Ci0gICAgICAgICAgICBhcHBlbmQo
YXV0aG9yaXR5LCBTdHJpbmc6Om51bWJlcihwb3J0KCkpKTsKKyAgICAgICAgICAgIGF1dGhvcml0
eS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocG9ydCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTkxNywxOSArOTE4LDE5IEBAIFN0cmluZyBLVVJMOjpkZXByZWNhdGVkU3RyaW5nKCkgY29uc3QK
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwogICAgIH0KIAotICAgIGFwcGVuZChyZXN1bHQs
IHBhdGgoKSk7CisgICAgcmVzdWx0LmFwcGVuZChwYXRoKCkpOwogCiAgICAgaWYgKG1fcGF0aEVu
ZCAhPSBtX3F1ZXJ5RW5kKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJz8nKTsKLSAgICAgICAg
YXBwZW5kKHJlc3VsdCwgcXVlcnkoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocXVlcnkoKSk7
CiAgICAgfQogCiAgICAgaWYgKG1fZnJhZ21lbnRFbmQgIT0gbV9xdWVyeUVuZCkgewogICAgICAg
ICByZXN1bHQuYXBwZW5kKCcjJyk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIGZyYWdtZW50SWRl
bnRpZmllcigpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChmcmFnbWVudElkZW50aWZpZXIoKSk7
CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMo
Y29uc3QgU3RyaW5nJiBzdHIpCkBAIC05MzksNyArOTQwLDcgQEAgU3RyaW5nIGRlY29kZVVSTEVz
Y2FwZVNlcXVlbmNlcyhjb25zdCBTdAogCiBTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2Vz
KGNvbnN0IFN0cmluZyYgc3RyLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewotICAg
IFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogCiAgICAg
Q2hhckJ1ZmZlciBidWZmZXI7CiAKQEAgLTk3OCwxMyArOTc5LDEzIEBAIFN0cmluZyBkZWNvZGVV
UkxFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3QKIAogICAgICAgICAvLyBCdWlsZCB1cCB0aGUgc3Ry
aW5nIHdpdGggd2hhdCB3ZSBqdXN0IHNraXBwZWQgYW5kIHdoYXQgd2UganVzdCBkZWNvZGVkLgog
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCkgKyBkZWNvZGVkUG9zaXRpb24s
IGVuY29kZWRSdW5Qb3NpdGlvbiAtIGRlY29kZWRQb3NpdGlvbik7Ci0gICAgICAgIHJlc3VsdC5h
cHBlbmQoZGVjb2RlZC5jaGFyYWN0ZXJzKCksIGRlY29kZWQubGVuZ3RoKCkpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKGRlY29kZWQpOwogICAgICAgICBkZWNvZGVkUG9zaXRpb24gPSBlbmNvZGVk
UnVuRW5kOwogICAgIH0KIAogICAgIHJlc3VsdC5hcHBlbmQoc3RyLmNoYXJhY3RlcnMoKSArIGRl
Y29kZWRQb3NpdGlvbiwgbGVuZ3RoIC0gZGVjb2RlZFBvc2l0aW9uKTsKIAotICAgIHJldHVybiBT
dHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQog
CiAvLyBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGJvdW5kcyBjaGVjay4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiTGlua0hhc2guaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCkBAIC03OSw5ICs4MCw5IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBjb250YWluc0NvbG9uU2xhc2hTbGEKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMoVmVjdG9yPFVD
aGFyLCA1MTI+JiBzdHJpbmcpCitzdGF0aWMgaW5saW5lIHZvaWQgc3F1ZWV6ZU91dE51bGxDaGFy
YWN0ZXJzKFN0cmluZ0J1aWxkZXImIHN0cmluZykKIHsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0cmlu
Zy5zaXplKCk7CisgICAgc2l6ZV90IHNpemUgPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgc2l6ZV90
IGkgPSAwOwogICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgaWYgKCFz
dHJpbmdbaV0pCkBAIC05NSwxNCArOTYsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNxdWVlemVP
dXROdWxsQ2hhcmFjdAogICAgICAgICAgICAgc3RyaW5nW2orK10gPSBjaGFyYWN0ZXI7CiAgICAg
fQogICAgIEFTU0VSVChqIDwgc2l6ZSk7Ci0gICAgc3RyaW5nLnNocmluayhqKTsKKyAgICBzdHJp
bmcucmVzaXplKGopOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhblNsYXNoRG90RG90U2xhc2hlcyhW
ZWN0b3I8VUNoYXIsIDUxMj4mIHBhdGgsIHNpemVfdCBmaXJzdFNsYXNoKQorc3RhdGljIHZvaWQg
Y2xlYW5TbGFzaERvdERvdFNsYXNoZXMoU3RyaW5nQnVpbGRlciYgcGF0aCwgc2l6ZV90IGZpcnN0
U2xhc2gpCiB7CiAgICAgc2l6ZV90IHNsYXNoID0gZmlyc3RTbGFzaDsKICAgICBkbyB7Ci0gICAg
ICAgIHNpemVfdCBwcmV2aW91c1NsYXNoID0gc2xhc2ggPyByZXZlcnNlRmluZChwYXRoLmRhdGEo
KSwgcGF0aC5zaXplKCksICcvJywgc2xhc2ggLSAxKSA6IG5vdEZvdW5kOworICAgICAgICBzaXpl
X3QgcHJldmlvdXNTbGFzaCA9IHNsYXNoID8gcmV2ZXJzZUZpbmQocGF0aC5jaGFyYWN0ZXJzKCks
IHBhdGgubGVuZ3RoKCksICcvJywgc2xhc2ggLSAxKSA6IG5vdEZvdW5kOwogICAgICAgICAvLyBE
b24ndCByZW1vdmUgdGhlIGhvc3QsIGkuZS4gaHR0cDovL2Zvby5vcmcvLi4vZm9vLmh0bWwKICAg
ICAgICAgaWYgKHByZXZpb3VzU2xhc2ggPT0gbm90Rm91bmQgfHwgKHByZXZpb3VzU2xhc2ggPiAz
ICYmIHBhdGhbcHJldmlvdXNTbGFzaCAtIDJdID09ICc6JyAmJiBwYXRoW3ByZXZpb3VzU2xhc2gg
LSAxXSA9PSAnLycpKSB7CiAgICAgICAgICAgICBwYXRoW3NsYXNoXSA9IDA7CkBAIC0xMTMsMTUg
KzExNCwxNSBAQCBzdGF0aWMgdm9pZCBjbGVhblNsYXNoRG90RG90U2xhc2hlcyhWZWN0CiAgICAg
ICAgICAgICAgICAgcGF0aFtpXSA9IDA7CiAgICAgICAgIH0KICAgICAgICAgc2xhc2ggKz0gMzsK
LSAgICB9IHdoaWxlICgoc2xhc2ggPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwg
cGF0aC5zaXplKCksIHNsYXNoKSkgIT0gbm90Rm91bmQpOworICAgIH0gd2hpbGUgKChzbGFzaCA9
IGZpbmRTbGFzaERvdERvdFNsYXNoKHBhdGguY2hhcmFjdGVycygpLCBwYXRoLmxlbmd0aCgpLCBz
bGFzaCkpICE9IG5vdEZvdW5kKTsKICAgICBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMocGF0aCk7
CiB9CiAKLXN0YXRpYyB2b2lkIG1lcmdlRG91YmxlU2xhc2hlcyhWZWN0b3I8VUNoYXIsIDUxMj4m
IHBhdGgsIHNpemVfdCBmaXJzdFNsYXNoKQorc3RhdGljIHZvaWQgbWVyZ2VEb3VibGVTbGFzaGVz
KFN0cmluZ0J1aWxkZXImIHBhdGgsIHNpemVfdCBmaXJzdFNsYXNoKQogewotICAgIHNpemVfdCBy
ZWZQb3MgPSBmaW5kKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJyMnKTsKKyAgICBzaXplX3Qg
cmVmUG9zID0gZmluZChwYXRoLmNoYXJhY3RlcnMoKSwgcGF0aC5sZW5ndGgoKSwgJyMnKTsKICAg
ICBpZiAoIXJlZlBvcyB8fCByZWZQb3MgPT0gbm90Rm91bmQpCi0gICAgICAgIHJlZlBvcyA9IHBh
dGguc2l6ZSgpOworICAgICAgICByZWZQb3MgPSBwYXRoLmxlbmd0aCgpOwogCiAgICAgc2l6ZV90
IHNsYXNoID0gZmlyc3RTbGFzaDsKICAgICB3aGlsZSAoc2xhc2ggPCByZWZQb3MpIHsKQEAgLTEy
OSwzNyArMTMwLDM3IEBAIHN0YXRpYyB2b2lkIG1lcmdlRG91YmxlU2xhc2hlcyhWZWN0b3I8VUMK
ICAgICAgICAgICAgIHBhdGhbc2xhc2grK10gPSAwOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBzbGFzaCArPSAyOwotICAgICAgICBpZiAoKHNsYXNoID0gZmluZFNsYXNoU2xhc2gocGF0aC5k
YXRhKCksIHBhdGguc2l6ZSgpLCBzbGFzaCkpID09IG5vdEZvdW5kKQorICAgICAgICBpZiAoKHNs
YXNoID0gZmluZFNsYXNoU2xhc2gocGF0aC5jaGFyYWN0ZXJzKCksIHBhdGgubGVuZ3RoKCksIHNs
YXNoKSkgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgc3F1ZWV6
ZU91dE51bGxDaGFyYWN0ZXJzKHBhdGgpOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhblNsYXNoRG90
U2xhc2hlcyhWZWN0b3I8VUNoYXIsIDUxMj4mIHBhdGgsIHNpemVfdCBmaXJzdFNsYXNoKQorc3Rh
dGljIHZvaWQgY2xlYW5TbGFzaERvdFNsYXNoZXMoU3RyaW5nQnVpbGRlciYgcGF0aCwgc2l6ZV90
IGZpcnN0U2xhc2gpCiB7CiAgICAgc2l6ZV90IHNsYXNoID0gZmlyc3RTbGFzaDsKICAgICBkbyB7
CiAgICAgICAgIHBhdGhbc2xhc2hdID0gMDsKICAgICAgICAgcGF0aFtzbGFzaCArIDFdID0gMDsK
ICAgICAgICAgc2xhc2ggKz0gMjsKLSAgICB9IHdoaWxlICgoc2xhc2ggPSBmaW5kU2xhc2hEb3RT
bGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIHNsYXNoKSkgIT0gbm90Rm91bmQpOworICAg
IH0gd2hpbGUgKChzbGFzaCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguY2hhcmFjdGVycygpLCBw
YXRoLmxlbmd0aCgpLCBzbGFzaCkpICE9IG5vdEZvdW5kKTsKICAgICBzcXVlZXplT3V0TnVsbENo
YXJhY3RlcnMocGF0aCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhblBhdGgoVmVjdG9y
PFVDaGFyLCA1MTI+JiBwYXRoKQorc3RhdGljIGlubGluZSB2b2lkIGNsZWFuUGF0aChTdHJpbmdC
dWlsZGVyJiBwYXRoKQogewogICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IGRvIHRoaXMgaW4gdGhl
IHF1ZXJ5IG9yIGFuY2hvciBwYXJ0IG9mIHRoZSBVUkwuCi0gICAgc2l6ZV90IGZpcnN0U2xhc2gg
PSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIDApOworICAg
IHNpemVfdCBmaXJzdFNsYXNoID0gZmluZFNsYXNoRG90RG90U2xhc2gocGF0aC5jaGFyYWN0ZXJz
KCksIHBhdGgubGVuZ3RoKCksIDApOwogICAgIGlmIChmaXJzdFNsYXNoICE9IG5vdEZvdW5kKQog
ICAgICAgICBjbGVhblNsYXNoRG90RG90U2xhc2hlcyhwYXRoLCBmaXJzdFNsYXNoKTsKIAogICAg
IC8vIEZJWE1FOiBTaG91bGQgbm90IGRvIHRoaXMgaW4gdGhlIHF1ZXJ5IHBhcnQuCi0gICAgZmly
c3RTbGFzaCA9IGZpbmRTbGFzaFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgMCk7Cisg
ICAgZmlyc3RTbGFzaCA9IGZpbmRTbGFzaFNsYXNoKHBhdGguY2hhcmFjdGVycygpLCBwYXRoLmxl
bmd0aCgpLCAwKTsKICAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKICAgICAgICAgbWVy
Z2VEb3VibGVTbGFzaGVzKHBhdGgsIGZpcnN0U2xhc2gpOwogCiAgICAgLy8gRklYTUU6IFNob3Vs
ZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yIHBhcnQuCi0gICAgZmlyc3RTbGFz
aCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgMCk7CisgICAg
Zmlyc3RTbGFzaCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguY2hhcmFjdGVycygpLCBwYXRoLmxl
bmd0aCgpLCAwKTsKICAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKICAgICAgICAgY2xl
YW5TbGFzaERvdFNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7CiB9CkBAIC0yMDUsNyArMjA2LDcg
QEAgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFyKiB1cgogICAgIHJldHVybiB2
aXNpdGVkTGlua0hhc2hJbmxpbmUodXJsLCBsZW5ndGgpOwogfQogCi1zdGF0aWMgQUxXQVlTX0lO
TElORSB2b2lkIHZpc2l0ZWRVUkxJbmxpbmUoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiBhdHRyaWJ1dGVVUkwsIFZlY3RvcjxVQ2hhciwgNTEyPiYgYnVmZmVyKQorc3RhdGlj
IEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdGVkVVJMSW5saW5lKGNvbnN0IEtVUkwmIGJhc2UsIGNv
bnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMLCBTdHJpbmdCdWlsZGVyJiBidWZmZXIpCiB7
CiAgICAgaWYgKGF0dHJpYnV0ZVVSTC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjI3
LDcgKzIyOCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRlZFVSTElubGkKICAg
ICBib29sIGhhc0NvbG9uU2xhc2hTbGFzaCA9IGNvbnRhaW5zQ29sb25TbGFzaFNsYXNoKGNoYXJh
Y3RlcnMsIGxlbmd0aCk7CiAKICAgICBpZiAoaGFzQ29sb25TbGFzaFNsYXNoICYmICFuZWVkc1Ry
YWlsaW5nU2xhc2goY2hhcmFjdGVycywgbGVuZ3RoKSkgewotICAgICAgICBidWZmZXIuYXBwZW5k
KGF0dHJpYnV0ZVVSTC5jaGFyYWN0ZXJzKCksIGF0dHJpYnV0ZVVSTC5sZW5ndGgoKSk7CisgICAg
ICAgIGJ1ZmZlci5hcHBlbmQoYXR0cmlidXRlVVJMKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMjQxLDcgKzI0Miw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRlZFVS
TElubGkKICAgICB9CiAKICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgYnVmZmVyLmFwcGVuZChi
YXNlLnN0cmluZygpLmNoYXJhY3RlcnMoKSwgYmFzZS5zdHJpbmcoKS5sZW5ndGgoKSk7CisgICAg
ICAgIGJ1ZmZlci5hcHBlbmQoYmFzZS5zdHJpbmcoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHN3
aXRjaCAoY2hhcmFjdGVyc1swXSkgewogICAgICAgICAgICAgY2FzZSAnLyc6CkBAIC0yNTcsNyAr
MjU4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdGVkVVJMSW5saQogICAgIH0K
ICAgICBidWZmZXIuYXBwZW5kKGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgY2xlYW5QYXRoKGJ1
ZmZlcik7Ci0gICAgaWYgKG5lZWRzVHJhaWxpbmdTbGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIu
c2l6ZSgpKSkgeworICAgIGlmIChuZWVkc1RyYWlsaW5nU2xhc2goYnVmZmVyLmNoYXJhY3RlcnMo
KSwgYnVmZmVyLmxlbmd0aCgpKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmNvcnJl
Y3QgZm9yIFVSTHMgdGhhdCBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yOyB0aGUgIi8iIG5lZWRzIHRv
IGdvIGF0IHRoZQogICAgICAgICAvLyBlbmQgb2YgdGhlIHBhdGgsICpiZWZvcmUqIHRoZSBxdWVy
eSBvciBhbmNob3IuCiAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJy8nKTsKQEAgLTI2NiwxOSArMjY3
LDIwIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRlZFVSTElubGkKICAgICByZXR1
cm47CiB9CiAKLXZvaWQgdmlzaXRlZFVSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZVVSTCwgVmVjdG9yPFVDaGFyLCA1MTI+JiBidWZmZXIpCit2b2lkIHZp
c2l0ZWRVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVV
UkwsIFN0cmluZ0J1aWxkZXImIGJ1ZmZlcikKIHsKICAgICByZXR1cm4gdmlzaXRlZFVSTElubGlu
ZShiYXNlLCBhdHRyaWJ1dGVVUkwsIGJ1ZmZlcik7CiB9CiAKIExpbmtIYXNoIHZpc2l0ZWRMaW5r
SGFzaChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkK
IHsKLSAgICBWZWN0b3I8VUNoYXIsIDUxMj4gdXJsOworICAgIFN0cmluZ0J1aWxkZXIgdXJsOwor
ICAgIHVybC5yZXNlcnZlQ2FwYWNpdHkoNTEyKTsKICAgICB2aXNpdGVkVVJMSW5saW5lKGJhc2Us
IGF0dHJpYnV0ZVVSTCwgdXJsKTsKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICByZXR1cm4gdmlzaXRlZExpbmtIYXNoSW5saW5lKHVybC5kYXRhKCksIHVy
bC5zaXplKCkpOworICAgIHJldHVybiB2aXNpdGVkTGlua0hhc2hJbmxpbmUodXJsLmNoYXJhY3Rl
cnMoKSwgdXJsLmxlbmd0aCgpKTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3
IEBAIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXMKIC8vIFJlc29sdmVz
IHRoZSBwb3RlbnRpYWxseSByZWxhdGl2ZSBVUkwgImF0dHJpYnV0ZVVSTCIgcmVsYXRpdmUgdG8g
dGhlIGdpdmVuCiAvLyBiYXNlIFVSTCwgYW5kIHJldHVybnMgdGhlIGhhc2ggb2YgdGhlIHN0cmlu
ZyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdmlzaXRlZC4KIC8vIEl0IHdpbGwgcmV0dXJuIGFuIGVt
cHR5IFZlY3RvciBpbiBjYXNlIG9mIGVycm9ycy4KLXZvaWQgdmlzaXRlZFVSTChjb25zdCBLVVJM
JiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCwgVmVjdG9yPFVDaGFyLCA1
MTI+Jik7Cit2b2lkIHZpc2l0ZWRVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdHRyaWJ1dGVVUkwsIFN0cmluZ0J1aWxkZXImKTsKIAogCiB9ICAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSwxNiArMTk1LDE2IEBAIFN0cmluZyBDb2xv
cjo6c2VyaWFsaXplZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
CiAgICAgfQogCi0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMjgpOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3Vs
dC5yZXNlcnZlQ2FwYWNpdHkoMjgpOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgcmdiYVBhcmVuKTsK
LSAgICBhcHBlbmROdW1iZXIocmVzdWx0LCByZWQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29t
bWFTcGFjZSk7Ci0gICAgYXBwZW5kTnVtYmVyKHJlc3VsdCwgZ3JlZW4oKSk7Ci0gICAgYXBwZW5k
KHJlc3VsdCwgY29tbWFTcGFjZSk7Ci0gICAgYXBwZW5kTnVtYmVyKHJlc3VsdCwgYmx1ZSgpKTsK
LSAgICBhcHBlbmQocmVzdWx0LCBjb21tYVNwYWNlKTsKKyAgICByZXN1bHQuYXBwZW5kKHJnYmFQ
YXJlbik7CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihyZWQoKSk7CisgICAgcmVzdWx0LmFwcGVu
ZChjb21tYVNwYWNlKTsKKyAgICByZXN1bHQuYXBwZW5kTnVtYmVyKGdyZWVuKCkpOworICAgIHJl
c3VsdC5hcHBlbmQoY29tbWFTcGFjZSk7CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihibHVlKCkp
OworICAgIHJlc3VsdC5hcHBlbmQoY29tbWFTcGFjZSk7CiAKICAgICBpZiAoIWFscGhhKCkpCiAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJzAnKTsKQEAgLTIxNSw3ICsyMTUsNyBAQCBTdHJpbmcgQ29s
b3I6OnNlcmlhbGl6ZWQoKSBjb25zdAogICAgIH0KIAogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsK
LSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQudG9T
dHJpbmcoKTsKIH0KIAogU3RyaW5nIENvbG9yOjpuYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsu
Y3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRh
T2JqZWN0R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUg
Im1hcmt1cC5oIgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTExMCwxNCArMTExLDE0IEBAIHZvaWQgRGF0YU9iamVjdEd0azo6
c2V0VVJMKGNvbnN0IEtVUkwmIHUKICAgICBpZiAoYWN0dWFsTGFiZWwuaXNFbXB0eSgpKQogICAg
ICAgICBhY3R1YWxMYWJlbCA9IHVybDsKIAotICAgIFZlY3RvcjxVQ2hhcj4gbWFya3VwOwotICAg
IGFwcGVuZChtYXJrdXAsICI8YSBocmVmPVwiIik7Ci0gICAgYXBwZW5kKG1hcmt1cCwgdXJsLnN0
cmluZygpKTsKLSAgICBhcHBlbmQobWFya3VwLCAiXCI+Iik7CisgICAgU3RyaW5nQnVpbGRlciBt
YXJrdXA7CisgICAgbWFya3VwLmFwcGVuZCgiPGEgaHJlZj1cIiIpOworICAgIG1hcmt1cC5hcHBl
bmQodXJsLnN0cmluZygpKTsKKyAgICBtYXJrdXAuYXBwZW5kKCJcIj4iKTsKICAgICBHT3duUHRy
PGdjaGFyPiBlc2NhcGVkKGdfbWFya3VwX2VzY2FwZV90ZXh0KGFjdHVhbExhYmVsLnV0ZjgoKS5k
YXRhKCksIC0xKSk7Ci0gICAgYXBwZW5kKG1hcmt1cCwgU3RyaW5nOjpmcm9tVVRGOChlc2NhcGVk
LmdldCgpKSk7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIjwvYT4iKTsKLSAgICBzZXRNYXJrdXAoU3Ry
aW5nOjphZG9wdChtYXJrdXApKTsKKyAgICBtYXJrdXAuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgo
ZXNjYXBlZC5nZXQoKSkpOworICAgIG1hcmt1cC5hcHBlbmQoIjwvYT4iKTsKKyAgICBzZXRNYXJr
dXAobWFya3VwLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIERhdGFPYmplY3RHdGs6OmNsZWFyVGV4
dCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJz
ZXJzLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0hUVFBQYXJzZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi9EYXRl
TWF0aC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwpAQCAtMTk2LDcgKzE5Nyw3IEBAIFN0cmlu
ZyBmaWxlbmFtZUZyb21IVFRQQ29udGVudERpc3Bvc2l0aW8KIAogU3RyaW5nIGV4dHJhY3RNSU1F
VHlwZUZyb21NZWRpYVR5cGUoY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUpCiB7Ci0gICAgVmVjdG9y
PFVDaGFyLCA2ND4gbWltZVR5cGU7CisgICAgU3RyaW5nQnVpbGRlciBtaW1lVHlwZTsKICAgICB1
bnNpZ25lZCBsZW5ndGggPSBtZWRpYVR5cGUubGVuZ3RoKCk7CiAgICAgbWltZVR5cGUucmVzZXJ2
ZUNhcGFjaXR5KGxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CkBAIC0yMjQsOSArMjI1LDkgQEAgU3RyaW5nIGV4dHJhY3RNSU1FVHlwZUZyb21NZWRp
YVR5cGUoY29ucwogICAgICAgICBtaW1lVHlwZS5hcHBlbmQoYyk7CiAgICAgfQogCi0gICAgaWYg
KG1pbWVUeXBlLnNpemUoKSA9PSBsZW5ndGgpCisgICAgaWYgKG1pbWVUeXBlLmxlbmd0aCgpID09
IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIG1lZGlhVHlwZTsKLSAgICByZXR1cm4gU3RyaW5nKG1p
bWVUeXBlLmRhdGEoKSwgbWltZVR5cGUuc2l6ZSgpKTsKKyAgICByZXR1cm4gbWltZVR5cGUudG9T
dHJpbmcoKTsKIH0KIAogU3RyaW5nIGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb25zdCBT
dHJpbmcmIG1lZGlhVHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENvZGVjSUNVLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRDb2RlY0lDVS5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+
CiAKIHVzaW5nIHN0ZDo6bWluOwpAQCAtMzA4LDcgKzMwOSw3IEBAIFN0cmluZyBUZXh0Q29kZWNJ
Q1U6OmRlY29kZShjb25zdCBjaGFyKiAKICAgICAKICAgICBFcnJvckNhbGxiYWNrU2V0dGVyIGNh
bGxiYWNrU2V0dGVyKG1fY29udmVydGVySUNVLCBzdG9wT25FcnJvcik7CiAKLSAgICBWZWN0b3I8
VUNoYXI+IHJlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKIAogICAgIFVDaGFyIGJ1
ZmZlcltDb252ZXJzaW9uQnVmZmVyU2l6ZV07CiAgICAgVUNoYXIqIGJ1ZmZlckxpbWl0ID0gYnVm
ZmVyICsgQ29udmVyc2lvbkJ1ZmZlclNpemU7CkBAIC0zMzAsNyArMzMxLDcgQEAgU3RyaW5nIFRl
eHRDb2RlY0lDVTo6ZGVjb2RlKGNvbnN0IGNoYXIqIAogICAgICAgICBzYXdFcnJvciA9IHRydWU7
CiAgICAgfQogCi0gICAgU3RyaW5nIHJlc3VsdFN0cmluZyA9IFN0cmluZzo6YWRvcHQocmVzdWx0
KTsKKyAgICBTdHJpbmcgcmVzdWx0U3RyaW5nID0gcmVzdWx0LnRvU3RyaW5nKCk7CiAKICAgICAv
LyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTQ+CiAgICAgLy8g
U2ltcGxpZmllZCBDaGluZXNlIHBhZ2VzIHVzZSB0aGUgY29kZSBBM0EwIHRvIG1lYW4gImZ1bGwt
d2lkdGggc3BhY2UiLCBidXQgSUNVIGRlY29kZXMgaXQgYXMgVStFNUU1LgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwCShyZXZpc2lvbiA5Mzg0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDEyICs4NSwxMCBAQCBUZXh0U3RyZWFtJiBUZXh0U3RyZWFtOjpvcGVyYXRv
cjw8KGRvdWJsCiBUZXh0U3RyZWFtJiBUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0IGNoYXIq
IHN0cmluZykKIHsKICAgICBzaXplX3Qgc3RyaW5nTGVuZ3RoID0gc3RybGVuKHN0cmluZyk7Ci0g
ICAgc2l6ZV90IHRleHRMZW5ndGggPSBtX3RleHQuc2l6ZSgpOworICAgIHNpemVfdCB0ZXh0TGVu
Z3RoID0gbV90ZXh0Lmxlbmd0aCgpOwogICAgIGlmIChzdHJpbmdMZW5ndGggPiBudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKSAtIHRleHRMZW5ndGgpCiAgICAgICAgIENSQVNIKCk7Ci0gICAg
bV90ZXh0Lmdyb3codGV4dExlbmd0aCArIHN0cmluZ0xlbmd0aCk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzdHJpbmdMZW5ndGg7ICsraSkKLSAgICAgICAgbV90ZXh0W3RleHRMZW5ndGgg
KyBpXSA9IHN0cmluZ1tpXTsKKyAgICBtX3RleHQuYXBwZW5kKHN0cmluZywgc3RyaW5nTGVuZ3Ro
KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEwMywxMyArMTAxLDEzIEBAIFRleHRTdHJl
YW0mIFRleHRTdHJlYW06Om9wZXJhdG9yPDwoY29uc3QKIAogVGV4dFN0cmVhbSYgVGV4dFN0cmVh
bTo6b3BlcmF0b3I8PChjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhcHBlbmQobV90ZXh0
LCBzdHJpbmcpOworICAgIG1fdGV4dC5hcHBlbmQoc3RyaW5nKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKIFN0cmluZyBUZXh0U3RyZWFtOjpyZWxlYXNlKCkKIHsKLSAgICByZXR1cm4gU3RyaW5n
OjphZG9wdChtX3RleHQpOworICAgIHJldHVybiBtX3RleHQucmVsZWFzZVN0cmluZygpOwogfQog
CiAjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dFN0cmVhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dFN0cmVhbS5oCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsy
Nyw3IEBACiAjZGVmaW5lIFRleHRTdHJlYW1faAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHJlbGVhc2UoKTsKIAog
cHJpdmF0ZToKLSAgICBWZWN0b3I8VUNoYXI+IG1fdGV4dDsKKyAgICBTdHJpbmdCdWlsZGVyIG1f
dGV4dDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5j
cHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJl
YW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiU3VicmVz
b3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogLy8gV2UgdXNlIC0yIGhlcmUgYmVj
YXVzZSBzb21lIHBsdWdpbnMgbGlrZSB0byByZXR1cm4gLTEgdG8gaW5kaWNhdGUgZXJyb3IKQEAg
LTEzOCwyMSArMTM5LDIxIEBAIHZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSgpCiAgICAg
bG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1fcmVzb3VyY2VSZXNwb25zZS5leHBl
Y3RlZENvbnRlbnRMZW5ndGgoKTsKIAogICAgIGlmIChtX3Jlc291cmNlUmVzcG9uc2UuaXNIVFRQ
KCkpIHsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAgICAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIFN0cmluZyBzZXBhcmF0b3IoIjogIik7
CiAKICAgICAgICAgU3RyaW5nIHN0YXR1c0xpbmUgPSAiSFRUUCAiICsgU3RyaW5nOjpudW1iZXIo
bV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpICsgIiBPS1xuIjsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoc3RhdHVzTGluZS5jaGFyYWN0ZXJzKCksIHN0YXR1c0xpbmUu
bGVuZ3RoKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzdGF0dXNMaW5lKTsKIAog
ICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jlc291cmNlUmVz
cG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC5sZW5ndGgoKSk7Ci0g
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0b3IuY2hhcmFjdGVycygpLCBz
ZXBhcmF0b3IubGVuZ3RoKCkpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQt
PnNlY29uZC5jaGFyYWN0ZXJzKCksIGl0LT5zZWNvbmQubGVuZ3RoKCkpOworICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHNlcGFyYXRvcik7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChp
dC0+c2Vjb25kKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAg
ICAgICB9CiAKLSAgICAgICAgbV9oZWFkZXJzID0gU3RyaW5nOjphZG9wdChzdHJpbmdCdWlsZGVy
KS51dGY4KCk7CisgICAgICAgIG1faGVhZGVycyA9IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51
dGY4KCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgaXMgZW5jb2RlZCAobW9zdCBsaWtl
bHkgY29tcHJlc3NlZCksIHRoZW4gZG9uJ3Qgc2VuZCBpdHMgbGVuZ3RoIHRvIHRoZSBwbHVnaW4s
CiAgICAgICAgIC8vIHdoaWNoIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZGVjb2RlZCBsZW5n
dGgsIG5vdCB5ZXQga25vd24gYXQgdGhlIG1vbWVudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgs
OCArMTY4LDggQEAgc3RhdGljIHZvaWQgYWRqdXN0Q2hhcmFjdGVyc0FuZExlbmd0aEZvcgogICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgaHlwaGVuU3RyaW5nID0gc3R5bGUtPmh5cGhlblN0cmluZygp
OwogICAgIGNoYXJhY3RlcnNXaXRoSHlwaGVuLnJlc2VydmVDYXBhY2l0eShsZW5ndGggKyBoeXBo
ZW5TdHJpbmcubGVuZ3RoKCkpOwogICAgIGNoYXJhY3RlcnNXaXRoSHlwaGVuLmFwcGVuZChjaGFy
YWN0ZXJzLCBsZW5ndGgpOwotICAgIGNoYXJhY3RlcnNXaXRoSHlwaGVuLmFwcGVuZChoeXBoZW5T
dHJpbmcuY2hhcmFjdGVycygpLCBoeXBoZW5TdHJpbmcubGVuZ3RoKCkpOwotICAgIGNoYXJhY3Rl
cnMgPSBjaGFyYWN0ZXJzV2l0aEh5cGhlbi5kYXRhKCk7CisgICAgY2hhcmFjdGVyc1dpdGhIeXBo
ZW4uYXBwZW5kKGh5cGhlblN0cmluZyk7CisgICAgY2hhcmFjdGVycyA9IGNoYXJhY3RlcnNXaXRo
SHlwaGVuLmNoYXJhY3RlcnMoKTsKICAgICBsZW5ndGggKz0gaHlwaGVuU3RyaW5nLmxlbmd0aCgp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJl
dmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIklubGluZUJveC5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIgLy8gc28gdGV4dFJlbmRlcmVyKCkgY2FuIGJlIGlu
bGluZQogI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzQsNyArMzUsMTEgQEAgY2xhc3Mg
RG9jdW1lbnRNYXJrZXI7CiAKIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNOb1RydW5jYXRpb24gPSBV
U0hSVF9NQVg7CiBjb25zdCB1bnNpZ25lZCBzaG9ydCBjRnVsbFRydW5jYXRpb24gPSBVU0hSVF9N
QVggLSAxOwotdHlwZWRlZiBWZWN0b3I8VUNoYXIsIDI1Nj4gQnVmZmVyRm9yQXBwZW5kaW5nSHlw
aGVuOworCitjbGFzcyBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4gOiBwdWJsaWMgU3RyaW5nQnVp
bGRlciB7CitwdWJsaWM6CisgICAgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKCkgeyByZXNlcnZl
Q2FwYWNpdHkoMjU2KTsgfQorfTsKIAogLy8gSGVscGVyIGZ1bmN0aW9ucyBzaGFyZWQgYnkgSW5s
aW5lVGV4dEJveCAvIFNWR1Jvb3RJbmxpbmVCb3gKIHZvaWQgdXBkYXRlR3JhcGhpY3NDb250ZXh0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIGNvbnN0IENvbG9yJiBz
dHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBDb2xvclNwYWNlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkocmV2aXNpb24gOTM4
NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCkBAIC0zNzAsMTcgKzM3MSwxNyBAQCBTdHJpbmcgUmVuZGVyTGlzdEl0ZW06Om1hcmtl
clRleHRXaXRoU3VmCiAKICAgICBjb25zdCBTdHJpbmcmIG1hcmtlclRleHQgPSBtX21hcmtlci0+
dGV4dCgpOwogICAgIGNvbnN0IFN0cmluZyBtYXJrZXJTdWZmaXggPSBtX21hcmtlci0+c3VmZml4
KCk7Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHRWZWN0b3I7CisgICAgU3RyaW5nQnVpbGRlciBy
ZXN1bHQ7CiAKICAgICBpZiAoIW1fbWFya2VyLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpCi0gICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQobWFya2VyU3VmZml4LmNoYXJhY3Rl
cnMoKSwgbWFya2VyU3VmZml4Lmxlbmd0aCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtYXJr
ZXJTdWZmaXgpOwogCi0gICAgcmVzdWx0VmVjdG9yLmFwcGVuZChtYXJrZXJUZXh0LmNoYXJhY3Rl
cnMoKSwgbWFya2VyVGV4dC5sZW5ndGgoKSk7CisgICAgcmVzdWx0LmFwcGVuZChtYXJrZXJUZXh0
KTsKIAogICAgIGlmIChtX21hcmtlci0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KQotICAgICAgICByZXN1bHRWZWN0b3IuYXBwZW5kKG1hcmtlclN1ZmZpeC5jaGFyYWN0ZXJzKCks
IG1hcmtlclN1ZmZpeC5sZW5ndGgoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobWFya2VyU3Vm
Zml4KTsKIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdFZlY3Rvcik7CisgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiB2b2lkIFJlbmRlckxpc3RJdGVtOjpleHBsaWNp
dFZhbHVlQ2hhbmdlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CkBAIC0xMjMsMTIgKzEyNCwxMiBAQCBzdGF0aWMgU3RyaW5nIHRvU3ltYm9s
aWMoaW50IG51bWJlciwgY29uCiAgICAgLS1udW1iZXJTaGFkb3c7CiAKICAgICAvLyBUaGUgYXN0
ZXJpc2tzIGxpc3Qtc3R5bGUtdHlwZSBpcyB0aGUgd29yc3QgY2FzZTsgd2Ugc2hvdyB8bnVtYmVy
U2hhZG93fCBhc3Rlcmlza3MuCi0gICAgVmVjdG9yPFVDaGFyPiBsZXR0ZXJzOworICAgIFN0cmlu
Z0J1aWxkZXIgbGV0dGVyczsKICAgICBsZXR0ZXJzLmFwcGVuZChzeW1ib2xzW251bWJlclNoYWRv
dyAlIHN5bWJvbHNTaXplXSk7CiAgICAgdW5zaWduZWQgbnVtU3ltYm9scyA9IG51bWJlclNoYWRv
dyAvIHN5bWJvbHNTaXplOwogICAgIHdoaWxlIChudW1TeW1ib2xzLS0pCiAgICAgICAgIGxldHRl
cnMuYXBwZW5kKHN5bWJvbHNbbnVtYmVyU2hhZG93ICUgc3ltYm9sc1NpemVdKTsKLSAgICByZXR1
cm4gU3RyaW5nOjphZG9wdChsZXR0ZXJzKTsKKyAgICByZXR1cm4gbGV0dGVycy50b1N0cmluZygp
OwogfQogCiBzdGF0aWMgU3RyaW5nIHRvQWxwaGFiZXRpYyhpbnQgbnVtYmVyLCBjb25zdCBVQ2hh
ciogYWxwaGFiZXQsIHVuc2lnbmVkIGFscGhhYmV0U2l6ZSkKQEAgLTEyNzQsMTMgKzEyNzUsMTMg
QEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgICAgICAvLyBU
ZXh0IGlzIG5vdCBhcmJpdHJhcnkuIFdlIGNhbiBqdWRnZSB3aGV0aGVyIGl0J3MgUlRMIGZyb20g
dGhlIGZpcnN0IGNoYXJhY3RlciwKICAgICAgICAgLy8gYW5kIHdlIG9ubHkgbmVlZCB0byBoYW5k
bGUgdGhlIGRpcmVjdGlvbiBSaWdodFRvTGVmdCBmb3Igbm93LgogICAgICAgICBib29sIHRleHRO
ZWVkc1JldmVyc2luZyA9IGRpcmVjdGlvbihtX3RleHRbMF0pID09IFJpZ2h0VG9MZWZ0OwotICAg
ICAgICBWZWN0b3I8VUNoYXI+IHJldmVyc2VkVGV4dDsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBy
ZXZlcnNlZFRleHQ7CiAgICAgICAgIGlmICh0ZXh0TmVlZHNSZXZlcnNpbmcpIHsKICAgICAgICAg
ICAgIGludCBsZW5ndGggPSBtX3RleHQubGVuZ3RoKCk7CiAgICAgICAgICAgICByZXZlcnNlZFRl
eHQuZ3JvdyhsZW5ndGgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKICAgICAgICAgICAgICAgICByZXZlcnNlZFRleHRbbGVuZ3RoIC0gaSAtIDFdID0gbV90
ZXh0W2ldOwotICAgICAgICAgICAgdGV4dFJ1bi5zZXRUZXh0KHJldmVyc2VkVGV4dC5kYXRhKCks
IGxlbmd0aCk7CisgICAgICAgICAgICB0ZXh0UnVuLnNldFRleHQocmV2ZXJzZWRUZXh0LmNoYXJh
Y3RlcnMoKSwgbGVuZ3RoKTsKICAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IFVDaGFyIHN1ZmZp
eCA9IGxpc3RNYXJrZXJTdWZmaXgodHlwZSwgbV9saXN0SXRlbS0+dmFsdWUoKSk7CkBAIC0xNTUy
LDE4ICsxNTUzLDE4IEBAIFN0cmluZyBSZW5kZXJMaXN0TWFya2VyOjpzdWZmaXgoKSBjb25zdAog
ICAgIEVMaXN0U3R5bGVUeXBlIHR5cGUgPSBzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCk7CiAgICAg
Y29uc3QgVUNoYXIgc3VmZml4ID0gbGlzdE1hcmtlclN1ZmZpeCh0eXBlLCBtX2xpc3RJdGVtLT52
YWx1ZSgpKTsKIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0VmVjdG9yOwotICAgIHJlc3VsdFZl
Y3Rvci5hcHBlbmQoc3VmZml4KTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1
bHQuYXBwZW5kKHN1ZmZpeCk7CiAKICAgICAvLyBJZiB0aGUgc3VmZml4IGlzIG5vdCAnICcsIGFu
IGV4dHJhIHNwYWNlIGlzIG5lZWRlZAogICAgIGlmIChzdWZmaXggIT0gJyAnKSB7CiAgICAgICAg
IGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICByZXN1
bHRWZWN0b3IuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdFZlY3Rvci5wcmVwZW5kKCcgJyk7CisgICAg
ICAgICAgICByZXN1bHQucHJlcGVuZCgnICcpOwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmc6
OmFkb3B0KHJlc3VsdFZlY3Rvcik7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQog
CiBib29sIFJlbmRlckxpc3RNYXJrZXI6OmlzSW5zaWRlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDkzODQ4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAgc3RhdGljIGJvb2wgaXNFbXB0eU9yVW5zdHls
ZWRBcHBsZVN0eWxlUwogCiBTdHJpbmcgcXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKGNvbnN0
IFN0cmluZyYgcykKIHsKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAgICBTdHJpbmdCdWls
ZGVyIHJlc3VsdDsKICAgICByZXN1bHQuYXBwZW5kKCciJyk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSAhPSBzLmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgVUNoYXIgYyA9IHNbaV07CkBA
IC0yMjIsNyArMjIyLDcgQEAgU3RyaW5nIHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyhjb25z
dAogICAgICAgICB9CiAgICAgfQogICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKLSAgICByZXR1cm4g
U3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0K
IAogdm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdChUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2Vk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTEZlbmNlZC5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TWF0aE1MT3BlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCkBAIC02
NCwxMiArNjUsMTIgQEAgdm9pZCBSZW5kZXJNYXRoTUxGZW5jZWQ6OnVwZGF0ZUZyb21FbGVtZQog
ICAgIAogICAgIEF0b21pY1N0cmluZyBzZXBhcmF0b3JzID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KGZlbmNlZCktPmdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6c2VwYXJhdG9yc0F0dHIpOwogICAg
IGlmICghc2VwYXJhdG9ycy5pc051bGwoKSkgewotICAgICAgICBWZWN0b3I8VUNoYXI+IGNoYXJh
Y3RlcnM7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgY2hhcmFjdGVyczsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzZXBhcmF0b3JzLmxlbmd0aCgpOyBpKyspIHsKICAgICAg
ICAgICAgIGlmICghaXNTcGFjZU9yTmV3bGluZShzZXBhcmF0b3JzW2ldKSkKICAgICAgICAgICAg
ICAgICBjaGFyYWN0ZXJzLmFwcGVuZChzZXBhcmF0b3JzW2ldKTsKICAgICAgICAgfQotICAgICAg
ICBtX3NlcGFyYXRvcnMgPSAhY2hhcmFjdGVycy5zaXplKCkgPyAwIDogU3RyaW5nSW1wbDo6Y3Jl
YXRlKGNoYXJhY3RlcnMuZGF0YSgpICwgY2hhcmFjdGVycy5zaXplKCkpOworICAgICAgICBtX3Nl
cGFyYXRvcnMgPSAhY2hhcmFjdGVycy5sZW5ndGgoKSA/IDAgOiBjaGFyYWN0ZXJzLnRvU3RyaW5n
KCkuaW1wbCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRoZSBzZXBhcmF0b3IgZGVmYXVs
dHMgdG8gYSBzaW5nbGUgY29tbWEuCiAgICAgICAgIG1fc2VwYXJhdG9ycyA9IFN0cmluZ0ltcGw6
OmNyZWF0ZSgiLCIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29k
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJD
b2RpbmcuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
TGV2ZWxEQkNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lu
Y2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogLy8gTGV2ZWxEQiBzdG9yZXMga2V5L3ZhbHVlIHBh
aXJzLiBLZXlzIGFuZCB2YWx1ZXMgYXJlIHN0cmluZ3Mgb2YgYnl0ZXMsIG5vcm1hbGx5IG9mIHR5
cGUgVmVjdG9yPGNoYXI+LgogLy8KQEAgLTI2NCwxNiArMjY1LDE3IEBAIFN0cmluZyBkZWNvZGVT
dHJpbmcoY29uc3QgY2hhciogcCwgY29uc3QKICAgICBBU1NFUlQoISgoZW5kIC0gcCkgJSAyKSk7
CiAKICAgICBzaXplX3QgbGVuID0gKGVuZCAtIHApIC8gMjsKLSAgICBWZWN0b3I8VUNoYXI+IHZl
Y3RvcihsZW4pOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5ncm93KGxl
bik7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgIHVu
c2lnbmVkIGNoYXIgaGkgPSAqcCsrOwogICAgICAgICB1bnNpZ25lZCBjaGFyIGxvID0gKnArKzsK
IAotICAgICAgICB2ZWN0b3JbaV0gPSAoaGkgPDwgOCkgfCBsbzsKKyAgICAgICAgcmVzdWx0W2ld
ID0gKGhpIDw8IDgpIHwgbG87CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQodmVj
dG9yKTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFZlY3RvcjxjaGFyPiBl
bmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGNvbnN0IFN0cmluZyYgcykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzQsNyArODc0LDcg
QEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYQogICAgICAgICByZXR1
cm4gIiI7CiAgICAgfQogCi0gICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZv
ciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc3BvbnNlLmh0dHBIZWFk
ZXJGaWVsZHMoKS5iZWdpbigpOyBpdCE9IGVuZDsgKytpdCkgewpAQCAtODkwLDE1ICs4OTAsMTUg
QEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYQogICAgICAgICBpZiAo
IW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJX
aGl0ZWxpc3QoaXQtPmZpcnN0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC5sZW5n
dGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CiAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCcgJyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVy
cygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
aXQtPnNlY29uZCk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdccicpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5n
OjphZG9wdChzdHJpbmdCdWlsZGVyKTsKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOwogfQogCiBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNl
L1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiAr
MzgsNyBAQAogI2luY2x1ZGUgIlhQYXRoVXRpbC5oIgogI2luY2x1ZGUgIlhQYXRoVmFsdWUuaCIK
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFhQYXRoIHsKQEAgLTMx
OCwyNiArMzE5LDI2IEBAIFZhbHVlIEZ1blBvc2l0aW9uOjpldmFsdWF0ZSgpIGNvbnN0CiBWYWx1
ZSBGdW5JZDo6ZXZhbHVhdGUoKSBjb25zdAogewogICAgIFZhbHVlIGEgPSBhcmcoMCktPmV2YWx1
YXRlKCk7Ci0gICAgVmVjdG9yPFVDaGFyPiBpZExpc3Q7IC8vIEEgd2hpdGVzcGFjZS1zZXBhcmF0
ZWQgbGlzdCBvZiBJRHMKKyAgICBTdHJpbmdCdWlsZGVyIGlkTGlzdDsgLy8gQSB3aGl0ZXNwYWNl
LXNlcGFyYXRlZCBsaXN0IG9mIElEcwogCiAgICAgaWYgKGEuaXNOb2RlU2V0KCkpIHsKICAgICAg
ICAgY29uc3QgTm9kZVNldCYgbm9kZXMgPSBhLnRvTm9kZVNldCgpOwogICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBTdHJpbmcg
c3RyID0gc3RyaW5nVmFsdWUobm9kZXNbaV0pOwotICAgICAgICAgICAgaWRMaXN0LmFwcGVuZChz
dHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkpOworICAgICAgICAgICAgaWRMaXN0LmFwcGVu
ZChzdHIpOwogICAgICAgICAgICAgaWRMaXN0LmFwcGVuZCgnICcpOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKICAgICAgICAgU3RyaW5nIHN0ciA9IGEudG9TdHJpbmcoKTsKLSAgICAgICAgaWRM
aXN0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkpOworICAgICAgICBpZExp
c3QuYXBwZW5kKHN0cik7CiAgICAgfQogICAgIAogICAgIFRyZWVTY29wZSogY29udGV4dFNjb3Bl
ID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlLT50cmVlU2NvcGUoKTsKICAgICBOb2RlU2V0IHJl
c3VsdDsKICAgICBIYXNoU2V0PE5vZGUqPiByZXN1bHRTZXQ7CiAKLSAgICBzaXplX3Qgc3RhcnRQ
b3MgPSAwOwotICAgIHNpemVfdCBsZW5ndGggPSBpZExpc3Quc2l6ZSgpOworICAgIHVuc2lnbmVk
IHN0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBpZExpc3QubGVuZ3RoKCk7CiAg
ICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgd2hpbGUgKHN0YXJ0UG9zIDwgbGVuZ3RoICYmIGlz
V2hpdGVzcGFjZShpZExpc3Rbc3RhcnRQb3NdKSkKICAgICAgICAgICAgICsrc3RhcnRQb3M7CkBA
IC00MzYsMTUgKzQzNywxNiBAQCBWYWx1ZSBGdW5TdHJpbmc6OmV2YWx1YXRlKCkgY29uc3QKIAog
VmFsdWUgRnVuQ29uY2F0OjpldmFsdWF0ZSgpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFVDaGFyLCAx
MDI0PiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2Vy
dmVDYXBhY2l0eSgxMDI0KTsKIAogICAgIHVuc2lnbmVkIGNvdW50ID0gYXJnQ291bnQoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBTdHJpbmcg
c3RyKGFyZyhpKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KHN0cik7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQu
c2l6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFZhbHVlIEZ1blN0
YXJ0c1dpdGg6OmV2YWx1YXRlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0
aFV0aWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3Bw
CShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaWYgRU5BQkxFKFhQQVRIKQogCiAjaW5j
bHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFhQYXRoIHsKQEAgLTUxLDE3ICs1
MiwxNyBAQCBTdHJpbmcgc3RyaW5nVmFsdWUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIHJldHVy
biBub2RlLT5ub2RlVmFsdWUoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmIChp
c1Jvb3REb21Ob2RlKG5vZGUpIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9O
T0RFKSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgICAgICAg
ICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc2Vy
dmVDYXBhY2l0eSgxMDI0KTsKIAogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IG5vZGUt
PmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobm9kZSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBub2RlVmFsdWUgPSBuLT5ub2RlVmFsdWUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobm9kZVZhbHVlLmNoYXJhY3RlcnMoKSwgbm9k
ZVZhbHVlLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
bm9kZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogICAgICAgICAgICAgfQogICAgIH0KICAg
ICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAko
cmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhz
bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsOSArMTY4LDkgQEAgc3RhdGljIGlubGluZSB2
b2lkIHNldFhTTFRMb2FkQ2FsbEJhY2soeAogICAgIGdsb2JhbENhY2hlZFJlc291cmNlTG9hZGVy
ID0gY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVUb1ZlY3Rvcih2
b2lkKiBjb250ZXh0LCBjb25zdCBjaGFyKiBidWZmZXIsIGludCBsZW4pCitzdGF0aWMgaW50IHdy
aXRlVG9TdHJpbmdCdWlsZGVyKHZvaWQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50
IGxlbikKIHsKLSAgICBWZWN0b3I8VUNoYXI+JiByZXN1bHRPdXRwdXQgPSAqc3RhdGljX2Nhc3Q8
VmVjdG9yPFVDaGFyPio+KGNvbnRleHQpOworICAgIFN0cmluZ0J1aWxkZXImIHJlc3VsdE91dHB1
dCA9ICpzdGF0aWNfY2FzdDxTdHJpbmdCdWlsZGVyKj4oY29udGV4dCk7CiAKICAgICBpZiAoIWxl
bikKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTcsOSArMTk3LDkgQEAgc3RhdGljIGJvb2wgc2F2
ZVJlc3VsdFRvU3RyaW5nKHhtbERvY1B0cgogICAgIGlmICghb3V0cHV0QnVmKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdFZlY3RvcjsKLSAgICBvdXRw
dXRCdWYtPmNvbnRleHQgPSAmcmVzdWx0VmVjdG9yOwotICAgIG91dHB1dEJ1Zi0+d3JpdGVjYWxs
YmFjayA9IHdyaXRlVG9WZWN0b3I7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHRCdWlsZGVyOwor
ICAgIG91dHB1dEJ1Zi0+Y29udGV4dCA9ICZyZXN1bHRCdWlsZGVyOworICAgIG91dHB1dEJ1Zi0+
d3JpdGVjYWxsYmFjayA9IHdyaXRlVG9TdHJpbmdCdWlsZGVyOwogCiAgICAgaW50IHJldHZhbCA9
IHhzbHRTYXZlUmVzdWx0VG8ob3V0cHV0QnVmLCByZXN1bHREb2MsIHNoZWV0KTsKICAgICB4bWxP
dXRwdXRCdWZmZXJDbG9zZShvdXRwdXRCdWYpOwpAQCAtMjA3LDEwICsyMDcsMTAgQEAgc3RhdGlj
IGJvb2wgc2F2ZVJlc3VsdFRvU3RyaW5nKHhtbERvY1B0cgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAvLyBXb3JrYXJvdW5kIGZvciA8aHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDk1NjY4PjogbGlieHNsdCBhcHBlbmRzIGFuIGV4dHJhIGxpbmUgZmVlZCB0
byB0aGUgcmVzdWx0LgotICAgIGlmIChyZXN1bHRWZWN0b3Iuc2l6ZSgpID4gMCAmJiByZXN1bHRW
ZWN0b3JbcmVzdWx0VmVjdG9yLnNpemUoKSAtIDFdID09ICdcbicpCi0gICAgICAgIHJlc3VsdFZl
Y3Rvci5yZW1vdmVMYXN0KCk7CisgICAgaWYgKHJlc3VsdEJ1aWxkZXIubGVuZ3RoKCkgPiAwICYm
IHJlc3VsdEJ1aWxkZXJbcmVzdWx0QnVpbGRlci5sZW5ndGgoKSAtIDFdID09ICdcbicpCisgICAg
ICAgIHJlc3VsdEJ1aWxkZXIuc2hyaW5rKHJlc3VsdEJ1aWxkZXIubGVuZ3RoKCkgLSAxKTsKIAot
ICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZzo6YWRvcHQocmVzdWx0VmVjdG9yKTsKKyAgICByZXN1
bHRTdHJpbmcgPSByZXN1bHRCdWlsZGVyLnRvU3RyaW5nKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFy
c2VySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiA5Mzg0
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2Vy
SW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVm
IENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHNfaAogI2RlZmluZSBDaGFyYWN0
ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzX2gKIAotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzYsMTkgKzM2LDE5IEBAIGlubGluZSBib29sIGlzSGV4RGlnaXQoVUNoYXIg
Y2MpCiAgICAgcmV0dXJuIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKSB8fCAoY2MgPj0gJ2EnICYm
IGNjIDw9ICdmJykgfHwgKGNjID49ICdBJyAmJiBjYyA8PSAnRicpOwogfQogCi1pbmxpbmUgdm9p
ZCB1bmNvbnN1bWVDaGFyYWN0ZXJzKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBjb25zdCBWZWN0
b3I8VUNoYXIsIDEwPiYgY29uc3VtZWRDaGFyYWN0ZXJzKQoraW5saW5lIHZvaWQgdW5jb25zdW1l
Q2hhcmFjdGVycyhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nQnVpbGRlciYg
Y29uc3VtZWRDaGFyYWN0ZXJzKQogewotICAgIGlmIChjb25zdW1lZENoYXJhY3RlcnMuc2l6ZSgp
ID09IDEpCisgICAgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5ndGgoKSA9PSAxKQogICAgICAg
ICBzb3VyY2UucHVzaChjb25zdW1lZENoYXJhY3RlcnNbMF0pOwotICAgIGVsc2UgaWYgKGNvbnN1
bWVkQ2hhcmFjdGVycy5zaXplKCkgPT0gMikgeworICAgIGVsc2UgaWYgKGNvbnN1bWVkQ2hhcmFj
dGVycy5sZW5ndGgoKSA9PSAyKSB7CiAgICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFj
dGVyc1swXSk7CiAgICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1sxXSk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIHNvdXJjZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmco
Y29uc3VtZWRDaGFyYWN0ZXJzLmRhdGEoKSwgY29uc3VtZWRDaGFyYWN0ZXJzLnNpemUoKSkpKTsK
KyAgICAgICAgc291cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5nKGNvbnN1bWVkQ2hhcmFjdGVy
cy50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
UGFyc2VyRnVuY3Rpb25zPgotYm9vbCBjb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZENoYXJhY3RlciwgYm9v
bCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIp
Citib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2Us
IFN0cmluZ0J1aWxkZXImIGRlY29kZWRDaGFyYWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3Rl
cnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQogewogICAgIEFTU0VSVCghYWRk
aXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0g
JyInIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICdcJycgfHwgYWRkaXRpb25hbEFs
bG93ZWRDaGFyYWN0ZXIgPT0gJz4nKTsKICAgICBBU1NFUlQoIW5vdEVub3VnaENoYXJhY3RlcnMp
OwpAQCAtNjUsNyArNjUsNyBAQCBib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVu
dGVkCiAgICAgfTsKICAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSA9IEluaXRpYWw7CiAgICAg
VUNoYXIzMiByZXN1bHQgPSAwOwotICAgIFZlY3RvcjxVQ2hhciwgMTA+IGNvbnN1bWVkQ2hhcmFj
dGVyczsKKyAgICBTdHJpbmdCdWlsZGVyIGNvbnN1bWVkQ2hhcmFjdGVyczsKICAgICAKICAgICB3
aGlsZSAoIXNvdXJjZS5pc0VtcHR5KCkpIHsKICAgICAgICAgVUNoYXIgY2MgPSAqc291cmNlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuQmFzZS5oCShyZXZp
c2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJOYW1lZE5vZGVN
YXAuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZm5kZWYgTkRFQlVH
CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTQ4LDggKzQ5LDggQEAgcHVibGljOgogCiAgICAgYm9v
bCBtX2hhc1B1YmxpY0lkZW50aWZpZXI7CiAgICAgYm9vbCBtX2hhc1N5c3RlbUlkZW50aWZpZXI7
Ci0gICAgV1RGOjpWZWN0b3I8VUNoYXI+IG1fcHVibGljSWRlbnRpZmllcjsKLSAgICBXVEY6OlZl
Y3RvcjxVQ2hhcj4gbV9zeXN0ZW1JZGVudGlmaWVyOworICAgIFN0cmluZ0J1aWxkZXIgbV9wdWJs
aWNJZGVudGlmaWVyOworICAgIFN0cmluZ0J1aWxkZXIgbV9zeXN0ZW1JZGVudGlmaWVyOwogfTsK
IAogY2xhc3MgQXR0cmlidXRlQmFzZSB7CkBAIC02Miw4ICs2Myw4IEBAIHB1YmxpYzoKIAogICAg
IFJhbmdlIG1fbmFtZVJhbmdlOwogICAgIFJhbmdlIG1fdmFsdWVSYW5nZTsKLSAgICBXVEY6OlZl
Y3RvcjxVQ2hhciwgMzI+IG1fbmFtZTsKLSAgICBXVEY6OlZlY3RvcjxVQ2hhciwgMzI+IG1fdmFs
dWU7CisgICAgU3RyaW5nQnVpbGRlciBtX25hbWU7CisgICAgU3RyaW5nQnVpbGRlciBtX3ZhbHVl
OwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZVNldCwgdHlwZW5hbWUgRG9jdHlwZURhdGFU
eXBlID0gRG9jdHlwZURhdGFCYXNlLCB0eXBlbmFtZSBBdHRyaWJ1dGVUeXBlID0gQXR0cmlidXRl
QmFzZT4KQEAgLTc1LDEwICs3NiwxMyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBBdHRyaWJ1dGVU
eXBlIEF0dHJpYnV0ZTsKICAgICB0eXBlZGVmIERvY3R5cGVEYXRhVHlwZSBEb2N0eXBlRGF0YTsK
IAotICAgIHR5cGVkZWYgV1RGOjpWZWN0b3I8QXR0cmlidXRlLCAxMD4gQXR0cmlidXRlTGlzdDsK
LSAgICB0eXBlZGVmIFdURjo6VmVjdG9yPFVDaGFyLCAxMDI0PiBEYXRhVmVjdG9yOworICAgIHR5
cGVkZWYgVmVjdG9yPEF0dHJpYnV0ZSwgMTA+IEF0dHJpYnV0ZUxpc3Q7CiAKLSAgICBNYXJrdXBU
b2tlbkJhc2UoKSB7IGNsZWFyKCk7IH0KKyAgICBNYXJrdXBUb2tlbkJhc2UoKQorICAgIHsKKyAg
ICAgICAgY2xlYXIoKTsKKyAgICAgICAgbV9kYXRhLnJlc2VydmVDYXBhY2l0eSgxMDI0KTsKKyAg
ICB9CiAgICAgdmlydHVhbCB+TWFya3VwVG9rZW5CYXNlKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgY2xlYXIoKQpAQCAtMjM4LDcgKzI0Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFT
U0VSVCghdmFsdWUuaXNFbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlU2V0
OjpTdGFydFRhZyB8fCBtX3R5cGUgPT0gVHlwZVNldDo6RW5kVGFnKTsKLSAgICAgICAgbV9hdHRy
aWJ1dGVzW2ldLm1fdmFsdWUuYXBwZW5kKHZhbHVlLmNoYXJhY3RlcnMoKSwgdmFsdWUubGVuZ3Ro
KCkpOworICAgICAgICBtX2F0dHJpYnV0ZXNbaV0ubV92YWx1ZS5hcHBlbmQodmFsdWUpOwogICAg
IH0KIAogICAgIHR5cGVuYW1lIFR5cGU6OlR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQpAQCAtMjczLDI3ICsyNzcsMjcgQEAgcHVibGljOgogICAgICAgICBtX2F0dHJpYnV0ZXNb
aV0ubV92YWx1ZS5jbGVhcigpOwogICAgIH0KIAotICAgIGNvbnN0IERhdGFWZWN0b3ImIGNoYXJh
Y3RlcnMoKSBjb25zdAorICAgIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNoYXJhY3RlcnMoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlU2V0OjpDaGFyYWN0ZXIpOwog
ICAgICAgICByZXR1cm4gbV9kYXRhOwogICAgIH0KIAotICAgIGNvbnN0IERhdGFWZWN0b3ImIGNv
bW1lbnQoKSBjb25zdAorICAgIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNvbW1lbnQoKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlU2V0OjpDb21tZW50KTsKICAgICAg
ICAgcmV0dXJuIG1fZGF0YTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogRGlzdGluZ3Vpc2ggYmV0
d2VlbiBhIG1pc3NpbmcgcHVibGljIGlkZW50aWZlciBhbmQgYW4gZW1wdHkgb25lLgotICAgIGNv
bnN0IFdURjo6VmVjdG9yPFVDaGFyPiYgcHVibGljSWRlbnRpZmllcigpIGNvbnN0CisgICAgY29u
c3QgU3RyaW5nQnVpbGRlciYgcHVibGljSWRlbnRpZmllcigpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQobV90eXBlID09IFR5cGVTZXQ6OkRPQ1RZUEUpOwogICAgICAgICByZXR1cm4gbV9k
b2N0eXBlRGF0YS0+bV9wdWJsaWNJZGVudGlmaWVyOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBE
aXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWlzc2luZyBzeXN0ZW0gaWRlbnRpZmVyIGFuZCBhbiBlbXB0
eSBvbmUuCi0gICAgY29uc3QgV1RGOjpWZWN0b3I8VUNoYXI+JiBzeXN0ZW1JZGVudGlmaWVyKCkg
Y29uc3QKKyAgICBjb25zdCBTdHJpbmdCdWlsZGVyJiBzeXN0ZW1JZGVudGlmaWVyKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZVNldDo6RE9DVFlQRSk7CiAgICAg
ICAgIHJldHVybiBtX2RvY3R5cGVEYXRhLT5tX3N5c3RlbUlkZW50aWZpZXI7CkBAIC0zMzIsMTEg
KzMzNiwxMCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAKICNpZm5kZWYgTkRFQlVHCi0gICAgdm9p
ZCBwcmludFN0cmluZyhjb25zdCBEYXRhVmVjdG9yJiBzdHJpbmcpIGNvbnN0CisgICAgdm9pZCBw
cmludFN0cmluZyhjb25zdCBTdHJpbmdCdWlsZGVyJiBzdHJpbmcpIGNvbnN0CiAgICAgewotICAg
ICAgICBEYXRhVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc3RyaW5nLmJlZ2luKCk7Ci0g
ICAgICAgIGZvciAoOyBpdGVyICE9IHN0cmluZy5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIlbGMiLCB3Y2hhcl90KCppdGVyKSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiJWxjIiwgd2NoYXJfdChzdHJpbmdbaV0pKTsKICAgICB9CiAjZW5kaWYgLy8g
TkRFQlVHCiAKQEAgLTM0Niw3ICszNDksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fZGF0YS5h
cHBlbmQoY2hhcmFjdGVyKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIGNvbnN0IERhdGFWZWN0
b3ImIG5hbWUoKSBjb25zdAorICAgIGlubGluZSBjb25zdCBTdHJpbmdCdWlsZGVyJiBuYW1lKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2RhdGE7CiAgICAgfQpAQCAtMzYwLDcgKzM2
Myw3IEBAIHByb3RlY3RlZDoKICAgICB0eXBlbmFtZSBUeXBlOjpUeXBlIG1fdHlwZTsKICAgICB0
eXBlbmFtZSBBdHRyaWJ1dGU6OlJhbmdlIG1fcmFuZ2U7IC8vIEFsd2F5cyBzdGFydHMgYXQgemVy
by4KICAgICBpbnQgbV9iYXNlT2Zmc2V0OwotICAgIERhdGFWZWN0b3IgbV9kYXRhOworICAgIFN0
cmluZ0J1aWxkZXIgbV9kYXRhOwogCiAgICAgLy8gRm9yIERPQ1RZUEUKICAgICBPd25QdHI8RG9j
dHlwZURhdGE+IG1fZG9jdHlwZURhdGE7CkBAIC0zODcsNyArMzkwLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBUb2tlbjo6VHlwZTo6RE9DVFlQRToKLSAgICAgICAgICAgIG1fbmFtZSA9IEF0b21p
Y1N0cmluZyh0b2tlbi0+bmFtZSgpLmRhdGEoKSwgdG9rZW4tPm5hbWUoKS5zaXplKCkpOworICAg
ICAgICAgICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKHRva2VuLT5uYW1lKCkudG9TdHJpbmdQcmVz
ZXJ2ZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgbV9kb2N0eXBlRGF0YSA9IHRva2VuLT5tX2Rv
Y3R5cGVEYXRhLnJlbGVhc2UoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRv
a2VuOjpUeXBlOjpFbmRPZkZpbGU6CkBAIC0zOTUsMTIgKzM5OCwxMiBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgVG9rZW46OlR5cGU6OlN0YXJ0VGFnOgogICAgICAgICBjYXNlIFRva2VuOjpUeXBl
OjpFbmRUYWc6IHsKICAgICAgICAgICAgIG1fc2VsZkNsb3NpbmcgPSB0b2tlbi0+c2VsZkNsb3Np
bmcoKTsKLSAgICAgICAgICAgIG1fbmFtZSA9IEF0b21pY1N0cmluZyh0b2tlbi0+bmFtZSgpLmRh
dGEoKSwgdG9rZW4tPm5hbWUoKS5zaXplKCkpOworICAgICAgICAgICAgbV9uYW1lID0gQXRvbWlj
U3RyaW5nKHRva2VuLT5uYW1lKCkudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpOwogICAgICAg
ICAgICAgaW5pdGlhbGl6ZUF0dHJpYnV0ZXModG9rZW4tPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpDb21tZW50
OgotICAgICAgICAgICAgbV9kYXRhID0gU3RyaW5nKHRva2VuLT5jb21tZW50KCkuZGF0YSgpLCB0
b2tlbi0+Y29tbWVudCgpLnNpemUoKSk7CisgICAgICAgICAgICBtX2RhdGEgPSB0b2tlbi0+Y29t
bWVudCgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OkNoYXJhY3RlcjoKICAgICAgICAgICAgIG1fZXh0ZXJu
YWxDaGFyYWN0ZXJzID0gJnRva2VuLT5jaGFyYWN0ZXJzKCk7CkBAIC00NTgsNyArNDYxLDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVzLnJlbGVhc2UoKTsKICAgICB9CiAK
LSAgICBjb25zdCB0eXBlbmFtZSBUb2tlbjo6RGF0YVZlY3RvciYgY2hhcmFjdGVycygpIGNvbnN0
CisgICAgY29uc3QgU3RyaW5nQnVpbGRlciYgY2hhcmFjdGVycygpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQobV90eXBlID09IFRva2VuOjpUeXBlOjpDaGFyYWN0ZXIpOwogICAgICAgICBy
ZXR1cm4gKm1fZXh0ZXJuYWxDaGFyYWN0ZXJzOwpAQCAtNDcxLDE0ICs0NzQsMTQgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIC8vIEZJWE1FOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWlzc2luZyBw
dWJsaWMgaWRlbnRpZmVyIGFuZCBhbiBlbXB0eSBvbmUuCi0gICAgV1RGOjpWZWN0b3I8VUNoYXI+
JiBwdWJsaWNJZGVudGlmaWVyKCkgY29uc3QKKyAgICBTdHJpbmdCdWlsZGVyJiBwdWJsaWNJZGVu
dGlmaWVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVG9rZW46OlR5
cGU6OkRPQ1RZUEUpOwogICAgICAgICByZXR1cm4gbV9kb2N0eXBlRGF0YS0+bV9wdWJsaWNJZGVu
dGlmaWVyOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWlz
c2luZyBzeXN0ZW0gaWRlbnRpZmVyIGFuZCBhbiBlbXB0eSBvbmUuCi0gICAgV1RGOjpWZWN0b3I8
VUNoYXI+JiBzeXN0ZW1JZGVudGlmaWVyKCkgY29uc3QKKyAgICBTdHJpbmdCdWlsZGVyJiBzeXN0
ZW1JZGVudGlmaWVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVG9r
ZW46OlR5cGU6OkRPQ1RZUEUpOwogICAgICAgICByZXR1cm4gbV9kb2N0eXBlRGF0YS0+bV9zeXN0
ZW1JZGVudGlmaWVyOwpAQCAtNTA4LDcgKzUxMSw3IEBAIHByb3RlY3RlZDoKICAgICAvLwogICAg
IC8vIEZJWE1FOiBBZGQgYSBtZWNoYW5pc20gZm9yICJpbnRlcm5hbGl6aW5nIiB0aGUgY2hhcmFj
dGVycyB3aGVuIHRoZQogICAgIC8vICAgICAgICBIVE1MVG9rZW4gaXMgZGVzdHJ1Y3RlZC4KLSAg
ICBjb25zdCB0eXBlbmFtZSBUb2tlbjo6RGF0YVZlY3RvciogbV9leHRlcm5hbENoYXJhY3RlcnM7
CisgICAgY29uc3QgU3RyaW5nQnVpbGRlciogbV9leHRlcm5hbENoYXJhY3RlcnM7CiAKICAgICAv
LyBGb3IgRE9DVFlQRQogICAgIE93blB0cjx0eXBlbmFtZSBUb2tlbjo6RG9jdHlwZURhdGE+IG1f
ZG9jdHlwZURhdGE7CkBAIC01NDAsNyArNTQzLDcgQEAgaW5saW5lIHZvaWQgQXRvbWljTWFya3Vw
VG9rZW5CYXNlPFRva2VuPgogICAgICAgICBBU1NFUlQoYXR0cmlidXRlLm1fdmFsdWVSYW5nZS5t
X3N0YXJ0KTsKICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZS5tX3ZhbHVlUmFuZ2UubV9lbmQpOwog
Ci0gICAgICAgIFN0cmluZyB2YWx1ZShhdHRyaWJ1dGUubV92YWx1ZS5kYXRhKCksIGF0dHJpYnV0
ZS5tX3ZhbHVlLnNpemUoKSk7CisgICAgICAgIFN0cmluZyB2YWx1ZShhdHRyaWJ1dGUubV92YWx1
ZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSk7CiAgICAgICAgIG1fYXR0cmlidXRlcy0+aW5z
ZXJ0QXR0cmlidXRlKEF0dHJpYnV0ZTo6Y3JlYXRlTWFwcGVkKG5hbWVGb3JBdHRyaWJ1dGUoYXR0
cmlidXRlKSwgdmFsdWUpLCBmYWxzZSk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNw
cAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJh
Y3RlclJlZmVyZW5jZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAgaW5saW5lIHN0YXRp
YyBib29sIGNvbnZlcnRUb1VURjE2KFVDaGFyMzIgdmFsdWUsIFZlY3RvcjxVQ2hhciwgMTY+JiBk
ZWNvZGVkQ2hhcmFjdGVyKQorICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb252ZXJ0VG9VVEYxNihV
Q2hhcjMyIHZhbHVlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkQ2hhcmFjdGVyKQogICAgIHsKICAg
ICAgICAgaWYgKFVfSVNfQk1QKHZhbHVlKSkgewogICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBz
dGF0aWNfY2FzdDxVQ2hhcj4odmFsdWUpOwpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAKICAg
ICBpbmxpbmUgc3RhdGljIGJvb2wgYWNjZXB0TWFsZm9ybWVkKCkgeyByZXR1cm4gZmFsc2U7IH0K
IAotICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb25zdW1lTmFtZWRFbnRpdHkoU2VnbWVudGVkU3Ry
aW5nJiwgVmVjdG9yPFVDaGFyLCAxNj4mLCBib29sJiwgVUNoYXIsIFVDaGFyJikKKyAgICBpbmxp
bmUgc3RhdGljIGJvb2wgY29uc3VtZU5hbWVkRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIFN0cmlu
Z0J1aWxkZXImLCBib29sJiwgVUNoYXIsIFVDaGFyJikKICAgICB7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03MCw3ICs3MCw3IEBAIHB1
YmxpYzoKIAogfQogCi1ib29sIGNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkQ2hhcmFjdGVyLCBib29s
JiBub3RFbm91Z2hDaGFyYWN0ZXJzKQorYm9vbCBjb25zdW1lWE1MQ2hhcmFjdGVyUmVmZXJlbmNl
KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkQ2hhcmFjdGVy
LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzKQogewogICAgIHJldHVybiBjb25zdW1lQ2hhcmFj
dGVyUmVmZXJlbmNlPFhNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcj4oc291cmNlLCBkZWNvZGVk
Q2hhcmFjdGVyLCBub3RFbm91Z2hDaGFyYWN0ZXJzLCAwKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIu
aAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJh
Y3RlclJlZmVyZW5jZVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLWJvb2wgY29uc3VtZVhNTENoYXJhY3RlclJlZmVy
ZW5jZShTZWdtZW50ZWRTdHJpbmcmLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZENoYXJhY3Rl
ciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycyk7Citib29sIGNvbnN1bWVYTUxDaGFyYWN0ZXJS
ZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZENoYXJhY3Rl
ciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycyk7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUveG1sL3BhcnNlci9YTUxUb2tlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MVG9rZW4uaAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTFRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVi
bGljOgogY2xhc3MgUHJlZml4ZWRBdHRyaWJ1dGUgOiBwdWJsaWMgQXR0cmlidXRlQmFzZSB7CiBw
dWJsaWM6CiAgICAgUmFuZ2UgbV9wcmVmaXhSYW5nZTsKLSAgICBXVEY6OlZlY3RvcjxVQ2hhciwg
MzI+IG1fcHJlZml4OworICAgIFN0cmluZ0J1aWxkZXIgbV9wcmVmaXg7CiB9OwogCiBjbGFzcyBY
TUxUb2tlbiA6IHB1YmxpYyBNYXJrdXBUb2tlbkJhc2U8WE1MVG9rZW5UeXBlcywgRG9jdHlwZURh
dGFCYXNlLCBQcmVmaXhlZEF0dHJpYnV0ZT4gewpAQCAtNzAsOCArNzAsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIGJvb2wgbV9oYXNTdGFuZGFsb25lOwogICAgICAgICBib29sIG1faGFzRW5jb2Rpbmc7
CiAgICAgICAgIGJvb2wgbV9zdGFuZGFsb25lOwotICAgICAgICBXVEY6OlZlY3RvcjxVQ2hhcj4g
bV9lbmNvZGluZzsKLSAgICAgICAgV1RGOjpWZWN0b3I8VUNoYXI+IG1fdmVyc2lvbjsKKyAgICAg
ICAgU3RyaW5nQnVpbGRlciBtX2VuY29kaW5nOworICAgICAgICBTdHJpbmdCdWlsZGVyIG1fdmVy
c2lvbjsKICAgICB9OwogCiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkKQEAgLTg2LDI1ICs4Niwy
NSBAQCBwdWJsaWM6CiAgICAgICAgIE1hcmt1cFRva2VuQmFzZTxYTUxUb2tlblR5cGVzLCBEb2N0
eXBlRGF0YUJhc2UsIFByZWZpeGVkQXR0cmlidXRlPjo6YXBwZW5kVG9OYW1lKGNoYXJhY3Rlcik7
CiAgICAgfQogCi0gICAgY29uc3QgRGF0YVZlY3RvciYgbmFtZSgpIGNvbnN0CisgICAgY29uc3Qg
U3RyaW5nQnVpbGRlciYgbmFtZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBl
ID09IFhNTFRva2VuVHlwZXM6OlN0YXJ0VGFnIHx8IG1fdHlwZSA9PSBYTUxUb2tlblR5cGVzOjpF
bmRUYWcgfHwgbV90eXBlID09IFhNTFRva2VuVHlwZXM6OkRPQ1RZUEUgfHwgbV90eXBlID09IFhN
TFRva2VuVHlwZXM6OkVudGl0eSk7CiAgICAgICAgIHJldHVybiBNYXJrdXBUb2tlbkJhc2U8WE1M
VG9rZW5UeXBlcywgRG9jdHlwZURhdGFCYXNlLCBQcmVmaXhlZEF0dHJpYnV0ZT46Om5hbWUoKTsK
ICAgICB9CiAKLSAgICBjb25zdCBEYXRhVmVjdG9yJiB0YXJnZXQoKSBjb25zdAorICAgIGNvbnN0
IFN0cmluZ0J1aWxkZXImIHRhcmdldCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90
eXBlID09IFhNTFRva2VuVHlwZXM6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbik7CiAgICAgICAgIHJl
dHVybiBtX3RhcmdldDsKICAgICB9CiAKLSAgICBjb25zdCBEYXRhVmVjdG9yJiBkYXRhKCkgY29u
c3QKKyAgICBjb25zdCBTdHJpbmdCdWlsZGVyJiBkYXRhKCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVChtX3R5cGUgPT0gWE1MVG9rZW5UeXBlczo6Q0RBVEEgfHwgbV90eXBlID09IFhNTFRv
a2VuVHlwZXM6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbik7CiAgICAgICAgIHJldHVybiBtX2RhdGE7
CiAgICAgfQogCi0gICAgY29uc3QgRGF0YVZlY3RvciYgcHJlZml4KCkgY29uc3QKKyAgICBjb25z
dCBTdHJpbmdCdWlsZGVyJiBwcmVmaXgoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
dHlwZSA9PSBYTUxUb2tlblR5cGVzOjpTdGFydFRhZyB8fCBtX3R5cGUgPT0gWE1MVG9rZW5UeXBl
czo6RW5kVGFnKTsKICAgICAgICAgcmV0dXJuIG1fdGFyZ2V0OwpAQCAtMjEwLDcgKzIxMCw3IEBA
IHB1YmxpYzoKICAgICBib29sIGhhc1ByZWZpeCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NF
UlQobV90eXBlID09IFhNTFRva2VuVHlwZXM6OlN0YXJ0VGFnIHx8IG1fdHlwZSA9PSBYTUxUb2tl
blR5cGVzOjpFbmRUYWcpOwotICAgICAgICByZXR1cm4gbV90YXJnZXQuc2l6ZSgpOworICAgICAg
ICByZXR1cm4gbV90YXJnZXQubGVuZ3RoKCk7CiAgICAgfQogCiAgICAgdm9pZCBiZWdpbkNEQVRB
KCkKQEAgLTM5Myw3ICszOTMsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBdG9taWNY
TUxUb2tlbjsKIAogICAgIC8vICJ0YXJnZXQiIGZvciBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sICJw
cmVmaXgiIGZvciBTdGFydFRhZyBhbmQgRW5kVGFnCi0gICAgRGF0YVZlY3RvciBtX3RhcmdldDsK
KyAgICBTdHJpbmdCdWlsZGVyIG1fdGFyZ2V0OwogCiAgICAgLy8gRm9yIFhNTCBEZWNsYXJhdGlv
bgogICAgIE93blB0cjxYTUxEZWNsYXJhdGlvbkRhdGE+IG1feG1sRGVjbGFyYXRpb25EYXRhOwpA
QCAtNDA3LDI0ICs0MDcsMjQgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dpdGNoIChtX3R5
cGUpIHsKICAgICAgICAgY2FzZSBYTUxUb2tlblR5cGVzOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246
Ci0gICAgICAgICAgICBtX25hbWUgPSBBdG9taWNTdHJpbmcodG9rZW4udGFyZ2V0KCkuZGF0YSgp
LCB0b2tlbi50YXJnZXQoKS5zaXplKCkpOwotICAgICAgICAgICAgbV9kYXRhID0gU3RyaW5nKHRv
a2VuLmRhdGEoKS5kYXRhKCksIHRva2VuLmRhdGEoKS5zaXplKCkpOworICAgICAgICAgICAgbV9u
YW1lID0gQXRvbWljU3RyaW5nKHRva2VuLnRhcmdldCgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0
eSgpKTsKKyAgICAgICAgICAgIG1fZGF0YSA9IHRva2VuLmRhdGEoKS50b1N0cmluZ1ByZXNlcnZl
Q2FwYWNpdHkoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFhNTFRva2VuVHlw
ZXM6OlhNTERlY2xhcmF0aW9uOgogICAgICAgICAgICAgbV94bWxEZWNsYXJhdGlvbkRhdGEgPSB0
b2tlbi5tX3htbERlY2xhcmF0aW9uRGF0YS5yZWxlYXNlKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBYTUxUb2tlblR5cGVzOjpTdGFydFRhZzoKICAgICAgICAgY2FzZSBYTUxU
b2tlblR5cGVzOjpFbmRUYWc6IHsKLSAgICAgICAgICAgIGlmICh0b2tlbi5wcmVmaXgoKS5zaXpl
KCkpCi0gICAgICAgICAgICAgICAgbV9wcmVmaXggPSBBdG9taWNTdHJpbmcodG9rZW4ucHJlZml4
KCkuZGF0YSgpLCB0b2tlbi5wcmVmaXgoKS5zaXplKCkpOworICAgICAgICAgICAgaWYgKHRva2Vu
LnByZWZpeCgpLmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIG1fcHJlZml4ID0gQXRvbWljU3Ry
aW5nKHRva2VuLnByZWZpeCgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKICAgICAgICAg
ICAgIGluaXRpYWxpemVBdHRyaWJ1dGVzKHRva2VuLmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFhNTFRva2VuVHlwZXM6OkNEQVRBOgot
ICAgICAgICAgICAgbV9kYXRhID0gU3RyaW5nKHRva2VuLmRhdGEoKS5kYXRhKCksIHRva2VuLmRh
dGEoKS5zaXplKCkpOworICAgICAgICAgICAgbV9kYXRhID0gdG9rZW4uZGF0YSgpLnRvU3RyaW5n
UHJlc2VydmVDYXBhY2l0eSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgWE1M
VG9rZW5UeXBlczo6RW50aXR5OgotICAgICAgICAgICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKHRv
a2VuLm5hbWUoKS5kYXRhKCksIHRva2VuLm5hbWUoKS5zaXplKCkpOworICAgICAgICAgICAgbV9u
YW1lID0gQXRvbWljU3RyaW5nKHRva2VuLm5hbWUoKS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHko
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNDU0LDcgKzQ1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZGF0YTsK
ICAgICB9CiAKLSAgICBXVEY6OlZlY3RvcjxVQ2hhcj4mIHhtbFZlcnNpb24oKSBjb25zdAorICAg
IFN0cmluZ0J1aWxkZXImIHhtbFZlcnNpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KG1fdHlwZSA9PSBYTUxUb2tlblR5cGVzOjpYTUxEZWNsYXJhdGlvbik7CiAgICAgICAgIHJldHVy
biBtX3htbERlY2xhcmF0aW9uRGF0YS0+bV92ZXJzaW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9YTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdGVtcGxhdGU8PgogUXVhbGlmaWVkTmFt
ZSBBdG9taWNNYXJrdXBUb2tlbkJhc2U8WE1MVG9rZW4+OjpuYW1lRm9yQXR0cmlidXRlKGNvbnN0
IFhNTFRva2VuOjpBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gUXVh
bGlmaWVkTmFtZShhdHRyaWJ1dGUubV9wcmVmaXguaXNFbXB0eSgpID8gbnVsbEF0b20gOiBBdG9t
aWNTdHJpbmcoYXR0cmlidXRlLm1fcHJlZml4LmRhdGEoKSwgYXR0cmlidXRlLm1fcHJlZml4LnNp
emUoKSksIEF0b21pY1N0cmluZyhhdHRyaWJ1dGUubV9uYW1lLmRhdGEoKSwgYXR0cmlidXRlLm1f
bmFtZS5zaXplKCkpLCBudWxsQXRvbSk7CisgICAgcmV0dXJuIFF1YWxpZmllZE5hbWUoYXR0cmli
dXRlLm1fcHJlZml4LmlzRW1wdHkoKSA/IG51bGxBdG9tIDogQXRvbWljU3RyaW5nKGF0dHJpYnV0
ZS5tX3ByZWZpeC50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSksIEF0b21pY1N0cmluZyhhdHRy
aWJ1dGUubV9uYW1lLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKSwgbnVsbEF0b20pOwogfQog
CiB0ZW1wbGF0ZTw+CkBAIC0yNTEsMTEgKzI1MSwxMCBAQCBib29sIFhNTFRva2VuaXplcjo6bmV4
dFRva2VuKFNlZ21lbnRlZFN0CiAgICAgWE1MX0JFR0lOX1NUQVRFKENoYXJhY3RlclJlZmVyZW5j
ZVN0YXJ0U3RhdGUpIHsKICAgICAgICAgaWYgKGNjID09ICcjJykgewogICAgICAgICAgICAgYm9v
bCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBWZWN0b3I8VUNoYXIs
IDE2PiBkZWNvZGVkQ2hhcmFjdGVyOworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBkZWNvZGVk
Q2hhcmFjdGVyOwogICAgICAgICAgICAgaWYgKGNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2Uo
c291cmNlLCBkZWNvZGVkQ2hhcmFjdGVyLCBub3RFbm91Z2hDaGFyYWN0ZXJzKSkgewotICAgICAg
ICAgICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZGVjb2Rl
ZENoYXJhY3Rlci5iZWdpbigpOwotICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGRlY29k
ZWRDaGFyYWN0ZXIuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyQ2hh
cmFjdGVyKCppdGVyKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGVjb2RlZENoYXJhY3Rlci5sZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBidWZm
ZXJDaGFyYWN0ZXIoZGVjb2RlZENoYXJhY3RlcltpXSk7CiAgICAgICAgICAgICAgICAgWE1MX1NX
SVRDSF9UTyhEYXRhU3RhdGUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChub3RFbm91Z2hDaGFy
YWN0ZXJzKQogICAgICAgICAgICAgICAgIHJldHVybiBoYXZlQnVmZmVyZWRDaGFyYWN0ZXJUb2tl
bigpOwpAQCAtNDM3LDEyICs0MzYsMTEgQEAgYm9vbCBYTUxUb2tlbml6ZXI6Om5leHRUb2tlbihT
ZWdtZW50ZWRTdAogICAgIFhNTF9CRUdJTl9TVEFURShDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJp
YnV0ZVZhbHVlU3RhdGUpIHsKICAgICAgICAgaWYgKGNjID09ICcjJykgewogICAgICAgICAgICAg
Ym9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBWZWN0b3I8VUNo
YXIsIDE2PiBkZWNvZGVkQ2hhcmFjdGVyOworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBkZWNv
ZGVkQ2hhcmFjdGVyOwogICAgICAgICAgICAgc291cmNlLnB1c2goY2MpOwogICAgICAgICAgICAg
aWYgKGNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2Uoc291cmNlLCBkZWNvZGVkQ2hhcmFjdGVy
LCBub3RFbm91Z2hDaGFyYWN0ZXJzKSkgewotICAgICAgICAgICAgICAgIFZlY3RvcjxVQ2hhciwg
MTY+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZGVjb2RlZENoYXJhY3Rlci5iZWdpbigpOwotICAg
ICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGRlY29kZWRDaGFyYWN0ZXIuZW5kKCk7ICsraXRl
cikKLSAgICAgICAgICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZSgq
aXRlcik7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlY29kZWRD
aGFyYWN0ZXIubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV90b2tlbi0+YXBw
ZW5kVG9BdHRyaWJ1dGVWYWx1ZShkZWNvZGVkQ2hhcmFjdGVyW2ldKTsKICAgICAgICAgICAgICAg
ICBYTUxfQURWQU5DRV9UTyhBdHRyaWJ1dGVWYWx1ZVF1b3RlZFN0YXRlKTsKICAgICAgICAgICAg
IH0gZWxzZSBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykKICAgICAgICAgICAgICAgICByZXR1cm4g
aGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODIsNyArMTgyLDcgQEAgdm9pZCBYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1hNTERlY2xhcmF0aQog
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKLSAgICBtX2RvY3VtZW50LT5zZXRYTUxWZXJz
aW9uKFN0cmluZyh0b2tlbi54bWxWZXJzaW9uKCkpLCBlYyk7CisgICAgbV9kb2N1bWVudC0+c2V0
WE1MVmVyc2lvbih0b2tlbi54bWxWZXJzaW9uKCkudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCks
IGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIG1fcGFyc2VyLT5zdG9wUGFyc2luZygpOwogCkBA
IC0yMDcsOCArMjA3LDggQEAgdm9pZCBYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0RPQ1RZUEUoY29u
cwogICAgIGlmICghZmFpbE9uVGV4dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBdG9taWNT
dHJpbmcgcHVibGljSWRlbnRpZmllcih0b2tlbi5wdWJsaWNJZGVudGlmaWVyKCkuZGF0YSgpLCB0
b2tlbi5wdWJsaWNJZGVudGlmaWVyKCkuc2l6ZSgpKTsKLSAgICBBdG9taWNTdHJpbmcgc3lzdGVt
SWRlbnRpZmllcih0b2tlbi5zeXN0ZW1JZGVudGlmaWVyKCkuZGF0YSgpLCB0b2tlbi5zeXN0ZW1J
ZGVudGlmaWVyKCkuc2l6ZSgpKTsKKyAgICBBdG9taWNTdHJpbmcgcHVibGljSWRlbnRpZmllcih0
b2tlbi5wdWJsaWNJZGVudGlmaWVyKCkudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpOworICAg
IEF0b21pY1N0cmluZyBzeXN0ZW1JZGVudGlmaWVyKHRva2VuLnN5c3RlbUlkZW50aWZpZXIoKS50
b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSk7CiAgICAgUmVmUHRyPERvY3VtZW50VHlwZT4gZG9j
dHlwZSA9IERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRva2VuLm5hbWUoKSwgcHVi
bGljSWRlbnRpZmllciwgc3lzdGVtSWRlbnRpZmllcik7CiAgICAgbV9kb2N1bWVudC0+c2V0RG9j
VHlwZShkb2N0eXBlKTsKICAgICBtX2RvY3VtZW50LT5wYXJzZXJBZGRDaGlsZChkb2N0eXBlKTsK
QEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lkIFhNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKGNv
bnN0CiAKIHZvaWQgWE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIoY29uc3QgQXRvbWlj
WE1MVG9rZW4mIHRva2VuKQogewotICAgIGFwcGVuZFRvVGV4dCh0b2tlbi5jaGFyYWN0ZXJzKCku
ZGF0YSgpLCB0b2tlbi5jaGFyYWN0ZXJzKCkuc2l6ZSgpKTsKKyAgICBhcHBlbmRUb1RleHQodG9r
ZW4uY2hhcmFjdGVycygpLmNoYXJhY3RlcnMoKSwgdG9rZW4uY2hhcmFjdGVycygpLmxlbmd0aCgp
KTsKIH0KIAogdm9pZCBYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NEQVRBKGNvbnN0IEF0b21pY1hN
TFRva2VuJiB0b2tlbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5
Mzg0OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDgtMjQgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXBsYWNlIHNvbWUgdXNhZ2VzIG9mIFZlY3RvcjxV
Q2hhcj4gdG8gU3RyaW5nQnVpbGRlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY2NjYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIHdvcmsgdG8gc3VwcG9ydCA4LWJpdCBzdHJp
bmcgYnVmZmVycy4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL1N0
cmluZ0J1aWxkZXJUZXN0LmNwcDogQWRkZWQuIFRlc3QgZm9yIFN0cmluZ0J1aWxkZXIuCisKIDIw
MTEtMDgtMjUgIFNjb3R0IEdyYWhhbSAgPHNjb3R0bWdAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IEVuYWJsZSBpbmNyZW1lbnRhbCBsaW5raW5nIGZvciBjb21wb25lbnQgYnVpbGQgb24gQ2hyb21p
dW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQkocmV2aXNpb24gOTM4NDgpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC02
Nyw2ICs2Nyw3IEBACiAgICAgICAgICAgICAndGVzdHMvUE9ESW50ZXJ2YWxUcmVlVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL1BPRFJlZEJsYWNrVHJlZVRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9TY3JvbGxBbmltYXRvck5vbmVUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVz
dHMvU3RyaW5nQnVpbGRlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UaWxpbmdEYXRh
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvVHJlZVRlc3RIZWxwZXJzLmNwcCcsCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1N0cmluZ0J1aWxkZXJUZXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1N0cmluZ0J1aWxkZXJUZXN0LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvU3RyaW5nQnVpbGRlclRl
c3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIEJhc2ljIHRlc3RzIHRoYXQg
dmVyaWZ5IG91ciBLVVJMJ3MgaW50ZXJmYWNlIGJlaGF2ZXMgdGhlIHNhbWUgYXMgdGhlCisvLyBv
cmlnaW5hbCBLVVJMJ3MuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSB7CisKKyNkZWZpbmUgRVhQRUNUX0NPTlRFTlQo
c3RyLCBidWlsZGVyKSBcCisgICAgRVhQRUNUX1NUUkVRKHN0ciwgU3RyaW5nKGJ1aWxkZXIuY2hh
cmFjdGVycygpLCBidWlsZGVyLmxlbmd0aCgpKS5hc2NpaSgpLmRhdGEoKSkKKwordm9pZCBleHBl
Y3RFbXB0eShjb25zdCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQoreworICAgIEVYUEVDVF9FUSgw
VSwgYnVpbGRlci5sZW5ndGgoKSk7CisgICAgRVhQRUNUX1RSVUUoYnVpbGRlci5pc0VtcHR5KCkp
OworICAgIEVYUEVDVF9FUSgwLCBidWlsZGVyLmNoYXJhY3RlcnMoKSk7CisgICAgRVhQRUNUX0NP
TlRFTlQoIiIsIGJ1aWxkZXIpOworfQorCitURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCBkZWZhdWx0
Q29uc3RydWN0b3IpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGV4cGVjdEVt
cHR5KGJ1aWxkZXIpOworICAgIEVYUEVDVF9FUSgwVSwgYnVpbGRlci5jYXBhY2l0eSgpKTsKK30K
Ky8qCitURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCBjb25zdHJ1Y3RvcldpdGhJbml0aWFsTGVuZ3Ro
KQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcigxNik7CisgICAgRVhQRUNUX0VRKDE2LCBi
dWlsZGVyLmxlbmd0aCgpKTsKK30KKyovCitURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCByZXNlcnZl
Q2FwYWNpdHkpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBw
ZW5kKCIwMTIzNDU2Nzg5Iik7CisgICAgRVhQRUNUX0xUKDBVLCBidWlsZGVyLmNhcGFjaXR5KCkp
OworICAgIHVuc2lnbmVkIG5ld0NhcGFjaXR5ID0gNSAqIGJ1aWxkZXIuY2FwYWNpdHkoKTsKKyAg
ICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShuZXdDYXBhY2l0eSk7CisgICAgRVhQRUNUX0xFKG5l
d0NhcGFjaXR5LCBidWlsZGVyLmNhcGFjaXR5KCkpOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIz
NDU2Nzg5IiwgYnVpbGRlcik7Cit9CisKK1RFU1QoU3RyaW5nQnVpbGRlclRlc3QsIGluc2VydCkK
K3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5pbnNlcnQoU3RyaW5n
KCIwMTIzNDU2Nzg5IiksIDApOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2Nzg5IiwgYnVp
bGRlcik7CisgICAgYnVpbGRlci5pbnNlcnQoImFiY2QiLCAwKTsKKyAgICBFWFBFQ1RfQ09OVEVO
VCgiYWJjZDAxMjM0NTY3ODkiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLmluc2VydCgiZWZnaCIs
IDMsIGJ1aWxkZXIubGVuZ3RoKCkpOworICAgIEVYUEVDVF9DT05URU5UKCJhYmNkMDEyMzQ1Njc4
OWVmZyIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIuaW5zZXJ0KFN0cmluZygiWFlaIiksIDkpOwor
ICAgIEVYUEVDVF9DT05URU5UKCJhYmNkMDEyMzRYWVo1Njc4OWVmZyIsIGJ1aWxkZXIpOworICAg
IGJ1aWxkZXIuaW5zZXJ0KCIiLCA5KTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiYWJjZDAxMjM0WFla
NTY3ODllZmciLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLmluc2VydCgnIycsIDEwKTsKKyAgICBF
WFBFQ1RfQ09OVEVOVCgiYWJjZDAxMjM0WCNZWjU2Nzg5ZWZnIiwgYnVpbGRlcik7CisKKyAgICBi
dWlsZGVyLnRvU3RyaW5nKCk7IC8vIFRlc3QgYWZ0ZXIgcmVpZnlTdHJpbmcoKS4KKyAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXIxOworICAgIGJ1aWxkZXIuaW5zZXJ0KGJ1aWxkZXIxLCAxMCk7Cisg
ICAgRVhQRUNUX0NPTlRFTlQoImFiY2QwMTIzNFgjWVo1Njc4OWVmZyIsIGJ1aWxkZXIpOworICAg
IGJ1aWxkZXIxLmluc2VydChidWlsZGVyLCAwKTsKKyAgICBidWlsZGVyLmluc2VydChidWlsZGVy
MSwgMTUpOworICAgIEVYUEVDVF9DT05URU5UKCJhYmNkMDEyMzRYI1laNTZhYmNkMDEyMzRYI1la
NTY3ODllZmc3ODllZmciLCBidWlsZGVyKTsKK30KKworVEVTVChTdHJpbmdCdWlsZGVyVGVzdCwg
cHJlcGVuZCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5wcmVw
ZW5kKFN0cmluZygiMDEyMzQ1Njc4OSIpKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQ1Njc4
OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIucHJlcGVuZCgiYWJjZCIpOworICAgIEVYUEVDVF9D
T05URU5UKCJhYmNkMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIucHJlcGVuZCgi
ZWZnaCIsIDMpOworICAgIEVYUEVDVF9DT05URU5UKCJlZmdhYmNkMDEyMzQ1Njc4OSIsIGJ1aWxk
ZXIpOworICAgIGJ1aWxkZXIucHJlcGVuZCgiIik7CisgICAgRVhQRUNUX0NPTlRFTlQoImVmZ2Fi
Y2QwMTIzNDU2Nzg5IiwgYnVpbGRlcik7CisgICAgYnVpbGRlci5wcmVwZW5kKCcjJyk7CisgICAg
RVhQRUNUX0NPTlRFTlQoIiNlZmdhYmNkMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOworCisgICAgYnVp
bGRlci50b1N0cmluZygpOyAvLyBUZXN0IGFmdGVyIHJlaWZ5U3RyaW5nKCkuCisgICAgU3RyaW5n
QnVpbGRlciBidWlsZGVyMTsKKyAgICBidWlsZGVyLnByZXBlbmQoYnVpbGRlcjEpOworICAgIEVY
UEVDVF9DT05URU5UKCIjZWZnYWJjZDAxMjM0NTY3ODkiLCBidWlsZGVyKTsKKyAgICBidWlsZGVy
MS5wcmVwZW5kKGJ1aWxkZXIpOworICAgIGJ1aWxkZXIxLnByZXBlbmQoIlhZWiIpOworICAgIGJ1
aWxkZXIucHJlcGVuZChidWlsZGVyMSk7CisgICAgRVhQRUNUX0NPTlRFTlQoIlhZWiNlZmdhYmNk
MDEyMzQ1Njc4OSNlZmdhYmNkMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOworfQorCitURVNUKFN0cmlu
Z0J1aWxkZXJUZXN0LCBhcHBlbmQpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
IGJ1aWxkZXIuYXBwZW5kKFN0cmluZygiMDEyMzQ1Njc4OSIpKTsKKyAgICBFWFBFQ1RfQ09OVEVO
VCgiMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIuYXBwZW5kKCJhYmNkIik7Cisg
ICAgRVhQRUNUX0NPTlRFTlQoIjAxMjM0NTY3ODlhYmNkIiwgYnVpbGRlcik7CisgICAgYnVpbGRl
ci5hcHBlbmQoImVmZ2giLCAzKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQ1Njc4OWFiY2Rl
ZmciLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLmFwcGVuZCgiIik7CisgICAgRVhQRUNUX0NPTlRF
TlQoIjAxMjM0NTY3ODlhYmNkZWZnIiwgYnVpbGRlcik7CisgICAgYnVpbGRlci5hcHBlbmQoJyMn
KTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQ1Njc4OWFiY2RlZmcjIiwgYnVpbGRlcik7CisK
KyAgICBidWlsZGVyLnRvU3RyaW5nKCk7IC8vIFRlc3QgYWZ0ZXIgcmVpZnlTdHJpbmcoKS4KKyAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIxOworICAgIGJ1aWxkZXIuYXBwZW5kKGJ1aWxkZXIxKTsK
KyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQ1Njc4OWFiY2RlZmcjIiwgYnVpbGRlcik7CisgICAg
YnVpbGRlcjEuYXBwZW5kKGJ1aWxkZXIpOworICAgIGJ1aWxkZXIxLmFwcGVuZCgiWFlaIik7Cisg
ICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlcjEpOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2
Nzg5YWJjZGVmZyMwMTIzNDU2Nzg5YWJjZGVmZyNYWVoiLCBidWlsZGVyKTsKK30KKworVEVTVChT
dHJpbmdCdWlsZGVyVGVzdCwgcmVtb3ZlKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KyAgICBidWlsZGVyLmFwcGVuZCgiMDEyMzQ1Njc4OSIpOworICAgIGJ1aWxkZXIucmVtb3ZlKDAs
IDApOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2Nzg5IiwgYnVpbGRlcik7CisgICAgYnVp
bGRlci5yZW1vdmUoNSwgMCk7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAxMjM0NTY3ODkiLCBidWls
ZGVyKTsKKyAgICBidWlsZGVyLnJlbW92ZShidWlsZGVyLmxlbmd0aCgpIC0gMSwgMSk7CisgICAg
RVhQRUNUX0NPTlRFTlQoIjAxMjM0NTY3OCIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIucmVtb3Zl
KDAsIDEpOworICAgIEVYUEVDVF9DT05URU5UKCIxMjM0NTY3OCIsIGJ1aWxkZXIpOworICAgIGJ1
aWxkZXIucmVtb3ZlKDUsIDIpOworICAgIEVYUEVDVF9DT05URU5UKCIxMjM0NTgiLCBidWlsZGVy
KTsKKyAgICBidWlsZGVyLnJlbW92ZSgwLCA2KTsKKyAgICBleHBlY3RFbXB0eShidWlsZGVyKTsK
K30KKworVEVTVChTdHJpbmdCdWlsZGVyVGVzdCwgY2xlYXIpCit7CisgICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCIwMTIzNDU2Nzg5Iik7CisgICAgYnVpbGRl
ci5jbGVhcigpOworICAgIGV4cGVjdEVtcHR5KGJ1aWxkZXIpOworICAgIEVYUEVDVF9FUSgwVSwg
YnVpbGRlci5jYXBhY2l0eSgpKTsKK30KKworVEVTVChTdHJpbmdCdWlsZGVyVGVzdCwgY2hhcmFj
dGVycykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmQo
IjAxMjM0NTY3ODkiKTsKKyAgICBVQ2hhciogY2hhcmFjdGVycyA9IGJ1aWxkZXIuY2hhcmFjdGVy
cygpOworICAgIEVYUEVDVF9FUSgnMCcsIHN0YXRpY19jYXN0PGNoYXI+KGNoYXJhY3RlcnNbMF0p
KTsKKyAgICBFWFBFQ1RfRVEoJzknLCBzdGF0aWNfY2FzdDxjaGFyPihjaGFyYWN0ZXJzWzldKSk7
CisgICAgY2hhcmFjdGVyc1s1XSA9ICcjJzsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQjNjc4
OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIudG9TdHJpbmcoKTsgLy8gVGVzdCBhZnRlciByZWlm
eVN0cmluZygpLgorICAgIGJ1aWxkZXIuY2hhcmFjdGVycygpWzZdID0gJ0AnOworICAgIEVYUEVD
VF9DT05URU5UKCIwMTIzNCNANzg5IiwgYnVpbGRlcik7Cit9CisKK1RFU1QoU3RyaW5nQnVpbGRl
clRlc3QsIGFycmF5KQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVy
LmFwcGVuZCgiMDEyMzQ1Njc4OSIpOworICAgIEVYUEVDVF9FUSgnMCcsIHN0YXRpY19jYXN0PGNo
YXI+KGJ1aWxkZXJbMF0pKTsKKyAgICBFWFBFQ1RfRVEoJzknLCBzdGF0aWNfY2FzdDxjaGFyPihi
dWlsZGVyWzldKSk7CisgICAgYnVpbGRlcls1XSA9ICcjJzsKKyAgICBFWFBFQ1RfQ09OVEVOVCgi
MDEyMzQjNjc4OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIudG9TdHJpbmcoKTsgLy8gVGVzdCBh
ZnRlciByZWlmeVN0cmluZygpLgorICAgIGJ1aWxkZXJbNl0gPSAnQCc7CisgICAgRVhQRUNUX0NP
TlRFTlQoIjAxMjM0I0A3ODkiLCBidWlsZGVyKTsKK30KKworVEVTVChTdHJpbmdCdWlsZGVyVGVz
dCwgY29uc3RCdWlsZGVyKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWls
ZGVyLmFwcGVuZCgiMDEyMzQ1Njc4OSIpOworICAgIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNvbnN0
QnVpbGRlciA9IGJ1aWxkZXI7CisgICAgRVhQRUNUX0VRKCcwJywgc3RhdGljX2Nhc3Q8Y2hhcj4o
Y29uc3RCdWlsZGVyWzBdKSk7CisgICAgRVhQRUNUX0VRKCc5Jywgc3RhdGljX2Nhc3Q8Y2hhcj4o
Y29uc3RCdWlsZGVyWzldKSk7CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBjb25zdEJ1
aWxkZXIuY2hhcmFjdGVycygpOworICAgIEVYUEVDVF9FUSgnMCcsIHN0YXRpY19jYXN0PGNoYXI+
KGNoYXJhY3RlcnNbMF0pKTsKKyAgICBFWFBFQ1RfRVEoJzknLCBzdGF0aWNfY2FzdDxjaGFyPihj
aGFyYWN0ZXJzWzldKSk7Cit9CisKK1RFU1QoU3RyaW5nQnVpbGRlclRlc3QsIGFwcGVuZE51bWJl
cikKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmROdW1i
ZXIoMCk7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLmFw
cGVuZE51bWJlcigxKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEiLCBidWlsZGVyKTsKKyAgICBi
dWlsZGVyLmFwcGVuZE51bWJlcigyNTUpOworICAgIEVYUEVDVF9DT05URU5UKCIwMTI1NSIsIGJ1
aWxkZXIpOworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKDk5KTsKKyAgICBFWFBFQ1RfQ09OVEVO
VCgiMDEyNTU5OSIsIGJ1aWxkZXIpOworfQorCitURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCByZXNp
emUpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCIw
MTIzNDU2Nzg5Iik7CisgICAgdW5zaWduZWQgY2FwYWNpdHkgPSBidWlsZGVyLmNhcGFjaXR5KCk7
CisgICAgYnVpbGRlci5yZXNpemUoMTApOworICAgIEVYUEVDVF9FUSgxMFUsIGJ1aWxkZXIubGVu
Z3RoKCkpOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2Nzg5IiwgYnVpbGRlcik7CisgICAg
RVhQRUNUX0VRKGNhcGFjaXR5LCBidWlsZGVyLmNhcGFjaXR5KCkpOworICAgIGJ1aWxkZXIucmVz
aXplKDgpOworICAgIEVYUEVDVF9FUSg4VSwgYnVpbGRlci5sZW5ndGgoKSk7CisgICAgRVhQRUNU
X0NPTlRFTlQoIjAxMjM0NTY3IiwgYnVpbGRlcik7CisgICAgRVhQRUNUX0VRKGNhcGFjaXR5LCBi
dWlsZGVyLmNhcGFjaXR5KCkpOworCisgICAgYnVpbGRlci50b1N0cmluZygpOworICAgIGJ1aWxk
ZXIucmVzaXplKDcpOworICAgIEVYUEVDVF9FUSg3VSwgYnVpbGRlci5sZW5ndGgoKSk7CisgICAg
RVhQRUNUX0NPTlRFTlQoIjAxMjM0NTYiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLnJlc2l6ZSgy
MCk7CisgICAgRVhQRUNUX0VRKDIwVSwgYnVpbGRlci5sZW5ndGgoKSk7CisgICAgRVhQRUNUX0VR
KCcwJywgYnVpbGRlclswXSk7CisgICAgRVhQRUNUX0VRKCc3JywgYnVpbGRlcls3XSk7CisgICAg
YnVpbGRlci5yZXNpemUoMCk7CisgICAgZXhwZWN0RW1wdHkoYnVpbGRlcik7Cit9CisKK30gLy8g
bmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105335</attachid>
            <date>2011-08-26 02:16:46 -0700</date>
            <delta_ts>2011-08-26 07:52:59 -0700</delta_ts>
            <desc>patch v4 (trying to fix windows build break)</desc>
            <filename>patch-66661d</filename>
            <type>text/plain</type>
            <size>199531</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAK
KzIwMTEtMDgtMjQgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXBsYWNlIHNvbWUgdXNhZ2VzIG9mIFZlY3RvcjxVQ2hhcj4gdG8gU3RyaW5nQnVp
bGRlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2
NjYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBpcyBwYXJ0IG9mIHdvcmsgdG8gc3VwcG9ydCA4LWJpdCBzdHJpbmcgYnVmZmVycy4KKyAgICAg
ICAgVGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG9yaWduYWwgU3RyaW5nQnVpbGRlciBhcmUgZXh0
ZW5kZWQgdG8gc3VwcG9ydAorICAgICAgICB0aGUgb3JpZ2luYWwgdXNhZ2VzIG9mIFZlY3RvcjxV
Q2hhcj4uCisKKyAgICAgICAgKiB3dGYvRm9yd2FyZC5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmlu
Zyk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlbW92ZSk6CisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6OnNocmluayk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6Omdy
b3cpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6Omluc2VydFVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoV1RGOjpTdHJp
bmdCdWlsZGVyOjppbnNlcnQpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpzaHJpbmtU
b0ZpdCk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oOgorICAgICAgICAoV1RG
OjpTdHJpbmdCdWlsZGVyOjpTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVp
bGRlcjo6YXBwZW5kKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kTnVtYmVy
KToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6cHJlcGVuZCk6CisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6Omluc2VydCk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnRv
U3RyaW5nUHJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJl
bGVhc2VTdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpsZW5ndGgpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNpemUpOgorICAgICAgICAoV1RGOjpTdHJpbmdC
dWlsZGVyOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmNoYXJhY3RlcnMpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjbGVhcik6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxk
ZXI6OnN3YXApOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjYXBhY2l0eSk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnRyeVJldGFpbik6CisgICAgICAgICogd3RmL3RleHQv
V1RGU3RyaW5nLmg6CisKIDIwMTEtMDgtMjUgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJn
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXhpbmcgYnJva2VuIGJ1aWxkIGR1ZSB0byB1bnVzZWQg
dmFyaWFibGVzIGluIHJlbGVhc2UgbW9kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMiwxMiArNDAyLDE2IEBA
IF9fWk4zV1RGMTJjcmVhdGVUaHJlYWRFUEZQdlMwX0VTMF9QS2MKIF9fWk4zV1RGMTJkZXRhY2hU
aHJlYWRFagogX19aTjNXVEYxMmlzTWFpblRocmVhZEV2CiBfX1pOM1dURjEycmFuZG9tTnVtYmVy
RXYKLV9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyMTFyZWlmeVN0cmluZ0V2CiBfX1pOM1dURjEzU3Ry
aW5nQnVpbGRlcjExc2hyaW5rVG9GaXRFdgorX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNGFsbG9j
YXRlQnVmZmVyRVBLdGpqagogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0
eUVqCi1fX1pOM1dURjEzU3RyaW5nQnVpbGRlcjZhcHBlbmRFUEtjagotX19aTjNXVEYxM1N0cmlu
Z0J1aWxkZXI2YXBwZW5kRVBLdGoKLV9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyNnJlc2l6ZUVqCitf
X1pOM1dURjEzU3RyaW5nQnVpbGRlcjE5aW5zZXJ0VW5pbml0aWFsaXplZEVqagorX19aTjNXVEYx
M1N0cmluZ0J1aWxkZXI0Z3Jvd0VqCitfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjZpbnNlcnRFUEtj
amoKK19fWk4zV1RGMTNTdHJpbmdCdWlsZGVyNmluc2VydEVQS3RqagorX19aTjNXVEYxM1N0cmlu
Z0J1aWxkZXI2cmVtb3ZlRWpqCitfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjZzaHJpbmtFagorX19a
TkszV1RGMTNTdHJpbmdCdWlsZGVyMTFyZWlmeVN0cmluZ0V2CiBfX1pOM1dURjEzV1RGVGhyZWFk
RGF0YTEwc3RhdGljRGF0YUUKIF9fWk4zV1RGMTNXVEZUaHJlYWREYXRhQzFFdgogX19aTjNXVEYx
M1dURlRocmVhZERhdGFEMUV2CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUub3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLm9yZGVyCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5vcmRlcgkod29ya2luZyBjb3B5KQpAQCAtMzIzLDExICszMjMsNiBAQCBf
X1pOM0pTQzdVU3RyaW5nQzFFUEt0agogX19aTjNKU0MxM0xpdGVyYWxQYXJzZXI1TGV4ZXIzbGV4
RVJOUzFfMThMaXRlcmFsUGFyc2VyVG9rZW5FCiBfX1pOM0pTQzEzTGl0ZXJhbFBhcnNlcjVwYXJz
ZUVOUzBfMTFQYXJzZXJTdGF0ZUUKIF9fWk4zSlNDN0pTQXJyYXlDMUVSTlNfMTJKU0dsb2JhbERh
dGFFUE5TXzlTdHJ1Y3R1cmVFCi1fX1pOM1dURjEzU3RyaW5nQnVpbGRlcjZhcHBlbmRFUEt0agot
X19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxOWFwcGVuZFVuaW5pdGlhbGl6ZWRFagotX19aTjNXVEYx
M1N0cmluZ0J1aWxkZXIxNGFsbG9jYXRlQnVmZmVyRVBLdGoKLV9fWk4zV1RGMTNTdHJpbmdCdWls
ZGVyMTFzaHJpbmtUb0ZpdEV2Ci1fX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExcmVpZnlTdHJpbmdF
dgogX19aTjNKU0M3SlNBcnJheTRwdXNoRVBOU185RXhlY1N0YXRlRU5TXzdKU1ZhbHVlRQogX19a
TjNKU0M3SlNBcnJheTIwaW5jcmVhc2VWZWN0b3JMZW5ndGhFagogX19aTjNXVEYxNHRyeUZhc3RS
ZWFsbG9jRVB2bQpAQCAtNzkwLDcgKzc4NSw2IEBAIF9fWk4zSlNDMTJGdW5jRGVjbE5vZGUxMmVt
aXRCeXRlY29kZUVSTlMKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDE1Y29weUdsb2JhbHNGcm9t
RVJOU18xMlJlZ2lzdGVyRmlsZUUKIF9fWk5LM1dURjEyQXRvbWljU3RyaW5nNWxvd2VyRXYKIF9f
Wk4zSlNDNDFjb25zdHJ1Y3RGdW5jdGlvblNraXBwaW5nRXZhbEVuYWJsZWRDaGVja0VQTlNfOUV4
ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVSS05TXzdBcmdMaXN0RVJLTlNfMTBJZGVudGlm
aWVyRVJLTlNfN1VTdHJpbmdFaQotX19aTjNXVEYxM1N0cmluZ0J1aWxkZXI2YXBwZW5kRVBLY2oK
IF9fWk5LM0pTQzIxVVN0cmluZ1NvdXJjZVByb3ZpZGVyNmxlbmd0aEV2CiBfX1pOM0pTQzE4RnVu
Y3Rpb25FeGVjdXRhYmxlMTRmcm9tR2xvYmFsQ29kZUVSS05TXzEwSWRlbnRpZmllckVQTlNfOUV4
ZWNTdGF0ZUVQTlNfOERlYnVnZ2VyRVJLTlNfMTBTb3VyY2VDb2RlRVBQTlNfOEpTT2JqZWN0RQog
X19aTkszSlNDMjFVU3RyaW5nU291cmNlUHJvdmlkZXI0ZGF0YUV2CkBAIC0xMTgyLDcgKzExNzYs
NiBAQCBfY3RpX29wX2dldF9ieV9pZF9jdXN0b21fc3R1YgogX19aTjNKU0MxMEFTVEJ1aWxkZXIx
Mm1ha2VNdWx0Tm9kZUVQTlNfMTRFeHByZXNzaW9uTm9kZUVTMl9iCiBfX1pOM0pTQzNKSVQxMWVt
aXRfb3BfbXVsRVBOU18xMUluc3RydWN0aW9uRQogX19aTjNKU0MzSklUMTVlbWl0U2xvd19vcF9t
dWxFUE5TXzExSW5zdHJ1Y3Rpb25FUlBOU18xM1Nsb3dDYXNlRW50cnlFCi1fX1pOM1dURjEzU3Ry
aW5nQnVpbGRlcjE1cmVzZXJ2ZUNhcGFjaXR5RWoKIF9fWk4zV1RGMTdlcXVhbElnbm9yaW5nQ2Fz
ZUVQS3RQS2NqCiBfX1pOM1dURjRkdG9hRVBjZFJiUmlSagogX19aTkszV1RGMTNEZWNpbWFsTnVt
YmVyMjhidWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsRXYKQEAgLTE3NjAsNyArMTc1Myw2IEBA
IF9KU0dhcmJhZ2VDb2xsZWN0CiBfX1pOM0pTQzE2SlNDYWxsYmFja09iamVjdElOU18xNEpTR2xv
YmFsT2JqZWN0RUUxM3Zpc2l0Q2hpbGRyZW5FUk5TXzlNYXJrU3RhY2tFCiBfX1pOM0pTQzExbWFr
ZVVTdHJpbmdJTlNfN1VTdHJpbmdFUzFfRUVTMV9UX1QwXwogX19aTjNXVEYxM3RyeU1ha2VTdHJp
bmdJTjNKU0M3VVN0cmluZ0VTMl9FRU5TXzEwUGFzc1JlZlB0cklOU18xMFN0cmluZ0ltcGxFRUVU
X1QwXwotX19aTjNXVEYxM1N0cmluZ0J1aWxkZXI2YXBwZW5kRWMKIF9KU0V2YWx1YXRlU2NyaXB0
CiBfX1pOSzNKU0MxNEpTR2xvYmFsT2JqZWN0MTdzdXBwb3J0c1Byb2ZpbGluZ0V2CiBfX1pOSzNK
U0MxNEpTR2xvYmFsT2JqZWN0MjJzdXBwb3J0c1JpY2hTb3VyY2VJbmZvRXYKQEAgLTIyNjYsNyAr
MjI1OCw2IEBAIF9fWk4zV1RGNlZlY3RvcklOM0pTQzExV2Fsa2VyU3RhdGVFTG0xNkUKIF9fWk4z
SlNDMTFIYW5kbGVTdGFjazRncm93RXYKIF9fWk4zSlNDMThSZWdFeHBNYXRjaGVzQXJyYXkzcHV0
RVBOU185RXhlY1N0YXRlRWpOU183SlNWYWx1ZUUKIF9fWk5LM0pTQzI3UHJvcGVydHlOYW1lRm9y
RnVuY3Rpb25DYWxsNXZhbHVlRVBOU185RXhlY1N0YXRlRQotX19aTjNXVEYxM1N0cmluZ0J1aWxk
ZXI2cmVzaXplRWoKIF9fWk4zSlNDOEpTUGFyc2VyMTdwYXJzZUZ1bmN0aW9uSW5mb0lMTlMwXzIw
RnVuY3Rpb25SZXF1aXJlbWVudHNFMUVMYjBFTlNfMTNTeW50YXhDaGVja2VyRUVFYlJUMV9SUEtO
U18xMElkZW50aWZpZXJFUk5TNF8xOUZvcm1hbFBhcmFtZXRlckxpc3RFUk5TNF8xMkZ1bmN0aW9u
Qm9keUVSaVNFX1NFXwogX19aTjNKU0NMMTlkYXRlUHJvdG9GdW5jVG9KU09ORVBOU185RXhlY1N0
YXRlRQogX19aTjNKU0M5RXhlY1N0YXRlOWRhdGVUYWJsZUVQUzBfCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0ZvcndhcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL0ZvcndhcmQuaAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL0ZvcndhcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICBjbGFzcyBFbmNvZGVyOwogICAgIGNsYXNzIFN0cmluZzsKICAgICBj
bGFzcyBTdHJpbmdCdWZmZXI7CisgICAgY2xhc3MgU3RyaW5nQnVpbGRlcjsKICAgICBjbGFzcyBT
dHJpbmdJbXBsOwogfQogCkBAIC01OSw2ICs2MCw3IEBAIHVzaW5nIFdURjo6RW5jb2RlcjsKIHVz
aW5nIFdURjo6RGVjb2RlcjsKIHVzaW5nIFdURjo6U3RyaW5nOwogdXNpbmcgV1RGOjpTdHJpbmdC
dWZmZXI7Cit1c2luZyBXVEY6OlN0cmluZ0J1aWxkZXI7CiB1c2luZyBXVEY6OlN0cmluZ0ltcGw7
CiAKICNlbmRpZiAvLyBXVEZfRm9yd2FyZF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsOSBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotdm9pZCBTdHJpbmdC
dWlsZGVyOjpyZWlmeVN0cmluZygpCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUNhcGFj
aXR5ID0gMTY7CisKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6cmVpZnlTdHJpbmcoKSBjb25zdAogewog
ICAgIC8vIENoZWNrIGlmIHRoZSBzdHJpbmcgYWxyZWFkeSBleGlzdHMuCiAgICAgaWYgKCFtX3N0
cmluZy5pc051bGwoKSkgewpAQCAtNTEsNyArNTMsMjEgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpy
ZWlmeVN0cmluZygpCiAgICAgICAgIDogU3RyaW5nSW1wbDo6Y3JlYXRlKG1fYnVmZmVyLCAwLCBt
X2xlbmd0aCk7CiB9CiAKLXZvaWQgU3RyaW5nQnVpbGRlcjo6cmVzaXplKHVuc2lnbmVkIG5ld1Np
emUpCit2b2lkIFN0cmluZ0J1aWxkZXI6OnJlbW92ZSh1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWdu
ZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChwb3NpdGlvbiA8IG1fbGVuZ3RoKTsKKyAgICBBU1NF
UlQocG9zaXRpb24gKyBsZW5ndGggPD0gbV9sZW5ndGgpOworICAgIGlmICghbGVuZ3RoKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAocG9zaXRpb24gKyBsZW5ndGggPCBtX2xlbmd0aCkgewor
ICAgICAgICBVQ2hhciogYnVmZmVyID0gY2hhcmFjdGVycygpOworICAgICAgICBtZW1tb3ZlKGJ1
ZmZlciArIHBvc2l0aW9uLCBidWZmZXIgKyBwb3NpdGlvbiArIGxlbmd0aCwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihtX2xlbmd0aCAtIHBvc2l0aW9uIC0gbGVuZ3RoKSAqIHNpemVvZihVQ2hhcikpOwor
ICAgIH0KKyAgICBtX2xlbmd0aCAtPSBsZW5ndGg7Cit9CisKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6
c2hyaW5rKHVuc2lnbmVkIG5ld1NpemUpCiB7CiAgICAgLy8gQ2hlY2sgbmV3U2l6ZSA8IG1fbGVu
Z3RoLCBoZW5jZSBtX2xlbmd0aCA+IDAuCiAgICAgQVNTRVJUKG5ld1NpemUgPD0gbV9sZW5ndGgp
OwpAQCAtNjIsNyArNzgsNyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2l6ZSh1bnNpZ25lZCBu
ZXdTCiAgICAgLy8gSWYgdGhlcmUgaXMgYSBidWZmZXIsIHdlIG9ubHkgbmVlZCB0byBkdXBsaWNh
dGUgaXQgaWYgaXQgaGFzIG1vcmUgdGhhbiBvbmUgcmVmLgogICAgIGlmIChtX2J1ZmZlcikgewog
ICAgICAgICBpZiAoIW1fYnVmZmVyLT5oYXNPbmVSZWYoKSkKLSAgICAgICAgICAgIGFsbG9jYXRl
QnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzKCksIG1fYnVmZmVyLT5sZW5ndGgoKSk7CisgICAg
ICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVycygpLCBtX2J1ZmZlci0+
bGVuZ3RoKCksIDAsIDApOwogICAgICAgICBtX2xlbmd0aCA9IG5ld1NpemU7CiAgICAgICAgIG1f
c3RyaW5nID0gU3RyaW5nKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTc2LDI2ICs5MiwzOCBAQCB2
b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2l6ZSh1bnNpZ25lZCBuZXdTCiAgICAgbV9zdHJpbmcgPSBT
dHJpbmdJbXBsOjpjcmVhdGUobV9zdHJpbmcuaW1wbCgpLCAwLCBuZXdTaXplKTsKIH0KIAordm9p
ZCBTdHJpbmdCdWlsZGVyOjpncm93KHVuc2lnbmVkIG5ld1NpemUpCit7CisgICAgQVNTRVJUKG5l
d1NpemUgPj0gbV9sZW5ndGgpOworICAgIGlmIChuZXdTaXplID09IG1fbGVuZ3RoKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpbnNlcnRVbmluaXRpYWxpemVkKG5ld1NpemUgLSBtX2xlbmd0aCwg
bV9sZW5ndGgpOworfQorCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2VydmVDYXBhY2l0eSh1bnNp
Z25lZCBuZXdDYXBhY2l0eSkKIHsKICAgICBpZiAobV9idWZmZXIpIHsKICAgICAgICAgLy8gSWYg
dGhlcmUgaXMgYWxyZWFkeSBhIGJ1ZmZlciwgdGhlbiBncm93IGlmIG5lY2Vzc2FyeS4KICAgICAg
ICAgaWYgKG5ld0NhcGFjaXR5ID4gbV9idWZmZXItPmxlbmd0aCgpKQotICAgICAgICAgICAgYWxs
b2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnMoKSwgbmV3Q2FwYWNpdHkpOworICAgICAg
ICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnMoKSwgbmV3Q2FwYWNpdHks
IDAsIDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEdyb3cgdGhlIHN0cmluZywgaWYgbmVj
ZXNzYXJ5LgogICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBtX2xlbmd0aCkKLSAgICAgICAgICAg
IGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJhY3RlcnMoKSwgbmV3Q2FwYWNpdHkpOworICAg
ICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFjdGVycygpLCBuZXdDYXBhY2l0
eSwgMCwgMCk7CiAgICAgfQogfQogCiAvLyBBbGxvY2F0ZSBhIG5ldyBidWZmZXIsIGNvcHlpbmcg
aW4gY3VycmVudENoYXJhY3RlcnMgKHRoZXNlIG1heSBjb21lIGZyb20gZWl0aGVyIG1fc3RyaW5n
CiAvLyBvciBtX2J1ZmZlciwgIG5laXRoZXIgd2lsbCBiZSByZWFzc2lnbmVkIHVudGlsIHRoZSBj
b3B5IGhhcyBjb21wbGV0ZWQpLgotdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihj
b25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQor
dm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciogY3VycmVudENo
YXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHksIHVuc2lnbmVkIGluc2VydExlbmd0
aCwgdW5zaWduZWQgaW5zZXJ0UG9zaXRpb24pCiB7CiAgICAgLy8gQ29weSB0aGUgZXhpc3Rpbmcg
ZGF0YSBpbnRvIGEgbmV3IGJ1ZmZlciwgc2V0IHJlc3VsdCB0byBwb2ludCB0byB0aGUgZW5kIG9m
IHRoZSBleGlzdGluZyBkYXRhLgotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBidWZmZXIgPSBTdHJp
bmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJh
Y3RlcnMpOwotICAgIG1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnMsIGN1cnJlbnRDaGFyYWN0ZXJz
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVuZ3RoKSAqIHNpemVvZihVQ2hhcikpOyAvLyBUaGlz
IGNhbid0IG92ZXJmbG93LgorICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBidWZmZXIgPSBTdHJpbmdJ
bXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHJlcXVpcmVkQ2FwYWNpdHksIG1fYnVmZmVyQ2hhcmFj
dGVycyk7CisgICAgaWYgKGluc2VydFBvc2l0aW9uID4gMCkKKyAgICAgICAgbWVtY3B5KG1fYnVm
ZmVyQ2hhcmFjdGVycywgY3VycmVudENoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4oaW5z
ZXJ0UG9zaXRpb24pICogc2l6ZW9mKFVDaGFyKSk7CisgICAgaWYgKGluc2VydFBvc2l0aW9uIDwg
bV9sZW5ndGgpCisgICAgICAgIG1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnMgKyBpbnNlcnRQb3Np
dGlvbiArIGluc2VydExlbmd0aCwgY3VycmVudENoYXJhY3RlcnMgKyBpbnNlcnRQb3NpdGlvbiwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aCAtIGluc2VydFBvc2l0aW9uKSAqIHNpemVvZihV
Q2hhcikpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgogICAgIG1fYnVmZmVy
ID0gYnVmZmVyLnJlbGVhc2UoKTsKQEAgLTEwNCw3ICsxMzIsNyBAQCB2b2lkIFN0cmluZ0J1aWxk
ZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0CiAKIC8vIE1ha2UgJ2xlbmd0aCcgYWRkaXRpb25hbCBj
YXBhY2l0eSBiZSBhdmFpbGFibGUgaW4gbV9idWZmZXIsIHVwZGF0ZSBtX3N0cmluZyAmIG1fbGVu
Z3RoLAogLy8gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHN0b3JhZ2Uu
Ci1VQ2hhciogU3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5n
dGgpCitVQ2hhciogU3RyaW5nQnVpbGRlcjo6aW5zZXJ0VW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgsIHVuc2lnbmVkIHBvc2l0aW9uKQogewogICAgIEFTU0VSVChsZW5ndGgpOwogCkBAIC0x
MTksNDAgKzE0Nyw0MiBAQCBVQ2hhciogU3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXpl
CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGJ1ZmZlciBhbHJlYWR5IGhhcyBzdWZmaWNpZW50
IGNhcGFjaXR5LgogICAgICAgICBpZiAocmVxdWlyZWRMZW5ndGggPD0gbV9idWZmZXItPmxlbmd0
aCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoID0gbV9sZW5ndGg7CiAg
ICAgICAgICAgICBtX3N0cmluZyA9IFN0cmluZygpOworICAgICAgICAgICAgaWYgKHBvc2l0aW9u
IDwgbV9sZW5ndGgpCisgICAgICAgICAgICAgICAgbWVtbW92ZShtX2J1ZmZlckNoYXJhY3RlcnMg
KyBwb3NpdGlvbiArIGxlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzICsgcG9zaXRpb24sIHN0YXRp
Y19jYXN0PHNpemVfdD4obV9sZW5ndGggLSBwb3NpdGlvbikgKiBzaXplb2YoVUNoYXIpKTsKICAg
ICAgICAgICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5ndGg7Ci0gICAgICAgICAgICByZXR1cm4g
bV9idWZmZXJDaGFyYWN0ZXJzICsgY3VycmVudExlbmd0aDsKKyAgICAgICAgICAgIHJldHVybiBt
X2J1ZmZlckNoYXJhY3RlcnMgKyBwb3NpdGlvbjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFdl
IG5lZWQgdG8gcmVhbGxvYyB0aGUgYnVmZmVyLgotICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1
ZmZlci0+Y2hhcmFjdGVycygpLCBzdGQ6Om1heChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXItPmxl
bmd0aCgpICogMikpOworICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlckNoYXJhY3RlcnMs
IHN0ZDo6bWF4KHJlcXVpcmVkTGVuZ3RoLCBzdGQ6Om1heChtaW5pbXVtQ2FwYWNpdHksIG1fYnVm
ZmVyLT5sZW5ndGgoKSAqIDIpKSwgbGVuZ3RoLCBwb3NpdGlvbik7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKG1fc3RyaW5nLmxlbmd0aCgpID09IG1fbGVuZ3RoKTsKLSAgICAgICAgYWxs
b2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFjdGVycygpLCBzdGQ6Om1heChyZXF1aXJlZExlbmd0
aCwgcmVxdWlyZWRMZW5ndGggKiAyKSk7CisgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5n
LmNoYXJhY3RlcnMoKSwgc3RkOjptYXgocmVxdWlyZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1D
YXBhY2l0eSwgbV9sZW5ndGggKiAyKSksIGxlbmd0aCwgcG9zaXRpb24pOwogICAgIH0KIAotICAg
IFVDaGFyKiByZXN1bHQgPSBtX2J1ZmZlckNoYXJhY3RlcnMgKyBtX2xlbmd0aDsKICAgICBtX2xl
bmd0aCA9IHJlcXVpcmVkTGVuZ3RoOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1f
YnVmZmVyQ2hhcmFjdGVycyArIHBvc2l0aW9uOwogfQogCi12b2lkIFN0cmluZ0J1aWxkZXI6OmFw
cGVuZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBTdHJp
bmdCdWlsZGVyOjppbnNlcnQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQgcG9zaXRpb24pCiB7CiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVy
bjsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CisgICAgQVNTRVJUKHBvc2l0aW9uIDw9IG1fbGVu
Z3RoKTsKIAotICAgIG1lbWNweShhcHBlbmRVbmluaXRpYWxpemVkKGxlbmd0aCksIGNoYXJhY3Rl
cnMsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIDIpOworICAgIG1lbWNweShpbnNlcnRV
bmluaXRpYWxpemVkKGxlbmd0aCwgcG9zaXRpb24pLCBjaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGxlbmd0aCkgKiAyKTsKIH0KIAotdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29u
c3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBTdHJpbmdCdWlsZGVy
OjppbnNlcnQoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25l
ZCBwb3NpdGlvbikKIHsKICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwogICAgIEFT
U0VSVChjaGFyYWN0ZXJzKTsKKyAgICBBU1NFUlQocG9zaXRpb24gPD0gbV9sZW5ndGgpOwogCi0g
ICAgVUNoYXIqIGRlc3QgPSBhcHBlbmRVbmluaXRpYWxpemVkKGxlbmd0aCk7CisgICAgVUNoYXIq
IGRlc3QgPSBpbnNlcnRVbmluaXRpYWxpemVkKGxlbmd0aCwgcG9zaXRpb24pOwogICAgIGNvbnN0
IGNoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7CiAgICAgd2hpbGUgKGNoYXJhY3RlcnMg
PCBlbmQpCiAgICAgICAgICooZGVzdCsrKSA9ICooY29uc3QgdW5zaWduZWQgY2hhciopKGNoYXJh
Y3RlcnMrKyk7CkBAIC0xNjQsOCArMTk0LDkgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpzaHJpbmtU
b0ZpdCgpCiAgICAgaWYgKG1fYnVmZmVyICYmIG1fYnVmZmVyLT5sZW5ndGgoKSA+IChtX2xlbmd0
aCArIChtX2xlbmd0aCA+PiAyKSkpIHsKICAgICAgICAgVUNoYXIqIHJlc3VsdDsKICAgICAgICAg
bV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCByZXN1
bHQpOwotICAgICAgICBtZW1jcHkocmVzdWx0LCBtX2J1ZmZlci0+Y2hhcmFjdGVycygpLCBzdGF0
aWNfY2FzdDxzaXplX3Q+KG1fbGVuZ3RoKSAqIDIpOyAvLyBUaGlzIGNhbid0IG92ZXJmbG93Lgor
ICAgICAgICBtZW1jcHkocmVzdWx0LCBtX2J1ZmZlckNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNp
emVfdD4obV9sZW5ndGgpICogMik7IC8vIFRoaXMgY2FuJ3Qgb3ZlcmZsb3cuCiAgICAgICAgIG1f
YnVmZmVyID0gMDsKKyAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzID0gMDsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMyArMzUsMzAgQEAgY2xhc3MgU3Ry
aW5nQnVpbGRlciB7CiBwdWJsaWM6CiAgICAgU3RyaW5nQnVpbGRlcigpCiAgICAgICAgIDogbV9s
ZW5ndGgoMCkKKyAgICAgICAgLCBtX2J1ZmZlckNoYXJhY3RlcnMoMCkKICAgICB7CiAgICAgfQog
Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCk7Ci0gICAgdm9pZCBhcHBl
bmQoY29uc3QgY2hhciosIHVuc2lnbmVkKTsKKyAgICBTdHJpbmdCdWlsZGVyKGNvbnN0IFN0cmlu
Z0J1aWxkZXImIGJ1aWxkZXIpCisgICAgICAgIDogbV9sZW5ndGgoMCkKKyAgICB7CisgICAgICAg
IGFwcGVuZChidWlsZGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgaW5zZXJ0KGNoYXJh
Y3RlcnMsIGxlbmd0aCwgbV9sZW5ndGgpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kKGNvbnN0
IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIGluc2Vy
dChjaGFyYWN0ZXJzLCBsZW5ndGgsIG1fbGVuZ3RoKTsKKyAgICB9CiAKICAgICB2b2lkIGFwcGVu
ZChjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIC8vIElmIHdlJ3JlIGFwcGVu
ZGluZyB0byBhbiBlbXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBpcyBub3QgYnVmZmVyCi0gICAgICAg
IC8vIChpbiBjYXNlIHJlc2VydmVDYXBhY2l0eSBoYXMgYmVlbiBjYWxsZWQpIHRoZW4ganVzdCBy
ZXRhaW4gdGhlCi0gICAgICAgIC8vIHN0cmluZy4KLSAgICAgICAgaWYgKCFtX2xlbmd0aCAmJiAh
bV9idWZmZXIpIHsKLSAgICAgICAgICAgIG1fc3RyaW5nID0gc3RyaW5nOwotICAgICAgICAgICAg
bV9sZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSk7
CisgICAgICAgIGlmICghdHJ5UmV0YWluKHN0cmluZykpCisgICAgICAgICAgICBhcHBlbmQoc3Ry
aW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpKTsKICAgICB9CiAKICAgICB2b2lkIGFw
cGVuZChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQpAQCAtNjgsMTQgKzc1LDkyIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGFwcGVuZCgmYywgMSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmQoY2hh
ciBjKQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCiAgICAg
ewotICAgICAgICBpZiAobV9idWZmZXIgJiYgbV9sZW5ndGggPCBtX2J1ZmZlci0+bGVuZ3RoKCkg
JiYgbV9zdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnNbbV9s
ZW5ndGgrK10gPSAodW5zaWduZWQgY2hhciljOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBh
cHBlbmQoJmMsIDEpOworICAgICAgICBpZiAoIXRyeVJldGFpbihidWlsZGVyKSkKKyAgICAgICAg
ICAgIGFwcGVuZChidWlsZGVyLmNoYXJhY3RlcnMoKSwgYnVpbGRlci5sZW5ndGgoKSk7CisgICAg
fQorCisgICAgdm9pZCBhcHBlbmROdW1iZXIodW5zaWduZWQgY2hhciBudW1iZXIpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCBudW1iZXJMZW5ndGggPSBudW1iZXIgPiA5OSA/IDMgOiAobnVtYmVy
ID4gOSA/IDIgOiAxKTsKKyAgICAgICAgVUNoYXIqIGJ1ZmZlciA9IGluc2VydFVuaW5pdGlhbGl6
ZWQobnVtYmVyTGVuZ3RoLCBtX2xlbmd0aCk7CisKKyAgICAgICAgc3dpdGNoIChudW1iZXJMZW5n
dGgpIHsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgYnVmZmVyWzJdID0gbnVtYmVyICUg
MTAgKyAnMCc7CisgICAgICAgICAgICBudW1iZXIgLz0gMTA7CisgICAgICAgICAgICAvLyBmYWxs
IHRocm91Z2gKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgYnVmZmVyWzFdID0gbnVtYmVy
ICUgMTAgKyAnMCc7CisgICAgICAgICAgICBudW1iZXIgLz0gMTA7CisgICAgICAgICAgICAvLyBm
YWxsIHRocm91Z2gKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgYnVmZmVyWzBdID0gbnVt
YmVyICUgMTAgKyAnMCc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHByZXBlbmQoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIGlu
c2VydChjaGFyYWN0ZXJzLCBsZW5ndGgsIDApOworICAgIH0KKworICAgIHZvaWQgcHJlcGVuZChj
b25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBp
bnNlcnQoY2hhcmFjdGVycywgbGVuZ3RoLCAwKTsKKyAgICB9CisKKyAgICB2b2lkIHByZXBlbmQo
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICBpZiAoIXRyeVJldGFpbihzdHJp
bmcpKQorICAgICAgICAgICAgcHJlcGVuZChzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVu
Z3RoKCkpOworICAgIH0KKworICAgIHZvaWQgcHJlcGVuZChjb25zdCBjaGFyKiBjaGFyYWN0ZXJz
KQorICAgIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnMpCisgICAgICAgICAgICBwcmVwZW5kKGNo
YXJhY3RlcnMsIHN0cmxlbihjaGFyYWN0ZXJzKSk7CisgICAgfQorCisgICAgdm9pZCBwcmVwZW5k
KFVDaGFyIGMpCisgICAgeworICAgICAgICBwcmVwZW5kKCZjLCAxKTsKKyAgICB9CisKKyAgICB2
b2lkIHByZXBlbmQoY29uc3QgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKKyAgICB7CisgICAgICAg
IGlmICghdHJ5UmV0YWluKGJ1aWxkZXIpKQorICAgICAgICAgICAgcHJlcGVuZChidWlsZGVyLmNo
YXJhY3RlcnMoKSwgYnVpbGRlci5sZW5ndGgoKSk7CisgICAgfQorCisgICAgdm9pZCBpbnNlcnQo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgcG9zaXRp
b24pOworICAgIHZvaWQgaW5zZXJ0KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQgcG9zaXRpb24pOworCisgICAgdm9pZCBpbnNlcnQoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIHVuc2lnbmVkIHBvc2l0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCF0cnlSZXRh
aW4oc3RyaW5nKSkKKyAgICAgICAgICAgIGluc2VydChzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJp
bmcubGVuZ3RoKCksIHBvc2l0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIGluc2VydChjb25zdCBj
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBwb3NpdGlvbikKKyAgICB7CisgICAgICAgIGlmIChj
aGFyYWN0ZXJzKQorICAgICAgICAgICAgaW5zZXJ0KGNoYXJhY3RlcnMsIHN0cmxlbihjaGFyYWN0
ZXJzKSwgcG9zaXRpb24pOwogICAgIH0KIAorICAgIHZvaWQgaW5zZXJ0KFVDaGFyIGMsIHVuc2ln
bmVkIHBvc2l0aW9uKQorICAgIHsKKyAgICAgICAgaW5zZXJ0KCZjLCAxLCBwb3NpdGlvbik7Cisg
ICAgfQorCisgICAgdm9pZCBpbnNlcnQoY29uc3QgU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgdW5z
aWduZWQgcG9zaXRpb24pCisgICAgeworICAgICAgICBpZiAoIXRyeVJldGFpbihidWlsZGVyKSkK
KyAgICAgICAgICAgIGluc2VydChidWlsZGVyLmNoYXJhY3RlcnMoKSwgYnVpbGRlci5sZW5ndGgo
KSwgcG9zaXRpb24pOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIHBvc2l0aW9u
LCB1bnNpZ25lZCBsZW5ndGgpOworCiAgICAgU3RyaW5nIHRvU3RyaW5nKCkKICAgICB7CiAgICAg
ICAgIGlmIChtX3N0cmluZy5pc051bGwoKSkgewpAQCAtODUsMzMgKzE3MCw4MiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX3N0cmluZzsKICAgICB9CiAKLSAgICBTdHJpbmcgdG9TdHJpbmdQ
cmVzZXJ2ZUNhcGFjaXR5KCkKKyAgICBTdHJpbmcgdG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX3N0cmluZy5pc051bGwoKSkKICAgICAgICAgICAg
IHJlaWZ5U3RyaW5nKCk7CiAgICAgICAgIHJldHVybiBtX3N0cmluZzsKICAgICB9CiAKLSAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdAorICAgIFN0cmluZyByZWxlYXNlU3RyaW5nKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHRvU3Ry
aW5nKCk7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKwogICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFsZW5ndGgoKTsgfQogCiAgICAgdm9pZCBy
ZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgbmV3Q2FwYWNpdHkpOwogCi0gICAgdm9pZCByZXNpemUo
dW5zaWduZWQgbmV3U2l6ZSk7CisgICAgLy8gU2hyaW5rIHRoZSBzaXplIHRvIG5ld1NpemUgd2l0
aG91dCBhZmZlY3RpbmcgdGhlIGNhcGFjaXR5LgorICAgIHZvaWQgc2hyaW5rKHVuc2lnbmVkIG5l
d1NpemUpOworCisgICAgLy8gR3JvdyB0aGUgc2l6ZSB0byBuZXdTaXplIHdpdGhvdXQgYWZmZWN0
aW5nIHRoZSBjYXBhY2l0eS4KKyAgICB2b2lkIGdyb3codW5zaWduZWQgbmV3U2l6ZSk7CisKKyAg
ICB2b2lkIHJlc2l6ZSh1bnNpZ25lZCBuZXdTaXplKQorICAgIHsKKyAgICAgICAgaWYgKG5ld1Np
emUgPiBtX2xlbmd0aCkKKyAgICAgICAgICAgIGdyb3cobmV3U2l6ZSk7CisgICAgICAgIGVsc2Ug
aWYgKG5ld1NpemUgPCBtX2xlbmd0aCkKKyAgICAgICAgICAgIHNocmluayhuZXdTaXplKTsKKyAg
ICB9CiAKKyAgICAvLyBTaHJpbmtzIHRoZSBidWZmZXIgdG8gdGhlIGN1cnJlbnQgbGVuZ3RoLgog
ICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKIAogICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQg
aSkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICBy
ZXR1cm4gY2hhcmFjdGVycygpW2ldOworICAgIH0KKworICAgIFVDaGFyJiBvcGVyYXRvcltdKHVu
c2lnbmVkIGkpCisgICAgeworICAgICAgICBBU1NFUlQoaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAg
cmV0dXJuIGNoYXJhY3RlcnMoKVtpXTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgU3RyaW5nJiBzdHJpbmcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG9TdHJpbmdQ
cmVzZXJ2ZUNhcGFjaXR5KCkgPT0gc3RyaW5nOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpID09IGJ1aWxkZXIudG9TdHJpbmdQcmVzZXJ2
ZUNhcGFjaXR5KCk7CisgICAgfQorCisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCFtX2xlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIG1fc3Ry
aW5nW2ldOworICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5nLmNoYXJhY3RlcnMoKTsKICAgICAg
ICAgQVNTRVJUKG1fYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJz
KClbaV07CisgICAgICAgIHJldHVybiBtX2J1ZmZlci0+Y2hhcmFjdGVycygpOworICAgIH0KKwor
ICAgIFVDaGFyKiBjaGFyYWN0ZXJzKCkKKyAgICB7CisgICAgICAgIGlmICghbV9sZW5ndGgpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKCFtX2J1ZmZlckNoYXJhY3RlcnMpCisg
ICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzKCksIG1fbGVuZ3Ro
LCAwLCAwKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFjdGVyczsKICAgICB9CiAKICAg
ICB2b2lkIGNsZWFyKCkKQEAgLTExOSwxNSArMjUzLDUzIEBAIHB1YmxpYzoKICAgICAgICAgbV9s
ZW5ndGggPSAwOwogICAgICAgICBtX3N0cmluZyA9IFN0cmluZygpOwogICAgICAgICBtX2J1ZmZl
ciA9IDA7CisgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVycyA9IDA7CisgICAgfQorCisgICAgdm9p
ZCBzd2FwKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCisgICAgeworICAgICAgICBzdGQ6OnN3YXAo
bV9sZW5ndGgsIGJ1aWxkZXIubV9sZW5ndGgpOworICAgICAgICBtX3N0cmluZy5zd2FwKGJ1aWxk
ZXIubV9zdHJpbmcpOworICAgICAgICBtX2J1ZmZlci5zd2FwKGJ1aWxkZXIubV9idWZmZXIpOwor
ICAgICAgICBzdGQ6OnN3YXAobV9idWZmZXJDaGFyYWN0ZXJzLCBidWlsZGVyLm1fYnVmZmVyQ2hh
cmFjdGVycyk7CiAgICAgfQogCisgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZmZXItPmxlbmd0aCgpIDogbV9sZW5ndGg7
CisgICAgfQogcHJpdmF0ZToKLSAgICB2b2lkIGFsbG9jYXRlQnVmZmVyKGNvbnN0IFVDaGFyKiBj
dXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOwotICAgIFVDaGFyKiBh
cHBlbmRVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgdm9pZCByZWlmeVN0cmlu
ZygpOworICAgIGJvb2wgdHJ5UmV0YWluKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAg
ICAgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nL3ByZXBlbmRpbmcvaW5zZXJ0aW5nIHRvIGFuIGVt
cHR5IHN0cmluZywgYW5kIHRoZXJlIGlzIG5vdCBidWZmZXIKKyAgICAgICAgLy8gKGluIGNhc2Ug
cmVzZXJ2ZUNhcGFjaXR5IGhhcyBiZWVuIGNhbGxlZCkgdGhlbiBqdXN0IHJldGFpbiB0aGUgc3Ry
aW5nLgorICAgICAgICBpZiAoIW1fbGVuZ3RoICYmICFtX2J1ZmZlcikgeworICAgICAgICAgICAg
bV9zdHJpbmcgPSBzdHJpbmc7CisgICAgICAgICAgICBtX2xlbmd0aCA9IHN0cmluZy5sZW5ndGgo
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBib29sIHRyeVJldGFpbihjb25zdCBTdHJpbmdCdWlsZGVyJiBi
dWlsZGVyKQorICAgIHsKKyAgICAgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nL3ByZXBlbmRpbmcv
aW5zZXJ0aW5nIHRvIGFuIGVtcHR5IHN0cmluZywgYW5kIHRoZXJlIGlzIG5vdCBidWZmZXIKKyAg
ICAgICAgLy8gKGluIGNhc2UgcmVzZXJ2ZUNhcGFjaXR5IGhhcyBiZWVuIGNhbGxlZCkgdGhlbiBq
dXN0IHJldGFpbiB0aGUgc3RyaW5nLgorICAgICAgICBpZiAoIW1fbGVuZ3RoICYmICFtX2J1ZmZl
cikgeworICAgICAgICAgICAgU3RyaW5nIHN0cmluZyA9IGJ1aWxkZXIudG9TdHJpbmdQcmVzZXJ2
ZUNhcGFjaXR5KCk7CisgICAgICAgICAgICBtX3N0cmluZyA9IHN0cmluZzsKKyAgICAgICAgICAg
IG1fbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgYWxsb2Nh
dGVCdWZmZXIoY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJl
ZENhcGFjaXR5LCB1bnNpZ25lZCBpbnNlcnRMZW5ndGgsIHVuc2lnbmVkIGluc2VydFBvc2l0aW9u
KTsKKyAgICBVQ2hhciogaW5zZXJ0VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIHVuc2ln
bmVkIGluc2VydFBvc2l0aW9uKTsKKyAgICB2b2lkIHJlaWZ5U3RyaW5nKCkgY29uc3Q7CiAKICAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICBTdHJpbmcgbV9zdHJpbmc7CisgICAgbXV0YWJsZSBT
dHJpbmcgbV9zdHJpbmc7CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fYnVmZmVyOwogICAgIFVD
aGFyKiBtX2J1ZmZlckNoYXJhY3RlcnM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvdGV4dC9XVEZTdHJpbmcuaAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1NiwzMSAr
NDU2LDYgQEAgaW5saW5lIHNpemVfdCByZXZlcnNlRmluZChjb25zdCBVQ2hhciogYwogICAgIHJl
dHVybiBpbmRleDsKIH0KIAotaW5saW5lIHZvaWQgYXBwZW5kKFZlY3RvcjxVQ2hhcj4mIHZlY3Rv
ciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgdmVjdG9yLmFwcGVuZChzdHJpbmcuY2hh
cmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCkpOwotfQotCi1pbmxpbmUgdm9pZCBhcHBlbmROdW1i
ZXIoVmVjdG9yPFVDaGFyPiYgdmVjdG9yLCB1bnNpZ25lZCBjaGFyIG51bWJlcikKLXsKLSAgICBp
bnQgbnVtYmVyTGVuZ3RoID0gbnVtYmVyID4gOTkgPyAzIDogKG51bWJlciA+IDkgPyAyIDogMSk7
Ci0gICAgc2l6ZV90IHZlY3RvclNpemUgPSB2ZWN0b3Iuc2l6ZSgpOwotICAgIHZlY3Rvci5ncm93
KHZlY3RvclNpemUgKyBudW1iZXJMZW5ndGgpOwotCi0gICAgc3dpdGNoIChudW1iZXJMZW5ndGgp
IHsKLSAgICBjYXNlIDM6Ci0gICAgICAgIHZlY3Rvclt2ZWN0b3JTaXplICsgMl0gPSBudW1iZXIg
JSAxMCArICcwJzsKLSAgICAgICAgbnVtYmVyIC89IDEwOwotCi0gICAgY2FzZSAyOgotICAgICAg
ICB2ZWN0b3JbdmVjdG9yU2l6ZSArIDFdID0gbnVtYmVyICUgMTAgKyAnMCc7Ci0gICAgICAgIG51
bWJlciAvPSAxMDsKLQotICAgIGNhc2UgMToKLSAgICAgICAgdmVjdG9yW3ZlY3RvclNpemVdID0g
bnVtYmVyICUgMTAgKyAnMCc7Ci0gICAgfQotfQotCiB0ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENo
YXJhY3RlcihVQ2hhcik+IGlubGluZSBib29sIGlzQWxsU3BlY2lhbENoYXJhY3RlcnMoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewpAQCAtNTExLDggKzQ4Niw2IEBAIFdURl9FWFBPUlRfUFJJ
VkFURSBjb25zdCBTdHJpbmcmIGVtcHR5U3QKIHVzaW5nIFdURjo6Q1N0cmluZzsKIHVzaW5nIFdU
Rjo6U3RyaW5nOwogdXNpbmcgV1RGOjplbXB0eVN0cmluZzsKLXVzaW5nIFdURjo6YXBwZW5kOwot
dXNpbmcgV1RGOjphcHBlbmROdW1iZXI7CiB1c2luZyBXVEY6OmNoYXJhY3RlcnNBcmVBbGxBU0NJ
STsKIHVzaW5nIFdURjo6Y2hhcmFjdGVyc0FyZUFsbExhdGluMTsKIHVzaW5nIFdURjo6Y2hhcmFj
dGVyc1RvSW50U3RyaWN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM4NDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNDYgQEAKKzIw
MTEtMDgtMjQgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXBsYWNlIHNvbWUgdXNhZ2VzIG9mIFZlY3RvcjxVQ2hhcj4gdG8gU3RyaW5nQnVpbGRl
ci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NjYx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBp
cyBwYXJ0IG9mIHdvcmsgdG8gc3VwcG9ydCA4LWJpdCBzdHJpbmcgYnVmZmVycy4KKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBBbGwgZXhpc3RpbmcgdW5pdCB0ZXN0cyBhbmQgbGF5b3V0IHRlc3RzIHNo
b3VsZCBydW4gYXMKKyAgICAgICAgYmVmb3JlLgorCisgICAgICAgICogY3NzL0NTU09NVXRpbHMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNlcmlhbGl6ZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVDaGFy
YWN0ZXJBc0NvZGVQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJZGVudGlmaWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZVN0cmluZyk6CisgICAgICAgICogY3NzL0NT
U09NVXRpbHMuaDoKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6OmNzc1RleHQpOgorICAgICAgICAqIGNzcy9D
U1NXcmFwU2hhcGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1dyYXBTaGFwZVJlY3Q6OmNz
c1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTV3JhcFNoYXBlQ2lyY2xlOjpjc3NUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1dyYXBTaGFwZUVsbGlwc2U6OmNzc1RleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTV3JhcFNoYXBlUG9seWdvbjo6Y3NzVGV4dCk6CisgICAgICAgICogZWRp
dGluZy9IVE1MSW50ZXJjaGFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEhUTUxU
ZXh0VG9JbnRlcmNoYW5nZUZvcm1hdCk6CisgICAgICAgICogZWRpdGluZy9NYXJrdXBBY2N1bXVs
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50
aXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OnNlcmlhbGl6ZU5v
ZGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydFRh
Zyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjpjb25jYXRlbmF0ZU1hcmt1cCk6
CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0
dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1
b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmROb2RlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZE5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kQ29tbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
RG9jdW1lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZE9wZW5UYWcpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZENsb3NlVGFnKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZENEQVRBU2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kU3RhcnRNYXJrdXApOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZEVuZE1hcmt1cCk6CisgICAgICAgICogZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5o
OgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNoYXJhY3Rlckl0ZXJhdG9yOjpzdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V29yZEF3YXJl
SXRlcmF0b3I6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JkQXdhcmVJdGVyYXRvcjo6
Y2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVDaGFyYWN0ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZlcjo6U2VhcmNoQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNlYXJjaEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1
ZmZlcjo6cHJlcGVuZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjpp
c0JhZE1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRN
YXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hCdWZmZXI6OnNlYXJjaCk6CisgICAgICAg
IChXZWJDb3JlOjpwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcik6CisgICAgICAgICog
ZWRpdGluZy9UZXh0SXRlcmF0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmluZ1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZSk6Cisg
ICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhTdHlsZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9wZW5UYWcpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRha2VSZXN1bHRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OnVybFRvTWFya3VwKToKKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVf
dW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNCb3VuZGFyeSk6CisgICAgICAg
IChXZWJDb3JlOjpuZXh0Qm91bmRhcnkpOgorICAgICAgICAqIGh0bWwvRE9NVG9rZW5MaXN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRva2VuTGlzdDo6cmVtb3ZlVG9rZW4pOgorICAgICAg
ICAqIGh0bWwvSFRNTEZvbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRm9u
dFNpemUpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN0cmlwcGVkUGxh
Y2Vob2xkZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3VtZW50Ojpwcm9jZXNzVGFnVG9rZW4p
OgorICAgICAgICAqIGh0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ByZWxvYWRTY2FubmVyOjpzY2FuKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1ByZWxvYWRTY2FubmVyOjplbWl0UnVsZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvQ1NTUHJl
bG9hZFNjYW5uZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0RG9j
dHlwZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjb25zdW1lSFRNTEVudGl0eSk6CisgICAgICAgICogaHRtbC9wYXJzZXIv
SFRNTEVudGl0eVBhcnNlci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNl
dFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnBy
b2Nlc3NNZXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6Y2hl
Y2tGb3JNZXRhQ2hhcnNldCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9t
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhUTUxJbnRlZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcik6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lczo6
UHJlbG9hZFRhc2s6OlByZWxvYWRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lczo6
UHJlbG9hZFRhc2s6OnByb2Nlc3NBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MVG9rZW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbjo6bmFtZSk6CisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6Om5h
bWVGb3JBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6cHJvY2Vz
c0VudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpuZXh0VG9rZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6dGVtcG9yYXJ5QnVmZmVySXMpOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVy
OjpFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyOjpFeHRlcm5hbENoYXJhY3RlclRva2VuQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0
ZXJUb2tlbkJ1ZmZlcjo6Z2l2ZVJlbWFpbmluZ1RvKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
cmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6dGFrZVJlbWFpbmluZ1do
aXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9y
SW5UYWJsZVRleHQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxWaWV3U291cmNlUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxWaWV3U291cmNlUGFyc2VyOjp1cGRhdGVUb2tlbml6ZXJTdGF0ZSk6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpo
YXNOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRBdHRyaWJ1dGVXaXRoTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjppc05hbWVPZklubGluZUV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpjb250YWluc0phdmFTY3JpcHRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRv
cjo6ZmlsdGVyUGFyYW1Ub2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjplcmFz
ZUF0dHJpYnV0ZUlmSW5qZWN0ZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVmFsdWU6OnRvSlNPTlN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHJpbmc6OndyaXRlSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JPYmplY3Q6OndyaXRlSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcnJh
eTo6d3JpdGVKU09OKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg6Cisg
ICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdCk6CisgICAgICAgICog
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6CisgICAgICAgICogcGFnZS9D
aHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzZXRUb29sVGlwKToKKyAgICAg
ICAgKiBwYWdlL0V2ZW50U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNl
OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6ZGlkRmlu
aXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cGFyc2VFdmVudFN0
cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cGFyc2VFdmVudFN0cmVhbUxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmNyZWF0ZU1lc3NhZ2VFdmVudCk6
CisgICAgICAgICogcGFnZS9FdmVudFNvdXJjZS5oOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMpOgorICAgICAgICAqIHBhZ2UvU2Vj
dXJpdHlPcmlnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OnRvU3Ry
aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmVuY29kZUZvckZpbGVOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OktVUkw6OmRlcHJlY2F0ZWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW5rSGFz
aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2xlYW5TbGFzaERvdERvdFNsYXNoZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6bWVyZ2VEb3VibGVTbGFzaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFuU2xhc2hEb3RT
bGFzaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFuUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
Ojp2aXNpdGVkVVJMSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnZpc2l0ZWRVUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW5r
SGFzaC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpzZXJpYWxpemVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRGF0
YU9iamVjdEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpzZXRVUkwp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZSk6CisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNV
OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRTdHJlYW06OnJlbGVhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dFN0cmVh
bS5oOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblN0cmVhbTo6c3RhcnRTdHJlYW0pOgorICAgICAgICAqIHJlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdENoYXJhY3RlcnNBbmRMZW5n
dGhGb3JIeXBoZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW46OkJ1ZmZlckZvckFwcGVuZGlu
Z0h5cGhlbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjptYXJrZXJUZXh0V2l0aFN1ZmZpeCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
dG9TeW1ib2xpYyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpzdWZmaXgpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnF1b3Rl
QW5kRXNjYXBlTm9uUHJpbnRhYmxlcyk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxGZW5jZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MRmVuY2Vk
Ojp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQ29kaW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJDb2Rpbmc6OmRlY29kZVN0cmluZyk6
CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhN
TEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYWRlcnMpOgorICAgICAgICAqIHhtbC9YUGF0
aEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuSWQ6OmV2YWx1YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Db25jYXQ6OmV2YWx1YXRlKToKKyAgICAg
ICAgKiB4bWwvWFBhdGhVdGlsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpzdHJpbmdW
YWx1ZSk6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OndyaXRlVG9TdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNhdmVS
ZXN1bHRUb1N0cmluZyk6CisgICAgICAgICogeG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVuY2VQ
YXJzZXJJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChXZWJDb3JlOjp1bmNvbnN1bWVDaGFyYWN0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UpOgorICAg
ICAgICAqIHhtbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpN
YXJrdXBUb2tlbkJhc2U6Ok1hcmt1cFRva2VuQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJr
dXBUb2tlbkJhc2U6OmFwcGVuZFRvQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
TWFya3VwVG9rZW5CYXNlOjpjaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cFRv
a2VuQmFzZTo6Y29tbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tlbkJhc2U6OnB1
YmxpY0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5CYXNlOjpzeXN0
ZW1JZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cFRva2VuQmFzZTo6cHJpbnRT
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5CYXNlOjpuYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6QXRvbWljTWFya3VwVG9rZW5CYXNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6Y2hhcmFjdGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNNYXJrdXBUb2tlbkJhc2U6OnB1YmxpY0lkZW50aWZp
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlOjpzeXN0ZW1JZGVu
dGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6aW5pdGlhbGl6ZUF0dHJpYnV0ZXMpOgorICAg
ICAgICAqIHhtbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2UpOgorICAgICAgICAqIHht
bC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmg6CisgICAgICAgICogeG1sL3Bh
cnNlci9YTUxUb2tlbi5oOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW46Om5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MVG9rZW46OnRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxU
b2tlbjo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbjo6cHJlZml4KToKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTFRva2VuOjpoYXNQcmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6QXRv
bWljWE1MVG9rZW46OkF0b21pY1hNTFRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY1hN
TFRva2VuOjp4bWxWZXJzaW9uKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTFRva2VuaXplci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjo6Om5hbWVGb3JBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MVG9rZW5pemVyOjpuZXh0VG9rZW4pOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1M
VHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NYTUxEZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpYTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0RPQ1RZUEUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3ND
aGFyYWN0ZXIpOgorCiAyMDExLTA4LTI1ICBMdWtlIE1hY3BoZXJzb24gICA8bWFjcGhlcnNvbkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IGFuaW1hdGlvbiBhbmQgdHJhbnNpdGlv
biBwcm9wZXJ0aWVzIGluIENTU1N0eWxlQXBwbHlQcm9wZXJ0eS4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NPTVV0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTT01VdGlscy5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U09NVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTEgQEAKICNpbmNsdWRl
ICJDU1NPTVV0aWxzLmgiCiAKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyB2b2lkIGFwcGVuZENoYXJhY3RlcihVQ2hhcjMyIGMsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRv
KQorc3RhdGljIHZvaWQgYXBwZW5kQ2hhcmFjdGVyKFVDaGFyMzIgYywgU3RyaW5nQnVpbGRlciYg
YXBwZW5kVG8pCiB7CiAgICAgaWYgKFUxNl9MRU5HVEgoYykgPT0gMSkKICAgICAgICAgYXBwZW5k
VG8uYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjKSk7CkBAIC00NSwxMyArNDYsMTMgQEAgc3Rh
dGljIHZvaWQgYXBwZW5kQ2hhcmFjdGVyKFVDaGFyMzIgYywgVgogICAgIH0KIH0KIAotdm9pZCBz
ZXJpYWxpemVDaGFyYWN0ZXIoVUNoYXIzMiBjLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbykKK3Zv
aWQgc2VyaWFsaXplQ2hhcmFjdGVyKFVDaGFyMzIgYywgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8p
CiB7CiAgICAgYXBwZW5kVG8uYXBwZW5kKCdcXCcpOwogICAgIGFwcGVuZENoYXJhY3RlcihjLCBh
cHBlbmRUbyk7CiB9CiAKLXZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIz
MiBjLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbykKK3ZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyQXND
b2RlUG9pbnQoVUNoYXIzMiBjLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbykKIHsKICAgICBhcHBl
bmRUby5hcHBlbmQoJ1xcJyk7CiAgICAgYXBwZW5kVW5zaWduZWRBc0hleChjLCBhcHBlbmRUbywg
TG93ZXJjYXNlKTsKQEAgLTYwLDEyICs2MSwxMiBAQCB2b2lkIHNlcmlhbGl6ZUNoYXJhY3RlckFz
Q29kZVBvaW50KFVDaGFyCiAKIHZvaWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcm
IGlkZW50aWZpZXIsIFN0cmluZyYgYXBwZW5kVG8pCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBhZGRl
bmQ7CisgICAgU3RyaW5nQnVpbGRlciBhZGRlbmQ7CiAgICAgc2VyaWFsaXplSWRlbnRpZmllcihp
ZGVudGlmaWVyLCBhZGRlbmQpOwotICAgIGFwcGVuZFRvLmFwcGVuZChTdHJpbmc6OmFkb3B0KGFk
ZGVuZCkpOworICAgIGFwcGVuZFRvLmFwcGVuZChhZGRlbmQudG9TdHJpbmcoKSk7CiB9CiAKLXZv
aWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFZlY3RvcjxV
Q2hhcj4mIGFwcGVuZFRvKQordm9pZCBzZXJpYWxpemVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllciwgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pCiB7CiAgICAgYm9vbCBpc0ZpcnN0
ID0gdHJ1ZTsKICAgICBib29sIGlzU2Vjb25kID0gZmFsc2U7CkBAIC05NiwxMiArOTcsMTIgQEAg
dm9pZCBzZXJpYWxpemVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaQogCiB2b2lkIHNlcmlhbGl6
ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgU3RyaW5nJiBhcHBlbmRUbykKIHsKLSAgICBW
ZWN0b3I8VUNoYXI+IGFkZGVuZDsKKyAgICBTdHJpbmdCdWlsZGVyIGFkZGVuZDsKICAgICBzZXJp
YWxpemVTdHJpbmcoc3RyaW5nLCBhZGRlbmQpOwotICAgIGFwcGVuZFRvLmFwcGVuZChTdHJpbmc6
OmFkb3B0KGFkZGVuZCkpOworICAgIGFwcGVuZFRvLmFwcGVuZChhZGRlbmQudG9TdHJpbmcoKSk7
CiB9CiAKLXZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBWZWN0b3I8
VUNoYXI+JiBhcHBlbmRUbykKK3ZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbykKIHsKICAgICBhcHBlbmRUby5hcHBlbmQoJ1wi
Jyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NPTVV0aWxzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU09NVXRpbHMuaAkocmV2aXNpb24gOTM4NDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTT01VdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiAr
NDAsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQ29tbW9uIHNlcmlhbGl6aW5nIG1l
dGhvZHMuIFNlZTogaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI2NvbW1vbi1zZXJpYWxp
emluZy1pZGlvbXMKLXZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyKFVDaGFyMzIsIFZlY3RvcjxVQ2hh
cj4mIGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIz
MiwgVmVjdG9yPFVDaGFyPiYgYXBwZW5kVG8pOwordm9pZCBzZXJpYWxpemVDaGFyYWN0ZXIoVUNo
YXIzMiwgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pOwordm9pZCBzZXJpYWxpemVDaGFyYWN0ZXJB
c0NvZGVQb2ludChVQ2hhcjMyLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbyk7CiB2b2lkIHNlcmlh
bGl6ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBTdHJpbmcmIGFwcGVuZFRv
KTsKLXZvaWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFZl
Y3RvcjxVQ2hhcj4mIGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBTdHJpbmcmIGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbyk7Cit2b2lkIHNlcmlhbGl6
ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBTdHJpbmdCdWlsZGVyJiBhcHBl
bmRUbyk7Cit2b2lkIHNlcmlhbGl6ZVN0cmluZyhjb25zdCBTdHJpbmcmLCBTdHJpbmcmIGFwcGVu
ZFRvKTsKK3ZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYsIFN0cmluZ0J1aWxkZXIm
IGFwcGVuZFRvKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
NiArMzksNyBAQAogI2luY2x1ZGUgPHd0Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIEVOQUJMRShEQVNIQk9BUkRf
U1VQUE9SVCkKICNpbmNsdWRlICJEYXNoYm9hcmRSZWdpb24uaCIKQEAgLTcwOCwxNCArNzA5LDE0
IEBAIFN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCgpIGNvbnMKICAgICAgICAgY2Fz
ZSBDU1NfQVRUUjogewogICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJp
bmcsIGF0dHJQYXJlbiwgKCJhdHRyKCIpKTsKIAotICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiBy
ZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg2ICsgbV92
YWx1ZS5zdHJpbmctPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0
OworICAgICAgICAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSg2ICsgbV92YWx1ZS5zdHJpbmct
Pmxlbmd0aCgpKTsKIAotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgYXR0clBhcmVuKTsKLSAg
ICAgICAgICAgIGFwcGVuZChyZXN1bHQsIG1fdmFsdWUuc3RyaW5nKTsKLSAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoJyknKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXR0
clBhcmVuKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV92YWx1ZS5zdHJpbmcpOworICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwogCi0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5n
OjphZG9wdChyZXN1bHQpOworICAgICAgICAgICAgdGV4dCA9IHJlc3VsdC50b1N0cmluZygpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NfQ09VTlRFUl9O
QU1FOgpAQCAtNzMzLDIzICs3MzQsMjMgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NU
ZXh0KCkgY29ucwogICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcs
IHJlY3RQYXJlbiwgKCJyZWN0KCIpKTsKIAogICAgICAgICAgICAgUmVjdCogcmVjdFZhbCA9IGdl
dFJlY3RWYWx1ZSgpOwotICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAg
ICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7Ci0gICAgICAgICAgICBhcHBl
bmQocmVzdWx0LCByZWN0UGFyZW4pOworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7
CisgICAgICAgICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDMyKTsKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQocmVjdFBhcmVuKTsKIAotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgcmVj
dFZhbC0+dG9wKCktPmNzc1RleHQoKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlY3RW
YWwtPnRvcCgpLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwog
Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCByZWN0VmFsLT5yaWdodCgpLT5jc3NUZXh0KCkp
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZWN0VmFsLT5yaWdodCgpLT5jc3NUZXh0KCkp
OwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwogCi0gICAgICAgICAgICBhcHBlbmQo
cmVzdWx0LCByZWN0VmFsLT5ib3R0b20oKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQocmVjdFZhbC0+Ym90dG9tKCktPmNzc1RleHQoKSk7CiAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCcgJyk7CiAKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlY3RWYWwtPmxl
ZnQoKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjdFZhbC0+bGVm
dCgpLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwogCi0gICAg
ICAgICAgICB0ZXh0ID0gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgICAgICAgICAgdGV4dCA9
IHJlc3VsdC50b1N0cmluZygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDU1NfUkdCQ09MT1I6CkBAIC03NjMsMjcgKzc2NCwyNyBAQCBTdHJpbmcgQ1NTUHJp
bWl0aXZlVmFsdWU6OmNzc1RleHQoKSBjb25zCiAgICAgICAgICAgICAgICAgQ29sb3I6OnBhcnNl
SGV4Q29sb3IobV92YWx1ZS5zdHJpbmcsIHJnYkNvbG9yKTsKICAgICAgICAgICAgIENvbG9yIGNv
bG9yKHJnYkNvbG9yKTsKIAotICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAg
ICAgICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7CisgICAgICAgICAgICBT
dHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHko
MzIpOwogICAgICAgICAgICAgaWYgKGNvbG9yLmhhc0FscGhhKCkpCi0gICAgICAgICAgICAgICAg
YXBwZW5kKHJlc3VsdCwgcmdiYVBhcmVuKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHJnYmFQYXJlbik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXBwZW5kKHJl
c3VsdCwgcmdiUGFyZW4pOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmdiUGFyZW4p
OwogCi0gICAgICAgICAgICBhcHBlbmROdW1iZXIocmVzdWx0LCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihjb2xvci5yZWQoKSkpOwotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgY29tbWFT
cGFjZSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kTnVtYmVyKHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KGNvbG9yLnJlZCgpKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbW1h
U3BhY2UpOwogCi0gICAgICAgICAgICBhcHBlbmROdW1iZXIocmVzdWx0LCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihjb2xvci5ncmVlbigpKSk7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0
LCBjb21tYVNwYWNlKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmROdW1iZXIoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oY29sb3IuZ3JlZW4oKSkpOworICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChjb21tYVNwYWNlKTsKIAotICAgICAgICAgICAgYXBwZW5kTnVtYmVyKHJlc3VsdCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oY29sb3IuYmx1ZSgpKSk7CisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGNvbG9yLmJsdWUoKSkp
OwogICAgICAgICAgICAgaWYgKGNvbG9yLmhhc0FscGhhKCkpIHsKLSAgICAgICAgICAgICAgICBh
cHBlbmQocmVzdWx0LCBjb21tYVNwYWNlKTsKLSAgICAgICAgICAgICAgICBhcHBlbmQocmVzdWx0
LCBTdHJpbmc6Om51bWJlcihjb2xvci5hbHBoYSgpIC8gMjU2LjBmKSk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChjb21tYVNwYWNlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKFN0cmluZzo6bnVtYmVyKGNvbG9yLmFscGhhKCkgLyAyNTYuMGYpKTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgICAgICAgICAgdGV4dCA9
IFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICAgICAgICAgIHRleHQgPSByZXN1bHQudG9TdHJp
bmcoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTX1BB
SVI6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lv
biA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw3IEBACiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIFVTRShQTEFURk9STV9TVFJB
VEVHSUVTKQogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgpAQCAtODM4LDcgKzgzOSw3
IEBAIEVJbnNpZGVMaW5rIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2gKICAgICAgICAgcmV0
dXJuIE5vdEluc2lkZUxpbms7CiAKICNpZiBQTEFURk9STShRVCkKLSAgICBWZWN0b3I8VUNoYXIs
IDUxMj4gdXJsOworICAgIFN0cmluZ0J1aWxkZXIgdXJsOwogICAgIHZpc2l0ZWRVUkwobV9kb2N1
bWVudC0+YmFzZVVSTCgpLCAqYXR0ciwgdXJsKTsKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7CkBAIC04NDcsOSArODQ4LDkgQEAgRUlu
c2lkZUxpbmsgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaAogICAgIC8vIHRvIHRoZSBvbGQg
Z2xvYmFsIGhpc3RvcnkuCiAgICAgUVdlYkhpc3RvcnlJbnRlcmZhY2UqIGlmYWNlID0gUVdlYkhp
c3RvcnlJbnRlcmZhY2U6OmRlZmF1bHRJbnRlcmZhY2UoKTsKICAgICBpZiAoaWZhY2UpCi0gICAg
ICAgIHJldHVybiBpZmFjZS0+aGlzdG9yeUNvbnRhaW5zKFFTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxRQ2hhcio+KHVybC5kYXRhKCkpLCB1cmwuc2l6ZSgpKSkgPyBJbnNpZGVWaXNpdGVkTGluayA6
IEluc2lkZVVudmlzaXRlZExpbms7CisgICAgICAgIHJldHVybiBpZmFjZS0+aGlzdG9yeUNvbnRh
aW5zKFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxRQ2hhcio+KHVybC5jaGFyYWN0ZXJzKCkpLCB1
cmwubGVuZ3RoKCkpKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVkTGluazsK
IAotICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2godXJsLmRhdGEoKSwgdXJsLnNp
emUoKSk7CisgICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaCh1cmwuY2hhcmFjdGVy
cygpLCB1cmwubGVuZ3RoKCkpOwogICAgIGlmICghaGFzaCkKICAgICAgICAgcmV0dXJuIEluc2lk
ZVVudmlzaXRlZExpbms7CiAjZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1dyYXBT
aGFwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NXcmFwU2hhcGVz
LmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTV3JhcFNoYXBl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKIAogI2luY2x1ZGUgIkNTU1dy
YXBTaGFwZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwogdXNp
bmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsMzQgKzQyLDM0
IEBAIFN0cmluZyBDU1NXcmFwU2hhcGVSZWN0Ojpjc3NUZXh0KCkgY29uc3QKICAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcmVjdFBhcmVuLCAoInJlY3QoIikpOwogICAgIERF
RklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBjb21tYSwgKCIsICIpKTsKICAgICAKLSAg
ICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eSgzMik7Ci0gICAgYXBwZW5kKHJlc3VsdCwgcmVjdFBhcmVuKTsKKyAgICBTdHJpbmdCdWlsZGVy
IHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDMyKTsKKyAgICByZXN1bHQuYXBw
ZW5kKHJlY3RQYXJlbik7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX2xlZnQtPmNzc1RleHQoKSk7
Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV9sZWZ0LT5j
c3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwogCi0gICAgYXBwZW5kKHJlc3Vs
dCwgbV90b3AtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAgIHJl
c3VsdC5hcHBlbmQobV90b3AtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7
CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3dpZHRoLT5jc3NUZXh0KCkpOwotICAgIGFwcGVuZChy
ZXN1bHQsIGNvbW1hKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fd2lkdGgtPmNzc1RleHQoKSk7Cisg
ICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX2hlaWdodC0+
Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKG1faGVpZ2h0LT5jc3NUZXh0KCkpOwogICAg
IAogICAgIGlmIChtX3JhZGl1c1guZ2V0KCkpIHsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgY29t
bWEpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBtX3JhZGl1c1gtPmNzc1RleHQoKSk7CisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fcmFkaXVz
WC0+Y3NzVGV4dCgpKTsKIAogICAgICAgICBpZiAobV9yYWRpdXNZLmdldCgpKSB7Ci0gICAgICAg
ICAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBt
X3JhZGl1c1ktPmNzc1RleHQoKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9yYWRpdXNZLT5jc3NUZXh0KCkpOwogICAgICAg
ICB9CiAgICAgfQogICAgIAogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKICAgICAgICAgICAgIAot
ICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0
cmluZygpOwogfQogCiBTdHJpbmcgQ1NTV3JhcFNoYXBlQ2lyY2xlOjpjc3NUZXh0KCkgY29uc3QK
QEAgLTc1LDIwICs3NywyMCBAQCBTdHJpbmcgQ1NTV3JhcFNoYXBlQ2lyY2xlOjpjc3NUZXh0KCkg
Y29uCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGNpcmNsZVBhcmVuLCAo
ImNpcmNsZSgiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGNvbW1h
LCAoIiwgIikpOwogICAgIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMyKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjaXJjbGVQYXJl
bik7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0
eSgzMik7CisgICAgcmVzdWx0LmFwcGVuZChjaXJjbGVQYXJlbik7CiAKLSAgICBhcHBlbmQocmVz
dWx0LCBtX2xlZnQtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAg
IHJlc3VsdC5hcHBlbmQobV9sZWZ0LT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoY29t
bWEpOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgbV90b3AtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5k
KHJlc3VsdCwgY29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV90b3AtPmNzc1RleHQoKSk7Cisg
ICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3JhZGl1cy0+
Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fcmFkaXVzLT5jc3NUZXh0KCkpOwogICAg
IHJlc3VsdC5hcHBlbmQoJyknKTsKICAgICAgICAgICAgIAotICAgIHJldHVybiBTdHJpbmc6OmFk
b3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBTdHJpbmcg
Q1NTV3JhcFNoYXBlRWxsaXBzZTo6Y3NzVGV4dCgpIGNvbnN0CkBAIC05NiwyMyArOTgsMjMgQEAg
U3RyaW5nIENTU1dyYXBTaGFwZUVsbGlwc2U6OmNzc1RleHQoKSBjbwogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgU3RyaW5nLCBlbGxpcHNlUGFyZW4sICgiZWxsaXBzZSgiKSk7CiAgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGNvbW1hLCAoIiwgIikpOwogICAgIAot
ICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KDMyKTsKLSAgICBhcHBlbmQocmVzdWx0LCBlbGxpcHNlUGFyZW4pOworICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOworICAgIHJlc3Vs
dC5hcHBlbmQoZWxsaXBzZVBhcmVuKTsKIAotICAgIGFwcGVuZChyZXN1bHQsIG1fbGVmdC0+Y3Nz
VGV4dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7CisgICAgcmVzdWx0LmFwcGVuZCht
X2xlZnQtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBl
bmQocmVzdWx0LCBtX3RvcC0+Y3NzVGV4dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7
CisgICAgcmVzdWx0LmFwcGVuZChtX3RvcC0+Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5k
KGNvbW1hKTsKIAotICAgIGFwcGVuZChyZXN1bHQsIG1fcmFkaXVzWC0+Y3NzVGV4dCgpKTsKLSAg
ICBhcHBlbmQocmVzdWx0LCBjb21tYSk7CisgICAgcmVzdWx0LmFwcGVuZChtX3JhZGl1c1gtPmNz
c1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0
LCBtX3JhZGl1c1ktPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChtX3JhZGl1c1ktPmNz
c1RleHQoKSk7CiAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwogICAgICAgICAgICAgCi0gICAgcmV0
dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7
CiB9CiAKIFN0cmluZyBDU1NXcmFwU2hhcGVQb2x5Z29uOjpjc3NUZXh0KCkgY29uc3QKQEAgLTEy
MSwyNiArMTIzLDI2IEBAIFN0cmluZyBDU1NXcmFwU2hhcGVQb2x5Z29uOjpjc3NUZXh0KCkgY28K
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcG9seWdvblBhcmVuTm9uWmVy
bywgKCJwb2x5Z29uKG5vbnplcm8sICIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0
IFN0cmluZywgY29tbWEsICgiLCAiKSk7CiAgICAgCi0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7
Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMzIpOworICAgIFN0cmluZ0J1aWxk
ZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOwogICAgIGlmIChtX3dp
bmRSdWxlID09IFJVTEVfRVZFTk9ERCkKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgcG9seWdvblBh
cmVuRXZlbk9kZCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocG9seWdvblBhcmVuRXZlbk9kZCk7
CiAgICAgZWxzZQotICAgICAgICBhcHBlbmQocmVzdWx0LCBwb2x5Z29uUGFyZW5Ob25aZXJvKTsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChwb2x5Z29uUGFyZW5Ob25aZXJvKTsKIAogICAgIEFTU0VS
VCghKG1fdmFsdWVzLnNpemUoKSAlIDIpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3ZhbHVlcy5zaXplKCk7IGkgKz0gMikgewogICAgICAgICBpZiAoaSkKICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoJyAnKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgbV92YWx1ZXMuYXQo
aSktPmNzc1RleHQoKSk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hKTsKLSAgICAgICAg
YXBwZW5kKHJlc3VsdCwgbV92YWx1ZXMuYXQoaSArIDEpLT5jc3NUZXh0KCkpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKG1fdmFsdWVzLmF0KGkpLT5jc3NUZXh0KCkpOworICAgICAgICByZXN1bHQu
YXBwZW5kKGNvbW1hKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtX3ZhbHVlcy5hdChpICsgMSkt
PmNzc1RleHQoKSk7CiAgICAgfQogICAgIAogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKICAgICAg
ICAgICAgIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2UuY3BwCShyZXZpc2lvbiA5Mzg0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSFRNTEludGVyY2hhbmdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNyArNTcsOCBAQCBTdHJpbmcgY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5n
ZUZvcm1hCiAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpCiAgICAgICAgIHJldHVybiBpbjsKIAotICAgIFZlY3Rv
cjxVQ2hhcj4gczsKKyAgICBTdHJpbmdCdWlsZGVyIHM7CisgICAgcy5yZXNlcnZlQ2FwYWNpdHko
aW4ubGVuZ3RoKCkpOwogCiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgdW5zaWduZWQgY29uc3Vt
ZWQgPSAwOwpAQCAtNzQsMjggKzc1LDI4IEBAIFN0cmluZyBjb252ZXJ0SFRNTFRleHRUb0ludGVy
Y2hhbmdlRm9ybWEKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhZGQgPSBjb3VudCAlIDM7CiAg
ICAgICAgICAgICAgICAgc3dpdGNoIChhZGQpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAw
OgotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5n
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJp
bmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZCgnICcpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBhZGQgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpID09IDAgfHwgaSArIDEgPT0gaW4ubGVuZ3RoKCkpIC8vIGF0IHN0YXJ0IG9yIGVuZCBv
ZiBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQocywgY29udmVydGVk
U3BhY2VTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoY29u
dmVydGVkU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoJyAnKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGF0IHN0YXJ0IG9mIHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChz
LCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
LmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzLmFwcGVuZCgnICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChp
ICsgMiA9PSBpbi5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBh
dCBlbmQgb2Ygc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNv
bnZlcnRlZFNwYWNlU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMs
IGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMu
YXBwZW5kKGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHMuYXBwZW5kKCcgJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTEwNyw3ICsxMDgsNyBAQCBTdHJpbmcgY29udmVydEhU
TUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hCiAgICAgICAgIGkgKz0gY29uc3VtZWQ7CiAgICAgfQog
Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocyk7CisgICAgcmV0dXJuIHMudG9TdHJpbmcoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDEzICszNywxNCBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAot
dm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoVmVjdG9yPFVDaGFyPiYgb3V0
LCBjb25zdCBVQ2hhciogY29udGVudCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5TWFzayBlbnRpdHlN
YXNrKQordm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoU3RyaW5nQnVpbGRl
ciYgb3V0LCBjb25zdCBVQ2hhciogY29udGVudCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5TWFzayBl
bnRpdHlNYXNrKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBhbXBS
ZWZlcmVuY2UsICgiJmFtcDsiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJp
bmcsIGx0UmVmZXJlbmNlLCAoIiZsdDsiKSk7CkBAIC02NCw3ICs2NSw3IEBAIHZvaWQgYXBwZW5k
Q2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKFYKICAgICAgICAgZm9yIChzaXplX3QgbSA9IDA7
IG0gPCBXVEZfQVJSQVlfTEVOR1RIKGVudGl0eU1hcHMpOyArK20pIHsKICAgICAgICAgICAgIGlm
IChjb250ZW50W2ldID09IGVudGl0eU1hcHNbbV0uZW50aXR5ICYmIGVudGl0eU1hcHNbbV0ubWFz
ayAmIGVudGl0eU1hc2spIHsKICAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKGNvbnRlbnQgKyBw
b3NpdGlvbkFmdGVyTGFzdEVudGl0eSwgaSAtIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5KTsKLSAg
ICAgICAgICAgICAgICBhcHBlbmQob3V0LCBlbnRpdHlNYXBzW21dLnJlZmVyZW5jZSk7CisgICAg
ICAgICAgICAgICAgb3V0LmFwcGVuZChlbnRpdHlNYXBzW21dLnJlZmVyZW5jZSk7CiAgICAgICAg
ICAgICAgICAgcG9zaXRpb25BZnRlckxhc3RFbnRpdHkgPSBpICsgMTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTg2LDExICs4NywxMSBAQCBNYXJrdXBBY2N1bXVs
YXRvcjo6fk1hcmt1cEFjY3VtdWxhdG9yKCkKIAogU3RyaW5nIE1hcmt1cEFjY3VtdWxhdG9yOjpz
ZXJpYWxpemVOb2RlcyhOb2RlKiBub2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5
IGNoaWxkcmVuT25seSkKIHsKLSAgICBWZWN0b3I8VUNoYXI+IG91dDsKKyAgICBTdHJpbmdCdWls
ZGVyIG91dDsKICAgICBzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKG5vZGUsIG5vZGVUb1Nr
aXAsIGNoaWxkcmVuT25seSwgMCk7Ci0gICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVu
Z3RoKCkpOworICAgIG91dC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKCkpOwogICAgIGNvbmNhdGVu
YXRlTWFya3VwKG91dCk7Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQob3V0KTsKKyAgICByZXR1
cm4gb3V0LnRvU3RyaW5nKCk7CiB9CiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OnNlcmlhbGl6
ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSogbm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxk
cmVuT25seSBjaGlsZHJlbk9ubHksIGNvbnN0IE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCkBAIC0x
MzgsMTggKzEzOSwxOCBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHJpbmcoY29u
CiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKE5vZGUqIG5vZGUsIE5h
bWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7CisgICAg
U3RyaW5nQnVpbGRlciBtYXJrdXA7CiAgICAgYXBwZW5kU3RhcnRNYXJrdXAobWFya3VwLCBub2Rl
LCBuYW1lc3BhY2VzKTsKLSAgICBhcHBlbmRTdHJpbmcoU3RyaW5nOjphZG9wdChtYXJrdXApKTsK
KyAgICBhcHBlbmRTdHJpbmcobWFya3VwLnRvU3RyaW5nKCkpOwogICAgIGlmIChtX25vZGVzKQog
ICAgICAgICBtX25vZGVzLT5hcHBlbmQobm9kZSk7CiB9CiAKIHZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZEVuZFRhZyhOb2RlKiBub2RlKQogewotICAgIFZlY3RvcjxVQ2hhcj4gbWFya3Vw
OworICAgIFN0cmluZ0J1aWxkZXIgbWFya3VwOwogICAgIGFwcGVuZEVuZE1hcmt1cChtYXJrdXAs
IG5vZGUpOwotICAgIGFwcGVuZFN0cmluZyhTdHJpbmc6OmFkb3B0KG1hcmt1cCkpOworICAgIGFw
cGVuZFN0cmluZyhtYXJrdXAudG9TdHJpbmcoKSk7CiB9CiAKIHNpemVfdCBNYXJrdXBBY2N1bXVs
YXRvcjo6dG90YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0cmluZ3MpCkBAIC0xNjEs
MjUgKzE2MiwyNSBAQCBzaXplX3QgTWFya3VwQWNjdW11bGF0b3I6OnRvdGFsTGVuZ3RoKGNvCiB9
CiAKIC8vIEZJWE1FOiBUaGlzIGlzIGEgdmVyeSBpbmVmZmljaWVudCB3YXkgb2YgYWNjdW11bGF0
aW5nIHRoZSBtYXJrdXAuCi0vLyBXZSdyZSBjb252ZXJ0aW5nIHJlc3VsdHMgb2YgYXBwZW5kU3Rh
cnRNYXJrdXAgYW5kIGFwcGVuZEVuZE1hcmt1cCBmcm9tIFZlY3RvcjxVQ2hhcj4gdG8gU3RyaW5n
Ci0vLyBhbmQgdGhlbiBiYWNrIHRvIFZlY3RvcjxVQ2hhcj4gYW5kIGFnYWluIHRvIFN0cmluZyBo
ZXJlLgotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6Y29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9yPFVD
aGFyPiYgb3V0KQorLy8gV2UncmUgY29udmVydGluZyByZXN1bHRzIG9mIGFwcGVuZFN0YXJ0TWFy
a3VwIGFuZCBhcHBlbmRFbmRNYXJrdXAgZnJvbSBTdHJpbmdCdWlsZGVyIHRvIFN0cmluZworLy8g
YW5kIHRoZW4gYmFjayB0byBTdHJpbmdCdWlsZGVyIGFuZCBhZ2FpbiB0byBTdHJpbmcgaGVyZS4K
K3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmNvbmNhdGVuYXRlTWFya3VwKFN0cmluZ0J1aWxkZXIm
IG91dCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3VjY2VlZGluZ01hcmt1cC5z
aXplKCk7ICsraSkKLSAgICAgICAgYXBwZW5kKG91dCwgbV9zdWNjZWVkaW5nTWFya3VwW2ldKTsK
KyAgICAgICAgb3V0LmFwcGVuZChtX3N1Y2NlZWRpbmdNYXJrdXBbaV0pOwogfQogCi12b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1
bHQsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlLCBib29sIGRvY3VtZW50SXNIVE1MKQordm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYgcmVz
dWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBkb2N1bWVudElzSFRNTCkKIHsKICAg
ICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMocmVzdWx0LCBhdHRyaWJ1dGUuY2hh
cmFjdGVycygpLCBhdHRyaWJ1dGUubGVuZ3RoKCksCiAgICAgICAgIGRvY3VtZW50SXNIVE1MID8g
RW50aXR5TWFza0luSFRNTEF0dHJpYnV0ZVZhbHVlIDogRW50aXR5TWFza0luQXR0cmlidXRlVmFs
dWUpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVz
KFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopCit2b2lkIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBFbGVtZW50Kiwg
TmFtZXNwYWNlcyopCiB7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3Rl
ZFVSTEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUpCit2b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQs
IGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogewog
ICAgIEFTU0VSVChlbGVtZW50LT5pc1VSTEF0dHJpYnV0ZShjb25zdF9jYXN0PEF0dHJpYnV0ZSo+
KCZhdHRyaWJ1dGUpKSk7CiAgICAgY29uc3QgU3RyaW5nIHJlc29sdmVkVVJMU3RyaW5nID0gcmVz
b2x2ZVVSTElmTmVlZGVkKGVsZW1lbnQsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKQEAgLTE5NCw3ICsx
OTUsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBCiAgICAgICAg
ICAgICAgICAgcXVvdGVDaGFyID0gJ1wnJzsKICAgICAgICAgfQogICAgICAgICByZXN1bHQuYXBw
ZW5kKHF1b3RlQ2hhcik7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIHN0cmlwcGVkVVJMU3RyaW5n
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdHJpcHBlZFVSTFN0cmluZyk7CiAgICAgICAgIHJl
c3VsdC5hcHBlbmQocXVvdGVDaGFyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIwNSw3
ICsyMDYsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBCiAgICAg
cmVzdWx0LmFwcGVuZChxdW90ZUNoYXIpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmROb2RlVmFsdWUoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBOb2RlKiBub2RlLCBjb25z
dCBSYW5nZSogcmFuZ2UsIEVudGl0eU1hc2sgZW50aXR5TWFzaykKK3ZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZE5vZGVWYWx1ZShTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IE5vZGUqIG5v
ZGUsIGNvbnN0IFJhbmdlKiByYW5nZSwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQogewogICAgIFN0
cmluZyBzdHIgPSBub2RlLT5ub2RlVmFsdWUoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cyA9IHN0ci5jaGFyYWN0ZXJzKCk7CkBAIC0yNTUsNyArMjU2LDcgQEAgYm9vbCBNYXJrdXBBY2N1
bXVsYXRvcjo6c2hvdWxkQWRkTmFtZXNwYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmROYW1lc3BhY2UoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBj
b25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIE5hbWVzcGFjZXMmIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmROYW1lc3BhY2UoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmIG5hbWVz
cGFjZXMpCiB7CiAgICAgbmFtZXNwYWNlcy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgaWYgKG5h
bWVzcGFjZVVSSS5pc0VtcHR5KCkpCkBAIC0yNjcsMTAgKzI2OCwxMCBAQCB2b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmROYW1lc3BhY2UoCiAgICAgaWYgKGZvdW5kTlMgIT0gbmFtZXNwYWNl
VVJJLmltcGwoKSkgewogICAgICAgICBuYW1lc3BhY2VzLnNldChwcmUsIG5hbWVzcGFjZVVSSS5p
bXBsKCkpOwogICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGFwcGVuZChyZXN1
bHQsIHhtbG5zQXRvbS5zdHJpbmcoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoeG1sbnNBdG9t
LnN0cmluZygpKTsKICAgICAgICAgaWYgKCFwcmVmaXguaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCc6Jyk7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBwcmVmaXgp
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwcmVmaXgpOwogICAgICAgICB9CiAKICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnPScpOwpAQCAtMjkyLDU5ICsyOTMsNTkgQEAgRW50aXR5TWFzayBN
YXJrdXBBY2N1bXVsYXRvcjo6ZW50aXR5TWFzawogICAgIHJldHVybiB0ZXh0LT5kb2N1bWVudCgp
LT5pc0hUTUxEb2N1bWVudCgpID8gRW50aXR5TWFza0luSFRNTFBDREFUQSA6IEVudGl0eU1hc2tJ
blBDREFUQTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChWZWN0b3I8
VUNoYXI+JiBvdXQsIFRleHQqIHRleHQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRU
ZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCogdGV4dCkKIHsKICAgICBhcHBlbmROb2RlVmFs
dWUob3V0LCB0ZXh0LCBtX3JhbmdlLCBlbnRpdHlNYXNrRm9yVGV4dCh0ZXh0KSk7CiB9CiAKLXZv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENvbW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBj
b25zdCBTdHJpbmcmIGNvbW1lbnQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21t
ZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiBjb21tZW50KQogewogICAgIC8v
IEZJWE1FOiBDb21tZW50IGNvbnRlbnQgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVy
IChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBp
ZiBpdCBpbmNsdWRlcyAiLS0+Ii4KLSAgICBhcHBlbmQob3V0LCAiPCEtLSIpOwotICAgIGFwcGVu
ZChvdXQsIGNvbW1lbnQpOwotICAgIGFwcGVuZChvdXQsICItLT4iKTsKKyAgICBvdXQuYXBwZW5k
KCI8IS0tIik7CisgICAgb3V0LmFwcGVuZChjb21tZW50KTsKKyAgICBvdXQuYXBwZW5kKCItLT4i
KTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKFZlY3Rv
cjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKiBuKQordm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3Qg
RG9jdW1lbnRUeXBlKiBuKQogewogICAgIGlmIChuLT5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhcHBlbmQocmVzdWx0LCAiPCFET0NUWVBFICIpOwotICAgIGFwcGVu
ZChyZXN1bHQsIG4tPm5hbWUoKSk7CisgICAgcmVzdWx0LmFwcGVuZCgiPCFET0NUWVBFICIpOwor
ICAgIHJlc3VsdC5hcHBlbmQobi0+bmFtZSgpKTsKICAgICBpZiAoIW4tPnB1YmxpY0lkKCkuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsICIgUFVCTElDIFwiIik7Ci0gICAgICAg
IGFwcGVuZChyZXN1bHQsIG4tPnB1YmxpY0lkKCkpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCAi
XCIiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiIFBVQkxJQyBcIiIpOworICAgICAgICByZXN1
bHQuYXBwZW5kKG4tPnB1YmxpY0lkKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiIpOwog
ICAgICAgICBpZiAoIW4tPnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhcHBl
bmQocmVzdWx0LCAiIFwiIik7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBuLT5zeXN0ZW1J
ZCgpKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsICJcIiIpOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgiIFwiIik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG4tPnN5c3RlbUlk
KCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCIiKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSBpZiAoIW4tPnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGFwcGVuZChyZXN1
bHQsICIgU1lTVEVNIFwiIik7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIG4tPnN5c3RlbUlkKCkp
OwotICAgICAgICBhcHBlbmQocmVzdWx0LCAiXCIiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgi
IFNZU1RFTSBcIiIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAg
ICAgICByZXN1bHQuYXBwZW5kKCJcIiIpOwogICAgIH0KICAgICBpZiAoIW4tPmludGVybmFsU3Vi
c2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsICIgWyIpOwotICAgICAg
ICBhcHBlbmQocmVzdWx0LCBuLT5pbnRlcm5hbFN1YnNldCgpKTsKLSAgICAgICAgYXBwZW5kKHJl
c3VsdCwgIl0iKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiIFsiKTsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChuLT5pbnRlcm5hbFN1YnNldCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiXSIp
OwogICAgIH0KLSAgICBhcHBlbmQocmVzdWx0LCAiPiIpOworICAgIHJlc3VsdC5hcHBlbmQoIj4i
KTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0
aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmlu
ZyYgZGF0YSkKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFByb2Nlc3NpbmdJbnN0cnVj
dGlvbihTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJp
bmcmIGRhdGEpCiB7CiAgICAgLy8gRklYTUU6IFBJIGRhdGEgaXMgbm90IGVzY2FwZWQsIGJ1dCBY
TUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgdGhpcyBzaG91bGQgcmFp
c2UgYW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVzICI/PiIuCi0gICAgYXBwZW5kKG91dCwgIjw/
Iik7Ci0gICAgYXBwZW5kKG91dCwgdGFyZ2V0KTsKLSAgICBhcHBlbmQob3V0LCAiICIpOwotICAg
IGFwcGVuZChvdXQsIGRhdGEpOwotICAgIGFwcGVuZChvdXQsICI/PiIpOworICAgIG91dC5hcHBl
bmQoIjw/Iik7CisgICAgb3V0LmFwcGVuZCh0YXJnZXQpOworICAgIG91dC5hcHBlbmQoIiAiKTsK
KyAgICBvdXQuYXBwZW5kKGRhdGEpOworICAgIG91dC5hcHBlbmQoIj8+Iik7CiB9CiAKLXZvaWQg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVt
ZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQs
IE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgYXBwZW5kT3BlblRhZyhvdXQsIGVsZW1l
bnQsIG5hbWVzcGFjZXMpOwogCkBAIC0zNTksMTUgKzM2MCwxNSBAQCB2b2lkIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRFbGVtZW50KFZlCiAgICAgYXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVtZW50
KTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kT3BlblRhZyhWZWN0b3I8VUNo
YXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRPcGVuVGFnKFN0cmluZ0J1aWxkZXImIG91dCwgRWxl
bWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBvdXQuYXBwZW5k
KCc8Jyk7Ci0gICAgYXBwZW5kKG91dCwgZWxlbWVudC0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgp
KTsKKyAgICBvdXQuYXBwZW5kKGVsZW1lbnQtPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CiAg
ICAgaWYgKCFlbGVtZW50LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYmIG5hbWVzcGFj
ZXMgJiYgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChlbGVtZW50KSkKICAgICAgICAgYXBwZW5k
TmFtZXNwYWNlKG91dCwgZWxlbWVudC0+cHJlZml4KCksIGVsZW1lbnQtPm5hbWVzcGFjZVVSSSgp
LCAqbmFtZXNwYWNlcyk7ICAgIAogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRD
bG9zZVRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQq
IGVsZW1lbnQpCiB7CiAgICAgaWYgKHNob3VsZFNlbGZDbG9zZShlbGVtZW50KSkgewogICAgICAg
ICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQpAQCAtMzc3LDE2ICszNzgsMTYgQEAgdm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2xvc2VUYWcoVgogICAgIG91dC5hcHBlbmQoJz4n
KTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlKFZlY3RvcjxV
Q2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUs
IE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRB
dHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdHRy
aWJ1dGUmIGF0dHJpYnV0ZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBib29sIGRv
Y3VtZW50SXNIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsKIAog
ICAgIG91dC5hcHBlbmQoJyAnKTsKIAogICAgIGlmIChkb2N1bWVudElzSFRNTCkKLSAgICAgICAg
YXBwZW5kKG91dCwgYXR0cmlidXRlLm5hbWUoKS5sb2NhbE5hbWUoKSk7CisgICAgICAgIG91dC5h
cHBlbmQoYXR0cmlidXRlLm5hbWUoKS5sb2NhbE5hbWUoKSk7CiAgICAgZWxzZQotICAgICAgICBh
cHBlbmQob3V0LCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkpOworICAgICAgICBvdXQuYXBw
ZW5kKGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSk7CiAKICAgICBvdXQuYXBwZW5kKCc9Jyk7
CiAKQEAgLTQwMiwxNSArNDAzLDE1IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0
dHJpYnV0ZSgKICAgICAgICAgYXBwZW5kTmFtZXNwYWNlKG91dCwgYXR0cmlidXRlLnByZWZpeCgp
LCBhdHRyaWJ1dGUubmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2VzKTsKIH0KIAotdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29u
c3QgU3RyaW5nJiBzZWN0aW9uKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFT
ZWN0aW9uKFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKQogewogICAg
IC8vIEZJWE1FOiBDREFUQSBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXpl
ciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24g
aWYgaXQgaW5jbHVkZXMgIl1dPiIuCi0gICAgYXBwZW5kKG91dCwgIjwhW0NEQVRBWyIpOwotICAg
IGFwcGVuZChvdXQsIHNlY3Rpb24pOwotICAgIGFwcGVuZChvdXQsICJdXT4iKTsKKyAgICBvdXQu
YXBwZW5kKCI8IVtDREFUQVsiKTsKKyAgICBvdXQuYXBwZW5kKHNlY3Rpb24pOworICAgIG91dC5h
cHBlbmQoIl1dPiIpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1h
cmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUsIE5hbWVzcGFjZXMq
IG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cChT
dHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVz
cGFjZXMpCiB7CiAgICAgaWYgKG5hbWVzcGFjZXMpCiAgICAgICAgIG5hbWVzcGFjZXMtPmNoZWNr
Q29uc2lzdGVuY3koKTsKQEAgLTQ3NiwxNCArNDc3LDE0IEBAIGJvb2wgTWFya3VwQWNjdW11bGF0
b3I6OmVsZW1lbnRDYW5ub3RIYXYKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVs
ZW1lbnQqPihub2RlKS0+aWVGb3JiaWRzSW5zZXJ0SFRNTCgpOwogfQogCi12b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRFbmRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBO
b2RlKiBub2RlKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kTWFya3VwKFN0cmlu
Z0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSB8fCBzaG91bGRTZWxmQ2xvc2Uobm9kZSkgfHwgKCFub2RlLT5oYXNDaGls
ZE5vZGVzKCkgJiYgZWxlbWVudENhbm5vdEhhdmVFbmRUYWcobm9kZSkpKQogICAgICAgICByZXR1
cm47CiAKICAgICByZXN1bHQuYXBwZW5kKCc8Jyk7CiAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwot
ICAgIGFwcGVuZChyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKS0+bm9k
ZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKKyAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PGNv
bnN0IEVsZW1lbnQqPihub2RlKS0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKICAgICByZXN1
bHQuYXBwZW5kKCc+Jyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3Vw
QWNjdW11bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1
cEFjY3VtdWxhdG9yLmgJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NywzNCArNzcsMzQgQEAg
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAgIHN0
YXRpYyBzaXplX3QgdG90YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBzaXpl
X3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdG90YWxMZW5ndGgobV9zdWNjZWVkaW5nTWFya3Vw
KTsgfQotICAgIHZvaWQgY29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KTsKLSAg
ICB2b2lkIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3Qg
U3RyaW5nJiBhdHRyaWJ1dGUsIGJvb2wgZG9jdW1lbnRJc0hUTUwpOwotICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFtZXNw
YWNlcyopOwotICAgIHZvaWQgYXBwZW5kTm9kZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29u
c3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5TWFzayk7CisgICAgdm9pZCBjb25jYXRlbmF0
ZU1hcmt1cChTdHJpbmdCdWlsZGVyJiBvdXQpOworICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlVmFs
dWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBk
b2N1bWVudElzSFRNTCk7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMo
U3RyaW5nQnVpbGRlciYsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAgdm9pZCBhcHBlbmRO
b2RlVmFsdWUoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqLCBF
bnRpdHlNYXNrKTsKICAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoY29uc3QgRWxl
bWVudCopOwogICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0dHJp
YnV0ZSYsIE5hbWVzcGFjZXMmKTsKLSAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShWZWN0b3I8VUNo
YXI+JiByZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWVzcGFjZVVSSSwgTmFtZXNwYWNlcyYpOworICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNl
KFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBOYW1lc3BhY2VzJik7CiAgICAgRW50aXR5TWFz
ayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVu
ZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0Kik7Ci0gICAgdm9pZCBhcHBlbmRDb21tZW50
KFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBjb21tZW50KTsKLSAgICB2b2lkIGFw
cGVuZERvY3VtZW50VHlwZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlw
ZSopOwotICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4m
IG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSk7Ci0gICAgdmly
dHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFt
ZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVs
ZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRDbG9zZVRhZyhWZWN0b3I8VUNo
YXI+JiBvdXQsIEVsZW1lbnQqKTsKLSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShWZWN0b3I8VUNo
YXI+JiBvdXQsIEVsZW1lbnQqLCBjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7Ci0gICAg
dm9pZCBhcHBlbmRDREFUQVNlY3Rpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcm
IHNlY3Rpb24pOwotICAgIHZvaWQgYXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVz
dWx0LCBjb25zdCBOb2RlKiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRU
ZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCopOworICAgIHZvaWQgYXBwZW5kQ29tbWVudChT
dHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgY29tbWVudCk7CisgICAgdm9pZCBhcHBl
bmREb2N1bWVudFR5cGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBEb2N1bWVudFR5cGUq
KTsKKyAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihTdHJpbmdCdWlsZGVyJiBv
dXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpOworICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCosIE5hbWVz
cGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZE9wZW5UYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVt
ZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBwZW5kQ2xvc2VUYWcoU3RyaW5nQnVpbGRl
ciYgb3V0LCBFbGVtZW50Kik7CisgICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRl
ciYgb3V0LCBFbGVtZW50KiwgY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyopOworICAgIHZv
aWQgYXBwZW5kQ0RBVEFTZWN0aW9uKFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiBz
ZWN0aW9uKTsKKyAgICB2b2lkIGFwcGVuZFN0YXJ0TWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3Vs
dCwgY29uc3QgTm9kZSosIE5hbWVzcGFjZXMqKTsKICAgICBib29sIHNob3VsZFNlbGZDbG9zZShj
b25zdCBOb2RlKik7CiAgICAgYm9vbCBlbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhjb25zdCBOb2Rl
KiBub2RlKTsKLSAgICB2b2lkIGFwcGVuZEVuZE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQs
IGNvbnN0IE5vZGUqKTsKKyAgICB2b2lkIGFwcGVuZEVuZE1hcmt1cChTdHJpbmdCdWlsZGVyJiBy
ZXN1bHQsIGNvbnN0IE5vZGUqKTsKIAogICAgIFZlY3RvcjxOb2RlKj4qIGNvbnN0IG1fbm9kZXM7
CiAgICAgY29uc3QgUmFuZ2UqIGNvbnN0IG1fcmFuZ2U7CiAKIHByaXZhdGU6CiAgICAgU3RyaW5n
IHJlc29sdmVVUkxJZk5lZWRlZChjb25zdCBFbGVtZW50KiwgY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9y
PFVDaGFyPiYgcmVzdWx0LCBjb25zdCBFbGVtZW50KiwgY29uc3QgQXR0cmlidXRlJik7CisgICAg
dm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQs
IGNvbnN0IEVsZW1lbnQqLCBjb25zdCBBdHRyaWJ1dGUmKTsKICAgICB2b2lkIHNlcmlhbGl6ZU5v
ZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSosIE5vZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHks
IGNvbnN0IE5hbWVzcGFjZXMqKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG1fc3VjY2VlZGluZ01h
cmt1cDsKQEAgLTExMiw3ICsxMTIsNyBAQCBwcml2YXRlOgogfTsKIAogLy8gRklYTUU6IFRoaXMg
bWV0aG9kIHNob3VsZCBiZSBpbnRlZ3JhdGVkIHdpdGggTWFya3VwQWNjdW11bGF0b3IuCi12b2lk
IGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhWZWN0b3I8VUNoYXI+JiBvdXQsIGNv
bnN0IFVDaGFyKiBjb250ZW50LCBzaXplX3QgbGVuZ3RoLCBFbnRpdHlNYXNrIGVudGl0eU1hc2sp
Owordm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoU3RyaW5nQnVpbGRlciYg
b3V0LCBjb25zdCBVQ2hhciogY29udGVudCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5TWFzayk7CiAK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNp
b24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg5LDE1ICs4OSwxNSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3Rh
cmdldDsKICAgICBGaW5kT3B0aW9ucyBtX29wdGlvbnM7CiAKLSAgICBWZWN0b3I8VUNoYXI+IG1f
YnVmZmVyOworICAgIFN0cmluZ0J1aWxkZXIgbV9idWZmZXI7CiAgICAgc2l6ZV90IG1fb3Zlcmxh
cDsKICAgICBzaXplX3QgbV9wcmVmaXhMZW5ndGg7CiAgICAgYm9vbCBtX2F0QnJlYWs7CiAgICAg
Ym9vbCBtX25lZWRzTW9yZUNvbnRleHQ7CiAKICAgICBib29sIG1fdGFyZ2V0UmVxdWlyZXNLYW5h
V29ya2Fyb3VuZDsKLSAgICBWZWN0b3I8VUNoYXI+IG1fbm9ybWFsaXplZFRhcmdldDsKLSAgICBt
dXRhYmxlIFZlY3RvcjxVQ2hhcj4gbV9ub3JtYWxpemVkTWF0Y2g7CisgICAgU3RyaW5nQnVpbGRl
ciBtX25vcm1hbGl6ZWRUYXJnZXQ7CisgICAgbXV0YWJsZSBTdHJpbmdCdWlsZGVyIG1fbm9ybWFs
aXplZE1hdGNoOwogCiAjZWxzZQogCkBAIC0xMDgsNyArMTA4LDcgQEAgcHJpdmF0ZToKICAgICBT
dHJpbmcgbV90YXJnZXQ7CiAgICAgRmluZE9wdGlvbnMgbV9vcHRpb25zOwogCi0gICAgVmVjdG9y
PFVDaGFyPiBtX2J1ZmZlcjsKKyAgICBTdHJpbmdCdWlsZGVyIG1fYnVmZmVyOwogICAgIFZlY3Rv
cjxib29sPiBtX2lzQ2hhcmFjdGVyU3RhcnRCdWZmZXI7CiAgICAgYm9vbCBtX2lzQnVmZmVyRnVs
bDsKICAgICBzaXplX3QgbV9jdXJzb3I7CkBAIC0xNDI1LDE1ICsxNDI1LDE1IEBAIHZvaWQgQ2hh
cmFjdGVySXRlcmF0b3I6OmFkdmFuY2UoaW50IGNvdW4KIAogU3RyaW5nIENoYXJhY3Rlckl0ZXJh
dG9yOjpzdHJpbmcoaW50IG51bUNoYXJzKQogewotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0Owot
ICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bUNoYXJzKTsKKyAgICBTdHJpbmdC
dWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KG51bUNoYXJzKTsKICAg
ICB3aGlsZSAobnVtQ2hhcnMgPiAwICYmICFhdEVuZCgpKSB7CiAgICAgICAgIGludCBydW5TaXpl
ID0gbWluKG51bUNoYXJzLCBsZW5ndGgoKSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFj
dGVycygpLCBydW5TaXplKTsKICAgICAgICAgbnVtQ2hhcnMgLT0gcnVuU2l6ZTsKICAgICAgICAg
YWR2YW5jZShydW5TaXplKTsKICAgICB9Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRy
PFJhbmdlPiBjaGFyYWN0ZXJTdWJyYW5nZShDaGFyYWN0ZXJJdGVyYXRvciYgaXQsIGludCBvZmZz
ZXQsIGludCBsZW5ndGgpCkBAIC0xNjA2LDcgKzE2MDYsNyBAQCB2b2lkIFdvcmRBd2FyZUl0ZXJh
dG9yOjphZHZhbmNlKCkKIGludCBXb3JkQXdhcmVJdGVyYXRvcjo6bGVuZ3RoKCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fYnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLnNp
emUoKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmxlbmd0aCgpOwogICAgIGlmIChtX3ByZXZp
b3VzVGV4dCkKICAgICAgICAgcmV0dXJuIG1fcHJldmlvdXNMZW5ndGg7CiAgICAgcmV0dXJuIG1f
dGV4dEl0ZXJhdG9yLmxlbmd0aCgpOwpAQCAtMTYxNSw3ICsxNjE1LDcgQEAgaW50IFdvcmRBd2Fy
ZUl0ZXJhdG9yOjpsZW5ndGgoKSBjb25zdAogY29uc3QgVUNoYXIqIFdvcmRBd2FyZUl0ZXJhdG9y
OjpjaGFyYWN0ZXJzKCkgY29uc3QKIHsKICAgICBpZiAoIW1fYnVmZmVyLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmNo
YXJhY3RlcnMoKTsKICAgICBpZiAobV9wcmV2aW91c1RleHQpCiAgICAgICAgIHJldHVybiBtX3By
ZXZpb3VzVGV4dDsKICAgICByZXR1cm4gbV90ZXh0SXRlcmF0b3IuY2hhcmFjdGVycygpOwpAQCAt
MTg4NSwxNCArMTg4NSwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNLYW5hTGV0dGVy
cyhjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCBub3JtYWxpemVDaGFyYWN0
ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFZlY3RvcjxVQ2hh
cj4mIGJ1ZmZlcikKK3N0YXRpYyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgU3RyaW5nQnVpbGRlciYgYnVmZmVyKQogewog
ICAgIEFTU0VSVChsZW5ndGgpOwogCiAgICAgYnVmZmVyLnJlc2l6ZShsZW5ndGgpOwogCiAgICAg
VUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUg
PSB1bm9ybV9ub3JtYWxpemUoY2hhcmFjdGVycywgbGVuZ3RoLCBVTk9STV9ORkMsIDAsIGJ1ZmZl
ci5kYXRhKCksIGxlbmd0aCwgJnN0YXR1cyk7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSB1bm9y
bV9ub3JtYWxpemUoY2hhcmFjdGVycywgbGVuZ3RoLCBVTk9STV9ORkMsIDAsIGJ1ZmZlci5jaGFy
YWN0ZXJzKCksIGxlbmd0aCwgJnN0YXR1cyk7CiAgICAgQVNTRVJUKHN0YXR1cyA9PSBVX1pFUk9f
RVJST1IgfHwgc3RhdHVzID09IFVfU1RSSU5HX05PVF9URVJNSU5BVEVEX1dBUk5JTkcgfHwgc3Rh
dHVzID09IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKTsKICAgICBBU1NFUlQoYnVmZmVyU2l6ZSk7
CiAKQEAgLTE5MDIsNyArMTkwMiw3IEBAIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMo
Y29uc3QgVUMKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwot
ICAgIHVub3JtX25vcm1hbGl6ZShjaGFyYWN0ZXJzLCBsZW5ndGgsIFVOT1JNX05GQywgMCwgYnVm
ZmVyLmRhdGEoKSwgYnVmZmVyU2l6ZSwgJnN0YXR1cyk7CisgICAgdW5vcm1fbm9ybWFsaXplKGNo
YXJhY3RlcnMsIGxlbmd0aCwgVU5PUk1fTkZDLCAwLCBidWZmZXIuY2hhcmFjdGVycygpLCBidWZm
ZXJTaXplLCAmc3RhdHVzKTsKICAgICBBU1NFUlQoc3RhdHVzID09IFVfU1RSSU5HX05PVF9URVJN
SU5BVEVEX1dBUk5JTkcpOwogfQogCkBAIC0xOTU2LDcgKzE5NTYsNyBAQCBpbmxpbmUgU2VhcmNo
QnVmZmVyOjpTZWFyY2hCdWZmZXIoY29uc3QgCiAgICAgZm9sZFF1b3RlTWFya3NBbmRTb2Z0SHlw
aGVucyhtX3RhcmdldCk7CiAKICAgICBzaXplX3QgdGFyZ2V0TGVuZ3RoID0gbV90YXJnZXQubGVu
Z3RoKCk7Ci0gICAgbV9idWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtYXgodGFyZ2V0TGVu
Z3RoICogOCwgbWluaW11bVNlYXJjaEJ1ZmZlclNpemUpKTsKKyAgICBtX2J1ZmZlci5yZXNlcnZl
Q2FwYWNpdHkobWF4KHRhcmdldExlbmd0aCAqIDgsIG1pbmltdW1TZWFyY2hCdWZmZXJTaXplKSk7
CiAgICAgbV9vdmVybGFwID0gbV9idWZmZXIuY2FwYWNpdHkoKSAvIDQ7CiAKICAgICBpZiAoKG1f
b3B0aW9ucyAmIEF0V29yZFN0YXJ0cykgJiYgdGFyZ2V0TGVuZ3RoKSB7CkBAIC0yMDExLDE3ICsy
MDExLDE3IEBAIGlubGluZSBzaXplX3QgU2VhcmNoQnVmZmVyOjphcHBlbmQoY29uc3QKICAgICAg
ICAgbV9idWZmZXIuc2hyaW5rKDApOwogICAgICAgICBtX3ByZWZpeExlbmd0aCA9IDA7CiAgICAg
ICAgIG1fYXRCcmVhayA9IGZhbHNlOwotICAgIH0gZWxzZSBpZiAobV9idWZmZXIuc2l6ZSgpID09
IG1fYnVmZmVyLmNhcGFjaXR5KCkpIHsKLSAgICAgICAgbWVtY3B5KG1fYnVmZmVyLmRhdGEoKSwg
bV9idWZmZXIuZGF0YSgpICsgbV9idWZmZXIuc2l6ZSgpIC0gbV9vdmVybGFwLCBtX292ZXJsYXAg
KiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgbV9wcmVmaXhMZW5ndGggLT0gbWluKG1fcHJlZml4
TGVuZ3RoLCBtX2J1ZmZlci5zaXplKCkgLSBtX292ZXJsYXApOworICAgIH0gZWxzZSBpZiAobV9i
dWZmZXIubGVuZ3RoKCkgPT0gbV9idWZmZXIuY2FwYWNpdHkoKSkgeworICAgICAgICBtZW1jcHko
bV9idWZmZXIuY2hhcmFjdGVycygpLCBtX2J1ZmZlci5jaGFyYWN0ZXJzKCkgKyBtX2J1ZmZlci5s
ZW5ndGgoKSAtIG1fb3ZlcmxhcCwgbV9vdmVybGFwICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAg
IG1fcHJlZml4TGVuZ3RoIC09IG1pbihtX3ByZWZpeExlbmd0aCwgbV9idWZmZXIubGVuZ3RoKCkg
LSBtX292ZXJsYXApOwogICAgICAgICBtX2J1ZmZlci5zaHJpbmsobV9vdmVybGFwKTsKICAgICB9
CiAKLSAgICBzaXplX3Qgb2xkTGVuZ3RoID0gbV9idWZmZXIuc2l6ZSgpOworICAgIHNpemVfdCBv
bGRMZW5ndGggPSBtX2J1ZmZlci5sZW5ndGgoKTsKICAgICBzaXplX3QgdXNhYmxlTGVuZ3RoID0g
bWluKG1fYnVmZmVyLmNhcGFjaXR5KCkgLSBvbGRMZW5ndGgsIGxlbmd0aCk7CiAgICAgQVNTRVJU
KHVzYWJsZUxlbmd0aCk7CiAgICAgbV9idWZmZXIuYXBwZW5kKGNoYXJhY3RlcnMsIHVzYWJsZUxl
bmd0aCk7Ci0gICAgZm9sZFF1b3RlTWFya3NBbmRTb2Z0SHlwaGVucyhtX2J1ZmZlci5kYXRhKCkg
KyBvbGRMZW5ndGgsIHVzYWJsZUxlbmd0aCk7CisgICAgZm9sZFF1b3RlTWFya3NBbmRTb2Z0SHlw
aGVucyhtX2J1ZmZlci5jaGFyYWN0ZXJzKCkgKyBvbGRMZW5ndGgsIHVzYWJsZUxlbmd0aCk7CiAg
ICAgcmV0dXJuIHVzYWJsZUxlbmd0aDsKIH0KIApAQCAtMjAzMyw3ICsyMDMzLDcgQEAgaW5saW5l
IGJvb2wgU2VhcmNoQnVmZmVyOjpuZWVkc01vcmVDb250ZQogaW5saW5lIHZvaWQgU2VhcmNoQnVm
ZmVyOjpwcmVwZW5kQ29udGV4dChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0
aCkKIHsKICAgICBBU1NFUlQobV9uZWVkc01vcmVDb250ZXh0KTsKLSAgICBBU1NFUlQobV9wcmVm
aXhMZW5ndGggPT0gbV9idWZmZXIuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9wcmVmaXhMZW5ndGgg
PT0gbV9idWZmZXIubGVuZ3RoKCkpOwogCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVy
bjsKQEAgLTIwNzUsMTEgKzIwNzUsMTEgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjppc0Jh
ZE1hdGNoKGNvbgogICAgIC8vIGNyZWF0aW5nIGEgbmV3IG9uZSBlYWNoIHRpbWUuCiAgICAgbm9y
bWFsaXplQ2hhcmFjdGVycyhtYXRjaCwgbWF0Y2hMZW5ndGgsIG1fbm9ybWFsaXplZE1hdGNoKTsK
IAotICAgIGNvbnN0IFVDaGFyKiBhID0gbV9ub3JtYWxpemVkVGFyZ2V0LmJlZ2luKCk7Ci0gICAg
Y29uc3QgVUNoYXIqIGFFbmQgPSBtX25vcm1hbGl6ZWRUYXJnZXQuZW5kKCk7CisgICAgY29uc3Qg
VUNoYXIqIGEgPSBtX25vcm1hbGl6ZWRUYXJnZXQuY2hhcmFjdGVycygpOworICAgIGNvbnN0IFVD
aGFyKiBhRW5kID0gbV9ub3JtYWxpemVkVGFyZ2V0LmNoYXJhY3RlcnMoKSArIG1fbm9ybWFsaXpl
ZFRhcmdldC5sZW5ndGgoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBiID0gbV9ub3JtYWxpemVkTWF0
Y2guYmVnaW4oKTsKLSAgICBjb25zdCBVQ2hhciogYkVuZCA9IG1fbm9ybWFsaXplZE1hdGNoLmVu
ZCgpOworICAgIGNvbnN0IFVDaGFyKiBiID0gbV9ub3JtYWxpemVkTWF0Y2guY2hhcmFjdGVycygp
OworICAgIGNvbnN0IFVDaGFyKiBiRW5kID0gbV9ub3JtYWxpemVkTWF0Y2guY2hhcmFjdGVycygp
ICsgbV9ub3JtYWxpemVkTWF0Y2gubGVuZ3RoKCk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAg
ICAgICAvLyBTa2lwIHJ1bnMgb2Ygbm9uLWthbmEtbGV0dGVyIGNoYXJhY3RlcnMuIFRoaXMgaXMg
bmVjZXNzYXJ5IHNvIHdlIGNhbgpAQCAtMjEzMSwxNCArMjEzMSwxNCBAQCBpbmxpbmUgYm9vbCBT
ZWFyY2hCdWZmZXI6OmlzV29yZFN0YXJ0TWF0CiAgICAgaWYgKCFzdGFydCkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBpbnQgc2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKKyAgICBpbnQgc2l6
ZSA9IG1fYnVmZmVyLmxlbmd0aCgpOwogICAgIGludCBvZmZzZXQgPSBzdGFydDsKICAgICBVQ2hh
cjMyIGZpcnN0Q2hhcmFjdGVyOwotICAgIFUxNl9HRVQobV9idWZmZXIuZGF0YSgpLCAwLCBvZmZz
ZXQsIHNpemUsIGZpcnN0Q2hhcmFjdGVyKTsKKyAgICBVMTZfR0VUKG1fYnVmZmVyLmNoYXJhY3Rl
cnMoKSwgMCwgb2Zmc2V0LCBzaXplLCBmaXJzdENoYXJhY3Rlcik7CiAKICAgICBpZiAobV9vcHRp
b25zICYgVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQpIHsKICAgICAgICAgVUNoYXIzMiBw
cmV2aW91c0NoYXJhY3RlcjsKLSAgICAgICAgVTE2X1BSRVYobV9idWZmZXIuZGF0YSgpLCAwLCBv
ZmZzZXQsIHByZXZpb3VzQ2hhcmFjdGVyKTsKKyAgICAgICAgVTE2X1BSRVYobV9idWZmZXIuY2hh
cmFjdGVycygpLCAwLCBvZmZzZXQsIHByZXZpb3VzQ2hhcmFjdGVyKTsKIAogICAgICAgICBpZiAo
aXNTZXBhcmF0b3IoZmlyc3RDaGFyYWN0ZXIpKSB7CiAgICAgICAgICAgICAvLyBUaGUgc3RhcnQg
b2YgYSBzZXBhcmF0b3IgcnVuIGlzIGEgd29yZCBzdGFydCAoIi5vcmciIGluICJ3ZWJraXQub3Jn
IikuCkBAIC0yMTUxLDEwICsyMTUxLDEwIEBAIGlubGluZSBib29sIFNlYXJjaEJ1ZmZlcjo6aXNX
b3JkU3RhcnRNYXQKICAgICAgICAgICAgIC8vIFRoZSBsYXN0IGNoYXJhY3RlciBvZiBhbiB1cHBl
cmNhc2UgcnVuIGZvbGxvd2VkIGJ5IGEgbm9uLXNlcGFyYXRvciwgbm9uLWRpZ2l0CiAgICAgICAg
ICAgICAvLyBpcyBhIHdvcmQgc3RhcnQgKCJSZXF1ZXN0IiBpbiAiWE1MSFRUUFJlcXVlc3QiKS4K
ICAgICAgICAgICAgIG9mZnNldCA9IHN0YXJ0OwotICAgICAgICAgICAgVTE2X0ZXRF8xKG1fYnVm
ZmVyLmRhdGEoKSwgb2Zmc2V0LCBzaXplKTsKKyAgICAgICAgICAgIFUxNl9GV0RfMShtX2J1ZmZl
ci5jaGFyYWN0ZXJzKCksIG9mZnNldCwgc2l6ZSk7CiAgICAgICAgICAgICBVQ2hhcjMyIG5leHRD
aGFyYWN0ZXIgPSAwOwogICAgICAgICAgICAgaWYgKG9mZnNldCA8IHNpemUpCi0gICAgICAgICAg
ICAgICAgVTE2X0dFVChtX2J1ZmZlci5kYXRhKCksIDAsIG9mZnNldCwgc2l6ZSwgbmV4dENoYXJh
Y3Rlcik7CisgICAgICAgICAgICAgICAgVTE2X0dFVChtX2J1ZmZlci5jaGFyYWN0ZXJzKCksIDAs
IG9mZnNldCwgc2l6ZSwgbmV4dENoYXJhY3Rlcik7CiAgICAgICAgICAgICBpZiAoIWlzQVNDSUlV
cHBlcihuZXh0Q2hhcmFjdGVyKSAmJiAhaXNBU0NJSURpZ2l0KG5leHRDaGFyYWN0ZXIpICYmICFp
c1NlcGFyYXRvcihuZXh0Q2hhcmFjdGVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfSBlbHNlIGlmIChpc0FTQ0lJRGlnaXQoZmlyc3RDaGFyYWN0ZXIpKSB7CkBAIC0y
MTc1LDEzICsyMTc1LDEzIEBAIGlubGluZSBib29sIFNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRN
YXQKIAogICAgIHNpemVfdCB3b3JkQnJlYWtTZWFyY2hTdGFydCA9IHN0YXJ0ICsgbGVuZ3RoOwog
ICAgIHdoaWxlICh3b3JkQnJlYWtTZWFyY2hTdGFydCA+IHN0YXJ0KQotICAgICAgICB3b3JkQnJl
YWtTZWFyY2hTdGFydCA9IGZpbmROZXh0V29yZEZyb21JbmRleChtX2J1ZmZlci5kYXRhKCksIG1f
YnVmZmVyLnNpemUoKSwgd29yZEJyZWFrU2VhcmNoU3RhcnQsIGZhbHNlIC8qIGJhY2t3YXJkcyAq
Lyk7CisgICAgICAgIHdvcmRCcmVha1NlYXJjaFN0YXJ0ID0gZmluZE5leHRXb3JkRnJvbUluZGV4
KG1fYnVmZmVyLmNoYXJhY3RlcnMoKSwgbV9idWZmZXIubGVuZ3RoKCksIHdvcmRCcmVha1NlYXJj
aFN0YXJ0LCBmYWxzZSAvKiBiYWNrd2FyZHMgKi8pOwogICAgIHJldHVybiB3b3JkQnJlYWtTZWFy
Y2hTdGFydCA9PSBzdGFydDsKIH0KIAogaW5saW5lIHNpemVfdCBTZWFyY2hCdWZmZXI6OnNlYXJj
aChzaXplX3QmIHN0YXJ0KQogewotICAgIHNpemVfdCBzaXplID0gbV9idWZmZXIuc2l6ZSgpOwor
ICAgIHNpemVfdCBzaXplID0gbV9idWZmZXIubGVuZ3RoKCk7CiAgICAgaWYgKG1fYXRCcmVhaykg
ewogICAgICAgICBpZiAoIXNpemUpCiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTIxOTMsNyAr
MjE5Myw3IEBAIGlubGluZSBzaXplX3QgU2VhcmNoQnVmZmVyOjpzZWFyY2goc2l6ZV8KICAgICBV
U3RyaW5nU2VhcmNoKiBzZWFyY2hlciA9IFdlYkNvcmU6OnNlYXJjaGVyKCk7CiAKICAgICBVRXJy
b3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICB1c2VhcmNoX3NldFRleHQoc2VhcmNo
ZXIsIG1fYnVmZmVyLmRhdGEoKSwgc2l6ZSwgJnN0YXR1cyk7CisgICAgdXNlYXJjaF9zZXRUZXh0
KHNlYXJjaGVyLCBtX2J1ZmZlci5jaGFyYWN0ZXJzKCksIHNpemUsICZzdGF0dXMpOwogICAgIEFT
U0VSVChzdGF0dXMgPT0gVV9aRVJPX0VSUk9SKTsKIAogICAgIHVzZWFyY2hfc2V0T2Zmc2V0KHNl
YXJjaGVyLCBtX3ByZWZpeExlbmd0aCwgJnN0YXR1cyk7CkBAIC0yMjE3LDExICsyMjE3LDExIEBA
IG5leHRNYXRjaDoKICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZXJlIGlzIHN1ZmZpY2ll
bnQgY29udGV4dCBiZWZvcmUgbWF0Y2hTdGFydCB0aGUgbmV4dCB0aW1lIGFyb3VuZCBmb3IKICAg
ICAgICAgICAgIC8vIGRldGVybWluaW5nIGlmIGl0IGlzIGF0IGEgd29yZCBib3VuZGFyeS4KICAg
ICAgICAgICAgIGludCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBtYXRjaFN0YXJ0OwotICAg
ICAgICAgICAgVTE2X0JBQ0tfMShtX2J1ZmZlci5kYXRhKCksIDAsIHdvcmRCb3VuZGFyeUNvbnRl
eHRTdGFydCk7Ci0gICAgICAgICAgICB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBzdGFydE9m
TGFzdFdvcmRCb3VuZGFyeUNvbnRleHQobV9idWZmZXIuZGF0YSgpLCB3b3JkQm91bmRhcnlDb250
ZXh0U3RhcnQpOworICAgICAgICAgICAgVTE2X0JBQ0tfMShtX2J1ZmZlci5jaGFyYWN0ZXJzKCks
IDAsIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCk7CisgICAgICAgICAgICB3b3JkQm91bmRhcnlD
b250ZXh0U3RhcnQgPSBzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRleHQobV9idWZmZXIuY2hh
cmFjdGVycygpLCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpOwogICAgICAgICAgICAgb3Zlcmxh
cCA9IG1pbihzaXplIC0gMSwgbWF4KG92ZXJsYXAsIHNpemUgLSB3b3JkQm91bmRhcnlDb250ZXh0
U3RhcnQpKTsKICAgICAgICAgfQotICAgICAgICBtZW1jcHkobV9idWZmZXIuZGF0YSgpLCBtX2J1
ZmZlci5kYXRhKCkgKyBzaXplIC0gb3ZlcmxhcCwgb3ZlcmxhcCAqIHNpemVvZihVQ2hhcikpOwor
ICAgICAgICBtZW1jcHkobV9idWZmZXIuY2hhcmFjdGVycygpLCBtX2J1ZmZlci5jaGFyYWN0ZXJz
KCkgKyBzaXplIC0gb3ZlcmxhcCwgb3ZlcmxhcCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBt
X3ByZWZpeExlbmd0aCAtPSBtaW4obV9wcmVmaXhMZW5ndGgsIHNpemUgLSBvdmVybGFwKTsKICAg
ICAgICAgbV9idWZmZXIuc2hyaW5rKG92ZXJsYXApOwogICAgICAgICByZXR1cm4gMDsKQEAgLTIy
MzEsMTQgKzIyMzEsMTQgQEAgbmV4dE1hdGNoOgogICAgIEFTU0VSVChtYXRjaFN0YXJ0ICsgbWF0
Y2hlZExlbmd0aCA8PSBzaXplKTsKIAogICAgIC8vIElmIHRoaXMgbWF0Y2ggaXMgImJhZCIsIG1v
dmUgb24gdG8gdGhlIG5leHQgbWF0Y2guCi0gICAgaWYgKGlzQmFkTWF0Y2gobV9idWZmZXIuZGF0
YSgpICsgbWF0Y2hTdGFydCwgbWF0Y2hlZExlbmd0aCkgfHwgKChtX29wdGlvbnMgJiBBdFdvcmRT
dGFydHMpICYmICFpc1dvcmRTdGFydE1hdGNoKG1hdGNoU3RhcnQsIG1hdGNoZWRMZW5ndGgpKSkg
eworICAgIGlmIChpc0JhZE1hdGNoKG1fYnVmZmVyLmNoYXJhY3RlcnMoKSArIG1hdGNoU3RhcnQs
IG1hdGNoZWRMZW5ndGgpIHx8ICgobV9vcHRpb25zICYgQXRXb3JkU3RhcnRzKSAmJiAhaXNXb3Jk
U3RhcnRNYXRjaChtYXRjaFN0YXJ0LCBtYXRjaGVkTGVuZ3RoKSkpIHsKICAgICAgICAgbWF0Y2hT
dGFydCA9IHVzZWFyY2hfbmV4dChzZWFyY2hlciwgJnN0YXR1cyk7CiAgICAgICAgIEFTU0VSVChz
dGF0dXMgPT0gVV9aRVJPX0VSUk9SKTsKICAgICAgICAgZ290byBuZXh0TWF0Y2g7CiAgICAgfQog
CiAgICAgc2l6ZV90IG5ld1NpemUgPSBzaXplIC0gKG1hdGNoU3RhcnQgKyAxKTsKLSAgICBtZW1t
b3ZlKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuZGF0YSgpICsgbWF0Y2hTdGFydCArIDEsIG5l
d1NpemUgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1tb3ZlKG1fYnVmZmVyLmNoYXJhY3RlcnMo
KSwgbV9idWZmZXIuY2hhcmFjdGVycygpICsgbWF0Y2hTdGFydCArIDEsIG5ld1NpemUgKiBzaXpl
b2YoVUNoYXIpKTsKICAgICBtX3ByZWZpeExlbmd0aCAtPSBtaW48c2l6ZV90PihtX3ByZWZpeExl
bmd0aCwgbWF0Y2hTdGFydCArIDEpOwogICAgIG1fYnVmZmVyLnNocmluayhuZXdTaXplKTsKIApA
QCAtMjUxOCwyMSArMjUxOCwyMSBAQCBVQ2hhciogcGxhaW5UZXh0VG9NYWxsb2NBbGxvY2F0ZWRC
dWZmZXIoCiAgICAgYnVmZmVyTGVuZ3RoID0gMDsKICAgICB0eXBlZGVmIHBhaXI8VUNoYXIqLCB1
bnNpZ25lZD4gVGV4dFNlZ21lbnQ7CiAgICAgT3duUHRyPFZlY3RvcjxUZXh0U2VnbWVudD4gPiB0
ZXh0U2VnbWVudHM7Ci0gICAgVmVjdG9yPFVDaGFyPiB0ZXh0QnVmZmVyOwotICAgIHRleHRCdWZm
ZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjTWF4U2VnbWVudFNpemUpOworICAgIFN0cmluZ0J1
aWxkZXIgdGV4dEJ1ZmZlcjsKKyAgICB0ZXh0QnVmZmVyLnJlc2VydmVDYXBhY2l0eShjTWF4U2Vn
bWVudFNpemUpOwogICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yID0gZGVmYXVsdEJl
aGF2aW9yOwogICAgIGlmICghaXNEaXNwbGF5U3RyaW5nKQogICAgICAgICBiZWhhdmlvciA9IHN0
YXRpY19jYXN0PFRleHRJdGVyYXRvckJlaGF2aW9yPihiZWhhdmlvciB8IFRleHRJdGVyYXRvckVt
aXRzVGV4dHNXaXRob3V0VHJhbnNjb2RpbmcpOwogICAgIAogICAgIGZvciAoVGV4dEl0ZXJhdG9y
IGl0KHIsIGJlaGF2aW9yKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewotICAgICAgICBp
ZiAodGV4dEJ1ZmZlci5zaXplKCkgJiYgdGV4dEJ1ZmZlci5zaXplKCkgKyBpdC5sZW5ndGgoKSA+
IGNNYXhTZWdtZW50U2l6ZSkgewotICAgICAgICAgICAgVUNoYXIqIG5ld1NlZ21lbnRCdWZmZXIg
PSBzdGF0aWNfY2FzdDxVQ2hhcio+KG1hbGxvYyh0ZXh0QnVmZmVyLnNpemUoKSAqIHNpemVvZihV
Q2hhcikpKTsKKyAgICAgICAgaWYgKHRleHRCdWZmZXIubGVuZ3RoKCkgJiYgdGV4dEJ1ZmZlci5s
ZW5ndGgoKSArIGl0Lmxlbmd0aCgpID4gY01heFNlZ21lbnRTaXplKSB7CisgICAgICAgICAgICBV
Q2hhciogbmV3U2VnbWVudEJ1ZmZlciA9IHN0YXRpY19jYXN0PFVDaGFyKj4obWFsbG9jKHRleHRC
dWZmZXIubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKSk7CiAgICAgICAgICAgICBpZiAoIW5ld1Nl
Z21lbnRCdWZmZXIpCiAgICAgICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICAgICAgbWVt
Y3B5KG5ld1NlZ21lbnRCdWZmZXIsIHRleHRCdWZmZXIuZGF0YSgpLCB0ZXh0QnVmZmVyLnNpemUo
KSAqIHNpemVvZihVQ2hhcikpOworICAgICAgICAgICAgbWVtY3B5KG5ld1NlZ21lbnRCdWZmZXIs
IHRleHRCdWZmZXIuY2hhcmFjdGVycygpLCB0ZXh0QnVmZmVyLmxlbmd0aCgpICogc2l6ZW9mKFVD
aGFyKSk7CiAgICAgICAgICAgICBpZiAoIXRleHRTZWdtZW50cykKICAgICAgICAgICAgICAgICB0
ZXh0U2VnbWVudHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFRleHRTZWdtZW50Pik7Ci0gICAgICAg
ICAgICB0ZXh0U2VnbWVudHMtPmFwcGVuZChtYWtlX3BhaXIobmV3U2VnbWVudEJ1ZmZlciwgKHVu
c2lnbmVkKXRleHRCdWZmZXIuc2l6ZSgpKSk7CisgICAgICAgICAgICB0ZXh0U2VnbWVudHMtPmFw
cGVuZChtYWtlX3BhaXIobmV3U2VnbWVudEJ1ZmZlciwgKHVuc2lnbmVkKXRleHRCdWZmZXIubGVu
Z3RoKCkpKTsKICAgICAgICAgICAgIHRleHRCdWZmZXIuY2xlYXIoKTsKICAgICAgICAgfQogICAg
ICAgICB0ZXh0QnVmZmVyLmFwcGVuZChpdC5jaGFyYWN0ZXJzKCksIGl0Lmxlbmd0aCgpKTsKQEAg
LTI1NTcsNyArMjU1Nyw3IEBAIFVDaGFyKiBwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZl
cigKICAgICAgICAgICAgICAgICByZXN1bHRQb3MgKz0gc2VnbWVudC5zZWNvbmQ7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHJlc3VsdFBvcywgdGV4dEJ1ZmZlci5k
YXRhKCksIHRleHRCdWZmZXIuc2l6ZSgpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIG1lbWNw
eShyZXN1bHRQb3MsIHRleHRCdWZmZXIuY2hhcmFjdGVycygpLCB0ZXh0QnVmZmVyLmxlbmd0aCgp
ICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgfQogCiBleGl0OgpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5oCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNp
bmNsdWRlICJGaW5kT3B0aW9ucy5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0zMTYsNyArMzE3LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9w
cmV2aW91c0xlbmd0aDsKIAogICAgIC8vIG1hbnkgY2h1bmtzIGZyb20gdGV4dEl0ZXJhdG9yIGNv
bmNhdGVuYXRlZAotICAgIFZlY3RvcjxVQ2hhcj4gbV9idWZmZXI7CisgICAgU3RyaW5nQnVpbGRl
ciBtX2J1ZmZlcjsKICAgICAKICAgICAvLyBEaWQgd2UgaGF2ZSB0byBsb29rIGFoZWFkIGluIHRo
ZSB0ZXh0SXRlcmF0b3IgdG8gY29uZmlybSB0aGUgY3VycmVudCBjaHVuaz8KICAgICBib29sIG1f
ZGlkTG9va0FoZWFkOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJ
KHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCwxNyArMzM4LDE3IEBAIGludCBsYXN0T2Zmc2V0Rm9y
RWRpdGluZyhjb25zdCBOb2RlKiBub2QKIAogU3RyaW5nIHN0cmluZ1dpdGhSZWJhbGFuY2VkV2hp
dGVzcGFjZShjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBzdGFydElzU3RhcnRPZlBhcmFncmFw
aCwgYm9vbCBlbmRJc0VuZE9mUGFyYWdyYXBoKQogewotICAgIFZlY3RvcjxVQ2hhcj4gcmViYWxh
bmNlZFN0cmluZzsKLSAgICBhcHBlbmQocmViYWxhbmNlZFN0cmluZywgc3RyaW5nKTsKKyAgICBT
dHJpbmdCdWlsZGVyIHJlYmFsYW5jZWRTdHJpbmc7CisgICAgcmViYWxhbmNlZFN0cmluZy5hcHBl
bmQoc3RyaW5nKTsKIAogICAgIGJvb2wgcHJldmlvdXNDaGFyYWN0ZXJXYXNTcGFjZSA9IGZhbHNl
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmViYWxhbmNlZFN0cmluZy5zaXplKCk7IGkr
KykgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmViYWxhbmNlZFN0cmluZy5sZW5ndGgo
KTsgaSsrKSB7CiAgICAgICAgIGlmICghaXNXaGl0ZXNwYWNlKHJlYmFsYW5jZWRTdHJpbmdbaV0p
KSB7CiAgICAgICAgICAgICBwcmV2aW91c0NoYXJhY3Rlcldhc1NwYWNlID0gZmFsc2U7CiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChwcmV2aW91c0NoYXJh
Y3Rlcldhc1NwYWNlIHx8ICghaSAmJiBzdGFydElzU3RhcnRPZlBhcmFncmFwaCkgfHwgKGkgKyAx
ID09IHJlYmFsYW5jZWRTdHJpbmcuc2l6ZSgpICYmIGVuZElzRW5kT2ZQYXJhZ3JhcGgpKSB7Cisg
ICAgICAgIGlmIChwcmV2aW91c0NoYXJhY3Rlcldhc1NwYWNlIHx8ICghaSAmJiBzdGFydElzU3Rh
cnRPZlBhcmFncmFwaCkgfHwgKGkgKyAxID09IHJlYmFsYW5jZWRTdHJpbmcubGVuZ3RoKCkgJiYg
ZW5kSXNFbmRPZlBhcmFncmFwaCkpIHsKICAgICAgICAgICAgIHJlYmFsYW5jZWRTdHJpbmdbaV0g
PSBub0JyZWFrU3BhY2U7CiAgICAgICAgICAgICBwcmV2aW91c0NoYXJhY3Rlcldhc1NwYWNlID0g
ZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0zNTgsNyArMzU4LDcgQEAgU3RyaW5nIHN0cmlu
Z1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZShjbwogICAgICAgICAgICAgCiAgICAgfQogCi0gICAg
cmV0dXJuIFN0cmluZzo6YWRvcHQocmViYWxhbmNlZFN0cmluZyk7CisgICAgcmV0dXJuIHJlYmFs
YW5jZWRTdHJpbmcudG9TdHJpbmcoKTsKIH0KIAogYm9vbCBpc1RhYmxlU3RydWN0dXJlTm9kZShj
b25zdCBOb2RlICpub2RlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNp
b24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOCwxMyArMTI4LDEzIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdGFrZVJlc3Vs
dHMoKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoVmVjdG9y
PFVDaGFyPiYsIENTU1N0eWxlRGVjbGFyYXRpb24qLCBEb2N1bWVudCosIGJvb2wgaXNCbG9jayA9
IGZhbHNlKTsKKyAgICB2b2lkIGFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoU3RyaW5nQnVpbGRlciYs
IENTU1N0eWxlRGVjbGFyYXRpb24qLCBEb2N1bWVudCosIGJvb2wgaXNCbG9jayA9IGZhbHNlKTsK
ICAgICBjb25zdCBTdHJpbmcgc3R5bGVOb2RlQ2xvc2VUYWcoYm9vbCBpc0Jsb2NrID0gZmFsc2Up
OwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCop
OworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCop
OwogICAgIFN0cmluZyByZW5kZXJlZFRleHQoY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKik7CiAg
ICAgU3RyaW5nIHN0cmluZ1ZhbHVlRm9yUmFuZ2UoY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKik7
Ci0gICAgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxl
bWVudCwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwotICAg
IHZvaWQgYXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQs
IE5hbWVzcGFjZXMqKSB7IGFwcGVuZEVsZW1lbnQob3V0LCBlbGVtZW50LCBmYWxzZSwgRG9lc0Z1
bGx5U2VsZWN0Tm9kZSk7IH0KKyAgICB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYg
b3V0LCBFbGVtZW50KiwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05v
ZGUpOworICAgIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQq
IGVsZW1lbnQsIE5hbWVzcGFjZXMqKSB7IGFwcGVuZEVsZW1lbnQob3V0LCBlbGVtZW50LCBmYWxz
ZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7IH0KIAogICAgIGVudW0gTm9kZVRyYXZlcnNhbE1vZGUg
eyBFbWl0U3RyaW5nLCBEb05vdEVtaXRTdHJpbmcgfTsKICAgICBOb2RlKiB0cmF2ZXJzZU5vZGVz
Rm9yU2VyaWFsaXphdGlvbihOb2RlKiBzdGFydE5vZGUsIE5vZGUqIHBhc3RFbmQsIE5vZGVUcmF2
ZXJzYWxNb2RlKTsKQEAgLTE2MiwxMiArMTYyLDEyIEBAIGlubGluZSBTdHlsZWRNYXJrdXBBY2N1
bXVsYXRvcjo6U3R5bGVkTWEKIAogdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdp
dGhOb2RlKE5vZGUqIG5vZGUsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcywgUmFuZ2VGdWxs
eVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkKIHsKLSAgICBWZWN0b3I8VUNoYXI+
IG1hcmt1cDsKKyAgICBTdHJpbmdCdWlsZGVyIG1hcmt1cDsKICAgICBpZiAobm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKQogICAgICAgICBhcHBlbmRFbGVtZW50KG1hcmt1cCwgc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG5vZGUpLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzICYmIGlzQmxvY2soY29uc3RfY2Fz
dDxOb2RlKj4obm9kZSkpLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwogICAgIGVsc2UKICAgICAg
ICAgYXBwZW5kU3RhcnRNYXJrdXAobWFya3VwLCBub2RlLCAwKTsKLSAgICBtX3JldmVyc2VkUHJl
Y2VkaW5nTWFya3VwLmFwcGVuZChTdHJpbmc6OmFkb3B0KG1hcmt1cCkpOworICAgIG1fcmV2ZXJz
ZWRQcmVjZWRpbmdNYXJrdXAuYXBwZW5kKG1hcmt1cC50b1N0cmluZygpKTsKICAgICBhcHBlbmRF
bmRUYWcobm9kZSk7CiAgICAgaWYgKG1fbm9kZXMpCiAgICAgICAgIG1fbm9kZXMtPmFwcGVuZChu
b2RlKTsKQEAgLTE3NSwyMCArMTc1LDIwIEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OndyYXBXaXRoTm8KIAogdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhTdHls
ZU5vZGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9v
bCBpc0Jsb2NrKQogewotICAgIFZlY3RvcjxVQ2hhcj4gb3BlblRhZzsKKyAgICBTdHJpbmdCdWls
ZGVyIG9wZW5UYWc7CiAgICAgYXBwZW5kU3R5bGVOb2RlT3BlblRhZyhvcGVuVGFnLCBzdHlsZSwg
ZG9jdW1lbnQsIGlzQmxvY2spOwotICAgIG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuYXBwZW5k
KFN0cmluZzo6YWRvcHQob3BlblRhZykpOworICAgIG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAu
YXBwZW5kKG9wZW5UYWcudG9TdHJpbmcoKSk7CiAgICAgYXBwZW5kU3RyaW5nKHN0eWxlTm9kZUNs
b3NlVGFnKGlzQmxvY2spKTsKIH0KIAotdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kU3R5bGVOb2RlT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKK3ZvaWQgU3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoU3RyaW5nQnVpbGRlciYg
b3V0LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29s
IGlzQmxvY2spCiB7CiAgICAgLy8gQWxsIHRleHQtZGVjb3JhdGlvbi1yZWxhdGVkIGVsZW1lbnRz
IHNob3VsZCBoYXZlIGJlZW4gdHJlYXRlZCBhcyBzcGVjaWFsIGFuY2VzdG9ycwogICAgIC8vIElm
IHdlIGV2ZXIgaGl0IHRoaXMgQVNTRVJULCB3ZSBzaG91bGQgZXhwb3J0IFN0eWxlQ2hhbmdlIGlu
IEFwcGx5U3R5bGVDb21tYW5kIGFuZCB1c2UgaXQgaGVyZQogICAgIEFTU0VSVChwcm9wZXJ0eU1p
c3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKSAmJiBw
cm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0KSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJp
bmcsIGRpdlN0eWxlLCAoIjxkaXYgc3R5bGU9XCIiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIHN0eWxlU3Bhbk9wZW4sICgiPHNwYW4gc3R5bGU9XCIiKSk7Ci0gICAg
YXBwZW5kKG91dCwgaXNCbG9jayA/IGRpdlN0eWxlIDogc3R5bGVTcGFuT3Blbik7CisgICAgb3V0
LmFwcGVuZChpc0Jsb2NrID8gZGl2U3R5bGUgOiBzdHlsZVNwYW5PcGVuKTsKICAgICBhcHBlbmRB
dHRyaWJ1dGVWYWx1ZShvdXQsIHN0eWxlLT5jc3NUZXh0KCksIGRvY3VtZW50LT5pc0hUTUxEb2N1
bWVudCgpKTsKICAgICBvdXQuYXBwZW5kKCdcIicpOwogICAgIG91dC5hcHBlbmQoJz4nKTsKQEAg
LTIwMywxOSArMjAzLDE5IEBAIGNvbnN0IFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6
c3QKIAogU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0YWtlUmVzdWx0cygpCiB7Ci0g
ICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkodG90YWxMZW5ndGgobV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cCkgKyBsZW5ndGgoKSk7Cisg
ICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSh0b3Rh
bExlbmd0aChtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwKSArIGxlbmd0aCgpKTsKIAogICAgIGZv
ciAoc2l6ZV90IGkgPSBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwLnNpemUoKTsgaSA+IDA7IC0t
aSkKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cFtpIC0g
MV0pOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXBbaSAt
IDFdKTsKIAogICAgIGNvbmNhdGVuYXRlTWFya3VwKHJlc3VsdCk7CiAKICAgICAvLyBXZSByZW1v
dmUgJ1wwJyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IHZpc2libHkgcmVuZGVyZWQg
dG8gdGhlIHVzZXIuCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KS5yZXBsYWNlKDAs
ICIiKTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCkucmVwbGFjZSgwLCAiIik7CiB9CiAK
LXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYg
b3V0LCBUZXh0KiB0ZXh0KQordm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4
dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqIHRleHQpCiB7ICAgIAogICAgIGNvbnN0IGJvb2wg
cGFyZW50SXNUZXh0YXJlYSA9IHRleHQtPnBhcmVudEVsZW1lbnQoKSAmJiB0ZXh0LT5wYXJlbnRF
bGVtZW50KCktPnRhZ1FOYW1lKCkgPT0gdGV4dGFyZWFUYWc7CiAgICAgY29uc3QgYm9vbCB3cmFw
cGluZ1NwYW4gPSBzaG91bGRBcHBseVdyYXBwaW5nU3R5bGUodGV4dCkgJiYgIXBhcmVudElzVGV4
dGFyZWE7CkBAIC0yMjcsOSArMjI3LDkgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kVGV4dAogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgaW5jbHVkZWQgaW4g
Zm9yY2VJbmxpbmU/CiAgICAgICAgIHdyYXBwaW5nU3R5bGUtPnN0eWxlKCktPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5RmxvYXQsIENTU1ZhbHVlTm9uZSk7CiAKLSAgICAgICAgVmVjdG9yPFVDaGFy
PiBvcGVuVGFnOworICAgICAgICBTdHJpbmdCdWlsZGVyIG9wZW5UYWc7CiAgICAgICAgIGFwcGVu
ZFN0eWxlTm9kZU9wZW5UYWcob3BlblRhZywgd3JhcHBpbmdTdHlsZS0+c3R5bGUoKSwgdGV4dC0+
ZG9jdW1lbnQoKSk7Ci0gICAgICAgIGFwcGVuZChvdXQsIFN0cmluZzo6YWRvcHQob3BlblRhZykp
OworICAgICAgICBvdXQuYXBwZW5kKG9wZW5UYWcpOwogICAgIH0KIAogICAgIGlmICghc2hvdWxk
QW5ub3RhdGUoKSB8fCBwYXJlbnRJc1RleHRhcmVhKQpAQCAtMjM3LDEzICsyMzcsMTMgQEAgdm9p
ZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dAogICAgIGVsc2UgewogICAgICAg
ICBjb25zdCBib29sIHVzZVJlbmRlcmVkVGV4dCA9ICFlbmNsb3NpbmdOb2RlV2l0aFRhZyhmaXJz
dFBvc2l0aW9uSW5Ob2RlKHRleHQpLCBzZWxlY3RUYWcpOwogICAgICAgICBTdHJpbmcgY29udGVu
dCA9IHVzZVJlbmRlcmVkVGV4dCA/IHJlbmRlcmVkVGV4dCh0ZXh0LCBtX3JhbmdlKSA6IHN0cmlu
Z1ZhbHVlRm9yUmFuZ2UodGV4dCwgbV9yYW5nZSk7Ci0gICAgICAgIFZlY3RvcjxVQ2hhcj4gYnVm
ZmVyOworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1ZmZlcjsKICAgICAgICAgYXBwZW5kQ2hhcmFj
dGVyc1JlcGxhY2luZ0VudGl0aWVzKGJ1ZmZlciwgY29udGVudC5jaGFyYWN0ZXJzKCksIGNvbnRl
bnQubGVuZ3RoKCksIEVudGl0eU1hc2tJblBDREFUQSk7Ci0gICAgICAgIGFwcGVuZChvdXQsIGNv
bnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYXQoU3RyaW5nOjphZG9wdChidWZmZXIpLCB0
ZXh0KSk7CisgICAgICAgIG91dC5hcHBlbmQoY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZv
cm1hdChidWZmZXIudG9TdHJpbmcoKSwgdGV4dCkpOwogICAgIH0KIAogICAgIGlmICh3cmFwcGlu
Z1NwYW4pCi0gICAgICAgIGFwcGVuZChvdXQsIHN0eWxlTm9kZUNsb3NlVGFnKCkpOworICAgICAg
ICBvdXQuYXBwZW5kKHN0eWxlTm9kZUNsb3NlVGFnKCkpOwogfQogICAgIAogU3RyaW5nIFN0eWxl
ZE1hcmt1cEFjY3VtdWxhdG9yOjpyZW5kZXJlZFRleHQoY29uc3QgTm9kZSogbm9kZSwgY29uc3Qg
UmFuZ2UqIHJhbmdlKQpAQCAtMjgwLDcgKzI4MCw3IEBAIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1
bXVsYXRvcjo6c3RyaW5nVmEKICAgICByZXR1cm4gc3RyOwogfQogCi12b2lkIFN0eWxlZE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCog
ZWxlbWVudCwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgcmFu
Z2VGdWxseVNlbGVjdHNOb2RlKQordm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
RWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgYWRkRGlz
cGxheUlubGluZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkK
IHsKICAgICBjb25zdCBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+
aXNIVE1MRG9jdW1lbnQoKTsKICAgICBhcHBlbmRPcGVuVGFnKG91dCwgZWxlbWVudCwgMCk7CkBA
IC0zMjUsNyArMzI1LDcgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxl
bQogCiAgICAgICAgIGlmICghbmV3SW5saW5lU3R5bGUtPmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHN0eWxlUHJlZml4LCAoIiBzdHls
ZT1cIiIpKTsKLSAgICAgICAgICAgIGFwcGVuZChvdXQsIHN0eWxlUHJlZml4KTsKKyAgICAgICAg
ICAgIG91dC5hcHBlbmQoc3R5bGVQcmVmaXgpOwogICAgICAgICAgICAgYXBwZW5kQXR0cmlidXRl
VmFsdWUob3V0LCBuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpLCBkb2N1bWVudElz
SFRNTCk7CiAgICAgICAgICAgICBvdXQuYXBwZW5kKCdcIicpOwogICAgICAgICB9CkBAIC05MTUs
MTMgKzkxNSwxMyBAQCBTdHJpbmcgY3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5nZSogcmFuCiAK
IFN0cmluZyB1cmxUb01hcmt1cChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUp
CiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIjxhIGhy
ZWY9XCIiKTsKLSAgICBhcHBlbmQobWFya3VwLCB1cmwuc3RyaW5nKCkpOwotICAgIGFwcGVuZCht
YXJrdXAsICJcIj4iKTsKKyAgICBTdHJpbmdCdWlsZGVyIG1hcmt1cDsKKyAgICBtYXJrdXAuYXBw
ZW5kKCI8YSBocmVmPVwiIik7CisgICAgbWFya3VwLmFwcGVuZCh1cmwuc3RyaW5nKCkpOworICAg
IG1hcmt1cC5hcHBlbmQoIlwiPiIpOwogICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRp
dGllcyhtYXJrdXAsIHRpdGxlLmNoYXJhY3RlcnMoKSwgdGl0bGUubGVuZ3RoKCksIEVudGl0eU1h
c2tJblBDREFUQSk7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIjwvYT4iKTsKLSAgICByZXR1cm4gU3Ry
aW5nOjphZG9wdChtYXJrdXApOworICAgIG1hcmt1cC5hcHBlbmQoIjwvYT4iKTsKKyAgICByZXR1
cm4gbWFya3VwLnRvU3RyaW5nKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7CiAKIGVudW0gQm91bmRhcnlTZWFyY2hDb250
ZXh0QXZhaWxhYmlsaXR5IHsgRG9udEhhdmVNb3JlQ29udGV4dCwgTWF5SGF2ZU1vcmVDb250ZXh0
IH07CiAKLXR5cGVkZWYgdW5zaWduZWQgKCpCb3VuZGFyeVNlYXJjaEZ1bmN0aW9uKShjb25zdCBV
Q2hhciosIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgb2Zmc2V0LCBCb3VuZGFyeVNlYXJjaENv
bnRleHRBdmFpbGFiaWxpdHksIGJvb2wmIG5lZWRNb3JlQ29udGV4dCk7Cit0eXBlZGVmIHVuc2ln
bmVkICgqQm91bmRhcnlTZWFyY2hGdW5jdGlvbikoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBzaXpl
LCB1bnNpZ25lZCBvZmZzZXQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSwgYm9v
bCYgbmVlZE1vcmVDb250ZXh0KTsKIAogc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0Jv
dW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2hGdW5jdGlvbiBz
ZWFyY2hGdW5jdGlvbikKIHsKQEAgLTY1LDcgKzY1LDggQEAgc3RhdGljIFZpc2libGVQb3NpdGlv
biBwcmV2aW91c0JvdW5kYXJ5KAogICAgIFBvc2l0aW9uIGVuZCA9IHBvcy5wYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShkKTsKICAgICAKLSAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKKyAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZzsKKyAgICBzdHJpbmcucmVzZXJ2ZUNhcGFjaXR5KDEwMjQpOwogICAg
IHVuc2lnbmVkIHN1ZmZpeExlbmd0aCA9IDA7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
QEAgLTEwNSw5ICsxMDYsOSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRh
cnkoCiAgICAgICAgICAgICAvLyBUcmVhdCBidWxsZXRzIHVzZWQgaW4gdGhlIHRleHQgc2VjdXJp
dHkgbW9kZSBhcyByZWd1bGFyIGNoYXJhY3RlcnMgd2hlbiBsb29raW5nIGZvciBib3VuZGFyaWVz
CiAgICAgICAgICAgICBTdHJpbmcgaXRlcmF0b3JTdHJpbmcoaXQuY2hhcmFjdGVycygpLCBpdC5s
ZW5ndGgoKSk7CiAgICAgICAgICAgICBpdGVyYXRvclN0cmluZy5maWxsKCd4Jyk7Ci0gICAgICAg
ICAgICBzdHJpbmcucHJlcGVuZChpdGVyYXRvclN0cmluZy5jaGFyYWN0ZXJzKCksIGl0ZXJhdG9y
U3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZy5wcmVwZW5kKGl0ZXJhdG9yU3Ry
aW5nKTsKICAgICAgICAgfQotICAgICAgICBuZXh0ID0gc2VhcmNoRnVuY3Rpb24oc3RyaW5nLmRh
dGEoKSwgc3RyaW5nLnNpemUoKSwgc3RyaW5nLnNpemUoKSAtIHN1ZmZpeExlbmd0aCwgTWF5SGF2
ZU1vcmVDb250ZXh0LCBuZWVkTW9yZUNvbnRleHQpOworICAgICAgICBuZXh0ID0gc2VhcmNoRnVu
Y3Rpb24oc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpLCBzdHJpbmcubGVuZ3Ro
KCkgLSBzdWZmaXhMZW5ndGgsIE1heUhhdmVNb3JlQ29udGV4dCwgbmVlZE1vcmVDb250ZXh0KTsK
ICAgICAgICAgaWYgKG5leHQgIT0gMCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpdC5h
ZHZhbmNlKCk7CkBAIC0xMTUsNyArMTE2LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2
aW91c0JvdW5kYXJ5KAogICAgIGlmIChuZWVkTW9yZUNvbnRleHQpIHsKICAgICAgICAgLy8gVGhl
IGxhc3Qgc2VhcmNoIHJldHVybmVkIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciBhbmQgYXNr
ZWQgZm9yIG1vcmUgY29udGV4dCwKICAgICAgICAgLy8gYnV0IHRoZXJlIGlzIG5vIGVhcmxpZXIg
dGV4dC4gRm9yY2UgYSBzZWFyY2ggd2l0aCB3aGF0J3MgYXZhaWxhYmxlLgotICAgICAgICBuZXh0
ID0gc2VhcmNoRnVuY3Rpb24oc3RyaW5nLmRhdGEoKSwgc3RyaW5nLnNpemUoKSwgc3RyaW5nLnNp
emUoKSAtIHN1ZmZpeExlbmd0aCwgRG9udEhhdmVNb3JlQ29udGV4dCwgbmVlZE1vcmVDb250ZXh0
KTsKKyAgICAgICAgbmV4dCA9IHNlYXJjaEZ1bmN0aW9uKHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0
cmluZy5sZW5ndGgoKSwgc3RyaW5nLmxlbmd0aCgpIC0gc3VmZml4TGVuZ3RoLCBEb250SGF2ZU1v
cmVDb250ZXh0LCBuZWVkTW9yZUNvbnRleHQpOwogICAgICAgICBBU1NFUlQoIW5lZWRNb3JlQ29u
dGV4dCk7CiAgICAgfQogCkBAIC0xMjksNyArMTMwLDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlv
biBwcmV2aW91c0JvdW5kYXJ5KAogCiAgICAgLy8gVXNlIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3Ig
dG8gdHJhbnNsYXRlIHRoZSBuZXh0IHZhbHVlIGludG8gYSBET00gcG9zaXRpb24uCiAgICAgQmFj
a3dhcmRzQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KHNlYXJjaFJhbmdlLmdldCgpKTsKLSAgICBj
aGFySXQuYWR2YW5jZShzdHJpbmcuc2l6ZSgpIC0gc3VmZml4TGVuZ3RoIC0gbmV4dCk7CisgICAg
Y2hhckl0LmFkdmFuY2Uoc3RyaW5nLmxlbmd0aCgpIC0gc3VmZml4TGVuZ3RoIC0gbmV4dCk7CiAg
ICAgLy8gRklYTUU6IGNoYXJJdCBjYW4gZ2V0IG91dCBvZiBzaGFkb3cgaG9zdC4KICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKGNoYXJJdC5yYW5nZSgpLT5lbmRQb3NpdGlvbigpLCBET1dOU1RS
RUFNKTsKIH0KQEAgLTE0NSw3ICsxNDYsOCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRC
b3VuZGFyeShjb25zCiAgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShkLT5jcmVhdGVSYW5n
ZSgpKTsKICAgICBQb3NpdGlvbiBzdGFydChwb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkp
OwogCi0gICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBzdHJpbmc7CisgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmc7CisgICAgc3RyaW5nLnJlc2VydmVDYXBhY2l0eSgxMDI0KTsKICAgICB1bnNpZ25lZCBw
cmVmaXhMZW5ndGggPSAwOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0xODAsMjEg
KzE4MiwyMSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShjb25zCiAgICAg
ICAgICAgICAvLyBUcmVhdCBidWxsZXRzIHVzZWQgaW4gdGhlIHRleHQgc2VjdXJpdHkgbW9kZSBh
cyByZWd1bGFyIGNoYXJhY3RlcnMgd2hlbiBsb29raW5nIGZvciBib3VuZGFyaWVzCiAgICAgICAg
ICAgICBTdHJpbmcgaXRlcmF0b3JTdHJpbmcoaXQuY2hhcmFjdGVycygpLCBpdC5sZW5ndGgoKSk7
CiAgICAgICAgICAgICBpdGVyYXRvclN0cmluZy5maWxsKCd4Jyk7Ci0gICAgICAgICAgICBzdHJp
bmcuYXBwZW5kKGl0ZXJhdG9yU3RyaW5nLmNoYXJhY3RlcnMoKSwgaXRlcmF0b3JTdHJpbmcubGVu
Z3RoKCkpOworICAgICAgICAgICAgc3RyaW5nLmFwcGVuZChpdGVyYXRvclN0cmluZyk7CiAgICAg
ICAgIH0KLSAgICAgICAgbmV4dCA9IHNlYXJjaEZ1bmN0aW9uKHN0cmluZy5kYXRhKCksIHN0cmlu
Zy5zaXplKCksIHByZWZpeExlbmd0aCwgTWF5SGF2ZU1vcmVDb250ZXh0LCBuZWVkTW9yZUNvbnRl
eHQpOwotICAgICAgICBpZiAobmV4dCAhPSBzdHJpbmcuc2l6ZSgpKQorICAgICAgICBuZXh0ID0g
c2VhcmNoRnVuY3Rpb24oc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpLCBwcmVm
aXhMZW5ndGgsIE1heUhhdmVNb3JlQ29udGV4dCwgbmVlZE1vcmVDb250ZXh0KTsKKyAgICAgICAg
aWYgKG5leHQgIT0gc3RyaW5nLmxlbmd0aCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGl0LmFkdmFuY2UoKTsKICAgICB9CiAgICAgaWYgKG5lZWRNb3JlQ29udGV4dCkgewogICAgICAg
ICAvLyBUaGUgbGFzdCBzZWFyY2ggcmV0dXJuZWQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFuZCBh
c2tlZCBmb3IgbW9yZSBjb250ZXh0LAogICAgICAgICAvLyBidXQgdGhlcmUgaXMgbm8gZnVydGhl
ciB0ZXh0LiBGb3JjZSBhIHNlYXJjaCB3aXRoIHdoYXQncyBhdmFpbGFibGUuCi0gICAgICAgIG5l
eHQgPSBzZWFyY2hGdW5jdGlvbihzdHJpbmcuZGF0YSgpLCBzdHJpbmcuc2l6ZSgpLCBwcmVmaXhM
ZW5ndGgsIERvbnRIYXZlTW9yZUNvbnRleHQsIG5lZWRNb3JlQ29udGV4dCk7CisgICAgICAgIG5l
eHQgPSBzZWFyY2hGdW5jdGlvbihzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCks
IHByZWZpeExlbmd0aCwgRG9udEhhdmVNb3JlQ29udGV4dCwgbmVlZE1vcmVDb250ZXh0KTsKICAg
ICAgICAgQVNTRVJUKCFuZWVkTW9yZUNvbnRleHQpOwogICAgIH0KICAgICAKLSAgICBpZiAoaXQu
YXRFbmQoKSAmJiBuZXh0ID09IHN0cmluZy5zaXplKCkpIHsKKyAgICBpZiAoaXQuYXRFbmQoKSAm
JiBuZXh0ID09IHN0cmluZy5sZW5ndGgoKSkgewogICAgICAgICBwb3MgPSBpdC5yYW5nZSgpLT5z
dGFydFBvc2l0aW9uKCk7CiAgICAgfSBlbHNlIGlmIChuZXh0ICE9IHByZWZpeExlbmd0aCkgewog
ICAgICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5l
eHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
RE9NVG9rZW5MaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRv
a2VuTGlzdC5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9ET01U
b2tlbkxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIFN0cmluZyBET01U
b2tlbkxpc3Q6OnJlbW92ZVRva2VuKGNvbnN0IEEKICAgICAvLyBBbGdvcml0aG0gZGVmaW5lZCBh
dCBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRp
cGFnZS9jb21tb24tbWljcm9zeW50YXhlcy5odG1sI3JlbW92ZS1hLXRva2VuLWZyb20tYS1zdHJp
bmcKIAogICAgIHVuc2lnbmVkIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAgVmVj
dG9yPFVDaGFyPiBvdXRwdXQ7IC8vIDMKKyAgICBTdHJpbmdCdWlsZGVyIG91dHB1dDsKICAgICBv
dXRwdXQucmVzZXJ2ZUNhcGFjaXR5KGlucHV0TGVuZ3RoKTsKICAgICB1bnNpZ25lZCBwb3NpdGlv
biA9IDA7IC8vIDQKIApAQCAtNzgsNyArNzgsNyBAQCBTdHJpbmcgRE9NVG9rZW5MaXN0OjpyZW1v
dmVUb2tlbihjb25zdCBBCiAgICAgICAgIH0KIAogICAgICAgICAvLyBTdGVwIDcKLSAgICAgICAg
VmVjdG9yPFVDaGFyPiBzOworICAgICAgICBTdHJpbmdCdWlsZGVyIHM7CiAgICAgICAgIHdoaWxl
IChwb3NpdGlvbiA8IGlucHV0TGVuZ3RoICYmIGlzTm90SFRNTFNwYWNlKGlucHV0W3Bvc2l0aW9u
XSkpCiAgICAgICAgICAgICBzLmFwcGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CiAKQEAgLTg5LDcg
Kzg5LDcgQEAgU3RyaW5nIERPTVRva2VuTGlzdDo6cmVtb3ZlVG9rZW4oY29uc3QgQQogICAgICAg
ICAgICAgICAgICsrcG9zaXRpb247CiAKICAgICAgICAgICAgIC8vIFN0ZXAgOC4yCi0gICAgICAg
ICAgICBzaXplX3QgaiA9IG91dHB1dC5zaXplKCk7CisgICAgICAgICAgICBzaXplX3QgaiA9IG91
dHB1dC5sZW5ndGgoKTsKICAgICAgICAgICAgIHdoaWxlIChqID4gMCAmJiBpc0hUTUxTcGFjZShv
dXRwdXRbaiAtIDFdKSkKICAgICAgICAgICAgICAgICAtLWo7CiAgICAgICAgICAgICBvdXRwdXQu
cmVzaXplKGopOwpAQCAtMTAxLDggKzEwMSw3IEBAIFN0cmluZyBET01Ub2tlbkxpc3Q6OnJlbW92
ZVRva2VuKGNvbnN0IEEKICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQocyk7IC8vIFN0ZXAgOQog
ICAgIH0KIAotICAgIG91dHB1dC5zaHJpbmtUb0ZpdCgpOwotICAgIHJldHVybiBTdHJpbmc6OmFk
b3B0KG91dHB1dCk7CisgICAgcmV0dXJuIG91dHB1dC50b1N0cmluZygpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFy
c2VySWRpb21zLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgV1RGOwogCkBAIC04OSw3ICs5MCw4IEBAIHN0YXRpYyBib29sIHBhcnNlRm9u
dFNpemUoY29uc3QgU3RyaW5nJiAKICAgICB9CiAKICAgICAvLyBTdGVwIDYKLSAgICBWZWN0b3I8
VUNoYXIsIDE2PiBkaWdpdHM7CisgICAgU3RyaW5nQnVpbGRlciBkaWdpdHM7CisgICAgZGlnaXRz
LnJlc2VydmVDYXBhY2l0eSgxNik7CiAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7CiAgICAg
ICAgIGlmICghaXNBU0NJSURpZ2l0KCpwb3NpdGlvbikpCiAgICAgICAgICAgICBicmVhazsKQEAg
LTEwMSw3ICsxMDMsNyBAQCBzdGF0aWMgYm9vbCBwYXJzZUZvbnRTaXplKGNvbnN0IFN0cmluZyYg
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFN0ZXAgOAotICAgIGludCB2YWx1ZSA9
IGNoYXJhY3RlcnNUb0ludFN0cmljdChkaWdpdHMuZGF0YSgpLCBkaWdpdHMuc2l6ZSgpKTsKKyAg
ICBpbnQgdmFsdWUgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoZGlnaXRzLmNoYXJhY3RlcnMoKSwg
ZGlnaXRzLmxlbmd0aCgpKTsKIAogICAgIC8vIFN0ZXAgOQogICAgIGlmIChtb2RlID09IFJlbGF0
aXZlUGx1cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAs
NyArMTEwLDcgQEAgU3RyaW5nIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzdHJpcAogICAg
IGlmICghYXR0cmlidXRlVmFsdWUuY29udGFpbnMobmV3bGluZUNoYXJhY3RlcikgJiYgIWF0dHJp
YnV0ZVZhbHVlLmNvbnRhaW5zKGNhcnJpYWdlUmV0dXJuKSkKICAgICAgICAgcmV0dXJuIGF0dHJp
YnV0ZVZhbHVlOwogCi0gICAgVmVjdG9yPFVDaGFyPiBzdHJpcHBlZDsKKyAgICBTdHJpbmdCdWls
ZGVyIHN0cmlwcGVkOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZVZhbHVlLmxlbmd0
aCgpOwogICAgIHN0cmlwcGVkLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpAQCAtMTE5LDcgKzExOSw3IEBAIFN0cmlu
ZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c3RyaXAKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBzdHJpcHBlZC5hcHBlbmQoY2hhcmFjdGVyKTsKICAgICB9Ci0gICAgcmV0dXJu
IFN0cmluZzo6YWRvcHQoc3RyaXBwZWQpOworICAgIHJldHVybiBzdHJpcHBlZC50b1N0cmluZygp
OwogfQogCiBzdGF0aWMgYm9vbCBpc05vdExpbmVCcmVhayhVQ2hhciBjaCkgeyByZXR1cm4gY2gg
IT0gbmV3bGluZUNoYXJhY3RlciAmJiBjaCAhPSBjYXJyaWFnZVJldHVybjsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCShyZXZpc2lv
biA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNl
RG9jdW1lbnQ6OnByb2Nlc3NUYWdUCiB7CiAgICAgbV9jdXJyZW50ID0gYWRkU3BhbldpdGhDbGFz
c05hbWUoIndlYmtpdC1odG1sLXRhZyIpOwogCi0gICAgQXRvbWljU3RyaW5nIHRhZ05hbWUodG9r
ZW4ubmFtZSgpLmRhdGEoKSwgdG9rZW4ubmFtZSgpLnNpemUoKSk7CisgICAgQXRvbWljU3RyaW5n
IHRhZ05hbWUodG9rZW4ubmFtZSgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKIAogICAg
IHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICBIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3Q6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSB0b2tlbi5hdHRyaWJ1dGVzKCkuYmVnaW4oKTsKQEAgLTE1Miw4ICsx
NTIsOCBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OnByb2Nlc3NUYWdUCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEF0b21pY1N0cmluZyBuYW1lKGl0ZXIt
Pm1fbmFtZS5kYXRhKCksIGl0ZXItPm1fbmFtZS5zaXplKCkpOwotICAgICAgICBTdHJpbmcgdmFs
dWUoaXRlci0+bV92YWx1ZS5kYXRhKCksIGl0ZXItPm1fdmFsdWUuc2l6ZSgpKTsgCisgICAgICAg
IEF0b21pY1N0cmluZyBuYW1lKGl0ZXItPm1fbmFtZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHko
KSk7CisgICAgICAgIFN0cmluZyB2YWx1ZShpdGVyLT5tX3ZhbHVlLnRvU3RyaW5nUHJlc2VydmVD
YXBhY2l0eSgpKTsKIAogICAgICAgICBpbmRleCA9IGFkZFJhbmdlKHNvdXJjZSwgaW5kZXgsIGl0
ZXItPm1fbmFtZVJhbmdlLm1fc3RhcnQgLSB0b2tlbi5zdGFydEluZGV4KCksICIiKTsKICAgICAg
ICAgaW5kZXggPSBhZGRSYW5nZShzb3VyY2UsIGluZGV4LCBpdGVyLT5tX25hbWVSYW5nZS5tX2Vu
ZCAtIHRva2VuLnN0YXJ0SW5kZXgoKSwgIndlYmtpdC1odG1sLWF0dHJpYnV0ZS1uYW1lIik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIu
Y3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1By
ZWxvYWRTY2FubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsOSArNTMsOSBAQCB2b2lkIENT
U1ByZWxvYWRTY2FubmVyOjpzY2FuKGNvbnN0IEhUTUxUCiB7CiAgICAgbV9zY2FubmluZ0JvZHkg
PSBzY2FubmluZ0JvZHk7CiAKLSAgICBjb25zdCBIVE1MVG9rZW46OkRhdGFWZWN0b3ImIGNoYXJh
Y3RlcnMgPSB0b2tlbi5jaGFyYWN0ZXJzKCk7Ci0gICAgZm9yIChIVE1MVG9rZW46OkRhdGFWZWN0
b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBjaGFyYWN0ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gY2hh
cmFjdGVycy5lbmQoKSAmJiBtX3N0YXRlICE9IERvbmVQYXJzaW5nSW1wb3J0UnVsZXM7ICsraXRl
cikKLSAgICAgICAgdG9rZW5pemUoKml0ZXIpOworICAgIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNo
YXJhY3RlcnMgPSB0b2tlbi5jaGFyYWN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNoYXJhY3RlcnMubGVuZ3RoKCkgJiYgbV9zdGF0ZSAhPSBEb25lUGFyc2luZ0ltcG9ydFJ1
bGVzOyArK2kpCisgICAgICAgIHRva2VuaXplKGNoYXJhY3RlcnNbaV0pOwogfQogCiBpbmxpbmUg
dm9pZCBDU1NQcmVsb2FkU2Nhbm5lcjo6dG9rZW5pemUoVUNoYXIgYykKQEAgLTE5MiwxNCArMTky
LDE0IEBAIHN0YXRpYyBTdHJpbmcgcGFyc2VDU1NTdHJpbmdPclVSTChjb25zdCAKIAogdm9pZCBD
U1NQcmVsb2FkU2Nhbm5lcjo6ZW1pdFJ1bGUoKQogewotICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZSgiaW1wb3J0IiwgbV9ydWxlLmRhdGEoKSwgbV9ydWxlLnNpemUoKSkpIHsKLSAgICAgICAgU3Ry
aW5nIHZhbHVlID0gcGFyc2VDU1NTdHJpbmdPclVSTChtX3J1bGVWYWx1ZS5kYXRhKCksIG1fcnVs
ZVZhbHVlLnNpemUoKSk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCJpbXBvcnQiLCBtX3J1
bGUuY2hhcmFjdGVycygpLCBtX3J1bGUubGVuZ3RoKCkpKSB7CisgICAgICAgIFN0cmluZyB2YWx1
ZSA9IHBhcnNlQ1NTU3RyaW5nT3JVUkwobV9ydWxlVmFsdWUuY2hhcmFjdGVycygpLCBtX3J1bGVW
YWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChtX2RvY3VtZW50LT5jb21wbGV0ZVVSTCh2YWx1
ZSkpOwogICAgICAgICAgICAgbV9kb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cHJl
bG9hZChDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCwgcmVxdWVzdCwgU3RyaW5nKCksIG1f
c2Nhbm5pbmdCb2R5KTsKICAgICAgICAgfQogICAgICAgICBtX3N0YXRlID0gSW5pdGlhbDsKLSAg
ICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCJjaGFyc2V0IiwgbV9ydWxlLmRhdGEoKSwg
bV9ydWxlLnNpemUoKSkpCisgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSgiY2hhcnNl
dCIsIG1fcnVsZS5jaGFyYWN0ZXJzKCksIG1fcnVsZS5sZW5ndGgoKSkpCiAgICAgICAgIG1fc3Rh
dGUgPSBJbml0aWFsOwogICAgIGVsc2UKICAgICAgICAgbV9zdGF0ZSA9IERvbmVQYXJzaW5nSW1w
b3J0UnVsZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nh
bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxv
YWRTY2FubmVyLmgJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAog
I2RlZmluZSBDU1NQcmVsb2FkU2Nhbm5lcl9oCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjEsOCArNjEsOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgZW1pdFJ1bGUoKTsKIAogICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgVmVjdG9y
PFVDaGFyLCAxNj4gbV9ydWxlOwotICAgIFZlY3RvcjxVQ2hhcj4gbV9ydWxlVmFsdWU7CisgICAg
U3RyaW5nQnVpbGRlciBtX3J1bGU7CisgICAgU3RyaW5nQnVpbGRlciBtX3J1bGVWYWx1ZTsKIAog
ICAgIGJvb2wgbV9zY2FubmluZ0JvZHk7CiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNp
dGUuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBA
IHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2QKIHZvaWQgSFRNTENvbnN0
cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAg
ICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpET0NUWVBFKTsKLSAgICBh
dHRhY2gobV9hdHRhY2htZW50Um9vdCwgRG9jdW1lbnRUeXBlOjpjcmVhdGUobV9kb2N1bWVudCwg
dG9rZW4ubmFtZSgpLCBTdHJpbmc6OmFkb3B0KHRva2VuLnB1YmxpY0lkZW50aWZpZXIoKSksIFN0
cmluZzo6YWRvcHQodG9rZW4uc3lzdGVtSWRlbnRpZmllcigpKSkpOworICAgIGF0dGFjaChtX2F0
dGFjaG1lbnRSb290LCBEb2N1bWVudFR5cGU6OmNyZWF0ZShtX2RvY3VtZW50LCB0b2tlbi5uYW1l
KCksIHRva2VuLnB1YmxpY0lkZW50aWZpZXIoKS5yZWxlYXNlU3RyaW5nKCksIHRva2VuLnN5c3Rl
bUlkZW50aWZpZXIoKS5yZWxlYXNlU3RyaW5nKCkpKTsKICAgICAKICAgICAvLyBET0NUWVBFIG5v
ZGVzIGFyZSBvbmx5IHByb2Nlc3NlZCB3aGVuIHBhcnNpbmcgZnJhZ21lbnRzIHcvbyBjb250ZXh0
RWxlbWVudHMsIHdoaWNoCiAgICAgLy8gbmV2ZXIgb2NjdXJzLiAgSG93ZXZlciwgaWYgd2UgZXZl
ciBjaG9zZSB0byBzdXBwb3J0IHN1Y2gsIHRoaXMgY29kZSBpcyBzdWJ0bHkgd3JvbmcsCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcAko
cmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKLSAgICBpbmxpbmUgc3RhdGljIGJvb2wgY29udmVy
dFRvVVRGMTYoVUNoYXIzMiB2YWx1ZSwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRFbnRpdHkp
CisgICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnZlcnRUb1VURjE2KFVDaGFyMzIgdmFsdWUsIFN0
cmluZ0J1aWxkZXImIGRlY29kZWRFbnRpdHkpCiAgICAgewogICAgICAgICBpZiAoVV9JU19CTVAo
dmFsdWUpKSB7CiAgICAgICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBzdGF0aWNfY2FzdDxVQ2hh
cj4odmFsdWUpOwpAQCAtODUsOSArODUsOSBAQCBwdWJsaWM6CiAKICAgICBpbmxpbmUgc3RhdGlj
IGJvb2wgYWNjZXB0TWFsZm9ybWVkKCkgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgaW5saW5lIHN0
YXRpYyBib29sIGNvbnN1bWVOYW1lZEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVmVj
dG9yPFVDaGFyLCAxNj4mIGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMs
IFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyLCBVQ2hhciYgY2MpCisgICAgaW5saW5l
IHN0YXRpYyBib29sIGNvbnN1bWVOYW1lZEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwg
U3RyaW5nQnVpbGRlciYgZGVjb2RlZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywg
VUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIsIFVDaGFyJiBjYykKICAgICB7Ci0gICAg
ICAgIFZlY3RvcjxVQ2hhciwgMTA+IGNvbnN1bWVkQ2hhcmFjdGVyczsKKyAgICAgICAgU3RyaW5n
QnVpbGRlciBjb25zdW1lZENoYXJhY3RlcnM7CiAgICAgICAgIEhUTUxFbnRpdHlTZWFyY2ggZW50
aXR5U2VhcmNoOwogICAgICAgICB3aGlsZSAoIXNvdXJjZS5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgIGNjID0gKnNvdXJjZTsKQEAgLTEzOSw3ICsxMzksNyBAQCBwdWJsaWM6CiB9CiAKIAotYm9v
bCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVmVjdG9yPFVDaGFy
LCAxNj4mIGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFk
ZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQorYm9vbCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50
ZWRTdHJpbmcmIHNvdXJjZSwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZEVudGl0eSwgYm9vbCYgbm90
RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpCiB7CiAg
ICAgcmV0dXJuIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2U8SFRNTEVudGl0eVBhcnNlcj4oc291
cmNlLCBkZWNvZGVkRW50aXR5LCBub3RFbm91Z2hDaGFyYWN0ZXJzLCBhZGRpdGlvbmFsQWxsb3dl
ZENoYXJhY3Rlcik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50
aXR5UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TEVudGl0eVBhcnNlci5oCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgY29uc3VtZUhUTUxFbnRpdHkoU2VnbWVu
dGVkU3RyaW5nJiwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVu
b3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID0gJ1wwJyk7
Citib29sIGNvbnN1bWVIVE1MRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIFN0cmluZ0J1aWxkZXIm
IGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9u
YWxBbGxvd2VkQ2hhcmFjdGVyID0gJ1wwJyk7CiAKIC8vIFVzZWQgYnkgdGhlIFhNTCBwYXJzZXIu
ICBOb3Qgc3VpdGFibGUgZm9yIHVzZSBpbiBIVE1MIHBhcnNpbmcuICBVc2UgY29uc3VtZUhUTUxF
bnRpdHkgaW5zdGVhZC4KIFVDaGFyIGRlY29kZU5hbWVkRW50aXR5KGNvbnN0IGNoYXIqKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0
UGFyc2VyLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTEgKzEw
NCw4IEBAIGJvb2wgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YSgKIHsKICAgICBj
b25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3QmIHRva2VuQXR0cmlidXRlcyA9IG1fdG9rZW4u
YXR0cmlidXRlcygpOwogICAgIEF0dHJpYnV0ZUxpc3QgYXR0cmlidXRlczsKLSAgICBmb3IgKEhU
TUxUb2tlbjo6QXR0cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRva2VuQXR0cmli
dXRlcy5iZWdpbigpOyBpdGVyICE9IHRva2VuQXR0cmlidXRlcy5lbmQoKTsgKytpdGVyKSB7Ci0g
ICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lKGl0ZXItPm1fbmFtZS5kYXRhKCksIGl0ZXItPm1f
bmFtZS5zaXplKCkpOwotICAgICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUoaXRlci0+bV92YWx1
ZS5kYXRhKCksIGl0ZXItPm1fdmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgYXR0cmlidXRlcy5hcHBl
bmQobWFrZV9wYWlyKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKSk7Ci0gICAgfQorICAg
IGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gdG9r
ZW5BdHRyaWJ1dGVzLmJlZ2luKCk7IGl0ZXIgIT0gdG9rZW5BdHRyaWJ1dGVzLmVuZCgpOyArK2l0
ZXIpCisgICAgICAgIGF0dHJpYnV0ZXMuYXBwZW5kKG1ha2VfcGFpcihpdGVyLT5tX25hbWUudG9T
dHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCksIGl0ZXItPm1fdmFsdWUudG9TdHJpbmdQcmVzZXJ2ZUNh
cGFjaXR5KCkpKTsKIAogICAgIG1fZW5jb2RpbmcgPSBlbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRl
cyhhdHRyaWJ1dGVzKTsKICAgICByZXR1cm4gbV9lbmNvZGluZy5pc1ZhbGlkKCk7CkBAIC0xNzcs
NyArMTc0LDcgQEAgYm9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OmNoZWNrRm9yTWV0YQogICAg
IHdoaWxlIChtX3Rva2VuaXplci0+bmV4dFRva2VuKG1faW5wdXQsIG1fdG9rZW4pKSB7CiAgICAg
ICAgIGJvb2wgZW5kID0gbV90b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZzsK
ICAgICAgICAgaWYgKGVuZCB8fCBtX3Rva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3Rh
cnRUYWcpIHsKLSAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWdOYW1lKG1fdG9rZW4ubmFtZSgp
LmRhdGEoKSwgbV90b2tlbi5uYW1lKCkuc2l6ZSgpKTsKKyAgICAgICAgICAgIEF0b21pY1N0cmlu
ZyB0YWdOYW1lKG1fdG9rZW4ubmFtZSgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKICAg
ICAgICAgICAgIGlmICghZW5kKSB7CiAgICAgICAgICAgICAgICAgbV90b2tlbml6ZXItPnVwZGF0
ZVN0YXRlRm9yKHRhZ05hbWUsIDApOwogICAgICAgICAgICAgICAgIGlmICh0YWdOYW1lID09IG1l
dGFUYWcgJiYgcHJvY2Vzc01ldGEoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwOCw3ICsyMDgsOCBAQCBib29sIHBhcnNlSFRNTEludGVnZXIoY29uc3QgU3RyaW5nJiBp
bnB1CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFN0ZXAgOAotICAgIFZlY3RvcjxV
Q2hhciwgMTY+IGRpZ2l0czsKKyAgICBTdHJpbmdCdWlsZGVyIGRpZ2l0czsKKyAgICBkaWdpdHMu
cmVzZXJ2ZUNhcGFjaXR5KDE2KTsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKICAgICAg
ICAgaWYgKCFpc0FTQ0lJRGlnaXQoKnBvc2l0aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjE2LDcgKzIxNyw3IEBAIGJvb2wgcGFyc2VIVE1MSW50ZWdlcihjb25zdCBTdHJpbmcmIGlucHUK
ICAgICB9CiAKICAgICAvLyBTdGVwIDkKLSAgICB2YWx1ZSA9IHNpZ24gKiBjaGFyYWN0ZXJzVG9J
bnRTdHJpY3QoZGlnaXRzLmRhdGEoKSwgZGlnaXRzLnNpemUoKSk7CisgICAgdmFsdWUgPSBzaWdu
ICogY2hhcmFjdGVyc1RvSW50U3RyaWN0KGRpZ2l0cy5jaGFyYWN0ZXJzKCksIGRpZ2l0cy5sZW5n
dGgoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI1NCw3ICsyNTUsOCBAQCBib29sIHBh
cnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihjb25zdCBTCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIC8vIFN0ZXAgOAotICAgIFZlY3RvcjxVQ2hhciwgMTY+IGRpZ2l0czsKKyAgICBTdHJp
bmdCdWlsZGVyIGRpZ2l0czsKKyAgICBkaWdpdHMucmVzZXJ2ZUNhcGFjaXR5KDE2KTsKICAgICB3
aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKICAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoKnBvc2l0
aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjYyLDcgKzI2NCw3IEBAIGJvb2wgcGFyc2VI
VE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0IFMKICAgICB9CiAKICAgICAvLyBTdGVwIDkKLSAg
ICB2YWx1ZSA9IGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QoZGlnaXRzLmRhdGEoKSwgZGlnaXRzLnNp
emUoKSk7CisgICAgdmFsdWUgPSBjaGFyYWN0ZXJzVG9VSW50U3RyaWN0KGRpZ2l0cy5jaGFyYWN0
ZXJzKCksIGRpZ2l0cy5sZW5ndGgoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAko
cmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9h
ZFNjYW5uZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSB7
CiBjbGFzcyBQcmVsb2FkVGFzayB7CiBwdWJsaWM6CiAgICAgUHJlbG9hZFRhc2soY29uc3QgSFRN
TFRva2VuJiB0b2tlbikKLSAgICAgICAgOiBtX3RhZ05hbWUodG9rZW4ubmFtZSgpLmRhdGEoKSwg
dG9rZW4ubmFtZSgpLnNpemUoKSkKKyAgICAgICAgOiBtX3RhZ05hbWUodG9rZW4ubmFtZSgpLnRv
U3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKQogICAgICAgICAsIG1fbGlua0lzU3R5bGVTaGVldChm
YWxzZSkKICAgICAgICAgLCBtX2xpbmtNZWRpYUF0dHJpYnV0ZUlzU2NyZWVuKHRydWUpCiAgICAg
ICAgICwgbV9pbnB1dElzSW1hZ2UoZmFsc2UpCkBAIC02Niw4ICs2Niw4IEBAIHB1YmxpYzoKIAog
ICAgICAgICBmb3IgKEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IGF0dHJpYnV0ZXMuYmVnaW4oKTsKICAgICAgICAgICAgICBpdGVyICE9IGF0dHJpYnV0ZXMu
ZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5hbWUo
aXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7Ci0gICAgICAgICAgICBT
dHJpbmcgYXR0cmlidXRlVmFsdWUoaXRlci0+bV92YWx1ZS5kYXRhKCksIGl0ZXItPm1fdmFsdWUu
c2l6ZSgpKTsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBhdHRyaWJ1dGVOYW1lKGl0ZXItPm1f
bmFtZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBTdHJpbmcgYXR0
cmlidXRlVmFsdWUoaXRlci0+bV92YWx1ZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSk7CiAK
ICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IGNoYXJzZXRBdHRyKQogICAgICAgICAg
ICAgICAgIG1fY2hhcnNldCA9IGF0dHJpYnV0ZVZhbHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFRva2VuLmgJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAg
cHVibGljOgogICAgICAgICBNYXJrdXBUb2tlbkJhc2U8SFRNTFRva2VuVHlwZXMsIEhUTUxUb2tl
blR5cGVzOjpEb2N0eXBlRGF0YT46OmFwcGVuZFRvTmFtZShjaGFyYWN0ZXIpOwogICAgIH0KICAg
ICAKLSAgICBjb25zdCBEYXRhVmVjdG9yJiBuYW1lKCkgY29uc3QKKyAgICBjb25zdCBTdHJpbmdC
dWlsZGVyJiBuYW1lKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSFRN
TFRva2VuVHlwZXM6OlN0YXJ0VGFnIHx8IG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFn
IHx8IG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6RE9DVFlQRSk7CiAgICAgICAgIHJldHVybiBN
YXJrdXBUb2tlbkJhc2U8SFRNTFRva2VuVHlwZXMsIEhUTUxUb2tlblR5cGVzOjpEb2N0eXBlRGF0
YT46Om5hbWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tl
bml6ZXIuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB0ZW1wbGF0ZTw+CiBRdWFsaWZpZWROYW1lIEF0b21pY01h
cmt1cFRva2VuQmFzZTxIVE1MVG9rZW4+OjpuYW1lRm9yQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0
ZUJhc2UmIGF0dHJpYnV0ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgQXRvbWljU3RyaW5nKGF0dHJpYnV0ZS5tX25hbWUuZGF0YSgpLCBhdHRyaWJ1dGUubV9u
YW1lLnNpemUoKSksIG51bGxBdG9tKTsKKyAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShudWxsQXRv
bSwgQXRvbWljU3RyaW5nKGF0dHJpYnV0ZS5tX25hbWUudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5
KCkpLCBudWxsQXRvbSk7CiB9CiAKIHRlbXBsYXRlPD4KQEAgLTc2LDE2ICs3Niw2IEBAIGlubGlu
ZSBVQ2hhciB0b0xvd2VyQ2FzZShVQ2hhciBjYykKICAgICByZXR1cm4gY2MgKyBsb3dlckNhc2VP
ZmZzZXQ7CiB9CiAKLWlubGluZSBib29sIHZlY3RvckVxdWFsc1N0cmluZyhjb25zdCBWZWN0b3I8
VUNoYXIsIDMyPiYgdmVjdG9yLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBpZiAodmVj
dG9yLnNpemUoKSAhPSBzdHJpbmcubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBjb25zdCBVQ2hhciogc3RyaW5nRGF0YSA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7Ci0gICAgY29u
c3QgVUNoYXIqIHZlY3RvckRhdGEgPSB2ZWN0b3IuZGF0YSgpOwotICAgIC8vIEZJWE1FOiBJcyB0
aGVyZSBhIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiB3ZSBzaG91bGQgYmUgY2FsbGluZyBoZXJlPwot
ICAgIHJldHVybiAhbWVtY21wKHN0cmluZ0RhdGEsIHZlY3RvckRhdGEsIHZlY3Rvci5zaXplKCkg
KiBzaXplb2YoVUNoYXIpKTsKLX0KLQogaW5saW5lIGJvb2wgaXNFbmRUYWdCdWZmZXJpbmdTdGF0
ZShIVE1MVG9rZW5pemVyU3RhdGU6OlN0YXRlIHN0YXRlKQogewogICAgIHN3aXRjaCAoc3RhdGUp
IHsKQEAgLTE0NSw3ICsxMzUsNyBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnJlc2V0KCkKIGlubGlu
ZSBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiBzb3Vy
Y2UpCiB7CiAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAgVmVjdG9y
PFVDaGFyLCAxNj4gZGVjb2RlZEVudGl0eTsKKyAgICBTdHJpbmdCdWlsZGVyIGRlY29kZWRFbnRp
dHk7CiAgICAgYm9vbCBzdWNjZXNzID0gY29uc3VtZUhUTUxFbnRpdHkoc291cmNlLCBkZWNvZGVk
RW50aXR5LCBub3RFbm91Z2hDaGFyYWN0ZXJzKTsKICAgICBpZiAobm90RW5vdWdoQ2hhcmFjdGVy
cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTUzLDkgKzE0Myw4IEBAIGlubGluZSBib29s
IEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NFbnRpdHkKICAgICAgICAgQVNTRVJUKGRlY29kZWRFbnRp
dHkuaXNFbXB0eSgpKTsKICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCcmJyk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgVmVjdG9yPFVDaGFyPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlY29kZWRF
bnRpdHkuYmVnaW4oKTsKLSAgICAgICAgZm9yICg7IGl0ZXIgIT0gZGVjb2RlZEVudGl0eS5lbmQo
KTsgKytpdGVyKQotICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCppdGVyKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlY29kZWRFbnRpdHkubGVuZ3RoKCk7ICsraSkKKyAg
ICAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcihkZWNvZGVkRW50aXR5W2ldKTsKICAgICB9CiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC05ODcsNyArOTc2LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpu
ZXh0VG9rZW4oU2VnbWVudGVkUwogCiAgICAgSFRNTF9CRUdJTl9TVEFURShDaGFyYWN0ZXJSZWZl
cmVuY2VJbkF0dHJpYnV0ZVZhbHVlU3RhdGUpIHsKICAgICAgICAgYm9vbCBub3RFbm91Z2hDaGFy
YWN0ZXJzID0gZmFsc2U7Ci0gICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+IGRlY29kZWRFbnRpdHk7
CisgICAgICAgIFN0cmluZ0J1aWxkZXIgZGVjb2RlZEVudGl0eTsKICAgICAgICAgYm9vbCBzdWNj
ZXNzID0gY29uc3VtZUhUTUxFbnRpdHkoc291cmNlLCBkZWNvZGVkRW50aXR5LCBub3RFbm91Z2hD
aGFyYWN0ZXJzLCBtX2FkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKTsKICAgICAgICAgaWYgKG5v
dEVub3VnaENoYXJhY3RlcnMpCiAgICAgICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFj
dGVyVG9rZW4oKTsKQEAgLTk5NSw5ICs5ODQsOCBAQCBib29sIEhUTUxUb2tlbml6ZXI6Om5leHRU
b2tlbihTZWdtZW50ZWRTCiAgICAgICAgICAgICBBU1NFUlQoZGVjb2RlZEVudGl0eS5pc0VtcHR5
KCkpOwogICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZSgnJicpOwog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVmVjdG9yPFVDaGFyPjo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGRlY29kZWRFbnRpdHkuYmVnaW4oKTsKLSAgICAgICAgICAgIGZvciAoOyBpdGVy
ICE9IGRlY29kZWRFbnRpdHkuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBtX3Rva2Vu
LT5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKCppdGVyKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkZWNvZGVkRW50aXR5Lmxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICAg
ICAgbV90b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZShkZWNvZGVkRW50aXR5W2ldKTsKICAg
ICAgICAgfQogICAgICAgICAvLyBXZSdyZSBzdXBwb3NlZCB0byBzd2l0Y2ggYmFjayB0byB0aGUg
YXR0cmlidXRlIHZhbHVlIHN0YXRlIHRoYXQKICAgICAgICAgLy8gd2Ugd2VyZSBpbiB3aGVuIHdl
IHdlcmUgc3dpdGNoZWQgaW50byB0aGlzIHN0YXRlLiBSYXRoZXIgdGhhbgpAQCAtMTU5OSw3ICsx
NTg3LDcgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjp1cGRhdGVTdGF0ZUZvcihjb25zdAogCiBpbmxp
bmUgYm9vbCBIVE1MVG9rZW5pemVyOjp0ZW1wb3JhcnlCdWZmZXJJcyhjb25zdCBTdHJpbmcmIGV4
cGVjdGVkU3RyaW5nKQogewotICAgIHJldHVybiB2ZWN0b3JFcXVhbHNTdHJpbmcobV90ZW1wb3Jh
cnlCdWZmZXIsIGV4cGVjdGVkU3RyaW5nKTsKKyAgICByZXR1cm4gbV90ZW1wb3JhcnlCdWZmZXIg
PT0gZXhwZWN0ZWRTdHJpbmc7CiB9CiAKIGlubGluZSB2b2lkIEhUTUxUb2tlbml6ZXI6OmFkZFRv
UG9zc2libGVFbmRUYWcoVUNoYXIgY2MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFRva2VuaXplci5oCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDE3ICsxOTUs
MTcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgaW5saW5lIGJvb2wgaXNBcHByb3ByaWF0ZUVuZFRh
ZygpOwogCi0gICAgVmVjdG9yPFVDaGFyLCAzMj4gbV9hcHByb3ByaWF0ZUVuZFRhZ05hbWU7Cisg
ICAgU3RyaW5nQnVpbGRlciBtX2FwcHJvcHJpYXRlRW5kVGFnTmFtZTsKIAogICAgIGJvb2wgbV9z
aG91bGRBbGxvd0NEQVRBOwogCiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dl
Yi1hcHBzL2N1cnJlbnQtd29yay8jdGVtcG9yYXJ5LWJ1ZmZlcgotICAgIFZlY3RvcjxVQ2hhciwg
MzI+IG1fdGVtcG9yYXJ5QnVmZmVyOworICAgIFN0cmluZ0J1aWxkZXIgbV90ZW1wb3JhcnlCdWZm
ZXI7CiAKICAgICAvLyBXZSBvY2NhdGlvbmFsbHkgd2FudCB0byBlbWl0IGJvdGggYSBjaGFyYWN0
ZXIgdG9rZW4gYW5kIGFuIGVuZCB0YWcKICAgICAvLyB0b2tlbiAoZS5nLiwgd2hlbiBsZXhpbmcg
c2NyaXB0KS4gV2UgYnVmZmVyIHRoZSBuYW1lIG9mIHRoZSBlbmQgdGFnCiAgICAgLy8gdG9rZW4g
aGVyZSBzbyB3ZSByZW1lbWJlciBpdCBuZXh0IHRpbWUgd2UgcmUtZW50ZXIgdGhlIHRva2VuaXpl
ci4KLSAgICBWZWN0b3I8VUNoYXIsIDMyPiBtX2J1ZmZlcmVkRW5kVGFnTmFtZTsKKyAgICBTdHJp
bmdCdWlsZGVyIG1fYnVmZmVyZWRFbmRUYWdOYW1lOwogICAgIAogICAgIGJvb2wgbV91c2VQcmVI
VE1MNVBhcnNlclF1aXJrczsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxUcmVlQnVpbGRlci5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4
LDggKzI0OCw4IEBAIGNsYXNzIEhUTUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXIKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyKTsKIHB1
YmxpYzoKICAgICBleHBsaWNpdCBFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyKEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCi0gICAgICAgIDogbV9jdXJyZW50KHRva2VuLmNoYXJhY3RlcnMoKS5k
YXRhKCkpCi0gICAgICAgICwgbV9lbmQobV9jdXJyZW50ICsgdG9rZW4uY2hhcmFjdGVycygpLnNp
emUoKSkKKyAgICAgICAgOiBtX2N1cnJlbnQodG9rZW4uY2hhcmFjdGVycygpLmNoYXJhY3RlcnMo
KSkKKyAgICAgICAgLCBtX2VuZChtX2N1cnJlbnQgKyB0b2tlbi5jaGFyYWN0ZXJzKCkubGVuZ3Ro
KCkpCiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CiAgICAgfQpAQCAtMjkxLDcg
KzI5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cmluZyhzdGFydCwgbV9jdXJyZW50
IC0gc3RhcnQpOwogICAgIH0KIAotICAgIHZvaWQgZ2l2ZVJlbWFpbmluZ1RvKFZlY3RvcjxVQ2hh
cj4mIHJlY2lwaWVudCkKKyAgICB2b2lkIGdpdmVSZW1haW5pbmdUbyhTdHJpbmdCdWlsZGVyJiBy
ZWNpcGllbnQpCiAgICAgewogICAgICAgICByZWNpcGllbnQuYXBwZW5kKG1fY3VycmVudCwgbV9l
bmQgLSBtX2N1cnJlbnQpOwogICAgICAgICBtX2N1cnJlbnQgPSBtX2VuZDsKQEAgLTMwMCw3ICsz
MDAsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRha2VSZW1haW5pbmdXaGl0ZXNwYWNlKCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiB3
aGl0ZXNwYWNlOworICAgICAgICBTdHJpbmdCdWlsZGVyIHdoaXRlc3BhY2U7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIFVDaGFyIGNjID0gKm1fY3VycmVudCsrOwogICAgICAgICAgICAgaWYg
KGlzSFRNTFNwYWNlKGNjKSkKQEAgLTMxMSw3ICszMTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8v
IHRvIGluc2VydCBhIHRleHQgbm9kZSAoYXMgb3Bwb3NlZCB0byBpbnNlcnRpbmcgYW4gZW1wdHkg
dGV4dCBub2RlKS4KICAgICAgICAgaWYgKHdoaXRlc3BhY2UuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICByZXR1cm4gU3RyaW5nOjphZG9wdCh3aGl0ZXNw
YWNlKTsKKyAgICAgICAgcmV0dXJuIHdoaXRlc3BhY2UudG9TdHJpbmcoKTsKICAgICB9CiAKIHBy
aXZhdGU6CkBAIC0yNzE4LDcgKzI3MTgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVs
dEZvckFmdGVySGVhCiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5UYWJsZVRl
eHQoKQogewotICAgIFN0cmluZyBjaGFyYWN0ZXJzID0gU3RyaW5nOjphZG9wdChtX3BlbmRpbmdU
YWJsZUNoYXJhY3RlcnMpOworICAgIFN0cmluZyBjaGFyYWN0ZXJzID0gbV9wZW5kaW5nVGFibGVD
aGFyYWN0ZXJzLnJlbGVhc2VTdHJpbmcoKTsKICAgICBpZiAoIWlzQWxsV2hpdGVzcGFjZShjaGFy
YWN0ZXJzKSkgewogICAgICAgICAvLyBGSVhNRTogcGFyc2UgZXJyb3IKICAgICAgICAgSFRNTENv
bnN0cnVjdGlvblNpdGU6OlJlZGlyZWN0VG9Gb3N0ZXJQYXJlbnRHdWFyZCByZWRpcmVjdGVyKG1f
dHJlZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxk
ZXIuaAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
VHJlZUJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDcgKzI0MSw3IEBAIHByaXZhdGU6
CiAgICAgSW5zZXJ0aW9uTW9kZSBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZTsKIAogICAgIC8vIGh0
dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdl
L3Rva2VuaXphdGlvbi5odG1sI3BlbmRpbmctdGFibGUtY2hhcmFjdGVyLXRva2VucwotICAgIFZl
Y3RvcjxVQ2hhcj4gbV9wZW5kaW5nVGFibGVDaGFyYWN0ZXJzOworICAgIFN0cmluZ0J1aWxkZXIg
bV9wZW5kaW5nVGFibGVDaGFyYWN0ZXJzOwogCiAgICAgLy8gV2UgYWNjZXNzIHBhcnNlciBiZWNh
dXNlIEhUTUw1IHNwZWMgcmVxdWlyZXMgdGhhdCB3ZSBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgc3Rh
dGUgb2YgdGhlIHRva2VuaXplcgogICAgIC8vIGZyb20gd2l0aGluIHBhcnNlciBhY3Rpb25zLiBX
ZSBhbHNvIG5lZWQgaXQgdG8gdHJhY2sgdGhlIGN1cnJlbnQgcG9zaXRpb24uCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVmlld1NvdXJjZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFZpZXdTb3VyY2VQYXJzZXIuY3Bw
CShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxWaWV3
U291cmNlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEhU
TUxWaWV3U291cmNlUGFyc2VyOjp1cGRhdGVUb2tlbml6CiAgICAgaWYgKG1fdG9rZW4udHlwZSgp
ICE9IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQXRv
bWljU3RyaW5nIHRhZ05hbWUobV90b2tlbi5uYW1lKCkuZGF0YSgpLCBtX3Rva2VuLm5hbWUoKS5z
aXplKCkpOworICAgIEF0b21pY1N0cmluZyB0YWdOYW1lKG1fdG9rZW4ubmFtZSgpLnRvU3RyaW5n
UHJlc2VydmVDYXBhY2l0eSgpKTsKICAgICBtX3Rva2VuaXplci0+dXBkYXRlU3RhdGVGb3IodGFn
TmFtZSwgZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMyAr
NjksMTMgQEAgc3RhdGljIGJvb2wgaXNSZXF1aXJlZEZvckluamVjdGlvbihVQ2hhcgogCiBzdGF0
aWMgYm9vbCBoYXNOYW1lKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdOdWxsaXR5KHRva2VuLm5hbWUo
KSwgc3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nJj4obmFtZS5sb2NhbE5hbWUoKSkpOworICAgIHJl
dHVybiBlcXVhbElnbm9yaW5nTnVsbGl0eSh0b2tlbi5uYW1lKCkudG9TdHJpbmdQcmVzZXJ2ZUNh
cGFjaXR5KCksIHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZyY+KG5hbWUubG9jYWxOYW1lKCkpKTsK
IH0KIAogc3RhdGljIGJvb2wgZmluZEF0dHJpYnV0ZVdpdGhOYW1lKGNvbnN0IEhUTUxUb2tlbiYg
dG9rZW4sIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIHNpemVfdCYgaW5kZXhPZk1hdGNoaW5n
QXR0cmlidXRlKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG9rZW4uYXR0cmlidXRl
cygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nTnVsbGl0eSh0b2tl
bi5hdHRyaWJ1dGVzKCkuYXQoaSkubV9uYW1lLCBuYW1lLmxvY2FsTmFtZSgpKSkgeworICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ051bGxpdHkodG9rZW4uYXR0cmlidXRlcygpLmF0KGkpLm1fbmFt
ZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSwgbmFtZS5sb2NhbE5hbWUoKSkpIHsKICAgICAg
ICAgICAgIGluZGV4T2ZNYXRjaGluZ0F0dHJpYnV0ZSA9IGk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQpAQCAtODMsMTAgKzgzLDEwIEBAIHN0YXRpYyBib29sIGZpbmRBdHRy
aWJ1dGVXaXRoTmFtZShjb25zdCAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29s
IGlzTmFtZU9mSW5saW5lRXZlbnRIYW5kbGVyKGNvbnN0IFZlY3RvcjxVQ2hhciwgMzI+JiBuYW1l
KQorc3RhdGljIGJvb2wgaXNOYW1lT2ZJbmxpbmVFdmVudEhhbmRsZXIoY29uc3QgU3RyaW5nQnVp
bGRlciYgbmFtZSkKIHsKICAgICBjb25zdCBzaXplX3QgbGVuZ3RoT2ZTaG9ydGVzdElubGluZUV2
ZW50SGFuZGxlck5hbWUgPSA1OyAvLyBUbyB3aXQ6IG9uY3V0LgotICAgIGlmIChuYW1lLnNpemUo
KSA8IGxlbmd0aE9mU2hvcnRlc3RJbmxpbmVFdmVudEhhbmRsZXJOYW1lKQorICAgIGlmIChuYW1l
Lmxlbmd0aCgpIDwgbGVuZ3RoT2ZTaG9ydGVzdElubGluZUV2ZW50SGFuZGxlck5hbWUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gbmFtZVswXSA9PSAnbycgJiYgbmFtZVsxXSA9
PSAnbic7CiB9CkBAIC05NywyMSArOTcsMjEgQEAgc3RhdGljIGJvb2wgaXNEYW5nZXJvdXNIVFRQ
RXF1aXYoY29uc3QgUwogICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShlcXVpdiwgInJlZnJl
c2giKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShlcXVpdiwgInNldC1jb29raWUiKTsKIH0KIAotc3Rh
dGljIGJvb2wgY29udGFpbnNKYXZhU2NyaXB0VVJMKGNvbnN0IFZlY3RvcjxVQ2hhciwgMzI+JiB2
YWx1ZSkKK3N0YXRpYyBib29sIGNvbnRhaW5zSmF2YVNjcmlwdFVSTChjb25zdCBTdHJpbmdCdWls
ZGVyJiB2YWx1ZSkKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciBqYXZhU2NyaXB0U2NoZW1lW10g
PSAiamF2YXNjcmlwdDoiOwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGVuZ3RoT2ZKYXZhU2Ny
aXB0U2NoZW1lID0gc2l6ZW9mKGphdmFTY3JpcHRTY2hlbWUpIC0gMTsKIAogICAgIHNpemVfdCBp
OwotICAgIGZvciAoaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgeworICAgIGZvciAoaSA9
IDA7IGkgPCB2YWx1ZS5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIGlmICghaXNIVE1MU3BhY2Uo
dmFsdWVbaV0pKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKHZhbHVlLnNp
emUoKSAtIGkgPCBsZW5ndGhPZkphdmFTY3JpcHRTY2hlbWUpCisgICAgaWYgKHZhbHVlLmxlbmd0
aCgpIC0gaSA8IGxlbmd0aE9mSmF2YVNjcmlwdFNjaGVtZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLmRhdGEoKSArIGksIGphdmFT
Y3JpcHRTY2hlbWUsIGxlbmd0aE9mSmF2YVNjcmlwdFNjaGVtZSk7CisgICAgcmV0dXJuIGVxdWFs
SWdub3JpbmdDYXNlKHZhbHVlLmNoYXJhY3RlcnMoKSArIGksIGphdmFTY3JpcHRTY2hlbWUsIGxl
bmd0aE9mSmF2YVNjcmlwdFNjaGVtZSk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgZGVjb2RlVVJMKGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQpAQCAtMzIz
LDcgKzMyMyw3IEBAIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyUGFyYW1Ub2tlbihIVE1MVG8KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmIG5h
bWVBdHRyaWJ1dGUgPSB0b2tlbi5hdHRyaWJ1dGVzKCkuYXQoaW5kZXhPZk5hbWVBdHRyaWJ1dGUp
OwotICAgIFN0cmluZyBuYW1lID0gU3RyaW5nKG5hbWVBdHRyaWJ1dGUubV92YWx1ZS5kYXRhKCks
IG5hbWVBdHRyaWJ1dGUubV92YWx1ZS5zaXplKCkpOworICAgIFN0cmluZyBuYW1lID0gbmFtZUF0
dHJpYnV0ZS5tX3ZhbHVlLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpOwogCiAgICAgaWYgKCFI
VE1MUGFyYW1FbGVtZW50Ojppc1VSTFBhcmFtZXRlcihuYW1lKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNDIyLDkgKzQyMiw5IEBAIGJvb2wgWFNTQXVkaXRvcjo6ZXJhc2VBdHRyaWJ1dGVJ
ZkluamVjdGUKICAgICBpZiAoZmluZEF0dHJpYnV0ZVdpdGhOYW1lKHRva2VuLCBhdHRyaWJ1dGVO
YW1lLCBpbmRleE9mQXR0cmlidXRlKSkgewogICAgICAgICBjb25zdCBIVE1MVG9rZW46OkF0dHJp
YnV0ZSYgYXR0cmlidXRlID0gdG9rZW4uYXR0cmlidXRlcygpLmF0KGluZGV4T2ZBdHRyaWJ1dGUp
OwogICAgICAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3Qoc25pcHBldEZvckF0dHJpYnV0ZSh0
b2tlbiwgYXR0cmlidXRlKSkpIHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IHNy
Y0F0dHIgJiYgaXNTYW1lT3JpZ2luUmVzb3VyY2UoU3RyaW5nKGF0dHJpYnV0ZS5tX3ZhbHVlLmRh
dGEoKSwgYXR0cmlidXRlLm1fdmFsdWUuc2l6ZSgpKSkpCisgICAgICAgICAgICBpZiAoYXR0cmli
dXRlTmFtZSA9PSBzcmNBdHRyICYmIGlzU2FtZU9yaWdpblJlc291cmNlKGF0dHJpYnV0ZS5tX3Zh
bHVlLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBodHRwX2VxdWl2QXR0ciAm
JiAhaXNEYW5nZXJvdXNIVFRQRXF1aXYoU3RyaW5nKGF0dHJpYnV0ZS5tX3ZhbHVlLmRhdGEoKSwg
YXR0cmlidXRlLm1fdmFsdWUuc2l6ZSgpKSkpCisgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFt
ZSA9PSBodHRwX2VxdWl2QXR0ciAmJiAhaXNEYW5nZXJvdXNIVFRQRXF1aXYoYXR0cmlidXRlLm1f
dmFsdWUudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgIHRva2VuLmVyYXNlVmFsdWVPZkF0dHJpYnV0ZShpbmRleE9m
QXR0cmlidXRlKTsKICAgICAgICAgICAgIGlmICghcmVwbGFjZW1lbnRWYWx1ZS5pc0VtcHR5KCkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAko
cmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCiAKICNpbmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yNjEsNyAr
MjYyLDcgQEAgaW5saW5lIGludCBoZXhUb0ludChVQ2hhciBjKQogICAgIHJldHVybiAwOwogfQog
Ci1ib29sIGRlY29kZVN0cmluZyhjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQs
IFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkKK2Jvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFVDaGFyKiBz
dGFydCwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nQnVpbGRlciogb3V0cHV0KQogewogICAgIHdo
aWxlIChzdGFydCA8IGVuZCkgewogICAgICAgICBVQ2hhciBjID0gKnN0YXJ0Kys7CkBAIC0zMjEs
MTEgKzMyMiwxMSBAQCBib29sIGRlY29kZVN0cmluZyhjb25zdCBVQ2hhciogc3RhcnQsIGNvCiAg
ICAgfQogICAgIGlmIChzdGFydCA+IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFZl
Y3RvcjxVQ2hhcj4gYnVmZmVyOworICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVyOwogICAgIGJ1ZmZl
ci5yZXNlcnZlQ2FwYWNpdHkoZW5kIC0gc3RhcnQpOwogICAgIGlmICghZGVjb2RlU3RyaW5nKHN0
YXJ0LCBlbmQsICZidWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKm91dHB1dCA9
IFN0cmluZyhidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsgICAgCisgICAgKm91dHB1dCA9
IGJ1ZmZlci50b1N0cmluZygpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00NDQsNyArNDQ1
LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYnVpbGRWYWx1ZShjbwogICAgIHJldHVy
biByZXN1bHQucmVsZWFzZSgpOwogfQogCi1pbmxpbmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFyIGMs
IFZlY3RvcjxVQ2hhcj4qIGRzdCkKK2lubGluZSBib29sIGVzY2FwZUNoYXIoVUNoYXIgYywgU3Ry
aW5nQnVpbGRlciogZHN0KQogewogICAgIHN3aXRjaCAoYykgewogICAgIGNhc2UgJ1xiJzogZHN0
LT5hcHBlbmQoIlxcYiIsIDIpOyBicmVhazsKQEAgLTQ2MCw3ICs0NjEsNyBAQCBpbmxpbmUgYm9v
bCBlc2NhcGVDaGFyKFVDaGFyIGMsIFZlY3RvcjxVCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlu
bGluZSB2b2lkIGRvdWJsZVF1b3RlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyLCBWZWN0b3I8VUNo
YXI+KiBkc3QpCitpbmxpbmUgdm9pZCBkb3VibGVRdW90ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0
ciwgU3RyaW5nQnVpbGRlciogZHN0KQogewogICAgIGRzdC0+YXBwZW5kKCciJyk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgKytpKSB7CkBAIC01NTYsMTMgKzU1
NywxMyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JWYWx1CiAKIFN0cmlu
ZyBJbnNwZWN0b3JWYWx1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8VUNo
YXI+IHJlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2
ZUNhcGFjaXR5KDUxMik7CiAgICAgd3JpdGVKU09OKCZyZXN1bHQpOwotICAgIHJldHVybiBTdHJp
bmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0
cmluZygpOwogfQogCi12b2lkIEluc3BlY3RvclZhbHVlOjp3cml0ZUpTT04oVmVjdG9yPFVDaGFy
Piogb3V0cHV0KSBjb25zdAordm9pZCBJbnNwZWN0b3JWYWx1ZTo6d3JpdGVKU09OKFN0cmluZ0J1
aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKICAgICBBU1NFUlQobV90eXBlID09IFR5cGVOdWxsKTsK
ICAgICBvdXRwdXQtPmFwcGVuZChudWxsU3RyaW5nLCA0KTsKQEAgLTYxNiw3ICs2MTcsNyBAQCBi
b29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKHVuc2lnCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4q
IG91dHB1dCkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKFN0cmlu
Z0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKICAgICBBU1NFUlQodHlwZSgpID09IFR5cGVCb29s
ZWFuIHx8IHR5cGUoKSA9PSBUeXBlTnVtYmVyKTsKICAgICBpZiAodHlwZSgpID09IFR5cGVCb29s
ZWFuKSB7CkBAIC02NTIsNyArNjUzLDcgQEAgYm9vbCBJbnNwZWN0b3JTdHJpbmc6OmFzU3RyaW5n
KFN0cmluZyogbwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvclN0cmluZzo6
d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yU3Ry
aW5nOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdAogewogICAgIEFTU0VS
VCh0eXBlKCkgPT0gVHlwZVN0cmluZyk7CiAgICAgZG91YmxlUXVvdGVTdHJpbmcobV9zdHJpbmdW
YWx1ZSwgb3V0cHV0KTsKQEAgLTcyNCw3ICs3MjUsNyBAQCB2b2lkIEluc3BlY3Rvck9iamVjdDo6
cmVtb3ZlKGNvbnN0IFN0cmluCiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rvck9iamVjdDo6d3Jp
dGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yT2JqZWN0
Ojp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdAogewogICAgIG91dHB1dC0+
YXBwZW5kKCd7Jyk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29yZGVyLnNpemUoKTsg
KytpKSB7CkBAIC03NjEsNyArNzYyLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5z
cGVjdG9yQXJyYQogICAgIHJldHVybiB0aGlzOwogfQogCi12b2lkIEluc3BlY3RvckFycmF5Ojp3
cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAordm9pZCBJbnNwZWN0b3JBcnJh
eTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKICAgICBvdXRwdXQt
PmFwcGVuZCgnWycpOwogICAgIGZvciAoVmVjdG9yPFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuYmVnaW4oKTsgaXQgIT0gbV9kYXRhLmVuZCgpOyAr
K2l0KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
CShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlSlNPTihjb25zdCBTdHJpbmcmIGpz
b24pOwogCiAgICAgU3RyaW5nIHRvSlNPTlN0cmluZygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3Q7CiAKIHByb3RlY3RlZDoK
ICAgICBleHBsaWNpdCBJbnNwZWN0b3JWYWx1ZShUeXBlIHR5cGUpIDogbV90eXBlKHR5cGUpIHsg
fQpAQCAtMTIxLDcgKzEyMSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIo
dW5zaWduZWQgbG9uZyogb3V0cHV0KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIo
dW5zaWduZWQgaW50KiBvdXRwdXQpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIHdyaXRlSlNP
TihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpT
T04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBleHBsaWNp
dCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGJvb2wgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZUJv
b2xlYW4pLCBtX2Jvb2xWYWx1ZSh2YWx1ZSkgeyB9CkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGFzU3RyaW5nKFN0cmluZyogb3V0cHV0KSBjb25zdDsgICAg
CiAKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVTdHJpbmcpLCBtX3N0cmluZ1ZhbHVlKHZh
bHVlKSB7IH0KQEAgLTE5OSw3ICsxOTksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbW92ZShj
b25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8
VUNoYXI+KiBvdXRwdXQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5n
QnVpbGRlciogb3V0cHV0KSBjb25zdDsKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g
bV9kYXRhLmJlZ2luKCk7IH0KICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2RhdGEuZW5k
KCk7IH0KQEAgLTIzMyw3ICsyMzMsNyBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBnZXQoc2l6ZV90IGluZGV4KTsKIAotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpT
T04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVK
U09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSW5zcGVj
dG9yQXJyYXkoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vz
c0NvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09y
aWdpbkFjY2Vzc0NvbnRyb2wuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEx
NSwxOSArMTE2LDE5IEBAIFJlc291cmNlUmVxdWVzdCBjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmwK
ICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiByZXF1ZXN0SGVhZGVyRmllbGRzID0gcmVxdWVzdC5o
dHRwSGVhZGVyRmllbGRzKCk7CiAKICAgICBpZiAocmVxdWVzdEhlYWRlckZpZWxkcy5zaXplKCkg
PiAwKSB7Ci0gICAgICAgIFZlY3RvcjxVQ2hhcj4gaGVhZGVyQnVmZmVyOworICAgICAgICBTdHJp
bmdCdWlsZGVyIGhlYWRlckJ1ZmZlcjsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmJlZ2luKCk7Ci0gICAgICAgIGFwcGVuZCho
ZWFkZXJCdWZmZXIsIGl0LT5maXJzdCk7CisgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQt
PmZpcnN0KTsKICAgICAgICAgKytpdDsKIAogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmVuZCgpOwogICAgICAgICBmb3IgKDsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcsJyk7
CiAgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgICAgICBhcHBl
bmQoaGVhZGVyQnVmZmVyLCBpdC0+Zmlyc3QpOworICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFw
cGVuZChpdC0+Zmlyc3QpOwogICAgICAgICB9CiAKLSAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5z
ZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycyIsIFN0cmlu
Zzo6YWRvcHQoaGVhZGVyQnVmZmVyKSk7CisgICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRU
UEhlYWRlckZpZWxkKCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnMiLCBoZWFkZXJCdWZm
ZXIudG9TdHJpbmcoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHByZWZsaWdodFJlcXVlc3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIApAQCAtODM2LDE3ICs4MzcsMTcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6c3RvcmUoQXBwbAogICAgIC8vIFRoZW4sIGluc2VydCB0aGUgcmVzb3VyY2UKICAgICAKICAg
ICAvLyBTZXJpYWxpemUgdGhlIGhlYWRlcnMKLSAgICBWZWN0b3I8VUNoYXI+IHN0cmluZ0J1aWxk
ZXI7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIAogICAgIEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlc291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFk
ZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5j
aGFyYWN0ZXJzKCksIGl0LT5maXJzdC5sZW5ndGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKGl0LT5maXJzdCk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhcikn
OicpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMo
KSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0
LT5zZWNvbmQpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJ1xuJyk7CiAg
ICAgfQogICAgIAotICAgIFN0cmluZyBoZWFkZXJzID0gU3RyaW5nOjphZG9wdChzdHJpbmdCdWls
ZGVyKTsKKyAgICBTdHJpbmcgaGVhZGVycyA9IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAg
ICAKICAgICBTUUxpdGVTdGF0ZW1lbnQgcmVzb3VyY2VTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklO
U0VSVCBJTlRPIENhY2hlUmVzb3VyY2VzICh1cmwsIHN0YXR1c0NvZGUsIHJlc3BvbnNlVVJMLCBo
ZWFkZXJzLCBkYXRhLCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSkgVkFMVUVTICg/LCA/LCA/
LCA/LCA/LCA/LCA/KSIpOwogICAgIGlmIChyZXNvdXJjZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMUmVzdWx0T2spCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiA5Mzg0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NiArNDcsNyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAjaW5jbHVkZSAiU3RvcmFn
ZU5hbWVzcGFjZS5oIgpAQCAtNDI4LDEzICs0MjksMTMgQEAgdm9pZCBDaHJvbWU6OnNldFRvb2xU
aXAoY29uc3QgSGl0VGVzdFJlcwogICAgICAgICAgICAgICAgICAgICBGaWxlTGlzdCogZmlsZXMg
PSBpbnB1dC0+ZmlsZXMoKTsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGlzdFNpemUg
PSBmaWxlcy0+bGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0U2l6ZSA+IDEp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxVQ2hhcj4gbmFtZXM7CisgICAgICAg
ICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIG5hbWVzOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kKG5hbWVzLCBmaWxlcy0+aXRlbShpKS0+ZmlsZU5hbWUo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGZpbGVzLT5pdGVt
KGkpLT5maWxlTmFtZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSBs
aXN0U2l6ZSAtIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVu
ZCgnXG4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRvb2xUaXAgPSBTdHJpbmc6OmFkb3B0KG5hbWVzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRvb2xUaXAgPSBuYW1lcy50b1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZmlsZW5hbWUgYWx3YXlzIGRpc3BsYXkgYXMgTFRSLgogICAgICAgICAgICAgICAgICAgICAg
ICAgdG9vbFRpcERpcmVjdGlvbiA9IExUUjsKICAgICAgICAgICAgICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMywxNCAr
MjIzLDE0IEBAIHZvaWQgRXZlbnRTb3VyY2U6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnMKIAogdm9p
ZCBFdmVudFNvdXJjZTo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCkKIHsKLSAgICBhcHBlbmQobV9yZWNlaXZlQnVmLCBtX2RlY29kZXItPmRlY29kZShkYXRhLCBs
ZW5ndGgpKTsKKyAgICBtX3JlY2VpdmVCdWYuYXBwZW5kKG1fZGVjb2Rlci0+ZGVjb2RlKGRhdGEs
IGxlbmd0aCkpOwogICAgIHBhcnNlRXZlbnRTdHJlYW0oKTsKIH0KIAogdm9pZCBFdmVudFNvdXJj
ZTo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nLCBkb3VibGUpCiB7Ci0gICAgaWYgKG1f
cmVjZWl2ZUJ1Zi5zaXplKCkgPiAwIHx8IG1fZGF0YS5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGFw
cGVuZChtX3JlY2VpdmVCdWYsICJcblxuIik7CisgICAgaWYgKG1fcmVjZWl2ZUJ1Zi5sZW5ndGgo
KSA+IDAgfHwgbV9kYXRhLmxlbmd0aCgpID4gMCkgeworICAgICAgICBtX3JlY2VpdmVCdWYuYXBw
ZW5kKCJcblxuIik7CiAgICAgICAgIHBhcnNlRXZlbnRTdHJlYW0oKTsKICAgICB9CiAgICAgbV9z
dGF0ZSA9IENPTk5FQ1RJTkc7CkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBFdmVudFNvdXJjZTo6
ZGlkRmFpbFJlZGlyZWN0Q2hlY2soKQogdm9pZCBFdmVudFNvdXJjZTo6cGFyc2VFdmVudFN0cmVh
bSgpCiB7CiAgICAgdW5zaWduZWQgaW50IGJ1ZlBvcyA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGJ1
ZlNpemUgPSBtX3JlY2VpdmVCdWYuc2l6ZSgpOworICAgIHVuc2lnbmVkIGludCBidWZTaXplID0g
bV9yZWNlaXZlQnVmLmxlbmd0aCgpOwogICAgIHdoaWxlIChidWZQb3MgPCBidWZTaXplKSB7CiAg
ICAgICAgIGlmIChtX2Rpc2NhcmRUcmFpbGluZ05ld2xpbmUpIHsKICAgICAgICAgICAgIGlmICht
X3JlY2VpdmVCdWZbYnVmUG9zXSA9PSAnXG4nKQpAQCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgRXZl
bnRTb3VyY2U6OnBhcnNlRXZlbnRTdHJlYW1MaW5lKHUKIHsKICAgICBpZiAoIWxpbmVMZW5ndGgp
IHsKICAgICAgICAgaWYgKCFtX2RhdGEuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2RhdGEu
cmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgbV9kYXRhLnNocmluayhtX2RhdGEubGVuZ3RoKCkg
LSAxKTsKICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQoY3JlYXRlTWVzc2FnZUV2ZW50KCkpOwog
ICAgICAgICB9CiAgICAgICAgIGlmICghbV9ldmVudE5hbWUuaXNFbXB0eSgpKQpAQCAtMzQ0LDcg
KzM0NCw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6OnN0b3AoKQogUGFzc1JlZlB0cjxNZXNzYWdlRXZl
bnQ+IEV2ZW50U291cmNlOjpjcmVhdGVNZXNzYWdlRXZlbnQoKQogewogICAgIFJlZlB0cjxNZXNz
YWdlRXZlbnQ+IGV2ZW50ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUoKTsKLSAgICBldmVudC0+aW5p
dE1lc3NhZ2VFdmVudChtX2V2ZW50TmFtZS5pc0VtcHR5KCkgPyBldmVudE5hbWVzKCkubWVzc2Fn
ZUV2ZW50IDogQXRvbWljU3RyaW5nKG1fZXZlbnROYW1lKSwgZmFsc2UsIGZhbHNlLCBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShTdHJpbmc6OmFkb3B0KG1fZGF0YSkpLCBtX29yaWdpbiwg
bV9sYXN0RXZlbnRJZCwgMCwgMCk7CisgICAgZXZlbnQtPmluaXRNZXNzYWdlRXZlbnQobV9ldmVu
dE5hbWUuaXNFbXB0eSgpID8gZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudCA6IEF0b21pY1N0cmlu
ZyhtX2V2ZW50TmFtZSksIGZhbHNlLCBmYWxzZSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUobV9kYXRhLnJlbGVhc2VTdHJpbmcoKSksIG1fb3JpZ2luLCBtX2xhc3RFdmVudElkLCAwLCAw
KTsKICAgICByZXR1cm4gZXZlbnQucmVsZWFzZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudFNvdXJjZS5oCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgIlRo
cmVhZGFibGVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTExMCwxMyArMTEw
LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURl
Y29kZXI+IG1fZGVjb2RlcjsKICAgICAgICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IG1fbG9h
ZGVyOwogICAgICAgICBUaW1lcjxFdmVudFNvdXJjZT4gbV9yZWNvbm5lY3RUaW1lcjsKLSAgICAg
ICAgVmVjdG9yPFVDaGFyPiBtX3JlY2VpdmVCdWY7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgbV9y
ZWNlaXZlQnVmOwogICAgICAgICBib29sIG1fZGlzY2FyZFRyYWlsaW5nTmV3bGluZTsKICAgICAg
ICAgYm9vbCBtX2ZhaWxTaWxlbnRseTsKICAgICAgICAgYm9vbCBtX3JlcXVlc3RJbkZsaWdodDsK
IAogICAgICAgICBTdHJpbmcgbV9ldmVudE5hbWU7Ci0gICAgICAgIFZlY3RvcjxVQ2hhcj4gbV9k
YXRhOworICAgICAgICBTdHJpbmdCdWlsZGVyIG1fZGF0YTsKICAgICAgICAgU3RyaW5nIG1fbGFz
dEV2ZW50SWQ7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtX3JlY29ubmVjdERlbGF5Owog
ICAgICAgICBTdHJpbmcgbV9vcmlnaW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsOSArOTYsOSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKCk7CiAKIHByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1l
bnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0
ZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCopOworICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCosIE5hbWVz
cGFjZXMqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdC
dWlsZGVyJiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CiAgICAgdmlydHVhbCB2b2lkIGFw
cGVuZEVuZFRhZyhOb2RlKik7CiAKIHByaXZhdGU6CkBAIC0xMjAsMjcgKzEyMCwyOCBAQCBTZXJp
YWxpemVyTWFya3VwQWNjdW11bGF0b3I6On5TZXJpYWxpemVyCiB7CiB9CiAKLXZvaWQgU2VyaWFs
aXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4
dCogdGV4dCkKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0
cmluZ0J1aWxkZXImIG91dCwgVGV4dCogdGV4dCkKIHsKICAgICBFbGVtZW50KiBwYXJlbnQgPSB0
ZXh0LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgaWYgKHBhcmVudCAmJiAhc2hvdWxkSWdub3JlRWxl
bWVudChwYXJlbnQpKQogICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChvdXQs
IHRleHQpOwogfQogCi12b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxl
bWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5h
bWVzcGFjZXMpCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVu
dChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVz
cGFjZXMpCiB7CiAgICAgaWYgKCFzaG91bGRJZ25vcmVFbGVtZW50KGVsZW1lbnQpKQogICAgICAg
ICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChvdXQsIGVsZW1lbnQsIG5hbWVzcGFj
ZXMpOwogCiAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSkg
ewotICAgICAgICBTdHJpbmcgbWV0YSA9ICI8bWV0YSBjaGFyc2V0PVwiIiArIG1fZG9jdW1lbnQt
PmNoYXJzZXQoKSArICJcIj4iOwotICAgICAgICBvdXQuYXBwZW5kKG1ldGEuY2hhcmFjdGVycygp
LCBtZXRhLmxlbmd0aCgpKTsKKyAgICAgICAgb3V0LmFwcGVuZCgiPG1ldGEgY2hhcnNldD1cIiIp
OworICAgICAgICBvdXQuYXBwZW5kKG1fZG9jdW1lbnQtPmNoYXJzZXQoKSk7CisgICAgICAgIG91
dC5hcHBlbmQoIlwiPiIpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBGb3Igb2JqZWN0IChwbHVn
aW5zKSB0YWdzIGFuZCB2aWRlbyB0YWcgd2UgY291bGQgcmVwbGFjZSB0aGVtIGJ5IGFuIGltYWdl
IG9mIHRoZWlyIGN1cnJlbnQgY29udGVudHMuCiB9CiAKLXZvaWQgU2VyaWFsaXplck1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxl
bWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3ZvaWQgU2VyaWFsaXplck1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImIG91
dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBpZiAo
IWVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0z
OTUsMTggKzM5NiwxOCBAQCBTdHJpbmcgU2VjdXJpdHlPcmlnaW46OnRvU3RyaW5nKCkgY29uc3QK
ICAgICAgICAgcmV0dXJuICJmaWxlOi8vIjsKICAgICB9CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJl
c3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Byb3RvY29sLmxlbmd0
aCgpICsgbV9ob3N0Lmxlbmd0aCgpICsgMTApOwotICAgIGFwcGVuZChyZXN1bHQsIG1fcHJvdG9j
b2wpOwotICAgIGFwcGVuZChyZXN1bHQsICI6Ly8iKTsKLSAgICBhcHBlbmQocmVzdWx0LCBtX2hv
c3QpOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNp
dHkobV9wcm90b2NvbC5sZW5ndGgoKSArIG1faG9zdC5sZW5ndGgoKSArIDEwKTsKKyAgICByZXN1
bHQuYXBwZW5kKG1fcHJvdG9jb2wpOworICAgIHJlc3VsdC5hcHBlbmQoIjovLyIpOworICAgIHJl
c3VsdC5hcHBlbmQobV9ob3N0KTsKIAogICAgIGlmIChtX3BvcnQpIHsKLSAgICAgICAgYXBwZW5k
KHJlc3VsdCwgIjoiKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgU3RyaW5nOjpudW1iZXIobV9w
b3J0KSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIjoiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChTdHJpbmc6Om51bWJlcihtX3BvcnQpKTsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOjph
ZG9wdChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9G
aWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
U3lzdGVtLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9G
aWxlU3lzdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCIKIAogI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODAs
OCArODEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkRXNjYXBlVUNoYXIoVUNoCiBTdHJp
bmcgZW5jb2RlRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBpbnB1dFN0cikKIHsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBpbnB1dFN0ci5sZW5ndGgoKTsKLSAgICBWZWN0b3I8VUNoYXIsIDUxMj4g
YnVmZmVyKGxlbmd0aCAqIDMgKyAxKTsKLSAgICBVQ2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7Cisg
ICAgU3RyaW5nQnVpbGRlciBidWZmZXI7CisgICAgYnVmZmVyLnJlc2l6ZShsZW5ndGggKiAzICsg
MSk7CisgICAgVUNoYXIqIHAgPSBidWZmZXIuY2hhcmFjdGVycygpOwogCiAgICAgY29uc3QgVUNo
YXIqIHN0ciA9IGlucHV0U3RyLmNoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogc3RyRW5k
ID0gc3RyICsgbGVuZ3RoOwpAQCAtOTUsOSArOTcsMTAgQEAgU3RyaW5nIGVuY29kZUZvckZpbGVO
YW1lKGNvbnN0IFN0cmluZyYgaQogICAgICAgICAgICAgKnArKyA9IGM7CiAgICAgfQogCi0gICAg
QVNTRVJUKHAgLSBidWZmZXIuZGF0YSgpIDw9IHN0YXRpY19jYXN0PGludD4oYnVmZmVyLnNpemUo
KSkpOworICAgIEFTU0VSVChwIC0gYnVmZmVyLmNoYXJhY3RlcnMoKSA8PSBzdGF0aWNfY2FzdDxp
bnQ+KGJ1ZmZlci5sZW5ndGgoKSkpOwogCi0gICAgcmV0dXJuIFN0cmluZyhidWZmZXIuZGF0YSgp
LCBwIC0gYnVmZmVyLmRhdGEoKSk7CisgICAgYnVmZmVyLnNocmluayhwIC0gYnVmZmVyLmNoYXJh
Y3RlcnMoKSk7CisgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogfQogCiAjaWYgIVBMQVRG
T1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCShyZXZpc2lvbiA5Mzg0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KIAogI2lmIFVTRShJQ1VfVU5JQ09ERSkKQEAgLTg4OSwyMiArODkwLDIyIEBAIFN0cmluZyBL
VVJMOjpkZXByZWNhdGVkU3RyaW5nKCkgY29uc3QKICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAg
ICAgcmV0dXJuIG1fc3RyaW5nOwogCi0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgU3Ry
aW5nQnVpbGRlciByZXN1bHQ7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBwcm90b2NvbCgpKTsKKyAg
ICByZXN1bHQuYXBwZW5kKHByb3RvY29sKCkpOwogICAgIHJlc3VsdC5hcHBlbmQoJzonKTsKIAot
ICAgIFZlY3RvcjxVQ2hhcj4gYXV0aG9yaXR5OworICAgIFN0cmluZ0J1aWxkZXIgYXV0aG9yaXR5
OwogCiAgICAgaWYgKG1faG9zdEVuZCAhPSBtX3Bhc3N3b3JkRW5kKSB7CiAgICAgICAgIGlmICht
X3VzZXJFbmQgIT0gbV91c2VyU3RhcnQpIHsKLSAgICAgICAgICAgIGFwcGVuZChhdXRob3JpdHks
IHVzZXIoKSk7CisgICAgICAgICAgICBhdXRob3JpdHkuYXBwZW5kKHVzZXIoKSk7CiAgICAgICAg
ICAgICBhdXRob3JpdHkuYXBwZW5kKCdAJyk7CiAgICAgICAgIH0KLSAgICAgICAgYXBwZW5kKGF1
dGhvcml0eSwgaG9zdCgpKTsKKyAgICAgICAgYXV0aG9yaXR5LmFwcGVuZChob3N0KCkpOwogICAg
ICAgICBpZiAoaGFzUG9ydCgpKSB7CiAgICAgICAgICAgICBhdXRob3JpdHkuYXBwZW5kKCc6Jyk7
Ci0gICAgICAgICAgICBhcHBlbmQoYXV0aG9yaXR5LCBTdHJpbmc6Om51bWJlcihwb3J0KCkpKTsK
KyAgICAgICAgICAgIGF1dGhvcml0eS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocG9ydCgpKSk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTkxNywxOSArOTE4LDE5IEBAIFN0cmluZyBLVVJMOjpkZXBy
ZWNhdGVkU3RyaW5nKCkgY29uc3QKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwogICAgIH0K
IAotICAgIGFwcGVuZChyZXN1bHQsIHBhdGgoKSk7CisgICAgcmVzdWx0LmFwcGVuZChwYXRoKCkp
OwogCiAgICAgaWYgKG1fcGF0aEVuZCAhPSBtX3F1ZXJ5RW5kKSB7CiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJz8nKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgcXVlcnkoKSk7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQocXVlcnkoKSk7CiAgICAgfQogCiAgICAgaWYgKG1fZnJhZ21lbnRFbmQgIT0g
bV9xdWVyeUVuZCkgewogICAgICAgICByZXN1bHQuYXBwZW5kKCcjJyk7Ci0gICAgICAgIGFwcGVu
ZChyZXN1bHQsIGZyYWdtZW50SWRlbnRpZmllcigpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChm
cmFnbWVudElkZW50aWZpZXIoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3RyaW5nJiBzdHIpCkBAIC05MzksNyArOTQwLDcg
QEAgU3RyaW5nIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdAogCiBTdHJpbmcgZGVj
b2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmluZyYgc3RyLCBjb25zdCBUZXh0RW5jb2Rp
bmcmIGVuY29kaW5nKQogewotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OwogCiAgICAgQ2hhckJ1ZmZlciBidWZmZXI7CiAKQEAgLTk3OCwxMyArOTc5
LDEzIEBAIFN0cmluZyBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3QKIAogICAgICAg
ICAvLyBCdWlsZCB1cCB0aGUgc3RyaW5nIHdpdGggd2hhdCB3ZSBqdXN0IHNraXBwZWQgYW5kIHdo
YXQgd2UganVzdCBkZWNvZGVkLgogICAgICAgICByZXN1bHQuYXBwZW5kKHN0ci5jaGFyYWN0ZXJz
KCkgKyBkZWNvZGVkUG9zaXRpb24sIGVuY29kZWRSdW5Qb3NpdGlvbiAtIGRlY29kZWRQb3NpdGlv
bik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZGVjb2RlZC5jaGFyYWN0ZXJzKCksIGRlY29kZWQu
bGVuZ3RoKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGRlY29kZWQpOwogICAgICAgICBkZWNv
ZGVkUG9zaXRpb24gPSBlbmNvZGVkUnVuRW5kOwogICAgIH0KIAogICAgIHJlc3VsdC5hcHBlbmQo
c3RyLmNoYXJhY3RlcnMoKSArIGRlY29kZWRQb3NpdGlvbiwgbGVuZ3RoIC0gZGVjb2RlZFBvc2l0
aW9uKTsKIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOwogfQogCiAvLyBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90
IGJvdW5kcyBjaGVjay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAJKHJl
dmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiTGlua0hhc2guaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCkBA
IC03OSw5ICs4MCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc0NvbG9uU2xhc2hTbGEK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzcXVlZXplT3V0TnVs
bENoYXJhY3RlcnMoVmVjdG9yPFVDaGFyLCA1MTI+JiBzdHJpbmcpCitzdGF0aWMgaW5saW5lIHZv
aWQgc3F1ZWV6ZU91dE51bGxDaGFyYWN0ZXJzKFN0cmluZ0J1aWxkZXImIHN0cmluZykKIHsKLSAg
ICBzaXplX3Qgc2l6ZSA9IHN0cmluZy5zaXplKCk7CisgICAgc2l6ZV90IHNpemUgPSBzdHJpbmcu
bGVuZ3RoKCk7CiAgICAgc2l6ZV90IGkgPSAwOwogICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKICAgICAgICAgaWYgKCFzdHJpbmdbaV0pCkBAIC05NSwxNCArOTYsMTQgQEAgc3RhdGlj
IGlubGluZSB2b2lkIHNxdWVlemVPdXROdWxsQ2hhcmFjdAogICAgICAgICAgICAgc3RyaW5nW2or
K10gPSBjaGFyYWN0ZXI7CiAgICAgfQogICAgIEFTU0VSVChqIDwgc2l6ZSk7Ci0gICAgc3RyaW5n
LnNocmluayhqKTsKKyAgICBzdHJpbmcucmVzaXplKGopOwogfQogCi1zdGF0aWMgdm9pZCBjbGVh
blNsYXNoRG90RG90U2xhc2hlcyhWZWN0b3I8VUNoYXIsIDUxMj4mIHBhdGgsIHNpemVfdCBmaXJz
dFNsYXNoKQorc3RhdGljIHZvaWQgY2xlYW5TbGFzaERvdERvdFNsYXNoZXMoU3RyaW5nQnVpbGRl
ciYgcGF0aCwgc2l6ZV90IGZpcnN0U2xhc2gpCiB7CiAgICAgc2l6ZV90IHNsYXNoID0gZmlyc3RT
bGFzaDsKICAgICBkbyB7Ci0gICAgICAgIHNpemVfdCBwcmV2aW91c1NsYXNoID0gc2xhc2ggPyBy
ZXZlcnNlRmluZChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksICcvJywgc2xhc2ggLSAxKSA6IG5v
dEZvdW5kOworICAgICAgICBzaXplX3QgcHJldmlvdXNTbGFzaCA9IHNsYXNoID8gcmV2ZXJzZUZp
bmQocGF0aC5jaGFyYWN0ZXJzKCksIHBhdGgubGVuZ3RoKCksICcvJywgc2xhc2ggLSAxKSA6IG5v
dEZvdW5kOwogICAgICAgICAvLyBEb24ndCByZW1vdmUgdGhlIGhvc3QsIGkuZS4gaHR0cDovL2Zv
by5vcmcvLi4vZm9vLmh0bWwKICAgICAgICAgaWYgKHByZXZpb3VzU2xhc2ggPT0gbm90Rm91bmQg
fHwgKHByZXZpb3VzU2xhc2ggPiAzICYmIHBhdGhbcHJldmlvdXNTbGFzaCAtIDJdID09ICc6JyAm
JiBwYXRoW3ByZXZpb3VzU2xhc2ggLSAxXSA9PSAnLycpKSB7CiAgICAgICAgICAgICBwYXRoW3Ns
YXNoXSA9IDA7CkBAIC0xMTMsMTUgKzExNCwxNSBAQCBzdGF0aWMgdm9pZCBjbGVhblNsYXNoRG90
RG90U2xhc2hlcyhWZWN0CiAgICAgICAgICAgICAgICAgcGF0aFtpXSA9IDA7CiAgICAgICAgIH0K
ICAgICAgICAgc2xhc2ggKz0gMzsKLSAgICB9IHdoaWxlICgoc2xhc2ggPSBmaW5kU2xhc2hEb3RE
b3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIHNsYXNoKSkgIT0gbm90Rm91bmQpOwor
ICAgIH0gd2hpbGUgKChzbGFzaCA9IGZpbmRTbGFzaERvdERvdFNsYXNoKHBhdGguY2hhcmFjdGVy
cygpLCBwYXRoLmxlbmd0aCgpLCBzbGFzaCkpICE9IG5vdEZvdW5kKTsKICAgICBzcXVlZXplT3V0
TnVsbENoYXJhY3RlcnMocGF0aCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1lcmdlRG91YmxlU2xhc2hl
cyhWZWN0b3I8VUNoYXIsIDUxMj4mIHBhdGgsIHNpemVfdCBmaXJzdFNsYXNoKQorc3RhdGljIHZv
aWQgbWVyZ2VEb3VibGVTbGFzaGVzKFN0cmluZ0J1aWxkZXImIHBhdGgsIHNpemVfdCBmaXJzdFNs
YXNoKQogewotICAgIHNpemVfdCByZWZQb3MgPSBmaW5kKHBhdGguZGF0YSgpLCBwYXRoLnNpemUo
KSwgJyMnKTsKKyAgICBzaXplX3QgcmVmUG9zID0gZmluZChwYXRoLmNoYXJhY3RlcnMoKSwgcGF0
aC5sZW5ndGgoKSwgJyMnKTsKICAgICBpZiAoIXJlZlBvcyB8fCByZWZQb3MgPT0gbm90Rm91bmQp
Ci0gICAgICAgIHJlZlBvcyA9IHBhdGguc2l6ZSgpOworICAgICAgICByZWZQb3MgPSBwYXRoLmxl
bmd0aCgpOwogCiAgICAgc2l6ZV90IHNsYXNoID0gZmlyc3RTbGFzaDsKICAgICB3aGlsZSAoc2xh
c2ggPCByZWZQb3MpIHsKQEAgLTEyOSwzNyArMTMwLDM3IEBAIHN0YXRpYyB2b2lkIG1lcmdlRG91
YmxlU2xhc2hlcyhWZWN0b3I8VUMKICAgICAgICAgICAgIHBhdGhbc2xhc2grK10gPSAwOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBzbGFzaCArPSAyOwotICAgICAgICBpZiAoKHNsYXNoID0g
ZmluZFNsYXNoU2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCBzbGFzaCkpID09IG5vdEZv
dW5kKQorICAgICAgICBpZiAoKHNsYXNoID0gZmluZFNsYXNoU2xhc2gocGF0aC5jaGFyYWN0ZXJz
KCksIHBhdGgubGVuZ3RoKCksIHNsYXNoKSkgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBicmVh
azsKICAgICB9CiAgICAgc3F1ZWV6ZU91dE51bGxDaGFyYWN0ZXJzKHBhdGgpOwogfQogCi1zdGF0
aWMgdm9pZCBjbGVhblNsYXNoRG90U2xhc2hlcyhWZWN0b3I8VUNoYXIsIDUxMj4mIHBhdGgsIHNp
emVfdCBmaXJzdFNsYXNoKQorc3RhdGljIHZvaWQgY2xlYW5TbGFzaERvdFNsYXNoZXMoU3RyaW5n
QnVpbGRlciYgcGF0aCwgc2l6ZV90IGZpcnN0U2xhc2gpCiB7CiAgICAgc2l6ZV90IHNsYXNoID0g
Zmlyc3RTbGFzaDsKICAgICBkbyB7CiAgICAgICAgIHBhdGhbc2xhc2hdID0gMDsKICAgICAgICAg
cGF0aFtzbGFzaCArIDFdID0gMDsKICAgICAgICAgc2xhc2ggKz0gMjsKLSAgICB9IHdoaWxlICgo
c2xhc2ggPSBmaW5kU2xhc2hEb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIHNsYXNo
KSkgIT0gbm90Rm91bmQpOworICAgIH0gd2hpbGUgKChzbGFzaCA9IGZpbmRTbGFzaERvdFNsYXNo
KHBhdGguY2hhcmFjdGVycygpLCBwYXRoLmxlbmd0aCgpLCBzbGFzaCkpICE9IG5vdEZvdW5kKTsK
ICAgICBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMocGF0aCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBjbGVhblBhdGgoVmVjdG9yPFVDaGFyLCA1MTI+JiBwYXRoKQorc3RhdGljIGlubGluZSB2
b2lkIGNsZWFuUGF0aChTdHJpbmdCdWlsZGVyJiBwYXRoKQogewogICAgIC8vIEZJWE1FOiBTaG91
bGQgbm90IGRvIHRoaXMgaW4gdGhlIHF1ZXJ5IG9yIGFuY2hvciBwYXJ0IG9mIHRoZSBVUkwuCi0g
ICAgc2l6ZV90IGZpcnN0U2xhc2ggPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwg
cGF0aC5zaXplKCksIDApOworICAgIHNpemVfdCBmaXJzdFNsYXNoID0gZmluZFNsYXNoRG90RG90
U2xhc2gocGF0aC5jaGFyYWN0ZXJzKCksIHBhdGgubGVuZ3RoKCksIDApOwogICAgIGlmIChmaXJz
dFNsYXNoICE9IG5vdEZvdW5kKQogICAgICAgICBjbGVhblNsYXNoRG90RG90U2xhc2hlcyhwYXRo
LCBmaXJzdFNsYXNoKTsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IGRvIHRoaXMgaW4gdGhl
IHF1ZXJ5IHBhcnQuCi0gICAgZmlyc3RTbGFzaCA9IGZpbmRTbGFzaFNsYXNoKHBhdGguZGF0YSgp
LCBwYXRoLnNpemUoKSwgMCk7CisgICAgZmlyc3RTbGFzaCA9IGZpbmRTbGFzaFNsYXNoKHBhdGgu
Y2hhcmFjdGVycygpLCBwYXRoLmxlbmd0aCgpLCAwKTsKICAgICBpZiAoZmlyc3RTbGFzaCAhPSBu
b3RGb3VuZCkKICAgICAgICAgbWVyZ2VEb3VibGVTbGFzaGVzKHBhdGgsIGZpcnN0U2xhc2gpOwog
CiAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9y
IHBhcnQuCi0gICAgZmlyc3RTbGFzaCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguZGF0YSgpLCBw
YXRoLnNpemUoKSwgMCk7CisgICAgZmlyc3RTbGFzaCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGgu
Y2hhcmFjdGVycygpLCBwYXRoLmxlbmd0aCgpLCAwKTsKICAgICBpZiAoZmlyc3RTbGFzaCAhPSBu
b3RGb3VuZCkKICAgICAgICAgY2xlYW5TbGFzaERvdFNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7
CiB9CkBAIC0yMDUsNyArMjA2LDcgQEAgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVD
aGFyKiB1cgogICAgIHJldHVybiB2aXNpdGVkTGlua0hhc2hJbmxpbmUodXJsLCBsZW5ndGgpOwog
fQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHZpc2l0ZWRVUkxJbmxpbmUoY29uc3QgS1VS
TCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwsIFZlY3RvcjxVQ2hhciwg
NTEyPiYgYnVmZmVyKQorc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdGVkVVJMSW5saW5l
KGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMLCBTdHJp
bmdCdWlsZGVyJiBidWZmZXIpCiB7CiAgICAgaWYgKGF0dHJpYnV0ZVVSTC5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjI3LDcgKzIyOCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZv
aWQgdmlzaXRlZFVSTElubGkKICAgICBib29sIGhhc0NvbG9uU2xhc2hTbGFzaCA9IGNvbnRhaW5z
Q29sb25TbGFzaFNsYXNoKGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAKICAgICBpZiAoaGFzQ29sb25T
bGFzaFNsYXNoICYmICFuZWVkc1RyYWlsaW5nU2xhc2goY2hhcmFjdGVycywgbGVuZ3RoKSkgewot
ICAgICAgICBidWZmZXIuYXBwZW5kKGF0dHJpYnV0ZVVSTC5jaGFyYWN0ZXJzKCksIGF0dHJpYnV0
ZVVSTC5sZW5ndGgoKSk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoYXR0cmlidXRlVVJMKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjQxLDcgKzI0Miw3IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIHZvaWQgdmlzaXRlZFVSTElubGkKICAgICB9CiAKICAgICBpZiAoIWxlbmd0aCkKLSAg
ICAgICAgYnVmZmVyLmFwcGVuZChiYXNlLnN0cmluZygpLmNoYXJhY3RlcnMoKSwgYmFzZS5zdHJp
bmcoKS5sZW5ndGgoKSk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoYmFzZS5zdHJpbmcoKSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIHN3aXRjaCAoY2hhcmFjdGVyc1swXSkgewogICAgICAgICAgICAg
Y2FzZSAnLyc6CkBAIC0yNTcsNyArMjU4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCB2
aXNpdGVkVVJMSW5saQogICAgIH0KICAgICBidWZmZXIuYXBwZW5kKGNoYXJhY3RlcnMsIGxlbmd0
aCk7CiAgICAgY2xlYW5QYXRoKGJ1ZmZlcik7Ci0gICAgaWYgKG5lZWRzVHJhaWxpbmdTbGFzaChi
dWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSkgeworICAgIGlmIChuZWVkc1RyYWlsaW5nU2xh
c2goYnVmZmVyLmNoYXJhY3RlcnMoKSwgYnVmZmVyLmxlbmd0aCgpKSkgewogICAgICAgICAvLyBG
SVhNRTogVGhpcyBpcyBpbmNvcnJlY3QgZm9yIFVSTHMgdGhhdCBoYXZlIGEgcXVlcnkgb3IgYW5j
aG9yOyB0aGUgIi8iIG5lZWRzIHRvIGdvIGF0IHRoZQogICAgICAgICAvLyBlbmQgb2YgdGhlIHBh
dGgsICpiZWZvcmUqIHRoZSBxdWVyeSBvciBhbmNob3IuCiAgICAgICAgIGJ1ZmZlci5hcHBlbmQo
Jy8nKTsKQEAgLTI2NiwxOSArMjY3LDIwIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgdmlz
aXRlZFVSTElubGkKICAgICByZXR1cm47CiB9CiAKLXZvaWQgdmlzaXRlZFVSTChjb25zdCBLVVJM
JiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCwgVmVjdG9yPFVDaGFyLCA1
MTI+JiBidWZmZXIpCit2b2lkIHZpc2l0ZWRVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRv
bWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwsIFN0cmluZ0J1aWxkZXImIGJ1ZmZlcikKIHsKICAgICBy
ZXR1cm4gdmlzaXRlZFVSTElubGluZShiYXNlLCBhdHRyaWJ1dGVVUkwsIGJ1ZmZlcik7CiB9CiAK
IExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZVVSTCkKIHsKLSAgICBWZWN0b3I8VUNoYXIsIDUxMj4gdXJsOworICAg
IFN0cmluZ0J1aWxkZXIgdXJsOworICAgIHVybC5yZXNlcnZlQ2FwYWNpdHkoNTEyKTsKICAgICB2
aXNpdGVkVVJMSW5saW5lKGJhc2UsIGF0dHJpYnV0ZVVSTCwgdXJsKTsKICAgICBpZiAodXJsLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gdmlzaXRlZExpbmtIYXNo
SW5saW5lKHVybC5kYXRhKCksIHVybC5zaXplKCkpOworICAgIHJldHVybiB2aXNpdGVkTGlua0hh
c2hJbmxpbmUodXJsLmNoYXJhY3RlcnMoKSwgdXJsLmxlbmd0aCgpKTsKIH0KIAogfSAgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaAkocmV2aXNp
b24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBL
VVJMJiBiYXMKIC8vIFJlc29sdmVzIHRoZSBwb3RlbnRpYWxseSByZWxhdGl2ZSBVUkwgImF0dHJp
YnV0ZVVSTCIgcmVsYXRpdmUgdG8gdGhlIGdpdmVuCiAvLyBiYXNlIFVSTCwgYW5kIHJldHVybnMg
dGhlIGhhc2ggb2YgdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdmlzaXRlZC4KIC8v
IEl0IHdpbGwgcmV0dXJuIGFuIGVtcHR5IFZlY3RvciBpbiBjYXNlIG9mIGVycm9ycy4KLXZvaWQg
dmlzaXRlZFVSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0
ZVVSTCwgVmVjdG9yPFVDaGFyLCA1MTI+Jik7Cit2b2lkIHZpc2l0ZWRVUkwoY29uc3QgS1VSTCYg
YmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwsIFN0cmluZ0J1aWxkZXImKTsK
IAogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSwxNiAr
MTk1LDE2IEBAIFN0cmluZyBDb2xvcjo6c2VyaWFsaXplZCgpIGNvbnN0CiAgICAgICAgIHJldHVy
biBidWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQogCi0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7
Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMjgpOworICAgIFN0cmluZ0J1aWxk
ZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMjgpOwogCi0gICAgYXBwZW5k
KHJlc3VsdCwgcmdiYVBhcmVuKTsKLSAgICBhcHBlbmROdW1iZXIocmVzdWx0LCByZWQoKSk7Ci0g
ICAgYXBwZW5kKHJlc3VsdCwgY29tbWFTcGFjZSk7Ci0gICAgYXBwZW5kTnVtYmVyKHJlc3VsdCwg
Z3JlZW4oKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWFTcGFjZSk7Ci0gICAgYXBwZW5kTnVt
YmVyKHJlc3VsdCwgYmx1ZSgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYVNwYWNlKTsKKyAg
ICByZXN1bHQuYXBwZW5kKHJnYmFQYXJlbik7CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihyZWQo
KSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYVNwYWNlKTsKKyAgICByZXN1bHQuYXBwZW5kTnVt
YmVyKGdyZWVuKCkpOworICAgIHJlc3VsdC5hcHBlbmQoY29tbWFTcGFjZSk7CisgICAgcmVzdWx0
LmFwcGVuZE51bWJlcihibHVlKCkpOworICAgIHJlc3VsdC5hcHBlbmQoY29tbWFTcGFjZSk7CiAK
ICAgICBpZiAoIWFscGhhKCkpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJzAnKTsKQEAgLTIxNSw3
ICsyMTUsNyBAQCBTdHJpbmcgQ29sb3I6OnNlcmlhbGl6ZWQoKSBjb25zdAogICAgIH0KIAogICAg
IHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogU3RyaW5nIENvbG9yOjpuYW1lRm9y
UmVuZGVyVHJlZUFzVGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvRGF0YU9iamVjdEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
NiArMjIsNyBAQAogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTExMCwxNCArMTExLDE0IEBA
IHZvaWQgRGF0YU9iamVjdEd0azo6c2V0VVJMKGNvbnN0IEtVUkwmIHUKICAgICBpZiAoYWN0dWFs
TGFiZWwuaXNFbXB0eSgpKQogICAgICAgICBhY3R1YWxMYWJlbCA9IHVybDsKIAotICAgIFZlY3Rv
cjxVQ2hhcj4gbWFya3VwOwotICAgIGFwcGVuZChtYXJrdXAsICI8YSBocmVmPVwiIik7Ci0gICAg
YXBwZW5kKG1hcmt1cCwgdXJsLnN0cmluZygpKTsKLSAgICBhcHBlbmQobWFya3VwLCAiXCI+Iik7
CisgICAgU3RyaW5nQnVpbGRlciBtYXJrdXA7CisgICAgbWFya3VwLmFwcGVuZCgiPGEgaHJlZj1c
IiIpOworICAgIG1hcmt1cC5hcHBlbmQodXJsLnN0cmluZygpKTsKKyAgICBtYXJrdXAuYXBwZW5k
KCJcIj4iKTsKICAgICBHT3duUHRyPGdjaGFyPiBlc2NhcGVkKGdfbWFya3VwX2VzY2FwZV90ZXh0
KGFjdHVhbExhYmVsLnV0ZjgoKS5kYXRhKCksIC0xKSk7Ci0gICAgYXBwZW5kKG1hcmt1cCwgU3Ry
aW5nOjpmcm9tVVRGOChlc2NhcGVkLmdldCgpKSk7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIjwvYT4i
KTsKLSAgICBzZXRNYXJrdXAoU3RyaW5nOjphZG9wdChtYXJrdXApKTsKKyAgICBtYXJrdXAuYXBw
ZW5kKFN0cmluZzo6ZnJvbVVURjgoZXNjYXBlZC5nZXQoKSkpOworICAgIG1hcmt1cC5hcHBlbmQo
IjwvYT4iKTsKKyAgICBzZXRNYXJrdXAobWFya3VwLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIERh
dGFPYmplY3RHdGs6OmNsZWFyVGV4dCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwpAQCAt
MTk2LDcgKzE5Nyw3IEBAIFN0cmluZyBmaWxlbmFtZUZyb21IVFRQQ29udGVudERpc3Bvc2l0aW8K
IAogU3RyaW5nIGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29uc3QgU3RyaW5nJiBtZWRp
YVR5cGUpCiB7Ci0gICAgVmVjdG9yPFVDaGFyLCA2ND4gbWltZVR5cGU7CisgICAgU3RyaW5nQnVp
bGRlciBtaW1lVHlwZTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBtZWRpYVR5cGUubGVuZ3RoKCk7
CiAgICAgbWltZVR5cGUucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0yMjQsOSArMjI1LDkgQEAgU3RyaW5nIGV4
dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29ucwogICAgICAgICBtaW1lVHlwZS5hcHBlbmQo
Yyk7CiAgICAgfQogCi0gICAgaWYgKG1pbWVUeXBlLnNpemUoKSA9PSBsZW5ndGgpCisgICAgaWYg
KG1pbWVUeXBlLmxlbmd0aCgpID09IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIG1lZGlhVHlwZTsK
LSAgICByZXR1cm4gU3RyaW5nKG1pbWVUeXBlLmRhdGEoKSwgbWltZVR5cGUuc2l6ZSgpKTsKKyAg
ICByZXR1cm4gbWltZVR5cGUudG9TdHJpbmcoKTsKIH0KIAogU3RyaW5nIGV4dHJhY3RDaGFyc2V0
RnJvbU1lZGlhVHlwZShjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAJKHJldmlzaW9uIDkzODQ4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIHVzaW5nIHN0ZDo6bWluOwpAQCAtMzA4LDcgKzMwOSw3
IEBAIFN0cmluZyBUZXh0Q29kZWNJQ1U6OmRlY29kZShjb25zdCBjaGFyKiAKICAgICAKICAgICBF
cnJvckNhbGxiYWNrU2V0dGVyIGNhbGxiYWNrU2V0dGVyKG1fY29udmVydGVySUNVLCBzdG9wT25F
cnJvcik7CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJl
c3VsdDsKIAogICAgIFVDaGFyIGJ1ZmZlcltDb252ZXJzaW9uQnVmZmVyU2l6ZV07CiAgICAgVUNo
YXIqIGJ1ZmZlckxpbWl0ID0gYnVmZmVyICsgQ29udmVyc2lvbkJ1ZmZlclNpemU7CkBAIC0zMzAs
NyArMzMxLDcgQEAgU3RyaW5nIFRleHRDb2RlY0lDVTo6ZGVjb2RlKGNvbnN0IGNoYXIqIAogICAg
ICAgICBzYXdFcnJvciA9IHRydWU7CiAgICAgfQogCi0gICAgU3RyaW5nIHJlc3VsdFN0cmluZyA9
IFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICBTdHJpbmcgcmVzdWx0U3RyaW5nID0gcmVzdWx0
LnRvU3RyaW5nKCk7CiAKICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcwMTQ+CiAgICAgLy8gU2ltcGxpZmllZCBDaGluZXNlIHBhZ2VzIHVzZSB0aGUgY29k
ZSBBM0EwIHRvIG1lYW4gImZ1bGwtd2lkdGggc3BhY2UiLCBidXQgSUNVIGRlY29kZXMgaXQgYXMg
VStFNUU1LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0u
Y3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dFN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDEyICs4NSwxMCBAQCBUZXh0U3RyZWFt
JiBUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGRvdWJsCiBUZXh0U3RyZWFtJiBUZXh0U3RyZWFtOjpv
cGVyYXRvcjw8KGNvbnN0IGNoYXIqIHN0cmluZykKIHsKICAgICBzaXplX3Qgc3RyaW5nTGVuZ3Ro
ID0gc3RybGVuKHN0cmluZyk7Ci0gICAgc2l6ZV90IHRleHRMZW5ndGggPSBtX3RleHQuc2l6ZSgp
OworICAgIHNpemVfdCB0ZXh0TGVuZ3RoID0gbV90ZXh0Lmxlbmd0aCgpOwogICAgIGlmIChzdHJp
bmdMZW5ndGggPiBudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIHRleHRMZW5ndGgpCiAg
ICAgICAgIENSQVNIKCk7Ci0gICAgbV90ZXh0Lmdyb3codGV4dExlbmd0aCArIHN0cmluZ0xlbmd0
aCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmdMZW5ndGg7ICsraSkKLSAgICAg
ICAgbV90ZXh0W3RleHRMZW5ndGggKyBpXSA9IHN0cmluZ1tpXTsKKyAgICBtX3RleHQuYXBwZW5k
KHN0cmluZywgc3RyaW5nTGVuZ3RoKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEwMywx
MyArMTAxLDEzIEBAIFRleHRTdHJlYW0mIFRleHRTdHJlYW06Om9wZXJhdG9yPDwoY29uc3QKIAog
VGV4dFN0cmVhbSYgVGV4dFN0cmVhbTo6b3BlcmF0b3I8PChjb25zdCBTdHJpbmcmIHN0cmluZykK
IHsKLSAgICBhcHBlbmQobV90ZXh0LCBzdHJpbmcpOworICAgIG1fdGV4dC5hcHBlbmQoc3RyaW5n
KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKIFN0cmluZyBUZXh0U3RyZWFtOjpyZWxlYXNlKCkK
IHsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChtX3RleHQpOworICAgIHJldHVybiBtX3RleHQu
cmVsZWFzZVN0cmluZygpOwogfQogCiAjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5oCShyZXZpc2lvbiA5
Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIFRleHRTdHJlYW1faAogCiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAg
U3RyaW5nIHJlbGVhc2UoKTsKIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8VUNoYXI+IG1fdGV4dDsK
KyAgICBTdHJpbmdCdWlsZGVyIG1fdGV4dDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblN0cmVhbS5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3
IEBACiAjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5n
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
Ly8gV2UgdXNlIC0yIGhlcmUgYmVjYXVzZSBzb21lIHBsdWdpbnMgbGlrZSB0byByZXR1cm4gLTEg
dG8gaW5kaWNhdGUgZXJyb3IKQEAgLTEzOCwyMSArMTM5LDIxIEBAIHZvaWQgUGx1Z2luU3RyZWFt
OjpzdGFydFN0cmVhbSgpCiAgICAgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1f
cmVzb3VyY2VSZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKIAogICAgIGlmIChtX3Jl
c291cmNlUmVzcG9uc2UuaXNIVFRQKCkpIHsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdC
dWlsZGVyOworICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIFN0
cmluZyBzZXBhcmF0b3IoIjogIik7CiAKICAgICAgICAgU3RyaW5nIHN0YXR1c0xpbmUgPSAiSFRU
UCAiICsgU3RyaW5nOjpudW1iZXIobV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkp
ICsgIiBPS1xuIjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc3RhdHVzTGluZS5jaGFy
YWN0ZXJzKCksIHN0YXR1c0xpbmUubGVuZ3RoKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChzdGF0dXNMaW5lKTsKIAogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAg
ICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZVJl
c3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0
LT5maXJzdC5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBh
cmF0b3IuY2hhcmFjdGVycygpLCBzZXBhcmF0b3IubGVuZ3RoKCkpOwotICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJzKCksIGl0LT5zZWNvbmQubGVu
Z3RoKCkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvcik7CisgICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCdcbicpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9oZWFkZXJzID0gU3RyaW5n
OjphZG9wdChzdHJpbmdCdWlsZGVyKS51dGY4KCk7CisgICAgICAgIG1faGVhZGVycyA9IHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQg
aXMgZW5jb2RlZCAobW9zdCBsaWtlbHkgY29tcHJlc3NlZCksIHRoZW4gZG9uJ3Qgc2VuZCBpdHMg
bGVuZ3RoIHRvIHRoZSBwbHVnaW4sCiAgICAgICAgIC8vIHdoaWNoIGlzIG9ubHkgaW50ZXJlc3Rl
ZCBpbiB0aGUgZGVjb2RlZCBsZW5ndGgsIG5vdCB5ZXQga25vd24gYXQgdGhlIG1vbWVudC4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9u
IDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjgsOCArMTY4LDggQEAgc3RhdGljIHZvaWQgYWRqdXN0Q2hhcmFj
dGVyc0FuZExlbmd0aEZvcgogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaHlwaGVuU3RyaW5nID0g
c3R5bGUtPmh5cGhlblN0cmluZygpOwogICAgIGNoYXJhY3RlcnNXaXRoSHlwaGVuLnJlc2VydmVD
YXBhY2l0eShsZW5ndGggKyBoeXBoZW5TdHJpbmcubGVuZ3RoKCkpOwogICAgIGNoYXJhY3RlcnNX
aXRoSHlwaGVuLmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOwotICAgIGNoYXJhY3RlcnNXaXRo
SHlwaGVuLmFwcGVuZChoeXBoZW5TdHJpbmcuY2hhcmFjdGVycygpLCBoeXBoZW5TdHJpbmcubGVu
Z3RoKCkpOwotICAgIGNoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzV2l0aEh5cGhlbi5kYXRhKCk7Cisg
ICAgY2hhcmFjdGVyc1dpdGhIeXBoZW4uYXBwZW5kKGh5cGhlblN0cmluZyk7CisgICAgY2hhcmFj
dGVycyA9IGNoYXJhY3RlcnNXaXRoSHlwaGVuLmNoYXJhY3RlcnMoKTsKICAgICBsZW5ndGggKz0g
aHlwaGVuU3RyaW5nLmxlbmd0aCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgIklubGluZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIgLy8gc28gdGV4
dFJlbmRlcmVyKCkgY2FuIGJlIGlubGluZQogI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzQsNyArMzUsMTEgQEAgY2xhc3MgRG9jdW1lbnRNYXJrZXI7CiAKIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IGNOb1RydW5jYXRpb24gPSBVU0hSVF9NQVg7CiBjb25zdCB1bnNpZ25lZCBzaG9ydCBjRnVs
bFRydW5jYXRpb24gPSBVU0hSVF9NQVggLSAxOwotdHlwZWRlZiBWZWN0b3I8VUNoYXIsIDI1Nj4g
QnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuOworCitjbGFzcyBCdWZmZXJGb3JBcHBlbmRpbmdIeXBo
ZW4gOiBwdWJsaWMgU3RyaW5nQnVpbGRlciB7CitwdWJsaWM6CisgICAgQnVmZmVyRm9yQXBwZW5k
aW5nSHlwaGVuKCkgeyByZXNlcnZlQ2FwYWNpdHkoMjU2KTsgfQorfTsKIAogLy8gSGVscGVyIGZ1
bmN0aW9ucyBzaGFyZWQgYnkgSW5saW5lVGV4dEJveCAvIFNWR1Jvb3RJbmxpbmVCb3gKIHZvaWQg
dXBkYXRlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IENvbG9yJiBmaWxs
Q29sb3IsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBD
b2xvclNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRl
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJ
dGVtLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0zNzAsMTcgKzM3MSwxNyBAQCBTdHJpbmcg
UmVuZGVyTGlzdEl0ZW06Om1hcmtlclRleHRXaXRoU3VmCiAKICAgICBjb25zdCBTdHJpbmcmIG1h
cmtlclRleHQgPSBtX21hcmtlci0+dGV4dCgpOwogICAgIGNvbnN0IFN0cmluZyBtYXJrZXJTdWZm
aXggPSBtX21hcmtlci0+c3VmZml4KCk7Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHRWZWN0b3I7
CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKICAgICBpZiAoIW1fbWFya2VyLT5zdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQo
bWFya2VyU3VmZml4LmNoYXJhY3RlcnMoKSwgbWFya2VyU3VmZml4Lmxlbmd0aCgpKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChtYXJrZXJTdWZmaXgpOwogCi0gICAgcmVzdWx0VmVjdG9yLmFwcGVu
ZChtYXJrZXJUZXh0LmNoYXJhY3RlcnMoKSwgbWFya2VyVGV4dC5sZW5ndGgoKSk7CisgICAgcmVz
dWx0LmFwcGVuZChtYXJrZXJUZXh0KTsKIAogICAgIGlmIChtX21hcmtlci0+c3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICByZXN1bHRWZWN0b3IuYXBwZW5kKG1hcmtl
clN1ZmZpeC5jaGFyYWN0ZXJzKCksIG1hcmtlclN1ZmZpeC5sZW5ndGgoKSk7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQobWFya2VyU3VmZml4KTsKIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJl
c3VsdFZlY3Rvcik7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiB2b2lkIFJl
bmRlckxpc3RJdGVtOjpleHBsaWNpdFZhbHVlQ2hhbmdlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rl
ck5hbWVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0xMjMsMTIgKzEyNCwxMiBAQCBz
dGF0aWMgU3RyaW5nIHRvU3ltYm9saWMoaW50IG51bWJlciwgY29uCiAgICAgLS1udW1iZXJTaGFk
b3c7CiAKICAgICAvLyBUaGUgYXN0ZXJpc2tzIGxpc3Qtc3R5bGUtdHlwZSBpcyB0aGUgd29yc3Qg
Y2FzZTsgd2Ugc2hvdyB8bnVtYmVyU2hhZG93fCBhc3Rlcmlza3MuCi0gICAgVmVjdG9yPFVDaGFy
PiBsZXR0ZXJzOworICAgIFN0cmluZ0J1aWxkZXIgbGV0dGVyczsKICAgICBsZXR0ZXJzLmFwcGVu
ZChzeW1ib2xzW251bWJlclNoYWRvdyAlIHN5bWJvbHNTaXplXSk7CiAgICAgdW5zaWduZWQgbnVt
U3ltYm9scyA9IG51bWJlclNoYWRvdyAvIHN5bWJvbHNTaXplOwogICAgIHdoaWxlIChudW1TeW1i
b2xzLS0pCiAgICAgICAgIGxldHRlcnMuYXBwZW5kKHN5bWJvbHNbbnVtYmVyU2hhZG93ICUgc3lt
Ym9sc1NpemVdKTsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChsZXR0ZXJzKTsKKyAgICByZXR1
cm4gbGV0dGVycy50b1N0cmluZygpOwogfQogCiBzdGF0aWMgU3RyaW5nIHRvQWxwaGFiZXRpYyhp
bnQgbnVtYmVyLCBjb25zdCBVQ2hhciogYWxwaGFiZXQsIHVuc2lnbmVkIGFscGhhYmV0U2l6ZSkK
QEAgLTEyNzQsMTMgKzEyNzUsMTMgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWlu
dEluZm8mIAogICAgICAgICAvLyBUZXh0IGlzIG5vdCBhcmJpdHJhcnkuIFdlIGNhbiBqdWRnZSB3
aGV0aGVyIGl0J3MgUlRMIGZyb20gdGhlIGZpcnN0IGNoYXJhY3RlciwKICAgICAgICAgLy8gYW5k
IHdlIG9ubHkgbmVlZCB0byBoYW5kbGUgdGhlIGRpcmVjdGlvbiBSaWdodFRvTGVmdCBmb3Igbm93
LgogICAgICAgICBib29sIHRleHROZWVkc1JldmVyc2luZyA9IGRpcmVjdGlvbihtX3RleHRbMF0p
ID09IFJpZ2h0VG9MZWZ0OwotICAgICAgICBWZWN0b3I8VUNoYXI+IHJldmVyc2VkVGV4dDsKKyAg
ICAgICAgU3RyaW5nQnVpbGRlciByZXZlcnNlZFRleHQ7CiAgICAgICAgIGlmICh0ZXh0TmVlZHNS
ZXZlcnNpbmcpIHsKICAgICAgICAgICAgIGludCBsZW5ndGggPSBtX3RleHQubGVuZ3RoKCk7CiAg
ICAgICAgICAgICByZXZlcnNlZFRleHQuZ3JvdyhsZW5ndGgpOwogICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICByZXZlcnNlZFRleHRb
bGVuZ3RoIC0gaSAtIDFdID0gbV90ZXh0W2ldOwotICAgICAgICAgICAgdGV4dFJ1bi5zZXRUZXh0
KHJldmVyc2VkVGV4dC5kYXRhKCksIGxlbmd0aCk7CisgICAgICAgICAgICB0ZXh0UnVuLnNldFRl
eHQocmV2ZXJzZWRUZXh0LmNoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGNvbnN0IFVDaGFyIHN1ZmZpeCA9IGxpc3RNYXJrZXJTdWZmaXgodHlwZSwgbV9saXN0SXRl
bS0+dmFsdWUoKSk7CkBAIC0xNTUyLDE4ICsxNTUzLDE4IEBAIFN0cmluZyBSZW5kZXJMaXN0TWFy
a2VyOjpzdWZmaXgoKSBjb25zdAogICAgIEVMaXN0U3R5bGVUeXBlIHR5cGUgPSBzdHlsZSgpLT5s
aXN0U3R5bGVUeXBlKCk7CiAgICAgY29uc3QgVUNoYXIgc3VmZml4ID0gbGlzdE1hcmtlclN1ZmZp
eCh0eXBlLCBtX2xpc3RJdGVtLT52YWx1ZSgpKTsKIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0
VmVjdG9yOwotICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQoc3VmZml4KTsKKyAgICBTdHJpbmdCdWls
ZGVyIHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKHN1ZmZpeCk7CiAKICAgICAvLyBJZiB0aGUg
c3VmZml4IGlzIG5vdCAnICcsIGFuIGV4dHJhIHNwYWNlIGlzIG5lZWRlZAogICAgIGlmIChzdWZm
aXggIT0gJyAnKSB7CiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkpCi0gICAgICAgICAgICByZXN1bHRWZWN0b3IuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgJyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdFZlY3Rv
ci5wcmVwZW5kKCcgJyk7CisgICAgICAgICAgICByZXN1bHQucHJlcGVuZCgnICcpOwogICAgIH0K
IAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdFZlY3Rvcik7CisgICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOwogfQogCiBib29sIFJlbmRlckxpc3RNYXJrZXI6OmlzSW5zaWRlKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAJKHJldmlzaW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAgc3RhdGlj
IGJvb2wgaXNFbXB0eU9yVW5zdHlsZWRBcHBsZVN0eWxlUwogCiBTdHJpbmcgcXVvdGVBbmRFc2Nh
cGVOb25QcmludGFibGVzKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBWZWN0b3I8VUNoYXI+IHJl
c3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICByZXN1bHQuYXBwZW5kKCciJyk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBzLmxlbmd0aCgpOyArK2kpIHsKICAgICAg
ICAgVUNoYXIgYyA9IHNbaV07CkBAIC0yMjIsNyArMjIyLDcgQEAgU3RyaW5nIHF1b3RlQW5kRXNj
YXBlTm9uUHJpbnRhYmxlcyhjb25zdAogICAgICAgICB9CiAgICAgfQogICAgIHJlc3VsdC5hcHBl
bmQoJyInKTsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogdm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRl
ck9iamVjdChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBSZW5kZXJBc1Rl
eHRCZWhhdmlvciBiZWhhdmlvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHAJKHJldmlzaW9uIDkzODQ4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5l
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJU
ZXh0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgCkBAIC02NCwxMiArNjUsMTIgQEAgdm9pZCBSZW5kZXJNYXRoTUxGZW5j
ZWQ6OnVwZGF0ZUZyb21FbGVtZQogICAgIAogICAgIEF0b21pY1N0cmluZyBzZXBhcmF0b3JzID0g
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZlbmNlZCktPmdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6
c2VwYXJhdG9yc0F0dHIpOwogICAgIGlmICghc2VwYXJhdG9ycy5pc051bGwoKSkgewotICAgICAg
ICBWZWN0b3I8VUNoYXI+IGNoYXJhY3RlcnM7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgY2hhcmFj
dGVyczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzZXBhcmF0b3JzLmxl
bmd0aCgpOyBpKyspIHsKICAgICAgICAgICAgIGlmICghaXNTcGFjZU9yTmV3bGluZShzZXBhcmF0
b3JzW2ldKSkKICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzLmFwcGVuZChzZXBhcmF0b3JzW2ld
KTsKICAgICAgICAgfQotICAgICAgICBtX3NlcGFyYXRvcnMgPSAhY2hhcmFjdGVycy5zaXplKCkg
PyAwIDogU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnMuZGF0YSgpICwgY2hhcmFjdGVycy5z
aXplKCkpOworICAgICAgICBtX3NlcGFyYXRvcnMgPSAhY2hhcmFjdGVycy5sZW5ndGgoKSA/IDAg
OiBjaGFyYWN0ZXJzLnRvU3RyaW5nKCkuaW1wbCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IFRoZSBzZXBhcmF0b3IgZGVmYXVsdHMgdG8gYSBzaW5nbGUgY29tbWEuCiAgICAgICAgIG1fc2Vw
YXJhdG9ycyA9IFN0cmluZ0ltcGw6OmNyZWF0ZSgiLCIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIkxldmVsREJT
bGljZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogLy8gTGV2ZWxE
QiBzdG9yZXMga2V5L3ZhbHVlIHBhaXJzLiBLZXlzIGFuZCB2YWx1ZXMgYXJlIHN0cmluZ3Mgb2Yg
Ynl0ZXMsIG5vcm1hbGx5IG9mIHR5cGUgVmVjdG9yPGNoYXI+LgogLy8KQEAgLTI2NCwxNiArMjY1
LDE3IEBAIFN0cmluZyBkZWNvZGVTdHJpbmcoY29uc3QgY2hhciogcCwgY29uc3QKICAgICBBU1NF
UlQoISgoZW5kIC0gcCkgJSAyKSk7CiAKICAgICBzaXplX3QgbGVuID0gKGVuZCAtIHApIC8gMjsK
LSAgICBWZWN0b3I8VUNoYXI+IHZlY3RvcihsZW4pOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0
OworICAgIHJlc3VsdC5ncm93KGxlbik7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bjsgKytpKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgaGkgPSAqcCsrOwogICAgICAgICB1bnNp
Z25lZCBjaGFyIGxvID0gKnArKzsKIAotICAgICAgICB2ZWN0b3JbaV0gPSAoaGkgPDwgOCkgfCBs
bzsKKyAgICAgICAgcmVzdWx0W2ldID0gKGhpIDw8IDgpIHwgbG87CiAgICAgfQogCi0gICAgcmV0
dXJuIFN0cmluZzo6YWRvcHQodmVjdG9yKTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7
CiB9CiAKIFZlY3RvcjxjaGFyPiBlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGNvbnN0IFN0cmluZyYg
cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTM4
NDgpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NzQsNyArODc0LDcgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNw
b25zZUhlYQogICAgICAgICByZXR1cm4gIiI7CiAgICAgfQogCi0gICAgVmVjdG9yPFVDaGFyPiBz
dHJpbmdCdWlsZGVyOworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKIAogICAgIEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCE9IGVuZDsgKytpdCkg
ewpAQCAtODkwLDE1ICs4OTAsMTUgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNw
b25zZUhlYQogICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3ND
b250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0KSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0
ZXJzKCksIGl0LT5maXJzdC5sZW5ndGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGl0LT5maXJzdCk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZCk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCdccicpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICB9
CiAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChzdHJpbmdCdWlsZGVyKTsKKyAgICByZXR1cm4g
c3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQogCiBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6Omdl
dFJlc3BvbnNlSGVhZGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAJKHJldmlz
aW9uIDkzODQ4KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIlhQYXRoVXRpbC5oIgogI2lu
Y2x1ZGUgIlhQYXRoVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFt
ZXNwYWNlIFhQYXRoIHsKQEAgLTMxOCwyNiArMzE5LDI2IEBAIFZhbHVlIEZ1blBvc2l0aW9uOjpl
dmFsdWF0ZSgpIGNvbnN0CiBWYWx1ZSBGdW5JZDo6ZXZhbHVhdGUoKSBjb25zdAogewogICAgIFZh
bHVlIGEgPSBhcmcoMCktPmV2YWx1YXRlKCk7Ci0gICAgVmVjdG9yPFVDaGFyPiBpZExpc3Q7IC8v
IEEgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBJRHMKKyAgICBTdHJpbmdCdWlsZGVyIGlk
TGlzdDsgLy8gQSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIElEcwogCiAgICAgaWYgKGEu
aXNOb2RlU2V0KCkpIHsKICAgICAgICAgY29uc3QgTm9kZVNldCYgbm9kZXMgPSBhLnRvTm9kZVNl
dCgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICBTdHJpbmcgc3RyID0gc3RyaW5nVmFsdWUobm9kZXNbaV0pOwotICAgICAg
ICAgICAgaWRMaXN0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkpOworICAg
ICAgICAgICAgaWRMaXN0LmFwcGVuZChzdHIpOwogICAgICAgICAgICAgaWRMaXN0LmFwcGVuZCgn
ICcpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5nIHN0ciA9IGEudG9T
dHJpbmcoKTsKLSAgICAgICAgaWRMaXN0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVu
Z3RoKCkpOworICAgICAgICBpZExpc3QuYXBwZW5kKHN0cik7CiAgICAgfQogICAgIAogICAgIFRy
ZWVTY29wZSogY29udGV4dFNjb3BlID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlLT50cmVlU2Nv
cGUoKTsKICAgICBOb2RlU2V0IHJlc3VsdDsKICAgICBIYXNoU2V0PE5vZGUqPiByZXN1bHRTZXQ7
CiAKLSAgICBzaXplX3Qgc3RhcnRQb3MgPSAwOwotICAgIHNpemVfdCBsZW5ndGggPSBpZExpc3Qu
c2l6ZSgpOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBsZW5ndGgg
PSBpZExpc3QubGVuZ3RoKCk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgd2hpbGUgKHN0
YXJ0UG9zIDwgbGVuZ3RoICYmIGlzV2hpdGVzcGFjZShpZExpc3Rbc3RhcnRQb3NdKSkKICAgICAg
ICAgICAgICsrc3RhcnRQb3M7CkBAIC00MzYsMTUgKzQzNywxNiBAQCBWYWx1ZSBGdW5TdHJpbmc6
OmV2YWx1YXRlKCkgY29uc3QKIAogVmFsdWUgRnVuQ29uY2F0OjpldmFsdWF0ZSgpIGNvbnN0CiB7
Ci0gICAgVmVjdG9yPFVDaGFyLCAxMDI0PiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1
bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgxMDI0KTsKIAogICAgIHVuc2lnbmVkIGNv
dW50ID0gYXJnQ291bnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewogICAgICAgICBTdHJpbmcgc3RyKGFyZyhpKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpKTsK
LSAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkpOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0cik7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZyhy
ZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5n
KCk7CiB9CiAKIFZhbHVlIEZ1blN0YXJ0c1dpdGg6OmV2YWx1YXRlKCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aFV0aWwuY3BwCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aFV0aWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaWYg
RU5BQkxFKFhQQVRIKQogCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNl
IFhQYXRoIHsKQEAgLTUxLDE3ICs1MiwxNyBAQCBTdHJpbmcgc3RyaW5nVmFsdWUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIHJldHVybiBub2RlLT5ub2RlVmFsdWUoKTsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGlmIChpc1Jvb3REb21Ob2RlKG5vZGUpIHx8IG5vZGUtPm5vZGVUeXBl
KCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFVDaGFy
PiByZXN1bHQ7CisgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgICAg
ICAgICAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgxMDI0KTsKIAogICAgICAgICAgICAgICAg
IGZvciAoTm9kZSogbiA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4
dE5vZGUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBub2RlVmFsdWUgPSBuLT5u
b2RlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobm9kZVZh
bHVlLmNoYXJhY3RlcnMoKSwgbm9kZVZhbHVlLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQobm9kZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmFkb3B0
KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogICAg
ICAgICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJv
Y2Vzc29yTGlieHNsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3JMaWJ4c2x0LmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS94
bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsOSArMTY4
LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldFhTTFRMb2FkQ2FsbEJhY2soeAogICAgIGdsb2Jh
bENhY2hlZFJlc291cmNlTG9hZGVyID0gY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiB9CiAKLXN0YXRp
YyBpbnQgd3JpdGVUb1ZlY3Rvcih2b2lkKiBjb250ZXh0LCBjb25zdCBjaGFyKiBidWZmZXIsIGlu
dCBsZW4pCitzdGF0aWMgaW50IHdyaXRlVG9TdHJpbmdCdWlsZGVyKHZvaWQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIGJ1ZmZlciwgaW50IGxlbikKIHsKLSAgICBWZWN0b3I8VUNoYXI+JiByZXN1bHRP
dXRwdXQgPSAqc3RhdGljX2Nhc3Q8VmVjdG9yPFVDaGFyPio+KGNvbnRleHQpOworICAgIFN0cmlu
Z0J1aWxkZXImIHJlc3VsdE91dHB1dCA9ICpzdGF0aWNfY2FzdDxTdHJpbmdCdWlsZGVyKj4oY29u
dGV4dCk7CiAKICAgICBpZiAoIWxlbikKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTcsOSArMTk3
LDkgQEAgc3RhdGljIGJvb2wgc2F2ZVJlc3VsdFRvU3RyaW5nKHhtbERvY1B0cgogICAgIGlmICgh
b3V0cHV0QnVmKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJl
c3VsdFZlY3RvcjsKLSAgICBvdXRwdXRCdWYtPmNvbnRleHQgPSAmcmVzdWx0VmVjdG9yOwotICAg
IG91dHB1dEJ1Zi0+d3JpdGVjYWxsYmFjayA9IHdyaXRlVG9WZWN0b3I7CisgICAgU3RyaW5nQnVp
bGRlciByZXN1bHRCdWlsZGVyOworICAgIG91dHB1dEJ1Zi0+Y29udGV4dCA9ICZyZXN1bHRCdWls
ZGVyOworICAgIG91dHB1dEJ1Zi0+d3JpdGVjYWxsYmFjayA9IHdyaXRlVG9TdHJpbmdCdWlsZGVy
OwogCiAgICAgaW50IHJldHZhbCA9IHhzbHRTYXZlUmVzdWx0VG8ob3V0cHV0QnVmLCByZXN1bHRE
b2MsIHNoZWV0KTsKICAgICB4bWxPdXRwdXRCdWZmZXJDbG9zZShvdXRwdXRCdWYpOwpAQCAtMjA3
LDEwICsyMDcsMTAgQEAgc3RhdGljIGJvb2wgc2F2ZVJlc3VsdFRvU3RyaW5nKHhtbERvY1B0cgog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBXb3JrYXJvdW5kIGZvciA8aHR0cDovL2J1
Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk1NjY4PjogbGlieHNsdCBhcHBlbmRz
IGFuIGV4dHJhIGxpbmUgZmVlZCB0byB0aGUgcmVzdWx0LgotICAgIGlmIChyZXN1bHRWZWN0b3Iu
c2l6ZSgpID4gMCAmJiByZXN1bHRWZWN0b3JbcmVzdWx0VmVjdG9yLnNpemUoKSAtIDFdID09ICdc
bicpCi0gICAgICAgIHJlc3VsdFZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgaWYgKHJlc3VsdEJ1
aWxkZXIubGVuZ3RoKCkgPiAwICYmIHJlc3VsdEJ1aWxkZXJbcmVzdWx0QnVpbGRlci5sZW5ndGgo
KSAtIDFdID09ICdcbicpCisgICAgICAgIHJlc3VsdEJ1aWxkZXIuc2hyaW5rKHJlc3VsdEJ1aWxk
ZXIubGVuZ3RoKCkgLSAxKTsKIAotICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZzo6YWRvcHQocmVz
dWx0VmVjdG9yKTsKKyAgICByZXN1bHRTdHJpbmcgPSByZXN1bHRCdWlsZGVyLnRvU3RyaW5nKCk7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
Q2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0
aG9kcy5oCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hh
cmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw3IEBACiAjaWZuZGVmIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhv
ZHNfaAogI2RlZmluZSBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzX2gKIAot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsMTkgKzM2LDE5IEBAIGlubGluZSBi
b29sIGlzSGV4RGlnaXQoVUNoYXIgY2MpCiAgICAgcmV0dXJuIChjYyA+PSAnMCcgJiYgY2MgPD0g
JzknKSB8fCAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykgfHwgKGNjID49ICdBJyAmJiBjYyA8PSAn
RicpOwogfQogCi1pbmxpbmUgdm9pZCB1bmNvbnN1bWVDaGFyYWN0ZXJzKFNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlLCBjb25zdCBWZWN0b3I8VUNoYXIsIDEwPiYgY29uc3VtZWRDaGFyYWN0ZXJzKQor
aW5saW5lIHZvaWQgdW5jb25zdW1lQ2hhcmFjdGVycyhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwg
Y29uc3QgU3RyaW5nQnVpbGRlciYgY29uc3VtZWRDaGFyYWN0ZXJzKQogewotICAgIGlmIChjb25z
dW1lZENoYXJhY3RlcnMuc2l6ZSgpID09IDEpCisgICAgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5s
ZW5ndGgoKSA9PSAxKQogICAgICAgICBzb3VyY2UucHVzaChjb25zdW1lZENoYXJhY3RlcnNbMF0p
OwotICAgIGVsc2UgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5zaXplKCkgPT0gMikgeworICAgIGVs
c2UgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5ndGgoKSA9PSAyKSB7CiAgICAgICAgIHNvdXJj
ZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1swXSk7CiAgICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1
bWVkQ2hhcmFjdGVyc1sxXSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHNvdXJjZS5wcmVwZW5kKFNl
Z21lbnRlZFN0cmluZyhTdHJpbmcoY29uc3VtZWRDaGFyYWN0ZXJzLmRhdGEoKSwgY29uc3VtZWRD
aGFyYWN0ZXJzLnNpemUoKSkpKTsKKyAgICAgICAgc291cmNlLnByZXBlbmQoU2VnbWVudGVkU3Ry
aW5nKGNvbnN1bWVkQ2hhcmFjdGVycy50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSkpOwogfQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgUGFyc2VyRnVuY3Rpb25zPgotYm9vbCBjb25zdW1lQ2hhcmFj
dGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBWZWN0b3I8VUNoYXIsIDE2PiYg
ZGVjb2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRp
b25hbEFsbG93ZWRDaGFyYWN0ZXIpCitib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2Vn
bWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRDaGFyYWN0ZXIsIGJv
b2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVy
KQogewogICAgIEFTU0VSVCghYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgfHwgYWRkaXRpb25h
bEFsbG93ZWRDaGFyYWN0ZXIgPT0gJyInIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09
ICdcJycgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJz4nKTsKICAgICBBU1NFUlQo
IW5vdEVub3VnaENoYXJhY3RlcnMpOwpAQCAtNjUsNyArNjUsNyBAQCBib29sIGNvbnN1bWVDaGFy
YWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkCiAgICAgfTsKICAgICBFbnRpdHlTdGF0ZSBlbnRpdHlT
dGF0ZSA9IEluaXRpYWw7CiAgICAgVUNoYXIzMiByZXN1bHQgPSAwOwotICAgIFZlY3RvcjxVQ2hh
ciwgMTA+IGNvbnN1bWVkQ2hhcmFjdGVyczsKKyAgICBTdHJpbmdCdWlsZGVyIGNvbnN1bWVkQ2hh
cmFjdGVyczsKICAgICAKICAgICB3aGlsZSAoIXNvdXJjZS5pc0VtcHR5KCkpIHsKICAgICAgICAg
VUNoYXIgY2MgPSAqc291cmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJr
dXBUb2tlbkJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01h
cmt1cFRva2VuQmFzZS5oCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvTWFya3VwVG9rZW5CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTQ4LDggKzQ5LDgg
QEAgcHVibGljOgogCiAgICAgYm9vbCBtX2hhc1B1YmxpY0lkZW50aWZpZXI7CiAgICAgYm9vbCBt
X2hhc1N5c3RlbUlkZW50aWZpZXI7Ci0gICAgV1RGOjpWZWN0b3I8VUNoYXI+IG1fcHVibGljSWRl
bnRpZmllcjsKLSAgICBXVEY6OlZlY3RvcjxVQ2hhcj4gbV9zeXN0ZW1JZGVudGlmaWVyOworICAg
IFN0cmluZ0J1aWxkZXIgbV9wdWJsaWNJZGVudGlmaWVyOworICAgIFN0cmluZ0J1aWxkZXIgbV9z
eXN0ZW1JZGVudGlmaWVyOwogfTsKIAogY2xhc3MgQXR0cmlidXRlQmFzZSB7CkBAIC02Miw4ICs2
Myw4IEBAIHB1YmxpYzoKIAogICAgIFJhbmdlIG1fbmFtZVJhbmdlOwogICAgIFJhbmdlIG1fdmFs
dWVSYW5nZTsKLSAgICBXVEY6OlZlY3RvcjxVQ2hhciwgMzI+IG1fbmFtZTsKLSAgICBXVEY6OlZl
Y3RvcjxVQ2hhciwgMzI+IG1fdmFsdWU7CisgICAgU3RyaW5nQnVpbGRlciBtX25hbWU7CisgICAg
U3RyaW5nQnVpbGRlciBtX3ZhbHVlOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZVNldCwg
dHlwZW5hbWUgRG9jdHlwZURhdGFUeXBlID0gRG9jdHlwZURhdGFCYXNlLCB0eXBlbmFtZSBBdHRy
aWJ1dGVUeXBlID0gQXR0cmlidXRlQmFzZT4KQEAgLTc1LDEwICs3NiwxMyBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBBdHRyaWJ1dGVUeXBlIEF0dHJpYnV0ZTsKICAgICB0eXBlZGVmIERvY3R5cGVE
YXRhVHlwZSBEb2N0eXBlRGF0YTsKIAotICAgIHR5cGVkZWYgV1RGOjpWZWN0b3I8QXR0cmlidXRl
LCAxMD4gQXR0cmlidXRlTGlzdDsKLSAgICB0eXBlZGVmIFdURjo6VmVjdG9yPFVDaGFyLCAxMDI0
PiBEYXRhVmVjdG9yOworICAgIHR5cGVkZWYgVmVjdG9yPEF0dHJpYnV0ZSwgMTA+IEF0dHJpYnV0
ZUxpc3Q7CiAKLSAgICBNYXJrdXBUb2tlbkJhc2UoKSB7IGNsZWFyKCk7IH0KKyAgICBNYXJrdXBU
b2tlbkJhc2UoKQorICAgIHsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgbV9kYXRhLnJlc2Vy
dmVDYXBhY2l0eSgxMDI0KTsKKyAgICB9CiAgICAgdmlydHVhbCB+TWFya3VwVG9rZW5CYXNlKCkg
eyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKQpAQCAtMjM4LDcgKzI0Miw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIEFTU0VSVCghdmFsdWUuaXNFbXB0eSgpKTsKICAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBUeXBlU2V0OjpTdGFydFRhZyB8fCBtX3R5cGUgPT0gVHlwZVNldDo6RW5k
VGFnKTsKLSAgICAgICAgbV9hdHRyaWJ1dGVzW2ldLm1fdmFsdWUuYXBwZW5kKHZhbHVlLmNoYXJh
Y3RlcnMoKSwgdmFsdWUubGVuZ3RoKCkpOworICAgICAgICBtX2F0dHJpYnV0ZXNbaV0ubV92YWx1
ZS5hcHBlbmQodmFsdWUpOwogICAgIH0KIAogICAgIHR5cGVuYW1lIFR5cGU6OlR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQpAQCAtMjczLDI3ICsyNzcsMjcgQEAgcHVibGljOgog
ICAgICAgICBtX2F0dHJpYnV0ZXNbaV0ubV92YWx1ZS5jbGVhcigpOwogICAgIH0KIAotICAgIGNv
bnN0IERhdGFWZWN0b3ImIGNoYXJhY3RlcnMoKSBjb25zdAorICAgIGNvbnN0IFN0cmluZ0J1aWxk
ZXImIGNoYXJhY3RlcnMoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBU
eXBlU2V0OjpDaGFyYWN0ZXIpOwogICAgICAgICByZXR1cm4gbV9kYXRhOwogICAgIH0KIAotICAg
IGNvbnN0IERhdGFWZWN0b3ImIGNvbW1lbnQoKSBjb25zdAorICAgIGNvbnN0IFN0cmluZ0J1aWxk
ZXImIGNvbW1lbnQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBl
U2V0OjpDb21tZW50KTsKICAgICAgICAgcmV0dXJuIG1fZGF0YTsKICAgICB9CiAKICAgICAvLyBG
SVhNRTogRGlzdGluZ3Vpc2ggYmV0d2VlbiBhIG1pc3NpbmcgcHVibGljIGlkZW50aWZlciBhbmQg
YW4gZW1wdHkgb25lLgotICAgIGNvbnN0IFdURjo6VmVjdG9yPFVDaGFyPiYgcHVibGljSWRlbnRp
ZmllcigpIGNvbnN0CisgICAgY29uc3QgU3RyaW5nQnVpbGRlciYgcHVibGljSWRlbnRpZmllcigp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IFR5cGVTZXQ6OkRPQ1RZUEUp
OwogICAgICAgICByZXR1cm4gbV9kb2N0eXBlRGF0YS0+bV9wdWJsaWNJZGVudGlmaWVyOwogICAg
IH0KIAogICAgIC8vIEZJWE1FOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWlzc2luZyBzeXN0ZW0g
aWRlbnRpZmVyIGFuZCBhbiBlbXB0eSBvbmUuCi0gICAgY29uc3QgV1RGOjpWZWN0b3I8VUNoYXI+
JiBzeXN0ZW1JZGVudGlmaWVyKCkgY29uc3QKKyAgICBjb25zdCBTdHJpbmdCdWlsZGVyJiBzeXN0
ZW1JZGVudGlmaWVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlw
ZVNldDo6RE9DVFlQRSk7CiAgICAgICAgIHJldHVybiBtX2RvY3R5cGVEYXRhLT5tX3N5c3RlbUlk
ZW50aWZpZXI7CkBAIC0zMzIsMTEgKzMzNiwxMCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAKICNp
Zm5kZWYgTkRFQlVHCi0gICAgdm9pZCBwcmludFN0cmluZyhjb25zdCBEYXRhVmVjdG9yJiBzdHJp
bmcpIGNvbnN0CisgICAgdm9pZCBwcmludFN0cmluZyhjb25zdCBTdHJpbmdCdWlsZGVyJiBzdHJp
bmcpIGNvbnN0CiAgICAgewotICAgICAgICBEYXRhVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gc3RyaW5nLmJlZ2luKCk7Ci0gICAgICAgIGZvciAoOyBpdGVyICE9IHN0cmluZy5lbmQoKTsg
KytpdGVyKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlbGMiLCB3Y2hhcl90KCppdGVy
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsr
aSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJWxjIiwgd2NoYXJfdChzdHJpbmdbaV0p
KTsKICAgICB9CiAjZW5kaWYgLy8gTkRFQlVHCiAKQEAgLTM0Niw3ICszNDksNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIG1fZGF0YS5hcHBlbmQoY2hhcmFjdGVyKTsKICAgICB9CiAgICAgCi0gICAg
aW5saW5lIGNvbnN0IERhdGFWZWN0b3ImIG5hbWUoKSBjb25zdAorICAgIGlubGluZSBjb25zdCBT
dHJpbmdCdWlsZGVyJiBuYW1lKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2RhdGE7
CiAgICAgfQpAQCAtMzYwLDcgKzM2Myw3IEBAIHByb3RlY3RlZDoKICAgICB0eXBlbmFtZSBUeXBl
OjpUeXBlIG1fdHlwZTsKICAgICB0eXBlbmFtZSBBdHRyaWJ1dGU6OlJhbmdlIG1fcmFuZ2U7IC8v
IEFsd2F5cyBzdGFydHMgYXQgemVyby4KICAgICBpbnQgbV9iYXNlT2Zmc2V0OwotICAgIERhdGFW
ZWN0b3IgbV9kYXRhOworICAgIFN0cmluZ0J1aWxkZXIgbV9kYXRhOwogCiAgICAgLy8gRm9yIERP
Q1RZUEUKICAgICBPd25QdHI8RG9jdHlwZURhdGE+IG1fZG9jdHlwZURhdGE7CkBAIC0zODcsNyAr
MzkwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6RE9DVFlQRToKLSAgICAg
ICAgICAgIG1fbmFtZSA9IEF0b21pY1N0cmluZyh0b2tlbi0+bmFtZSgpLmRhdGEoKSwgdG9rZW4t
Pm5hbWUoKS5zaXplKCkpOworICAgICAgICAgICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKHRva2Vu
LT5uYW1lKCkudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgbV9kb2N0
eXBlRGF0YSA9IHRva2VuLT5tX2RvY3R5cGVEYXRhLnJlbGVhc2UoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpFbmRPZkZpbGU6CkBAIC0zOTUsMTIgKzM5
OCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OlN0YXJ0VGFnOgogICAg
ICAgICBjYXNlIFRva2VuOjpUeXBlOjpFbmRUYWc6IHsKICAgICAgICAgICAgIG1fc2VsZkNsb3Np
bmcgPSB0b2tlbi0+c2VsZkNsb3NpbmcoKTsKLSAgICAgICAgICAgIG1fbmFtZSA9IEF0b21pY1N0
cmluZyh0b2tlbi0+bmFtZSgpLmRhdGEoKSwgdG9rZW4tPm5hbWUoKS5zaXplKCkpOworICAgICAg
ICAgICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKHRva2VuLT5uYW1lKCkudG9TdHJpbmdQcmVzZXJ2
ZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgaW5pdGlhbGl6ZUF0dHJpYnV0ZXModG9rZW4tPmF0
dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IFRva2VuOjpUeXBlOjpDb21tZW50OgotICAgICAgICAgICAgbV9kYXRhID0gU3RyaW5nKHRva2Vu
LT5jb21tZW50KCkuZGF0YSgpLCB0b2tlbi0+Y29tbWVudCgpLnNpemUoKSk7CisgICAgICAgICAg
ICBtX2RhdGEgPSB0b2tlbi0+Y29tbWVudCgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OkNoYXJhY3RlcjoK
ICAgICAgICAgICAgIG1fZXh0ZXJuYWxDaGFyYWN0ZXJzID0gJnRva2VuLT5jaGFyYWN0ZXJzKCk7
CkBAIC00NTgsNyArNDYxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVz
LnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICBjb25zdCB0eXBlbmFtZSBUb2tlbjo6RGF0YVZlY3Rv
ciYgY2hhcmFjdGVycygpIGNvbnN0CisgICAgY29uc3QgU3RyaW5nQnVpbGRlciYgY2hhcmFjdGVy
cygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IFRva2VuOjpUeXBlOjpD
aGFyYWN0ZXIpOwogICAgICAgICByZXR1cm4gKm1fZXh0ZXJuYWxDaGFyYWN0ZXJzOwpAQCAtNDcx
LDE0ICs0NzQsMTQgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEZJWE1FOiBEaXN0aW5ndWlz
aCBiZXR3ZWVuIGEgbWlzc2luZyBwdWJsaWMgaWRlbnRpZmVyIGFuZCBhbiBlbXB0eSBvbmUuCi0g
ICAgV1RGOjpWZWN0b3I8VUNoYXI+JiBwdWJsaWNJZGVudGlmaWVyKCkgY29uc3QKKyAgICBTdHJp
bmdCdWlsZGVyJiBwdWJsaWNJZGVudGlmaWVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX3R5cGUgPT0gVG9rZW46OlR5cGU6OkRPQ1RZUEUpOwogICAgICAgICByZXR1cm4gbV9kb2N0
eXBlRGF0YS0+bV9wdWJsaWNJZGVudGlmaWVyOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBEaXN0
aW5ndWlzaCBiZXR3ZWVuIGEgbWlzc2luZyBzeXN0ZW0gaWRlbnRpZmVyIGFuZCBhbiBlbXB0eSBv
bmUuCi0gICAgV1RGOjpWZWN0b3I8VUNoYXI+JiBzeXN0ZW1JZGVudGlmaWVyKCkgY29uc3QKKyAg
ICBTdHJpbmdCdWlsZGVyJiBzeXN0ZW1JZGVudGlmaWVyKCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVChtX3R5cGUgPT0gVG9rZW46OlR5cGU6OkRPQ1RZUEUpOwogICAgICAgICByZXR1cm4g
bV9kb2N0eXBlRGF0YS0+bV9zeXN0ZW1JZGVudGlmaWVyOwpAQCAtNTA4LDcgKzUxMSw3IEBAIHBy
b3RlY3RlZDoKICAgICAvLwogICAgIC8vIEZJWE1FOiBBZGQgYSBtZWNoYW5pc20gZm9yICJpbnRl
cm5hbGl6aW5nIiB0aGUgY2hhcmFjdGVycyB3aGVuIHRoZQogICAgIC8vICAgICAgICBIVE1MVG9r
ZW4gaXMgZGVzdHJ1Y3RlZC4KLSAgICBjb25zdCB0eXBlbmFtZSBUb2tlbjo6RGF0YVZlY3Rvciog
bV9leHRlcm5hbENoYXJhY3RlcnM7CisgICAgY29uc3QgU3RyaW5nQnVpbGRlciogbV9leHRlcm5h
bENoYXJhY3RlcnM7CiAKICAgICAvLyBGb3IgRE9DVFlQRQogICAgIE93blB0cjx0eXBlbmFtZSBU
b2tlbjo6RG9jdHlwZURhdGE+IG1fZG9jdHlwZURhdGE7CkBAIC01NDAsNyArNTQzLDcgQEAgaW5s
aW5lIHZvaWQgQXRvbWljTWFya3VwVG9rZW5CYXNlPFRva2VuPgogICAgICAgICBBU1NFUlQoYXR0
cmlidXRlLm1fdmFsdWVSYW5nZS5tX3N0YXJ0KTsKICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZS5t
X3ZhbHVlUmFuZ2UubV9lbmQpOwogCi0gICAgICAgIFN0cmluZyB2YWx1ZShhdHRyaWJ1dGUubV92
YWx1ZS5kYXRhKCksIGF0dHJpYnV0ZS5tX3ZhbHVlLnNpemUoKSk7CisgICAgICAgIFN0cmluZyB2
YWx1ZShhdHRyaWJ1dGUubV92YWx1ZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSk7CiAgICAg
ICAgIG1fYXR0cmlidXRlcy0+aW5zZXJ0QXR0cmlidXRlKEF0dHJpYnV0ZTo6Y3JlYXRlTWFwcGVk
KG5hbWVGb3JBdHRyaWJ1dGUoYXR0cmlidXRlKSwgdmFsdWUpLCBmYWxzZSk7CiAgICAgfQogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFj
dGVyUmVmZXJlbmNlUGFyc2VyLmNwcAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAg
fQogCi0gICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnZlcnRUb1VURjE2KFVDaGFyMzIgdmFsdWUs
IFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkQ2hhcmFjdGVyKQorICAgIGlubGluZSBzdGF0aWMg
Ym9vbCBjb252ZXJ0VG9VVEYxNihVQ2hhcjMyIHZhbHVlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVk
Q2hhcmFjdGVyKQogICAgIHsKICAgICAgICAgaWYgKFVfSVNfQk1QKHZhbHVlKSkgewogICAgICAg
ICBVQ2hhciBjaGFyYWN0ZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcj4odmFsdWUpOwpAQCAtNjEsNyAr
NjEsNyBAQCBwdWJsaWM6CiAKICAgICBpbmxpbmUgc3RhdGljIGJvb2wgYWNjZXB0TWFsZm9ybWVk
KCkgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb25zdW1lTmFt
ZWRFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiwgVmVjdG9yPFVDaGFyLCAxNj4mLCBib29sJiwgVUNo
YXIsIFVDaGFyJikKKyAgICBpbmxpbmUgc3RhdGljIGJvb2wgY29uc3VtZU5hbWVkRW50aXR5KFNl
Z21lbnRlZFN0cmluZyYsIFN0cmluZ0J1aWxkZXImLCBib29sJiwgVUNoYXIsIFVDaGFyJikKICAg
ICB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKIAogfQogCi1ib29sIGNvbnN1bWVYTUxDaGFyYWN0
ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFZlY3RvcjxVQ2hhciwgMTY+JiBk
ZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzKQorYm9vbCBjb25zdW1l
WE1MQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWls
ZGVyJiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzKQogewogICAg
IHJldHVybiBjb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlPFhNTENoYXJhY3RlclJlZmVyZW5jZVBh
cnNlcj4oc291cmNlLCBkZWNvZGVkQ2hhcmFjdGVyLCBub3RFbm91Z2hDaGFyYWN0ZXJzLCAwKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNl
UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFy
YWN0ZXJSZWZlcmVuY2VQYXJzZXIuaAkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLWJvb2wgY29u
c3VtZVhNTENoYXJhY3RlclJlZmVyZW5jZShTZWdtZW50ZWRTdHJpbmcmLCBWZWN0b3I8VUNoYXIs
IDE2PiYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycyk7Citib29s
IGNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiwgU3RyaW5nQnVp
bGRlciYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycyk7CiAKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVG9rZW4uaAkocmV2aXNpb24gOTM4NDgp
CisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogY2xhc3MgUHJlZml4ZWRBdHRyaWJ1dGUgOiBwdWJs
aWMgQXR0cmlidXRlQmFzZSB7CiBwdWJsaWM6CiAgICAgUmFuZ2UgbV9wcmVmaXhSYW5nZTsKLSAg
ICBXVEY6OlZlY3RvcjxVQ2hhciwgMzI+IG1fcHJlZml4OworICAgIFN0cmluZ0J1aWxkZXIgbV9w
cmVmaXg7CiB9OwogCiBjbGFzcyBYTUxUb2tlbiA6IHB1YmxpYyBNYXJrdXBUb2tlbkJhc2U8WE1M
VG9rZW5UeXBlcywgRG9jdHlwZURhdGFCYXNlLCBQcmVmaXhlZEF0dHJpYnV0ZT4gewpAQCAtNzAs
OCArNzAsOCBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgbV9oYXNTdGFuZGFsb25lOwogICAgICAg
ICBib29sIG1faGFzRW5jb2Rpbmc7CiAgICAgICAgIGJvb2wgbV9zdGFuZGFsb25lOwotICAgICAg
ICBXVEY6OlZlY3RvcjxVQ2hhcj4gbV9lbmNvZGluZzsKLSAgICAgICAgV1RGOjpWZWN0b3I8VUNo
YXI+IG1fdmVyc2lvbjsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBtX2VuY29kaW5nOworICAgICAg
ICBTdHJpbmdCdWlsZGVyIG1fdmVyc2lvbjsKICAgICB9OwogCiAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyKCkKQEAgLTg2LDI1ICs4NiwyNSBAQCBwdWJsaWM6CiAgICAgICAgIE1hcmt1cFRva2VuQmFz
ZTxYTUxUb2tlblR5cGVzLCBEb2N0eXBlRGF0YUJhc2UsIFByZWZpeGVkQXR0cmlidXRlPjo6YXBw
ZW5kVG9OYW1lKGNoYXJhY3Rlcik7CiAgICAgfQogCi0gICAgY29uc3QgRGF0YVZlY3RvciYgbmFt
ZSgpIGNvbnN0CisgICAgY29uc3QgU3RyaW5nQnVpbGRlciYgbmFtZSgpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQobV90eXBlID09IFhNTFRva2VuVHlwZXM6OlN0YXJ0VGFnIHx8IG1fdHlw
ZSA9PSBYTUxUb2tlblR5cGVzOjpFbmRUYWcgfHwgbV90eXBlID09IFhNTFRva2VuVHlwZXM6OkRP
Q1RZUEUgfHwgbV90eXBlID09IFhNTFRva2VuVHlwZXM6OkVudGl0eSk7CiAgICAgICAgIHJldHVy
biBNYXJrdXBUb2tlbkJhc2U8WE1MVG9rZW5UeXBlcywgRG9jdHlwZURhdGFCYXNlLCBQcmVmaXhl
ZEF0dHJpYnV0ZT46Om5hbWUoKTsKICAgICB9CiAKLSAgICBjb25zdCBEYXRhVmVjdG9yJiB0YXJn
ZXQoKSBjb25zdAorICAgIGNvbnN0IFN0cmluZ0J1aWxkZXImIHRhcmdldCgpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlQobV90eXBlID09IFhNTFRva2VuVHlwZXM6OlByb2Nlc3NpbmdJbnN0
cnVjdGlvbik7CiAgICAgICAgIHJldHVybiBtX3RhcmdldDsKICAgICB9CiAKLSAgICBjb25zdCBE
YXRhVmVjdG9yJiBkYXRhKCkgY29uc3QKKyAgICBjb25zdCBTdHJpbmdCdWlsZGVyJiBkYXRhKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gWE1MVG9rZW5UeXBlczo6Q0RB
VEEgfHwgbV90eXBlID09IFhNTFRva2VuVHlwZXM6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbik7CiAg
ICAgICAgIHJldHVybiBtX2RhdGE7CiAgICAgfQogCi0gICAgY29uc3QgRGF0YVZlY3RvciYgcHJl
Zml4KCkgY29uc3QKKyAgICBjb25zdCBTdHJpbmdCdWlsZGVyJiBwcmVmaXgoKSBjb25zdAogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBYTUxUb2tlblR5cGVzOjpTdGFydFRhZyB8fCBt
X3R5cGUgPT0gWE1MVG9rZW5UeXBlczo6RW5kVGFnKTsKICAgICAgICAgcmV0dXJuIG1fdGFyZ2V0
OwpAQCAtMjEwLDcgKzIxMCw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1ByZWZpeCgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IFhNTFRva2VuVHlwZXM6OlN0YXJ0VGFn
IHx8IG1fdHlwZSA9PSBYTUxUb2tlblR5cGVzOjpFbmRUYWcpOwotICAgICAgICByZXR1cm4gbV90
YXJnZXQuc2l6ZSgpOworICAgICAgICByZXR1cm4gbV90YXJnZXQubGVuZ3RoKCk7CiAgICAgfQog
CiAgICAgdm9pZCBiZWdpbkNEQVRBKCkKQEAgLTM5Myw3ICszOTMsNyBAQCBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBBdG9taWNYTUxUb2tlbjsKIAogICAgIC8vICJ0YXJnZXQiIGZvciBQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24sICJwcmVmaXgiIGZvciBTdGFydFRhZyBhbmQgRW5kVGFnCi0gICAg
RGF0YVZlY3RvciBtX3RhcmdldDsKKyAgICBTdHJpbmdCdWlsZGVyIG1fdGFyZ2V0OwogCiAgICAg
Ly8gRm9yIFhNTCBEZWNsYXJhdGlvbgogICAgIE93blB0cjxYTUxEZWNsYXJhdGlvbkRhdGE+IG1f
eG1sRGVjbGFyYXRpb25EYXRhOwpAQCAtNDA3LDI0ICs0MDcsMjQgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICAgICAgY2FzZSBYTUxUb2tlblR5cGVzOjpQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb246Ci0gICAgICAgICAgICBtX25hbWUgPSBBdG9taWNTdHJpbmco
dG9rZW4udGFyZ2V0KCkuZGF0YSgpLCB0b2tlbi50YXJnZXQoKS5zaXplKCkpOwotICAgICAgICAg
ICAgbV9kYXRhID0gU3RyaW5nKHRva2VuLmRhdGEoKS5kYXRhKCksIHRva2VuLmRhdGEoKS5zaXpl
KCkpOworICAgICAgICAgICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKHRva2VuLnRhcmdldCgpLnRv
U3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIG1fZGF0YSA9IHRva2VuLmRh
dGEoKS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIFhNTFRva2VuVHlwZXM6OlhNTERlY2xhcmF0aW9uOgogICAgICAgICAgICAgbV94
bWxEZWNsYXJhdGlvbkRhdGEgPSB0b2tlbi5tX3htbERlY2xhcmF0aW9uRGF0YS5yZWxlYXNlKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBYTUxUb2tlblR5cGVzOjpTdGFydFRh
ZzoKICAgICAgICAgY2FzZSBYTUxUb2tlblR5cGVzOjpFbmRUYWc6IHsKLSAgICAgICAgICAgIGlm
ICh0b2tlbi5wcmVmaXgoKS5zaXplKCkpCi0gICAgICAgICAgICAgICAgbV9wcmVmaXggPSBBdG9t
aWNTdHJpbmcodG9rZW4ucHJlZml4KCkuZGF0YSgpLCB0b2tlbi5wcmVmaXgoKS5zaXplKCkpOwor
ICAgICAgICAgICAgaWYgKHRva2VuLnByZWZpeCgpLmxlbmd0aCgpKQorICAgICAgICAgICAgICAg
IG1fcHJlZml4ID0gQXRvbWljU3RyaW5nKHRva2VuLnByZWZpeCgpLnRvU3RyaW5nUHJlc2VydmVD
YXBhY2l0eSgpKTsKICAgICAgICAgICAgIGluaXRpYWxpemVBdHRyaWJ1dGVzKHRva2VuLmF0dHJp
YnV0ZXMoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFhN
TFRva2VuVHlwZXM6OkNEQVRBOgotICAgICAgICAgICAgbV9kYXRhID0gU3RyaW5nKHRva2VuLmRh
dGEoKS5kYXRhKCksIHRva2VuLmRhdGEoKS5zaXplKCkpOworICAgICAgICAgICAgbV9kYXRhID0g
dG9rZW4uZGF0YSgpLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgWE1MVG9rZW5UeXBlczo6RW50aXR5OgotICAgICAgICAgICAgbV9u
YW1lID0gQXRvbWljU3RyaW5nKHRva2VuLm5hbWUoKS5kYXRhKCksIHRva2VuLm5hbWUoKS5zaXpl
KCkpOworICAgICAgICAgICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKHRva2VuLm5hbWUoKS50b1N0
cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDU0LDcgKzQ1NCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fZGF0YTsKICAgICB9CiAKLSAgICBXVEY6OlZlY3RvcjxVQ2hhcj4mIHht
bFZlcnNpb24oKSBjb25zdAorICAgIFN0cmluZ0J1aWxkZXImIHhtbFZlcnNpb24oKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBYTUxUb2tlblR5cGVzOjpYTUxEZWNsYXJh
dGlvbik7CiAgICAgICAgIHJldHVybiBtX3htbERlY2xhcmF0aW9uRGF0YS0+bV92ZXJzaW9uOwpJ
bmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbml6ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVG9rZW5pemVyLmNwcAkocmV2aXNp
b24gOTM4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdGVt
cGxhdGU8PgogUXVhbGlmaWVkTmFtZSBBdG9taWNNYXJrdXBUb2tlbkJhc2U8WE1MVG9rZW4+Ojpu
YW1lRm9yQXR0cmlidXRlKGNvbnN0IFhNTFRva2VuOjpBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkgY29u
c3QKIHsKLSAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShhdHRyaWJ1dGUubV9wcmVmaXguaXNFbXB0
eSgpID8gbnVsbEF0b20gOiBBdG9taWNTdHJpbmcoYXR0cmlidXRlLm1fcHJlZml4LmRhdGEoKSwg
YXR0cmlidXRlLm1fcHJlZml4LnNpemUoKSksIEF0b21pY1N0cmluZyhhdHRyaWJ1dGUubV9uYW1l
LmRhdGEoKSwgYXR0cmlidXRlLm1fbmFtZS5zaXplKCkpLCBudWxsQXRvbSk7CisgICAgcmV0dXJu
IFF1YWxpZmllZE5hbWUoYXR0cmlidXRlLm1fcHJlZml4LmlzRW1wdHkoKSA/IG51bGxBdG9tIDog
QXRvbWljU3RyaW5nKGF0dHJpYnV0ZS5tX3ByZWZpeC50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHko
KSksIEF0b21pY1N0cmluZyhhdHRyaWJ1dGUubV9uYW1lLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0
eSgpKSwgbnVsbEF0b20pOwogfQogCiB0ZW1wbGF0ZTw+CkBAIC0yNTEsMTEgKzI1MSwxMCBAQCBi
b29sIFhNTFRva2VuaXplcjo6bmV4dFRva2VuKFNlZ21lbnRlZFN0CiAgICAgWE1MX0JFR0lOX1NU
QVRFKENoYXJhY3RlclJlZmVyZW5jZVN0YXJ0U3RhdGUpIHsKICAgICAgICAgaWYgKGNjID09ICcj
JykgewogICAgICAgICAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAg
ICAgICAgICBWZWN0b3I8VUNoYXIsIDE2PiBkZWNvZGVkQ2hhcmFjdGVyOworICAgICAgICAgICAg
U3RyaW5nQnVpbGRlciBkZWNvZGVkQ2hhcmFjdGVyOwogICAgICAgICAgICAgaWYgKGNvbnN1bWVY
TUxDaGFyYWN0ZXJSZWZlcmVuY2Uoc291cmNlLCBkZWNvZGVkQ2hhcmFjdGVyLCBub3RFbm91Z2hD
aGFyYWN0ZXJzKSkgewotICAgICAgICAgICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gZGVjb2RlZENoYXJhY3Rlci5iZWdpbigpOwotICAgICAgICAgICAgICAg
IGZvciAoOyBpdGVyICE9IGRlY29kZWRDaGFyYWN0ZXIuZW5kKCk7ICsraXRlcikKLSAgICAgICAg
ICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCppdGVyKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVjb2RlZENoYXJhY3Rlci5sZW5ndGgoKTsgKytpKQorICAg
ICAgICAgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXIoZGVjb2RlZENoYXJhY3RlcltpXSk7CiAg
ICAgICAgICAgICAgICAgWE1MX1NXSVRDSF9UTyhEYXRhU3RhdGUpOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChub3RFbm91Z2hDaGFyYWN0ZXJzKQogICAgICAgICAgICAgICAgIHJldHVybiBoYXZl
QnVmZmVyZWRDaGFyYWN0ZXJUb2tlbigpOwpAQCAtNDM3LDEyICs0MzYsMTEgQEAgYm9vbCBYTUxU
b2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRTdAogICAgIFhNTF9CRUdJTl9TVEFURShDaGFy
YWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVlU3RhdGUpIHsKICAgICAgICAgaWYgKGNjID09
ICcjJykgewogICAgICAgICAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0g
ICAgICAgICAgICBWZWN0b3I8VUNoYXIsIDE2PiBkZWNvZGVkQ2hhcmFjdGVyOworICAgICAgICAg
ICAgU3RyaW5nQnVpbGRlciBkZWNvZGVkQ2hhcmFjdGVyOwogICAgICAgICAgICAgc291cmNlLnB1
c2goY2MpOwogICAgICAgICAgICAgaWYgKGNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2Uoc291
cmNlLCBkZWNvZGVkQ2hhcmFjdGVyLCBub3RFbm91Z2hDaGFyYWN0ZXJzKSkgewotICAgICAgICAg
ICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZGVjb2RlZENo
YXJhY3Rlci5iZWdpbigpOwotICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGRlY29kZWRD
aGFyYWN0ZXIuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICAgICAgbV90b2tlbi0+YXBw
ZW5kVG9BdHRyaWJ1dGVWYWx1ZSgqaXRlcik7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRlY29kZWRDaGFyYWN0ZXIubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZShkZWNvZGVkQ2hhcmFjdGVy
W2ldKTsKICAgICAgICAgICAgICAgICBYTUxfQURWQU5DRV9UTyhBdHRyaWJ1dGVWYWx1ZVF1b3Rl
ZFN0YXRlKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykKICAg
ICAgICAgICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lv
biA5Mzg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBYTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1hNTERlY2xhcmF0aQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKLSAgICBt
X2RvY3VtZW50LT5zZXRYTUxWZXJzaW9uKFN0cmluZyh0b2tlbi54bWxWZXJzaW9uKCkpLCBlYyk7
CisgICAgbV9kb2N1bWVudC0+c2V0WE1MVmVyc2lvbih0b2tlbi54bWxWZXJzaW9uKCkudG9TdHJp
bmdQcmVzZXJ2ZUNhcGFjaXR5KCksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIG1fcGFyc2Vy
LT5zdG9wUGFyc2luZygpOwogCkBAIC0yMDcsOCArMjA3LDggQEAgdm9pZCBYTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0RPQ1RZUEUoY29ucwogICAgIGlmICghZmFpbE9uVGV4dCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBBdG9taWNTdHJpbmcgcHVibGljSWRlbnRpZmllcih0b2tlbi5wdWJsaWNJ
ZGVudGlmaWVyKCkuZGF0YSgpLCB0b2tlbi5wdWJsaWNJZGVudGlmaWVyKCkuc2l6ZSgpKTsKLSAg
ICBBdG9taWNTdHJpbmcgc3lzdGVtSWRlbnRpZmllcih0b2tlbi5zeXN0ZW1JZGVudGlmaWVyKCku
ZGF0YSgpLCB0b2tlbi5zeXN0ZW1JZGVudGlmaWVyKCkuc2l6ZSgpKTsKKyAgICBBdG9taWNTdHJp
bmcgcHVibGljSWRlbnRpZmllcih0b2tlbi5wdWJsaWNJZGVudGlmaWVyKCkudG9TdHJpbmdQcmVz
ZXJ2ZUNhcGFjaXR5KCkpOworICAgIEF0b21pY1N0cmluZyBzeXN0ZW1JZGVudGlmaWVyKHRva2Vu
LnN5c3RlbUlkZW50aWZpZXIoKS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSk7CiAgICAgUmVm
UHRyPERvY3VtZW50VHlwZT4gZG9jdHlwZSA9IERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jdW1l
bnQsIHRva2VuLm5hbWUoKSwgcHVibGljSWRlbnRpZmllciwgc3lzdGVtSWRlbnRpZmllcik7CiAg
ICAgbV9kb2N1bWVudC0+c2V0RG9jVHlwZShkb2N0eXBlKTsKICAgICBtX2RvY3VtZW50LT5wYXJz
ZXJBZGRDaGlsZChkb2N0eXBlKTsKQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lkIFhNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzRW5kVGFnKGNvbnN0CiAKIHZvaWQgWE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3ND
aGFyYWN0ZXIoY29uc3QgQXRvbWljWE1MVG9rZW4mIHRva2VuKQogewotICAgIGFwcGVuZFRvVGV4
dCh0b2tlbi5jaGFyYWN0ZXJzKCkuZGF0YSgpLCB0b2tlbi5jaGFyYWN0ZXJzKCkuc2l6ZSgpKTsK
KyAgICBhcHBlbmRUb1RleHQodG9rZW4uY2hhcmFjdGVycygpLmNoYXJhY3RlcnMoKSwgdG9rZW4u
Y2hhcmFjdGVycygpLmxlbmd0aCgpKTsKIH0KIAogdm9pZCBYTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0NEQVRBKGNvbnN0IEF0b21pY1hNTFRva2VuJiB0b2tlbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCShyZXZpc2lvbiA5Mzg0OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDgtMjQgIFhpYW56
aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXBsYWNlIHNv
bWUgdXNhZ2VzIG9mIFZlY3RvcjxVQ2hhcj4gdG8gU3RyaW5nQnVpbGRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NjYxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIHdvcmsg
dG8gc3VwcG9ydCA4LWJpdCBzdHJpbmcgYnVmZmVycy4KKworICAgICAgICAqIFdlYktpdC5neXBp
OgorICAgICAgICAqIHRlc3RzL1N0cmluZ0J1aWxkZXJUZXN0LmNwcDogQWRkZWQuIFRlc3QgZm9y
IFN0cmluZ0J1aWxkZXIuCisKIDIwMTEtMDgtMjUgIFNjb3R0IEdyYWhhbSAgPHNjb3R0bWdAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEVuYWJsZSBpbmNyZW1lbnRhbCBsaW5raW5nIGZvciBjb21w
b25lbnQgYnVpbGQgb24gQ2hyb21pdW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aQkocmV2aXNpb24gOTM4NDgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw3IEBACiAgICAgICAgICAgICAndGVzdHMvUE9E
SW50ZXJ2YWxUcmVlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BPRFJlZEJsYWNrVHJl
ZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9TY3JvbGxBbmltYXRvck5vbmVUZXN0LmNw
cCcsCisgICAgICAgICAgICAndGVzdHMvU3RyaW5nQnVpbGRlclRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RyZWVT
eW5jaHJvbml6ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvVHJlZVRlc3RIZWxwZXJz
LmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1N0cmluZ0J1aWxkZXJU
ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1N0cmlu
Z0J1aWxkZXJUZXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvU3RyaW5nQnVpbGRlclRlc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIEJhc2ljIHRlc3RzIHRoYXQgdmVyaWZ5IG91ciBLVVJMJ3MgaW50ZXJmYWNlIGJlaGF2ZXMg
dGhlIHNhbWUgYXMgdGhlCisvLyBvcmlnaW5hbCBLVVJMJ3MuCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSB7CisKKyNk
ZWZpbmUgRVhQRUNUX0NPTlRFTlQoc3RyLCBidWlsZGVyKSBcCisgICAgRVhQRUNUX1NUUkVRKHN0
ciwgU3RyaW5nKGJ1aWxkZXIuY2hhcmFjdGVycygpLCBidWlsZGVyLmxlbmd0aCgpKS5hc2NpaSgp
LmRhdGEoKSkKKwordm9pZCBleHBlY3RFbXB0eShjb25zdCBTdHJpbmdCdWlsZGVyJiBidWlsZGVy
KQoreworICAgIEVYUEVDVF9FUSgwVSwgYnVpbGRlci5sZW5ndGgoKSk7CisgICAgRVhQRUNUX1RS
VUUoYnVpbGRlci5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUSgwLCBidWlsZGVyLmNoYXJhY3Rl
cnMoKSk7CisgICAgRVhQRUNUX0NPTlRFTlQoIiIsIGJ1aWxkZXIpOworfQorCitURVNUKFN0cmlu
Z0J1aWxkZXJUZXN0LCBkZWZhdWx0Q29uc3RydWN0b3IpCit7CisgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOworICAgIGV4cGVjdEVtcHR5KGJ1aWxkZXIpOworICAgIEVYUEVDVF9FUSgwVSwgYnVp
bGRlci5jYXBhY2l0eSgpKTsKK30KKy8qCitURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCBjb25zdHJ1
Y3RvcldpdGhJbml0aWFsTGVuZ3RoKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcigxNik7
CisgICAgRVhQRUNUX0VRKDE2LCBidWlsZGVyLmxlbmd0aCgpKTsKK30KKyovCitURVNUKFN0cmlu
Z0J1aWxkZXJUZXN0LCByZXNlcnZlQ2FwYWNpdHkpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCIwMTIzNDU2Nzg5Iik7CisgICAgRVhQRUNUX0xUKDBV
LCBidWlsZGVyLmNhcGFjaXR5KCkpOworICAgIHVuc2lnbmVkIG5ld0NhcGFjaXR5ID0gNSAqIGJ1
aWxkZXIuY2FwYWNpdHkoKTsKKyAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShuZXdDYXBhY2l0
eSk7CisgICAgRVhQRUNUX0xFKG5ld0NhcGFjaXR5LCBidWlsZGVyLmNhcGFjaXR5KCkpOworICAg
IEVYUEVDVF9DT05URU5UKCIwMTIzNDU2Nzg5IiwgYnVpbGRlcik7Cit9CisKK1RFU1QoU3RyaW5n
QnVpbGRlclRlc3QsIGluc2VydCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAg
YnVpbGRlci5pbnNlcnQoU3RyaW5nKCIwMTIzNDU2Nzg5IiksIDApOworICAgIEVYUEVDVF9DT05U
RU5UKCIwMTIzNDU2Nzg5IiwgYnVpbGRlcik7CisgICAgYnVpbGRlci5pbnNlcnQoImFiY2QiLCAw
KTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiYWJjZDAxMjM0NTY3ODkiLCBidWlsZGVyKTsKKyAgICBi
dWlsZGVyLmluc2VydCgiZWZnaCIsIDMsIGJ1aWxkZXIubGVuZ3RoKCkpOworICAgIEVYUEVDVF9D
T05URU5UKCJhYmNkMDEyMzQ1Njc4OWVmZyIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIuaW5zZXJ0
KFN0cmluZygiWFlaIiksIDkpOworICAgIEVYUEVDVF9DT05URU5UKCJhYmNkMDEyMzRYWVo1Njc4
OWVmZyIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIuaW5zZXJ0KCIiLCA5KTsKKyAgICBFWFBFQ1Rf
Q09OVEVOVCgiYWJjZDAxMjM0WFlaNTY3ODllZmciLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLmlu
c2VydCgnIycsIDEwKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiYWJjZDAxMjM0WCNZWjU2Nzg5ZWZn
IiwgYnVpbGRlcik7CisKKyAgICBidWlsZGVyLnRvU3RyaW5nKCk7IC8vIFRlc3QgYWZ0ZXIgcmVp
ZnlTdHJpbmcoKS4KKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIxOworICAgIGJ1aWxkZXIuaW5z
ZXJ0KGJ1aWxkZXIxLCAxMCk7CisgICAgRVhQRUNUX0NPTlRFTlQoImFiY2QwMTIzNFgjWVo1Njc4
OWVmZyIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIxLmluc2VydChidWlsZGVyLCAwKTsKKyAgICBi
dWlsZGVyLmluc2VydChidWlsZGVyMSwgMTUpOworICAgIEVYUEVDVF9DT05URU5UKCJhYmNkMDEy
MzRYI1laNTZhYmNkMDEyMzRYI1laNTY3ODllZmc3ODllZmciLCBidWlsZGVyKTsKK30KKworVEVT
VChTdHJpbmdCdWlsZGVyVGVzdCwgcHJlcGVuZCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgYnVpbGRlci5wcmVwZW5kKFN0cmluZygiMDEyMzQ1Njc4OSIpKTsKKyAgICBFWFBF
Q1RfQ09OVEVOVCgiMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIucHJlcGVuZCgi
YWJjZCIpOworICAgIEVYUEVDVF9DT05URU5UKCJhYmNkMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOwor
ICAgIGJ1aWxkZXIucHJlcGVuZCgiZWZnaCIsIDMpOworICAgIEVYUEVDVF9DT05URU5UKCJlZmdh
YmNkMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIucHJlcGVuZCgiIik7CisgICAg
RVhQRUNUX0NPTlRFTlQoImVmZ2FiY2QwMTIzNDU2Nzg5IiwgYnVpbGRlcik7CisgICAgYnVpbGRl
ci5wcmVwZW5kKCcjJyk7CisgICAgRVhQRUNUX0NPTlRFTlQoIiNlZmdhYmNkMDEyMzQ1Njc4OSIs
IGJ1aWxkZXIpOworCisgICAgYnVpbGRlci50b1N0cmluZygpOyAvLyBUZXN0IGFmdGVyIHJlaWZ5
U3RyaW5nKCkuCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyMTsKKyAgICBidWlsZGVyLnByZXBl
bmQoYnVpbGRlcjEpOworICAgIEVYUEVDVF9DT05URU5UKCIjZWZnYWJjZDAxMjM0NTY3ODkiLCBi
dWlsZGVyKTsKKyAgICBidWlsZGVyMS5wcmVwZW5kKGJ1aWxkZXIpOworICAgIGJ1aWxkZXIxLnBy
ZXBlbmQoIlhZWiIpOworICAgIGJ1aWxkZXIucHJlcGVuZChidWlsZGVyMSk7CisgICAgRVhQRUNU
X0NPTlRFTlQoIlhZWiNlZmdhYmNkMDEyMzQ1Njc4OSNlZmdhYmNkMDEyMzQ1Njc4OSIsIGJ1aWxk
ZXIpOworfQorCitURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCBhcHBlbmQpCit7CisgICAgU3RyaW5n
QnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZygiMDEyMzQ1Njc4OSIp
KTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxk
ZXIuYXBwZW5kKCJhYmNkIik7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAxMjM0NTY3ODlhYmNkIiwg
YnVpbGRlcik7CisgICAgYnVpbGRlci5hcHBlbmQoImVmZ2giLCAzKTsKKyAgICBFWFBFQ1RfQ09O
VEVOVCgiMDEyMzQ1Njc4OWFiY2RlZmciLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLmFwcGVuZCgi
Iik7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAxMjM0NTY3ODlhYmNkZWZnIiwgYnVpbGRlcik7Cisg
ICAgYnVpbGRlci5hcHBlbmQoJyMnKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQ1Njc4OWFi
Y2RlZmcjIiwgYnVpbGRlcik7CisKKyAgICBidWlsZGVyLnRvU3RyaW5nKCk7IC8vIFRlc3QgYWZ0
ZXIgcmVpZnlTdHJpbmcoKS4KKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIxOworICAgIGJ1aWxk
ZXIuYXBwZW5kKGJ1aWxkZXIxKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQ1Njc4OWFiY2Rl
ZmcjIiwgYnVpbGRlcik7CisgICAgYnVpbGRlcjEuYXBwZW5kKGJ1aWxkZXIpOworICAgIGJ1aWxk
ZXIxLmFwcGVuZCgiWFlaIik7CisgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlcjEpOworICAgIEVY
UEVDVF9DT05URU5UKCIwMTIzNDU2Nzg5YWJjZGVmZyMwMTIzNDU2Nzg5YWJjZGVmZyNYWVoiLCBi
dWlsZGVyKTsKK30KKworVEVTVChTdHJpbmdCdWlsZGVyVGVzdCwgcmVtb3ZlKQoreworICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCgiMDEyMzQ1Njc4OSIpOwor
ICAgIGJ1aWxkZXIucmVtb3ZlKDAsIDApOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2Nzg5
IiwgYnVpbGRlcik7CisgICAgYnVpbGRlci5yZW1vdmUoNSwgMCk7CisgICAgRVhQRUNUX0NPTlRF
TlQoIjAxMjM0NTY3ODkiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLnJlbW92ZShidWlsZGVyLmxl
bmd0aCgpIC0gMSwgMSk7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAxMjM0NTY3OCIsIGJ1aWxkZXIp
OworICAgIGJ1aWxkZXIucmVtb3ZlKDAsIDEpOworICAgIEVYUEVDVF9DT05URU5UKCIxMjM0NTY3
OCIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIucmVtb3ZlKDUsIDIpOworICAgIEVYUEVDVF9DT05U
RU5UKCIxMjM0NTgiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLnJlbW92ZSgwLCA2KTsKKyAgICBl
eHBlY3RFbXB0eShidWlsZGVyKTsKK30KKworVEVTVChTdHJpbmdCdWlsZGVyVGVzdCwgY2xlYXIp
Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCIwMTIz
NDU2Nzg5Iik7CisgICAgYnVpbGRlci5jbGVhcigpOworICAgIGV4cGVjdEVtcHR5KGJ1aWxkZXIp
OworICAgIEVYUEVDVF9FUSgwVSwgYnVpbGRlci5jYXBhY2l0eSgpKTsKK30KKworVEVTVChTdHJp
bmdCdWlsZGVyVGVzdCwgY2hhcmFjdGVycykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CisgICAgYnVpbGRlci5hcHBlbmQoIjAxMjM0NTY3ODkiKTsKKyAgICBVQ2hhciogY2hhcmFjdGVy
cyA9IGJ1aWxkZXIuY2hhcmFjdGVycygpOworICAgIEVYUEVDVF9FUSgnMCcsIHN0YXRpY19jYXN0
PGNoYXI+KGNoYXJhY3RlcnNbMF0pKTsKKyAgICBFWFBFQ1RfRVEoJzknLCBzdGF0aWNfY2FzdDxj
aGFyPihjaGFyYWN0ZXJzWzldKSk7CisgICAgY2hhcmFjdGVyc1s1XSA9ICcjJzsKKyAgICBFWFBF
Q1RfQ09OVEVOVCgiMDEyMzQjNjc4OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIudG9TdHJpbmco
KTsgLy8gVGVzdCBhZnRlciByZWlmeVN0cmluZygpLgorICAgIGJ1aWxkZXIuY2hhcmFjdGVycygp
WzZdID0gJ0AnOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNCNANzg5IiwgYnVpbGRlcik7Cit9
CisKK1RFU1QoU3RyaW5nQnVpbGRlclRlc3QsIGFycmF5KQoreworICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCgiMDEyMzQ1Njc4OSIpOworICAgIEVYUEVDVF9F
USgnMCcsIHN0YXRpY19jYXN0PGNoYXI+KGJ1aWxkZXJbMF0pKTsKKyAgICBFWFBFQ1RfRVEoJzkn
LCBzdGF0aWNfY2FzdDxjaGFyPihidWlsZGVyWzldKSk7CisgICAgYnVpbGRlcls1XSA9ICcjJzsK
KyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyMzQjNjc4OSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIu
dG9TdHJpbmcoKTsgLy8gVGVzdCBhZnRlciByZWlmeVN0cmluZygpLgorICAgIGJ1aWxkZXJbNl0g
PSAnQCc7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAxMjM0I0A3ODkiLCBidWlsZGVyKTsKK30KKwor
VEVTVChTdHJpbmdCdWlsZGVyVGVzdCwgY29uc3RCdWlsZGVyKQoreworICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCgiMDEyMzQ1Njc4OSIpOworICAgIGNvbnN0
IFN0cmluZ0J1aWxkZXImIGNvbnN0QnVpbGRlciA9IGJ1aWxkZXI7CisgICAgRVhQRUNUX0VRKCcw
Jywgc3RhdGljX2Nhc3Q8Y2hhcj4oY29uc3RCdWlsZGVyWzBdKSk7CisgICAgRVhQRUNUX0VRKCc5
Jywgc3RhdGljX2Nhc3Q8Y2hhcj4oY29uc3RCdWlsZGVyWzldKSk7CisgICAgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMgPSBjb25zdEJ1aWxkZXIuY2hhcmFjdGVycygpOworICAgIEVYUEVDVF9FUSgn
MCcsIHN0YXRpY19jYXN0PGNoYXI+KGNoYXJhY3RlcnNbMF0pKTsKKyAgICBFWFBFQ1RfRVEoJzkn
LCBzdGF0aWNfY2FzdDxjaGFyPihjaGFyYWN0ZXJzWzldKSk7Cit9CisKK1RFU1QoU3RyaW5nQnVp
bGRlclRlc3QsIGFwcGVuZE51bWJlcikKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgYnVpbGRlci5hcHBlbmROdW1iZXIoMCk7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAiLCBidWls
ZGVyKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcigxKTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgi
MDEiLCBidWlsZGVyKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcigyNTUpOworICAgIEVYUEVD
VF9DT05URU5UKCIwMTI1NSIsIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKDk5
KTsKKyAgICBFWFBFQ1RfQ09OVEVOVCgiMDEyNTU5OSIsIGJ1aWxkZXIpOworfQorCitURVNUKFN0
cmluZ0J1aWxkZXJUZXN0LCByZXNpemUpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwor
ICAgIGJ1aWxkZXIuYXBwZW5kKCIwMTIzNDU2Nzg5Iik7CisgICAgdW5zaWduZWQgY2FwYWNpdHkg
PSBidWlsZGVyLmNhcGFjaXR5KCk7CisgICAgYnVpbGRlci5yZXNpemUoMTApOworICAgIEVYUEVD
VF9FUSgxMFUsIGJ1aWxkZXIubGVuZ3RoKCkpOworICAgIEVYUEVDVF9DT05URU5UKCIwMTIzNDU2
Nzg5IiwgYnVpbGRlcik7CisgICAgRVhQRUNUX0VRKGNhcGFjaXR5LCBidWlsZGVyLmNhcGFjaXR5
KCkpOworICAgIGJ1aWxkZXIucmVzaXplKDgpOworICAgIEVYUEVDVF9FUSg4VSwgYnVpbGRlci5s
ZW5ndGgoKSk7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAxMjM0NTY3IiwgYnVpbGRlcik7CisgICAg
RVhQRUNUX0VRKGNhcGFjaXR5LCBidWlsZGVyLmNhcGFjaXR5KCkpOworCisgICAgYnVpbGRlci50
b1N0cmluZygpOworICAgIGJ1aWxkZXIucmVzaXplKDcpOworICAgIEVYUEVDVF9FUSg3VSwgYnVp
bGRlci5sZW5ndGgoKSk7CisgICAgRVhQRUNUX0NPTlRFTlQoIjAxMjM0NTYiLCBidWlsZGVyKTsK
KyAgICBidWlsZGVyLnJlc2l6ZSgyMCk7CisgICAgRVhQRUNUX0VRKDIwVSwgYnVpbGRlci5sZW5n
dGgoKSk7CisgICAgRVhQRUNUX0VRKCcwJywgYnVpbGRlclswXSk7CisgICAgRVhQRUNUX0VRKCc3
JywgYnVpbGRlcls3XSk7CisgICAgYnVpbGRlci5yZXNpemUoMCk7CisgICAgZXhwZWN0RW1wdHko
YnVpbGRlcik7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>
<flag name="commit-queue"
          id="101467"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>