<?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>67079</bug_id>
          
          <creation_ts>2011-08-26 20:42:50 -0700</creation_ts>
          <short_desc>Replace usages of Vector&lt;UChar&gt; with existing StringBuilder</short_desc>
          <delta_ts>2013-08-09 11:19:21 -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>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>66661</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Xianzhu Wang">wangxianzhu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>kling</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>sullivan</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>457904</commentid>
    <comment_count>0</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-26 20:42:50 -0700</bug_when>
    <thetext>This is the first step for bug 66661.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458122</commentid>
    <comment_count>1</comment_count>
      <attachid>105473</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-29 01:24:30 -0700</bug_when>
    <thetext>Created attachment 105473
patch

The patch is big, but most of the modifications are straight-forward.
StringBuilder is slightly modified:
1) Added StringBuilder::characters() because originally Vector&lt;UChar&gt;::data() was widely used;
2) Added a minimum size for buffer to match Vector (though further performance investigations/optimizations should be done in https://bugs.webkit.org/show_bug.cgi?id=67084).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458127</commentid>
    <comment_count>2</comment_count>
      <attachid>105473</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-08-29 01:40:25 -0700</bug_when>
    <thetext>Comment on attachment 105473
patch

Attachment 105473 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9558226</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458129</commentid>
    <comment_count>3</comment_count>
      <attachid>105473</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-29 01:41:58 -0700</bug_when>
    <thetext>Comment on attachment 105473
patch

Attachment 105473 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9566049</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458132</commentid>
    <comment_count>4</comment_count>
      <attachid>105473</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-29 01:47:14 -0700</bug_when>
    <thetext>Comment on attachment 105473
patch

Please ignore this patch. Will upload a new patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458133</commentid>
    <comment_count>5</comment_count>
      <attachid>105473</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-29 01:48:12 -0700</bug_when>
    <thetext>Comment on attachment 105473
patch

Attachment 105473 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9565086</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458134</commentid>
    <comment_count>6</comment_count>
      <attachid>105473</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-29 01:50:58 -0700</bug_when>
    <thetext>Comment on attachment 105473
patch

Attachment 105473 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9561112</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458137</commentid>
    <comment_count>7</comment_count>
      <attachid>105476</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-29 02:03:09 -0700</bug_when>
    <thetext>Created attachment 105476
patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458667</commentid>
    <comment_count>8</comment_count>
      <attachid>105476</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-08-29 20:30:34 -0700</bug_when>
    <thetext>Comment on attachment 105476
patch v2

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

This patch looks good, would be great to be able to remove the String::adopt method, do you know how far this takes us in that direction?
r- for a couple of small issues, but generally looks fine to me.

&gt; Source/WebCore/platform/text/TextStream.cpp:87
&gt;      size_t stringLength = strlen(string);

I think this function should just be
{ m_text.append(string); return *this; }

(If the StringBuilder needs to grow the buffer it should be checking for overflow itself).

&gt; Source/WebCore/storage/IDBLevelDBCoding.cpp:275
&gt; +        result.append(static_cast&lt;UChar&gt;((hi &lt;&lt; 8) | lo));

Errrrk! – this looks like a(n existing) bug!
&apos;hi&apos; is an unsigned char, but is left shifted by 8.
You can probably fix this like this:

result.append((static_cast&lt;UChar&gt;(hi) &lt;&lt; 8) | lo);

&gt; Source/WebCore/xml/parser/CharacterReferenceParserInlineMethods.h:47
&gt; +        source.prepend(SegmentedString(String(consumedCharacters.characters(), consumedCharacters.length())));

To get the current contents of a StringBuilder as a String you could call
consumedCharacters.toString()
(or maybe consumedCharacters.toStringPreserveCapacity() )
instead of &quot;String(consumedCharacters.characters(), consumedCharacters.length())&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458670</commentid>
    <comment_count>9</comment_count>
      <attachid>105476</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-29 20:35:24 -0700</bug_when>
    <thetext>Comment on attachment 105476
patch v2

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

&gt;&gt; Source/WebCore/storage/IDBLevelDBCoding.cpp:275
&gt;&gt; +        result.append(static_cast&lt;UChar&gt;((hi &lt;&lt; 8) | lo));
&gt; 
&gt; Errrrk! – this looks like a(n existing) bug!
&gt; &apos;hi&apos; is an unsigned char, but is left shifted by 8.
&gt; You can probably fix this like this:
&gt; 
&gt; result.append((static_cast&lt;UChar&gt;(hi) &lt;&lt; 8) | lo);

This is not a bug. Operators on integer types smaller than int/unsigned are promoted to int/unsigned. The standard calls this integral promotions. So the code is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458684</commentid>
    <comment_count>10</comment_count>
      <attachid>105574</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-29 21:38:28 -0700</bug_when>
    <thetext>Created attachment 105574
patch v3

Thanks Gavin and Darin for review!

&gt; This patch looks good, would be great to be able to remove the String::adopt method, do you know how far this takes us in that direction?
I think this patch has replaced more than 80% Vector&lt;UChar&gt; usages and almost all String::adopt usages. The remaining places depend on other bugs blocking bug 66661 and will be fixed soon.

&gt;&gt; Source/WebCore/platform/text/TextStream.cpp:87
&gt;&gt;      size_t stringLength = strlen(string);
&gt; 
&gt; I think this function should just be
&gt; { m_text.append(string); return *this; }
&gt; 
&gt; (If the StringBuilder needs to grow the buffer it should be checking for overflow itself).

Done.

&gt;&gt; Source/WebCore/xml/parser/CharacterReferenceParserInlineMethods.h:47
&gt;&gt; +        source.prepend(SegmentedString(String(consumedCharacters.characters(), consumedCharacters.length())));
&gt; 
&gt; To get the current contents of a StringBuilder as a String you could call
&gt; consumedCharacters.toString()
&gt; (or maybe consumedCharacters.toStringPreserveCapacity() )
&gt; instead of &quot;String(consumedCharacters.characters(), consumedCharacters.length())&quot;.

For now both toString() and toStringPreserveCapacity() alters the internal state and are non-const. They can&apos;t be used here because consumedCharacters is const.
My plan is to make toStringPreserveCapacity() const (also make StringBuilder::m_string mutable). This will be done in bug 67081.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459546</commentid>
    <comment_count>11</comment_count>
      <attachid>105766</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-31 03:57:17 -0700</bug_when>
    <thetext>Created attachment 105766
patch v4 (small change to StringBuilder::characters())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460210</commentid>
    <comment_count>12</comment_count>
      <attachid>105766</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-08-31 21:41:48 -0700</bug_when>
    <thetext>Comment on attachment 105766
patch v4 (small change to StringBuilder::characters())

r=me on MarkupAccumulator.h/cpp and markup.cpp changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463064</commentid>
    <comment_count>13</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-09-06 18:54:47 -0700</bug_when>
    <thetext>Hi Darin, Gavin, does the latest patch look good to you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463080</commentid>
    <comment_count>14</comment_count>
      <attachid>105766</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-06 19:16:25 -0700</bug_when>
    <thetext>Comment on attachment 105766
patch v4 (small change to StringBuilder::characters())

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463101</commentid>
    <comment_count>15</comment_count>
      <attachid>105766</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-06 19:58:35 -0700</bug_when>
    <thetext>Comment on attachment 105766
patch v4 (small change to StringBuilder::characters())

Rejecting attachment 105766 from commit-queue.

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

Last 500 characters of output:
ource/WebCore/xml/XPathUtil.cpp
patching file Source/WebCore/xml/XSLTProcessorLibxslt.cpp
patching file Source/WebCore/xml/parser/CharacterReferenceParserInlineMethods.h
patching file Source/WebCore/xml/parser/XMLCharacterReferenceParser.cpp
patching file Source/WebCore/xml/parser/XMLCharacterReferenceParser.h
patching file Source/WebCore/xml/parser/XMLTokenizer.cpp

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Gavin Barraclough&apos;, u&apos;...&quot; exit_code: 1

Full output: http://queues.webkit.org/results/9608022</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463120</commentid>
    <comment_count>16</comment_count>
      <attachid>106540</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-09-06 21:09:49 -0700</bug_when>
    <thetext>Created attachment 106540
patch resolved conflicts

Note of changes compared with the last patch:

1. StringBuilder.h: Still use StringImpl::characters() because of StringBuilder::characters() (was changed to use [] in bug 67340). As discussed in bug 66286 and bug 66706, eventually we&apos;ll use StringConstCharacterIterator as the return type of String::characters() (the function name may be changed).

2. To avoid conflict between WTF::double_conversion::StringBuilder and WTF::StringBuilder, added a typedef in NumberPrototype.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463161</commentid>
    <comment_count>17</comment_count>
      <attachid>106540</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-06 22:42:16 -0700</bug_when>
    <thetext>Comment on attachment 106540
patch resolved conflicts

Clearing flags on attachment: 106540

Committed r94640: &lt;http://trac.webkit.org/changeset/94640&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463162</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-06 22:42:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915866</commentid>
    <comment_count>19</comment_count>
      <attachid>106540</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-08-09 10:21:03 -0700</bug_when>
    <thetext>Comment on attachment 106540
patch resolved conflicts

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

&gt; Source/WebCore/rendering/InlineTextBox.h:42
&gt; -typedef Vector&lt;UChar, 256&gt; BufferForAppendingHyphen;
&gt; +
&gt; +class BufferForAppendingHyphen : public StringBuilder {
&gt; +public:
&gt; +    BufferForAppendingHyphen() { reserveCapacity(256); }
&gt; +};

Pre-allocating 256 characters in a StringBuilder is not nearly as efficient as reserving 256 characters of inline capacity in a Vector.  This change caused https://code.google.com/p/chromium/issues/detail?id=270678.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915882</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-09 11:19:21 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 106540 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106540&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/InlineTextBox.h:42
&gt; &gt; -typedef Vector&lt;UChar, 256&gt; BufferForAppendingHyphen;
&gt; &gt; +
&gt; &gt; +class BufferForAppendingHyphen : public StringBuilder {
&gt; &gt; +public:
&gt; &gt; +    BufferForAppendingHyphen() { reserveCapacity(256); }
&gt; &gt; +};
&gt; 
&gt; Pre-allocating 256 characters in a StringBuilder is not nearly as efficient as reserving 256 characters of inline capacity in a Vector.  This change caused https://code.google.com/p/chromium/issues/detail?id=270678.

Thanks for pointing that out. We should figure out what to do about this in WebKit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105473</attachid>
            <date>2011-08-29 01:24:30 -0700</date>
            <delta_ts>2011-08-29 02:03:09 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-67079a</filename>
            <type>text/plain</type>
            <size>115820</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM5NTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDgtMjkgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXBsYWNlIHVzYWdlcyBvZiBWZWN0b3I8VUNoYXI+IHdpdGggZXhpc3RpbmcgU3Ry
aW5nQnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjcwNzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0byBzdXBwb3J0IDgtYml0IHN0cmluZyBidWZmZXJzLgor
ICAgICAgICBBZGRzIFN0cmluZ0J1aWxkZXI6OmNoYXJhY3RlcnMoKSBiZWNhdXNlIHRoZSBvcmln
aW5hbCBWZWN0b3I8VUNoYXI+OjpkYXRhKCkKKyAgICAgICAgaXMgd2lkZWx5IHVzZWQuCisgICAg
ICAgIFNldHMgdGhlIG1pbmltdW0gc2l6ZSBvZiBidWZmZXIgdG8gMTYgdG8gcHJldmVudCBwb3Nz
aWJsZSBwZXJmb3JtYW5jZQorICAgICAgICByZWdyZXNzaW9uLiBGdXJ0aGVyIHBlcmZvcm1hbmNl
IGludmVzdGlnYXRpb24gc2hvdWxkIGJlIGRvbmUgaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MDg0LgorCisgICAgICAgICogd3RmL0ZvcndhcmQu
aDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdURjo6
U3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplZCk6IFNldHMgbWluaW11bSBidWZmZXIg
c2l6ZSB0byAxNiBieXRlcy4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6Om9wZXJhdG9yW10pOgorICAgICAgICAoV1RGOjpT
dHJpbmdCdWlsZGVyOjpjaGFyYWN0ZXJzKTogQWRkZWQuCisKIDIwMTEtMDgtMjggIEpvbmF0aGFu
IExpdSAgPG5ldDE0N0BnbWFpbC5jb20+CiAKICAgICAgICAgRml4IGJ1aWxkIGVycm9yIHdoZW4g
Y29tcGlsaW5nIHdpdGggTWluR1ctdzY0IGJ5IGRpc2FibGluZyBKSVQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvRm9yd2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvRm9yd2FyZC5oCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvRm9yd2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgIGNsYXNzIEVuY29kZXI7CiAgICAgY2xhc3MgU3RyaW5nOwogICAg
IGNsYXNzIFN0cmluZ0J1ZmZlcjsKKyAgICBjbGFzcyBTdHJpbmdCdWlsZGVyOwogICAgIGNsYXNz
IFN0cmluZ0ltcGw7CiB9CiAKQEAgLTU5LDYgKzYwLDcgQEAgdXNpbmcgV1RGOjpFbmNvZGVyOwog
dXNpbmcgV1RGOjpEZWNvZGVyOwogdXNpbmcgV1RGOjpTdHJpbmc7CiB1c2luZyBXVEY6OlN0cmlu
Z0J1ZmZlcjsKK3VzaW5nIFdURjo6U3RyaW5nQnVpbGRlcjsKIHVzaW5nIFdURjo6U3RyaW5nSW1w
bDsKIAogI2VuZGlmIC8vIFdURl9Gb3J3YXJkX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWluaW11bUNhcGFjaXR5ID0gMTY7CisKIHZvaWQgU3RyaW5nQnVpbGRlcjo6
cmVpZnlTdHJpbmcoKQogewogICAgIC8vIENoZWNrIGlmIHRoZSBzdHJpbmcgYWxyZWFkeSBleGlz
dHMuCkBAIC0xMjYsMTAgKzEyOCwxMCBAQCBVQ2hhciogU3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5p
bml0aWFsaXplCiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBuZWVkIHRvIHJlYWxsb2MgdGhl
IGJ1ZmZlci4KLSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnMoKSwg
c3RkOjptYXgocmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyLT5sZW5ndGgoKSAqIDIpKTsKKyAgICAg
ICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnMoKSwgc3RkOjptYXgocmVxdWly
ZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgbV9idWZmZXItPmxlbmd0aCgpICog
MikpKQogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChtX3N0cmluZy5sZW5ndGgoKSA9PSBt
X2xlbmd0aCk7Ci0gICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJhY3RlcnMoKSwg
c3RkOjptYXgocmVxdWlyZWRMZW5ndGgsIHJlcXVpcmVkTGVuZ3RoICogMikpOworICAgICAgICBh
bGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzKCksIHN0ZDo6bWF4KHJlcXVpcmVkTGVu
Z3RoLCBzdGQ6Om1heChtaW5pbXVtQ2FwYWNpdHksIG1fbGVuZ3RoICogMikpKTsKICAgICB9CiAK
ICAgICBVQ2hhciogcmVzdWx0ID0gbV9idWZmZXJDaGFyYWN0ZXJzICsgbV9sZW5ndGg7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgJKHJl
dmlzaW9uIDkzOTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDEwICsxMDgsMTUgQEAgcHVibGljOgogICAg
IFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VChpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gY2hhcmFjdGVycygpW2ldOworICAgIH0K
KworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QKKyAgICB7CiAgICAgICAgIGlm
ICghbV9zdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9zdHJpbmdbaV07Cisg
ICAgICAgICAgICByZXR1cm4gbV9zdHJpbmcuY2hhcmFjdGVycygpOwogICAgICAgICBBU1NFUlQo
bV9idWZmZXIpOwotICAgICAgICByZXR1cm4gbV9idWZmZXItPmNoYXJhY3RlcnMoKVtpXTsKKyAg
ICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzKCk7CiAgICAgfQogCiAgICAgdm9pZCBj
bGVhcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5Mzk1OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NCBAQAorMjAxMS0wOC0yOSAg
WGlhbnpodSBXYW5nICA8d2FuZ3hpYW56aHVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlcGxh
Y2UgdXNhZ2VzIG9mIFZlY3RvcjxVQ2hhcj4gd2l0aCBleGlzdGluZyBTdHJpbmdCdWlsZGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA3OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cy4gQWxsIGV4aXN0aW5nIHVuaXQgdGVzdHMgYW5kIGxheW91dCB0ZXN0cyBzaG91bGQgcnVuCisg
ICAgICAgIGFzIGJlZm9yZS4KKworICAgICAgICAqIGNzcy9DU1NPTVV0aWxzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmFwcGVuZENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxp
emVDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplQ2hhcmFjdGVyQXNDb2Rl
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplSWRlbnRpZmllcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXJpYWxpemVTdHJpbmcpOgorICAgICAgICAqIGNzcy9DU1NPTVV0aWxzLmg6
CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNo
ZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBjc3MvQ1NTV3Jh
cFNoYXBlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NXcmFwU2hhcGVSZWN0Ojpjc3NUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1dyYXBTaGFwZUNpcmNsZTo6Y3NzVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NXcmFwU2hhcGVFbGxpcHNlOjpjc3NUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1dyYXBTaGFwZVBvbHlnb246OmNzc1RleHQpOgorICAgICAgICAqIGVkaXRpbmcv
SFRNTEludGVyY2hhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRIVE1MVGV4dFRv
SW50ZXJjaGFuZ2VGb3JtYXQpOgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlcyk6
CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRUYWcpOgor
ICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyk6CisgICAg
ICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6Y29uY2F0ZW5hdGVNYXJrdXApOgorICAg
ICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1
dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRV
UkxBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kTm9kZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmROYW1lc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENv
bW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZERvY3Vt
ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUHJv
Y2Vzc2luZ0luc3RydWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRPcGVuVGFnKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRDbG9zZVRhZyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRD
REFUQVNlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFN0YXJ0TWFya3VwKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRFbmRNYXJrdXApOgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaDoKKyAg
ICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRN
YXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
ZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aFN0eWxlTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3R5bGVOb2RlT3BlblRhZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dGFrZVJlc3VsdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6dXJsVG9NYXJrdXApOgorICAgICAgICAqIGh0bWwvRE9NVG9rZW5MaXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRva2VuTGlzdDo6cmVtb3ZlVG9rZW4pOgorICAg
ICAgICAqIGh0bWwvSFRNTEZvbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
Rm9udFNpemUpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN0cmlwcGVk
UGxhY2Vob2xkZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByZWxvYWRTY2FubmVyOjplbWl0UnVsZSk6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaDoKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVIVE1M
RW50aXR5KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmg6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZUhUTUxJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSFRNTE5vbk5lZ2F0
aXZlSW50ZWdlcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpwcm9jZXNzRW50aXR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6Om5leHRUb2tlbik6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6Z2l2ZVJlbWFpbmluZ1RvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckluVGFibGVUZXh0KToKKyAg
ICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZhbHVl
Ojp0b0pTT05TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVmFsdWU6OndyaXRl
SlNPTik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04p
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RyaW5nOjp3cml0ZUpTT04pOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0Ojp3cml0ZUpTT04pOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQXJyYXk6OndyaXRlSlNPTik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oOgorICAgICAgICAqIGxvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWNjZXNzQ29udHJvbFByZWZsaWdodFJlcXVl
c3QpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUpOgor
ICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2V0
VG9vbFRpcCk6CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3Vz
dG9tQXR0cmlidXRlcyk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6dG9TdHJpbmcpOgorICAgICAgICAqIHBsYXRm
b3JtL0tVUkwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6ZGVwcmVjYXRlZFN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL0xpbmtIYXNoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNxdWVlemVPdXROdWxs
Q2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpjbGVhblNsYXNoRG90RG90U2xhc2hlcyk6
CisgICAgICAgIChXZWJDb3JlOjptZXJnZURvdWJsZVNsYXNoZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2xlYW5TbGFzaERvdFNsYXNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYW5QYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OnZpc2l0ZWRVUkxJbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
dmlzaXRlZFVSTCk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2gpOgorICAgICAg
ICAqIHBsYXRmb3JtL0xpbmtIYXNoLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0RhdGFPYmpl
Y3RHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6c2V0VVJMKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjSUNVLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFN0cmVhbTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
U3RyZWFtOjpyZWxlYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uaDoK
KyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RDaGFyYWN0ZXJzQW5kTGVuZ3RoRm9y
SHlwaGVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgorICAgICAgICAo
V2ViQ29yZTo6QnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuOjpCdWZmZXJGb3JBcHBlbmRpbmdIeXBo
ZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6bWFya2VyVGV4dFdpdGhTdWZmaXgpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU3lt
Ym9saWMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6c3VmZml4KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpxdW90ZUFuZEVz
Y2FwZU5vblByaW50YWJsZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MRmVuY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEZlbmNlZDo6dXBk
YXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQ29kaW5nOjpkZWNvZGVTdHJpbmcpOgorICAg
ICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRw
UmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKToKKyAgICAgICAgKiB4bWwvWFBhdGhGdW5j
dGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bklkOjpldmFsdWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuQ29uY2F0OjpldmFsdWF0ZSk6CisgICAgICAgICog
eG1sL1hQYXRoVXRpbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6c3RyaW5nVmFsdWUp
OgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjp3cml0ZVRvU3RyaW5nQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpzYXZlUmVzdWx0
VG9TdHJpbmcpOgorICAgICAgICAqIHhtbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2Vy
SW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoV2ViQ29yZTo6dW5jb25zdW1lQ2hhcmFjdGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKToKKyAgICAgICAg
KiB4bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjb25zdW1lWE1MQ2hhcmFjdGVyUmVmZXJlbmNlKToKKyAgICAgICAgKiB4bWwvcGFy
c2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oOgorICAgICAgICAqIHhtbC9wYXJzZXIv
WE1MVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6bmV4dFRv
a2VuKToKKwogMjAxMS0wOC0yOSAgTWF0dGhldyBEZWxhbmV5ICA8bWRlbGFuZXlAYXBwbGUuY29t
PgogCiAgICAgICAgIGZhc3QvY2FudmFzL3NoYWRvdy1vZmZzZXQtKi5odG1sIGZhaWwgb24gTGVv
cGFyZC9Tbm93IExlb3BhcmQgd2hlbiByZW1vdmluZyB0aGUgd29yayBhcm91bmQgZm9yIDxyZGFy
Oi8vcHJvYmxlbS81NTM5Mzg4Pi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NPTVV0aWxz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTT01VdGlscy5jcHAJKHJl
dmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU09NVXRpbHMuY3BwCSh3b3Jr
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
Y3NzL0NTU09NVXRpbHMuaAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTT01VdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogLy8gQ29tbW9uIHNlcmlhbGl6aW5nIG1ldGhvZHMuIFNlZTogaHR0cDov
L2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXMKLXZvaWQg
c2VyaWFsaXplQ2hhcmFjdGVyKFVDaGFyMzIsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKTsKLXZv
aWQgc2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIzMiwgVmVjdG9yPFVDaGFyPiYg
YXBwZW5kVG8pOwordm9pZCBzZXJpYWxpemVDaGFyYWN0ZXIoVUNoYXIzMiwgU3RyaW5nQnVpbGRl
ciYgYXBwZW5kVG8pOwordm9pZCBzZXJpYWxpemVDaGFyYWN0ZXJBc0NvZGVQb2ludChVQ2hhcjMy
LCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbyk7CiB2b2lkIHNlcmlhbGl6ZUlkZW50aWZpZXIoY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyLCBTdHJpbmcmIGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFsaXpl
SWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFZlY3RvcjxVQ2hhcj4mIGFwcGVu
ZFRvKTsKLXZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBTdHJpbmcm
IGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBW
ZWN0b3I8VUNoYXI+JiBhcHBlbmRUbyk7Cit2b2lkIHNlcmlhbGl6ZUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJiBpZGVudGlmaWVyLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbyk7Cit2b2lkIHNlcmlh
bGl6ZVN0cmluZyhjb25zdCBTdHJpbmcmLCBTdHJpbmcmIGFwcGVuZFRvKTsKK3ZvaWQgc2VyaWFs
aXplU3RyaW5nKGNvbnN0IFN0cmluZyYsIFN0cmluZ0J1aWxkZXImIGFwcGVuZFRvKTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0
aXZlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRp
dmVWYWx1ZS5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1
ZGUgPHd0Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICNpbmNsdWRl
ICJEYXNoYm9hcmRSZWdpb24uaCIKQEAgLTcwOCwxNCArNzA5LDE0IEBAIFN0cmluZyBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3NzVGV4dCgpIGNvbnMKICAgICAgICAgY2FzZSBDU1NfQVRUUjogewogICAg
ICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGF0dHJQYXJlbiwgKCJh
dHRyKCIpKTsKIAotICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAgICAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg2ICsgbV92YWx1ZS5zdHJpbmctPmxlbmd0
aCgpKTsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgICAgICAgICAgcmVz
dWx0LnJlc2VydmVDYXBhY2l0eSg2ICsgbV92YWx1ZS5zdHJpbmctPmxlbmd0aCgpKTsKIAotICAg
ICAgICAgICAgYXBwZW5kKHJlc3VsdCwgYXR0clBhcmVuKTsKLSAgICAgICAgICAgIGFwcGVuZChy
ZXN1bHQsIG1fdmFsdWUuc3RyaW5nKTsKLSAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoJyknKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXR0clBhcmVuKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQobV92YWx1ZS5zdHJpbmcpOworICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnKScpOwogCi0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjphZG9wdChyZXN1bHQpOwor
ICAgICAgICAgICAgdGV4dCA9IHJlc3VsdC50b1N0cmluZygpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NfQ09VTlRFUl9OQU1FOgpAQCAtNzMzLDIzICs3
MzQsMjMgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29ucwogICAgICAg
ICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHJlY3RQYXJlbiwgKCJyZWN0
KCIpKTsKIAogICAgICAgICAgICAgUmVjdCogcmVjdFZhbCA9IGdldFJlY3RWYWx1ZSgpOwotICAg
ICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eSgzMik7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCByZWN0UGFy
ZW4pOworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgICAgICAgICByZXN1
bHQucmVzZXJ2ZUNhcGFjaXR5KDMyKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjdFBh
cmVuKTsKIAotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgcmVjdFZhbC0+dG9wKCktPmNzc1Rl
eHQoKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlY3RWYWwtPnRvcCgpLT5jc3NUZXh0
KCkpOwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwogCi0gICAgICAgICAgICBhcHBl
bmQocmVzdWx0LCByZWN0VmFsLT5yaWdodCgpLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChyZWN0VmFsLT5yaWdodCgpLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICcpOwogCi0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCByZWN0VmFsLT5i
b3R0b20oKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjdFZhbC0+
Ym90dG9tKCktPmNzc1RleHQoKSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CiAK
LSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlY3RWYWwtPmxlZnQoKS0+Y3NzVGV4dCgpKTsK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjdFZhbC0+bGVmdCgpLT5jc3NUZXh0KCkpOwog
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwogCi0gICAgICAgICAgICB0ZXh0ID0gU3Ry
aW5nOjphZG9wdChyZXN1bHQpOworICAgICAgICAgICAgdGV4dCA9IHJlc3VsdC50b1N0cmluZygp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NfUkdCQ09M
T1I6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lv
biA5Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29y
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
LmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTV3JhcFNoYXBl
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
cmNlL1dlYkNvcmUvZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2UuY3BwCShyZXZpc2lvbiA5Mzk1MykK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSFRNTEludGVyY2hhbmdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5h
bWVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU3LDcgKzU4LDcgQEAgU3RyaW5nIGNv
bnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYQogICAgIGlmIChub2RlLT5yZW5kZXJlcigp
ICYmIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKQogICAgICAg
ICByZXR1cm4gaW47CiAKLSAgICBWZWN0b3I8VUNoYXI+IHM7CisgICAgU3RyaW5nQnVpbGRlciBz
OwogCiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgdW5zaWduZWQgY29uc3VtZWQgPSAwOwpAQCAt
NzQsMjggKzc1LDI4IEBAIFN0cmluZyBjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWEK
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhZGQgPSBjb3VudCAlIDM7CiAgICAgICAgICAgICAg
ICAgc3dpdGNoIChhZGQpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZCgnICcpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGQgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDAg
fHwgaSArIDEgPT0gaW4ubGVuZ3RoKCkpIC8vIGF0IHN0YXJ0IG9yIGVuZCBvZiBzdHJpbmcKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQocywgY29udmVydGVkU3BhY2VTdHJpbmco
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VT
dHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcy5hcHBlbmQoJyAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHN0YXJ0IG9m
IHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChzLCBjb252ZXJ0ZWRT
cGFjZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChjb252
ZXJ0ZWRTcGFjZVN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVu
ZCgnICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpICsgMiA9PSBpbi5s
ZW5ndGgoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCBlbmQgb2Ygc3Ry
aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNl
U3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChzLCBjb252ZXJ0
ZWRTcGFjZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChj
b252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFw
cGVuZChjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNw
YWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKGNvbnZl
cnRlZFNwYWNlU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5k
KCcgJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTEwNyw3ICsxMDgsNyBAQCBTdHJpbmcgY29udmVydEhUTUxUZXh0VG9JbnRl
cmNoYW5nZUZvcm1hCiAgICAgICAgIGkgKz0gY29uc3VtZWQ7CiAgICAgfQogCi0gICAgcmV0dXJu
IFN0cmluZzo6YWRvcHQocyk7CisgICAgcmV0dXJuIHMudG9TdHJpbmcoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1
bXVsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBB
Y2N1bXVsYXRvci5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNywxNCBA
QAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIK
ICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotdm9pZCBhcHBlbmRD
aGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBVQ2hh
ciogY29udGVudCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQordm9pZCBh
cHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25z
dCBVQ2hhciogY29udGVudCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQog
ewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBhbXBSZWZlcmVuY2UsICgi
JmFtcDsiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGx0UmVmZXJl
bmNlLCAoIiZsdDsiKSk7CkBAIC02NCw3ICs2NSw3IEBAIHZvaWQgYXBwZW5kQ2hhcmFjdGVyc1Jl
cGxhY2luZ0VudGl0aWVzKFYKICAgICAgICAgZm9yIChzaXplX3QgbSA9IDA7IG0gPCBXVEZfQVJS
QVlfTEVOR1RIKGVudGl0eU1hcHMpOyArK20pIHsKICAgICAgICAgICAgIGlmIChjb250ZW50W2ld
ID09IGVudGl0eU1hcHNbbV0uZW50aXR5ICYmIGVudGl0eU1hcHNbbV0ubWFzayAmIGVudGl0eU1h
c2spIHsKICAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKGNvbnRlbnQgKyBwb3NpdGlvbkFmdGVy
TGFzdEVudGl0eSwgaSAtIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5KTsKLSAgICAgICAgICAgICAg
ICBhcHBlbmQob3V0LCBlbnRpdHlNYXBzW21dLnJlZmVyZW5jZSk7CisgICAgICAgICAgICAgICAg
b3V0LmFwcGVuZChlbnRpdHlNYXBzW21dLnJlZmVyZW5jZSk7CiAgICAgICAgICAgICAgICAgcG9z
aXRpb25BZnRlckxhc3RFbnRpdHkgPSBpICsgMTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KQEAgLTg2LDExICs4NywxMSBAQCBNYXJrdXBBY2N1bXVsYXRvcjo6fk1hcmt1
cEFjY3VtdWxhdG9yKCkKIAogU3RyaW5nIE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rl
cyhOb2RlKiBub2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25s
eSkKIHsKLSAgICBWZWN0b3I8VUNoYXI+IG91dDsKKyAgICBTdHJpbmdCdWlsZGVyIG91dDsKICAg
ICBzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKG5vZGUsIG5vZGVUb1NraXAsIGNoaWxkcmVu
T25seSwgMCk7Ci0gICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKCkpOworICAg
IG91dC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKCkpOwogICAgIGNvbmNhdGVuYXRlTWFya3VwKG91
dCk7Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQob3V0KTsKKyAgICByZXR1cm4gb3V0LnRvU3Ry
aW5nKCk7CiB9CiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OnNlcmlhbGl6ZU5vZGVzV2l0aE5h
bWVzcGFjZXMoTm9kZSogbm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGls
ZHJlbk9ubHksIGNvbnN0IE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCkBAIC0xMzgsMTggKzEzOSwx
OCBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHJpbmcoY29uCiAKIHZvaWQgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKE5vZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5h
bWVzcGFjZXMpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7CisgICAgU3RyaW5nQnVpbGRl
ciBtYXJrdXA7CiAgICAgYXBwZW5kU3RhcnRNYXJrdXAobWFya3VwLCBub2RlLCBuYW1lc3BhY2Vz
KTsKLSAgICBhcHBlbmRTdHJpbmcoU3RyaW5nOjphZG9wdChtYXJrdXApKTsKKyAgICBhcHBlbmRT
dHJpbmcobWFya3VwLnRvU3RyaW5nKCkpOwogICAgIGlmIChtX25vZGVzKQogICAgICAgICBtX25v
ZGVzLT5hcHBlbmQobm9kZSk7CiB9CiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVu
ZFRhZyhOb2RlKiBub2RlKQogewotICAgIFZlY3RvcjxVQ2hhcj4gbWFya3VwOworICAgIFN0cmlu
Z0J1aWxkZXIgbWFya3VwOwogICAgIGFwcGVuZEVuZE1hcmt1cChtYXJrdXAsIG5vZGUpOwotICAg
IGFwcGVuZFN0cmluZyhTdHJpbmc6OmFkb3B0KG1hcmt1cCkpOworICAgIGFwcGVuZFN0cmluZyht
YXJrdXAudG9TdHJpbmcoKSk7CiB9CiAKIHNpemVfdCBNYXJrdXBBY2N1bXVsYXRvcjo6dG90YWxM
ZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0cmluZ3MpCkBAIC0xNjEsMjUgKzE2MiwyNSBA
QCBzaXplX3QgTWFya3VwQWNjdW11bGF0b3I6OnRvdGFsTGVuZ3RoKGNvCiB9CiAKIC8vIEZJWE1F
OiBUaGlzIGlzIGEgdmVyeSBpbmVmZmljaWVudCB3YXkgb2YgYWNjdW11bGF0aW5nIHRoZSBtYXJr
dXAuCi0vLyBXZSdyZSBjb252ZXJ0aW5nIHJlc3VsdHMgb2YgYXBwZW5kU3RhcnRNYXJrdXAgYW5k
IGFwcGVuZEVuZE1hcmt1cCBmcm9tIFZlY3RvcjxVQ2hhcj4gdG8gU3RyaW5nCi0vLyBhbmQgdGhl
biBiYWNrIHRvIFZlY3RvcjxVQ2hhcj4gYW5kIGFnYWluIHRvIFN0cmluZyBoZXJlLgotdm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6Y29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KQor
Ly8gV2UncmUgY29udmVydGluZyByZXN1bHRzIG9mIGFwcGVuZFN0YXJ0TWFya3VwIGFuZCBhcHBl
bmRFbmRNYXJrdXAgZnJvbSBTdHJpbmdCdWlsZGVyIHRvIFN0cmluZworLy8gYW5kIHRoZW4gYmFj
ayB0byBTdHJpbmdCdWlsZGVyIGFuZCBhZ2FpbiB0byBTdHJpbmcgaGVyZS4KK3ZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmNvbmNhdGVuYXRlTWFya3VwKFN0cmluZ0J1aWxkZXImIG91dCkKIHsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3VjY2VlZGluZ01hcmt1cC5zaXplKCk7ICsraSkK
LSAgICAgICAgYXBwZW5kKG91dCwgbV9zdWNjZWVkaW5nTWFya3VwW2ldKTsKKyAgICAgICAgb3V0
LmFwcGVuZChtX3N1Y2NlZWRpbmdNYXJrdXBbaV0pOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0
cmluZyYgYXR0cmlidXRlLCBib29sIGRvY3VtZW50SXNIVE1MKQordm9pZCBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBT
dHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBkb2N1bWVudElzSFRNTCkKIHsKICAgICBhcHBlbmRDaGFy
YWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMocmVzdWx0LCBhdHRyaWJ1dGUuY2hhcmFjdGVycygpLCBh
dHRyaWJ1dGUubGVuZ3RoKCksCiAgICAgICAgIGRvY3VtZW50SXNIVE1MID8gRW50aXR5TWFza0lu
SFRNTEF0dHJpYnV0ZVZhbHVlIDogRW50aXR5TWFza0luQXR0cmlidXRlVmFsdWUpOwogfQogCi12
b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hh
cj4mLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBFbGVtZW50KiwgTmFtZXNwYWNlcyop
CiB7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0
ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRR
dW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogewogICAgIEFTU0VSVChl
bGVtZW50LT5pc1VSTEF0dHJpYnV0ZShjb25zdF9jYXN0PEF0dHJpYnV0ZSo+KCZhdHRyaWJ1dGUp
KSk7CiAgICAgY29uc3QgU3RyaW5nIHJlc29sdmVkVVJMU3RyaW5nID0gcmVzb2x2ZVVSTElmTmVl
ZGVkKGVsZW1lbnQsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKQEAgLTE5NCw3ICsxOTUsNyBAQCB2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBCiAgICAgICAgICAgICAgICAgcXVv
dGVDaGFyID0gJ1wnJzsKICAgICAgICAgfQogICAgICAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hh
cik7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIHN0cmlwcGVkVVJMU3RyaW5nKTsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChzdHJpcHBlZFVSTFN0cmluZyk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
cXVvdGVDaGFyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIwNSw3ICsyMDYsNyBAQCB2
b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBCiAgICAgcmVzdWx0LmFwcGVu
ZChxdW90ZUNoYXIpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVmFs
dWUoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFu
Z2UsIEVudGl0eU1hc2sgZW50aXR5TWFzaykKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZE5vZGVWYWx1ZShTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJh
bmdlKiByYW5nZSwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQogewogICAgIFN0cmluZyBzdHIgPSBu
b2RlLT5ub2RlVmFsdWUoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHN0ci5jaGFy
YWN0ZXJzKCk7CkBAIC0yNTUsNyArMjU2LDcgQEAgYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6c2hv
dWxkQWRkTmFtZXNwYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmROYW1lc3BhY2UoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBBdG9taWNT
dHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFj
ZXMmIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROYW1lc3BhY2Uo
U3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmIG5hbWVzcGFjZXMpCiB7CiAg
ICAgbmFtZXNwYWNlcy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgaWYgKG5hbWVzcGFjZVVSSS5p
c0VtcHR5KCkpCkBAIC0yNjcsMTAgKzI2OCwxMCBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmROYW1lc3BhY2UoCiAgICAgaWYgKGZvdW5kTlMgIT0gbmFtZXNwYWNlVVJJLmltcGwoKSkg
ewogICAgICAgICBuYW1lc3BhY2VzLnNldChwcmUsIG5hbWVzcGFjZVVSSS5pbXBsKCkpOwogICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIHhtbG5zQXRv
bS5zdHJpbmcoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoeG1sbnNBdG9tLnN0cmluZygpKTsK
ICAgICAgICAgaWYgKCFwcmVmaXguaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCc6Jyk7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBwcmVmaXgpOworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChwcmVmaXgpOwogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnPScpOwpAQCAtMjkyLDU5ICsyOTMsNTkgQEAgRW50aXR5TWFzayBNYXJrdXBBY2N1bXVs
YXRvcjo6ZW50aXR5TWFzawogICAgIHJldHVybiB0ZXh0LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1
bWVudCgpID8gRW50aXR5TWFza0luSFRNTFBDREFUQSA6IEVudGl0eU1hc2tJblBDREFUQTsKIH0K
IAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQs
IFRleHQqIHRleHQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1
aWxkZXImIG91dCwgVGV4dCogdGV4dCkKIHsKICAgICBhcHBlbmROb2RlVmFsdWUob3V0LCB0ZXh0
LCBtX3JhbmdlLCBlbnRpdHlNYXNrRm9yVGV4dCh0ZXh0KSk7CiB9CiAKLXZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZENvbW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcm
IGNvbW1lbnQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KFN0cmluZ0J1
aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiBjb21tZW50KQogewogICAgIC8vIEZJWE1FOiBDb21t
ZW50IGNvbnRlbnQgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2li
bHkgb3RoZXIgY2FsbGVycykgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRl
cyAiLS0+Ii4KLSAgICBhcHBlbmQob3V0LCAiPCEtLSIpOwotICAgIGFwcGVuZChvdXQsIGNvbW1l
bnQpOwotICAgIGFwcGVuZChvdXQsICItLT4iKTsKKyAgICBvdXQuYXBwZW5kKCI8IS0tIik7Cisg
ICAgb3V0LmFwcGVuZChjb21tZW50KTsKKyAgICBvdXQuYXBwZW5kKCItLT4iKTsKIH0KIAotdm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKFZlY3RvcjxVQ2hhcj4mIHJl
c3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKiBuKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBl
KiBuKQogewogICAgIGlmIChuLT5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhcHBlbmQocmVzdWx0LCAiPCFET0NUWVBFICIpOwotICAgIGFwcGVuZChyZXN1bHQsIG4t
Pm5hbWUoKSk7CisgICAgcmVzdWx0LmFwcGVuZCgiPCFET0NUWVBFICIpOworICAgIHJlc3VsdC5h
cHBlbmQobi0+bmFtZSgpKTsKICAgICBpZiAoIW4tPnB1YmxpY0lkKCkuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGFwcGVuZChyZXN1bHQsICIgUFVCTElDIFwiIik7Ci0gICAgICAgIGFwcGVuZChyZXN1
bHQsIG4tPnB1YmxpY0lkKCkpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCAiXCIiKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiIFBVQkxJQyBcIiIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG4t
PnB1YmxpY0lkKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiIpOwogICAgICAgICBpZiAo
IW4tPnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCAi
IFwiIik7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBuLT5zeXN0ZW1JZCgpKTsKLSAgICAg
ICAgICAgIGFwcGVuZChyZXN1bHQsICJcIiIpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgi
IFwiIik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiXCIiKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoIW4t
PnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsICIgU1lTVEVN
IFwiIik7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIG4tPnN5c3RlbUlkKCkpOwotICAgICAgICBh
cHBlbmQocmVzdWx0LCAiXCIiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiIFNZU1RFTSBcIiIp
OworICAgICAgICByZXN1bHQuYXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAgICByZXN1bHQu
YXBwZW5kKCJcIiIpOwogICAgIH0KICAgICBpZiAoIW4tPmludGVybmFsU3Vic2V0KCkuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsICIgWyIpOwotICAgICAgICBhcHBlbmQocmVz
dWx0LCBuLT5pbnRlcm5hbFN1YnNldCgpKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgIl0iKTsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgiIFsiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChuLT5p
bnRlcm5hbFN1YnNldCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiXSIpOwogICAgIH0KLSAg
ICBhcHBlbmQocmVzdWx0LCAiPiIpOworICAgIHJlc3VsdC5hcHBlbmQoIj4iKTsKIH0KIAotdm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKFZlY3RvcjxV
Q2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3Zv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihTdHJpbmdC
dWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpCiB7
CiAgICAgLy8gRklYTUU6IFBJIGRhdGEgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVy
IChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgdGhpcyBzaG91bGQgcmFpc2UgYW4gZXhjZXB0
aW9uIGlmIGl0IGluY2x1ZGVzICI/PiIuCi0gICAgYXBwZW5kKG91dCwgIjw/Iik7Ci0gICAgYXBw
ZW5kKG91dCwgdGFyZ2V0KTsKLSAgICBhcHBlbmQob3V0LCAiICIpOwotICAgIGFwcGVuZChvdXQs
IGRhdGEpOwotICAgIGFwcGVuZChvdXQsICI/PiIpOworICAgIG91dC5hcHBlbmQoIjw/Iik7Cisg
ICAgb3V0LmFwcGVuZCh0YXJnZXQpOworICAgIG91dC5hcHBlbmQoIiAiKTsKKyAgICBvdXQuYXBw
ZW5kKGRhdGEpOworICAgIG91dC5hcHBlbmQoIj8+Iik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50
LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
RWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMq
IG5hbWVzcGFjZXMpCiB7CiAgICAgYXBwZW5kT3BlblRhZyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFj
ZXMpOwogCkBAIC0zNTksMTUgKzM2MCwxNSBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRFbGVtZW50KFZlCiAgICAgYXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVtZW50KTsKIH0KIAotdm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVs
ZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRPcGVuVGFnKFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVu
dCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBvdXQuYXBwZW5kKCc8Jyk7Ci0gICAg
YXBwZW5kKG91dCwgZWxlbWVudC0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKKyAgICBvdXQu
YXBwZW5kKGVsZW1lbnQtPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CiAgICAgaWYgKCFlbGVt
ZW50LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYmIG5hbWVzcGFjZXMgJiYgc2hvdWxk
QWRkTmFtZXNwYWNlRWxlbWVudChlbGVtZW50KSkKICAgICAgICAgYXBwZW5kTmFtZXNwYWNlKG91
dCwgZWxlbWVudC0+cHJlZml4KCksIGVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpLCAqbmFtZXNwYWNl
cyk7ICAgIAogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhWZWN0
b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRDbG9zZVRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQpCiB7
CiAgICAgaWYgKHNob3VsZFNlbGZDbG9zZShlbGVtZW50KSkgewogICAgICAgICBpZiAoZWxlbWVu
dC0+aXNIVE1MRWxlbWVudCgpKQpAQCAtMzc3LDE2ICszNzgsMTYgQEAgdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kQ2xvc2VUYWcoVgogICAgIG91dC5hcHBlbmQoJz4nKTsKIH0KIAotdm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwg
RWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIE5hbWVzcGFjZXMq
IG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGUoU3Ry
aW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJp
YnV0ZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBib29sIGRvY3VtZW50SXNIVE1M
ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsKIAogICAgIG91dC5hcHBl
bmQoJyAnKTsKIAogICAgIGlmIChkb2N1bWVudElzSFRNTCkKLSAgICAgICAgYXBwZW5kKG91dCwg
YXR0cmlidXRlLm5hbWUoKS5sb2NhbE5hbWUoKSk7CisgICAgICAgIG91dC5hcHBlbmQoYXR0cmli
dXRlLm5hbWUoKS5sb2NhbE5hbWUoKSk7CiAgICAgZWxzZQotICAgICAgICBhcHBlbmQob3V0LCBh
dHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkpOworICAgICAgICBvdXQuYXBwZW5kKGF0dHJpYnV0
ZS5uYW1lKCkudG9TdHJpbmcoKSk7CiAKICAgICBvdXQuYXBwZW5kKCc9Jyk7CiAKQEAgLTQwMiwx
NSArNDAzLDE1IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZSgKICAg
ICAgICAgYXBwZW5kTmFtZXNwYWNlKG91dCwgYXR0cmlidXRlLnByZWZpeCgpLCBhdHRyaWJ1dGUu
bmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2VzKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kQ0RBVEFTZWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBz
ZWN0aW9uKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKFN0cmlu
Z0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKQogewogICAgIC8vIEZJWE1FOiBD
REFUQSBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3Np
Ymx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVk
ZXMgIl1dPiIuCi0gICAgYXBwZW5kKG91dCwgIjwhW0NEQVRBWyIpOwotICAgIGFwcGVuZChvdXQs
IHNlY3Rpb24pOwotICAgIGFwcGVuZChvdXQsICJdXT4iKTsKKyAgICBvdXQuYXBwZW5kKCI8IVtD
REFUQVsiKTsKKyAgICBvdXQuYXBwZW5kKHNlY3Rpb24pOworICAgIG91dC5hcHBlbmQoIl1dPiIp
OwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cChWZWN0b3I8
VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMp
Cit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cChTdHJpbmdCdWlsZGVy
JiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAg
ICAgaWYgKG5hbWVzcGFjZXMpCiAgICAgICAgIG5hbWVzcGFjZXMtPmNoZWNrQ29uc2lzdGVuY3ko
KTsKQEAgLTQ3NiwxNCArNDc3LDE0IEBAIGJvb2wgTWFya3VwQWNjdW11bGF0b3I6OmVsZW1lbnRD
YW5ub3RIYXYKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2Rl
KS0+aWVGb3JiaWRzSW5zZXJ0SFRNTCgpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRFbmRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKiBub2RlKQor
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kTWFya3VwKFN0cmluZ0J1aWxkZXImIHJl
c3VsdCwgY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUo
KSB8fCBzaG91bGRTZWxmQ2xvc2Uobm9kZSkgfHwgKCFub2RlLT5oYXNDaGlsZE5vZGVzKCkgJiYg
ZWxlbWVudENhbm5vdEhhdmVFbmRUYWcobm9kZSkpKQogICAgICAgICByZXR1cm47CiAKICAgICBy
ZXN1bHQuYXBwZW5kKCc8Jyk7CiAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwotICAgIGFwcGVuZChy
ZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKS0+bm9kZU5hbWVQcmVzZXJ2
aW5nQ2FzZSgpKTsKKyAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQq
Pihub2RlKS0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKICAgICByZXN1bHQuYXBwZW5kKCc+
Jyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9y
LmgJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1
bXVsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NywzNCArNzcsMzQgQEAgcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAgIHN0YXRpYyBzaXplX3Qg
dG90YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBzaXplX3QgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gdG90YWxMZW5ndGgobV9zdWNjZWVkaW5nTWFya3VwKTsgfQotICAgIHZv
aWQgY29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KTsKLSAgICB2b2lkIGFwcGVu
ZEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRy
aWJ1dGUsIGJvb2wgZG9jdW1lbnRJc0hUTUwpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0
b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAg
IHZvaWQgYXBwZW5kTm9kZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgTm9kZSosIGNv
bnN0IFJhbmdlKiwgRW50aXR5TWFzayk7CisgICAgdm9pZCBjb25jYXRlbmF0ZU1hcmt1cChTdHJp
bmdCdWlsZGVyJiBvdXQpOworICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVp
bGRlciYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBkb2N1bWVudElzSFRN
TCk7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoU3RyaW5nQnVpbGRl
ciYsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAgdm9pZCBhcHBlbmROb2RlVmFsdWUoU3Ry
aW5nQnVpbGRlciYgb3V0LCBjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqLCBFbnRpdHlNYXNrKTsK
ICAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoY29uc3QgRWxlbWVudCopOwogICAg
IGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVz
cGFjZXMmKTsKLSAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShWZWN0b3I8VUNoYXI+JiByZXN1bHQs
IGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFj
ZVVSSSwgTmFtZXNwYWNlcyYpOworICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFN0cmluZ0J1aWxk
ZXImIHJlc3VsdCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZXNwYWNlVVJJLCBOYW1lc3BhY2VzJik7CiAgICAgRW50aXR5TWFzayBlbnRpdHlNYXNr
Rm9yVGV4dChUZXh0KikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoVmVjdG9y
PFVDaGFyPiYgb3V0LCBUZXh0Kik7Ci0gICAgdm9pZCBhcHBlbmRDb21tZW50KFZlY3RvcjxVQ2hh
cj4mIG91dCwgY29uc3QgU3RyaW5nJiBjb21tZW50KTsKLSAgICB2b2lkIGFwcGVuZERvY3VtZW50
VHlwZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSopOwotICAgIHZv
aWQgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSk7Ci0gICAgdmlydHVhbCB2b2lkIGFw
cGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwot
ICAgIHZvaWQgYXBwZW5kT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1l
c3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRDbG9zZVRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVs
ZW1lbnQqKTsKLSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShWZWN0b3I8VUNoYXI+JiBvdXQsIEVs
ZW1lbnQqLCBjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRD
REFUQVNlY3Rpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIHNlY3Rpb24pOwot
ICAgIHZvaWQgYXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBO
b2RlKiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFN0cmluZ0J1
aWxkZXImIG91dCwgVGV4dCopOworICAgIHZvaWQgYXBwZW5kQ29tbWVudChTdHJpbmdCdWlsZGVy
JiBvdXQsIGNvbnN0IFN0cmluZyYgY29tbWVudCk7CisgICAgdm9pZCBhcHBlbmREb2N1bWVudFR5
cGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBEb2N1bWVudFR5cGUqKTsKKyAgICB2b2lk
IGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpOworICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKKyAg
ICB2b2lkIGFwcGVuZE9wZW5UYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgTmFtZXNw
YWNlcyopOworICAgIHZvaWQgYXBwZW5kQ2xvc2VUYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVt
ZW50Kik7CisgICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVt
ZW50KiwgY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBwZW5kQ0RB
VEFTZWN0aW9uKFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKTsKKyAg
ICB2b2lkIGFwcGVuZFN0YXJ0TWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9k
ZSosIE5hbWVzcGFjZXMqKTsKICAgICBib29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlKik7
CiAgICAgYm9vbCBlbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhjb25zdCBOb2RlKiBub2RlKTsKLSAg
ICB2b2lkIGFwcGVuZEVuZE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUq
KTsKKyAgICB2b2lkIGFwcGVuZEVuZE1hcmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0
IE5vZGUqKTsKIAogICAgIFZlY3RvcjxOb2RlKj4qIGNvbnN0IG1fbm9kZXM7CiAgICAgY29uc3Qg
UmFuZ2UqIGNvbnN0IG1fcmFuZ2U7CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIHJlc29sdmVVUkxJ
Zk5lZWRlZChjb25zdCBFbGVtZW50KiwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0Owot
ICAgIHZvaWQgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVz
dWx0LCBjb25zdCBFbGVtZW50KiwgY29uc3QgQXR0cmlidXRlJik7CisgICAgdm9pZCBhcHBlbmRR
dW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1l
bnQqLCBjb25zdCBBdHRyaWJ1dGUmKTsKICAgICB2b2lkIHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVz
cGFjZXMoTm9kZSosIE5vZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHksIGNvbnN0IE5hbWVz
cGFjZXMqKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG1fc3VjY2VlZGluZ01hcmt1cDsKQEAgLTEx
Miw3ICsxMTIsNyBAQCBwcml2YXRlOgogfTsKIAogLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3Vs
ZCBiZSBpbnRlZ3JhdGVkIHdpdGggTWFya3VwQWNjdW11bGF0b3IuCi12b2lkIGFwcGVuZENoYXJh
Y3RlcnNSZXBsYWNpbmdFbnRpdGllcyhWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFVDaGFyKiBj
b250ZW50LCBzaXplX3QgbGVuZ3RoLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spOwordm9pZCBhcHBl
bmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBV
Q2hhciogY29udGVudCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5TWFzayk7CiAKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAK
ICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CkBAIC0xMjgsMTMgKzEyOSwxMyBAQCBwdWJsaWM6CiAgICAgU3RyaW5n
IHRha2VSZXN1bHRzKCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBhcHBlbmRTdHlsZU5vZGVPcGVu
VGFnKFZlY3RvcjxVQ2hhcj4mLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgRG9jdW1lbnQqLCBib29s
IGlzQmxvY2sgPSBmYWxzZSk7CisgICAgdm9pZCBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKFN0cmlu
Z0J1aWxkZXImLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgRG9jdW1lbnQqLCBib29sIGlzQmxvY2sg
PSBmYWxzZSk7CiAgICAgY29uc3QgU3RyaW5nIHN0eWxlTm9kZUNsb3NlVGFnKGJvb2wgaXNCbG9j
ayA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBv
dXQsIFRleHQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBv
dXQsIFRleHQqKTsKICAgICBTdHJpbmcgcmVuZGVyZWRUZXh0KGNvbnN0IE5vZGUqLCBjb25zdCBS
YW5nZSopOwogICAgIFN0cmluZyBzdHJpbmdWYWx1ZUZvclJhbmdlKGNvbnN0IE5vZGUqLCBjb25z
dCBSYW5nZSopOwotICAgIHZvaWQgYXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVs
ZW1lbnQqIGVsZW1lbnQsIGJvb2wgYWRkRGlzcGxheUlubGluZSwgUmFuZ2VGdWxseVNlbGVjdHNO
b2RlKTsKLSAgICB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50
KiBlbGVtZW50LCBOYW1lc3BhY2VzKikgeyBhcHBlbmRFbGVtZW50KG91dCwgZWxlbWVudCwgZmFs
c2UsIERvZXNGdWxseVNlbGVjdE5vZGUpOyB9CisgICAgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmlu
Z0J1aWxkZXImIG91dCwgRWxlbWVudCosIGJvb2wgYWRkRGlzcGxheUlubGluZSwgUmFuZ2VGdWxs
eVNlbGVjdHNOb2RlKTsKKyAgICB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0
LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKikgeyBhcHBlbmRFbGVtZW50KG91dCwgZWxl
bWVudCwgZmFsc2UsIERvZXNGdWxseVNlbGVjdE5vZGUpOyB9CiAKICAgICBlbnVtIE5vZGVUcmF2
ZXJzYWxNb2RlIHsgRW1pdFN0cmluZywgRG9Ob3RFbWl0U3RyaW5nIH07CiAgICAgTm9kZSogdHJh
dmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24oTm9kZSogc3RhcnROb2RlLCBOb2RlKiBwYXN0RW5k
LCBOb2RlVHJhdmVyc2FsTW9kZSk7CkBAIC0xNjIsMTIgKzE2MywxMiBAQCBpbmxpbmUgU3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OlN0eWxlZE1hCiAKIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0
b3I6OndyYXBXaXRoTm9kZShOb2RlKiBub2RlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMs
IFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCiB7Ci0gICAgVmVj
dG9yPFVDaGFyPiBtYXJrdXA7CisgICAgU3RyaW5nQnVpbGRlciBtYXJrdXA7CiAgICAgaWYgKG5v
ZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgYXBwZW5kRWxlbWVudChtYXJrdXAsIHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKSwgY29udmVydEJsb2Nrc1RvSW5saW5lcyAmJiBpc0Jsb2Nr
KGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpKSwgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsKICAgICBl
bHNlCiAgICAgICAgIGFwcGVuZFN0YXJ0TWFya3VwKG1hcmt1cCwgbm9kZSwgMCk7Ci0gICAgbV9y
ZXZlcnNlZFByZWNlZGluZ01hcmt1cC5hcHBlbmQoU3RyaW5nOjphZG9wdChtYXJrdXApKTsKKyAg
ICBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwLmFwcGVuZChtYXJrdXAudG9TdHJpbmcoKSk7CiAg
ICAgYXBwZW5kRW5kVGFnKG5vZGUpOwogICAgIGlmIChtX25vZGVzKQogICAgICAgICBtX25vZGVz
LT5hcHBlbmQobm9kZSk7CkBAIC0xNzUsMjAgKzE3NiwyMCBAQCB2b2lkIFN0eWxlZE1hcmt1cEFj
Y3VtdWxhdG9yOjp3cmFwV2l0aE5vCiAKIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6Ondy
YXBXaXRoU3R5bGVOb2RlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBEb2N1bWVudCogZG9j
dW1lbnQsIGJvb2wgaXNCbG9jaykKIHsKLSAgICBWZWN0b3I8VUNoYXI+IG9wZW5UYWc7CisgICAg
U3RyaW5nQnVpbGRlciBvcGVuVGFnOwogICAgIGFwcGVuZFN0eWxlTm9kZU9wZW5UYWcob3BlblRh
Zywgc3R5bGUsIGRvY3VtZW50LCBpc0Jsb2NrKTsKLSAgICBtX3JldmVyc2VkUHJlY2VkaW5nTWFy
a3VwLmFwcGVuZChTdHJpbmc6OmFkb3B0KG9wZW5UYWcpKTsKKyAgICBtX3JldmVyc2VkUHJlY2Vk
aW5nTWFya3VwLmFwcGVuZChvcGVuVGFnLnRvU3RyaW5nKCkpOwogICAgIGFwcGVuZFN0cmluZyhz
dHlsZU5vZGVDbG9zZVRhZyhpc0Jsb2NrKSk7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGlzQmxvY2spCit2
b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHlsZU5vZGVPcGVuVGFnKFN0cmlu
Z0J1aWxkZXImIG91dCwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIERvY3VtZW50KiBkb2N1
bWVudCwgYm9vbCBpc0Jsb2NrKQogewogICAgIC8vIEFsbCB0ZXh0LWRlY29yYXRpb24tcmVsYXRl
ZCBlbGVtZW50cyBzaG91bGQgaGF2ZSBiZWVuIHRyZWF0ZWQgYXMgc3BlY2lhbCBhbmNlc3RvcnMK
ICAgICAvLyBJZiB3ZSBldmVyIGhpdCB0aGlzIEFTU0VSVCwgd2Ugc2hvdWxkIGV4cG9ydCBTdHls
ZUNoYW5nZSBpbiBBcHBseVN0eWxlQ29tbWFuZCBhbmQgdXNlIGl0IGhlcmUKICAgICBBU1NFUlQo
cHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShzdHlsZSwgQ1NTUHJvcGVydHlUZXh0RGVjb3Jh
dGlvbikgJiYgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShzdHlsZSwgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgU3RyaW5nLCBkaXZTdHlsZSwgKCI8ZGl2IHN0eWxlPVwiIikpOwogICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBzdHlsZVNwYW5PcGVuLCAoIjxzcGFuIHN0eWxlPVwi
IikpOwotICAgIGFwcGVuZChvdXQsIGlzQmxvY2sgPyBkaXZTdHlsZSA6IHN0eWxlU3Bhbk9wZW4p
OworICAgIG91dC5hcHBlbmQoaXNCbG9jayA/IGRpdlN0eWxlIDogc3R5bGVTcGFuT3Blbik7CiAg
ICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBzdHlsZS0+Y3NzVGV4dCgpLCBkb2N1bWVudC0+
aXNIVE1MRG9jdW1lbnQoKSk7CiAgICAgb3V0LmFwcGVuZCgnXCInKTsKICAgICBvdXQuYXBwZW5k
KCc+Jyk7CkBAIC0yMDMsMTkgKzIwNCwxOSBAQCBjb25zdCBTdHJpbmcgU3R5bGVkTWFya3VwQWNj
dW11bGF0b3I6OnN0CiAKIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dGFrZVJlc3Vs
dHMoKQogewotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHRvdGFsTGVuZ3RoKG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXApICsgbGVu
Z3RoKCkpOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2Fw
YWNpdHkodG90YWxMZW5ndGgobV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cCkgKyBsZW5ndGgoKSk7
CiAKICAgICBmb3IgKHNpemVfdCBpID0gbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cC5zaXplKCk7
IGkgPiAwOyAtLWkpCi0gICAgICAgIGFwcGVuZChyZXN1bHQsIG1fcmV2ZXJzZWRQcmVjZWRpbmdN
YXJrdXBbaSAtIDFdKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtX3JldmVyc2VkUHJlY2VkaW5n
TWFya3VwW2kgLSAxXSk7CiAKICAgICBjb25jYXRlbmF0ZU1hcmt1cChyZXN1bHQpOwogCiAgICAg
Ly8gV2UgcmVtb3ZlICdcMCcgY2hhcmFjdGVycyBiZWNhdXNlIHRoZXkgYXJlIG5vdCB2aXNpYmx5
IHJlbmRlcmVkIHRvIHRoZSB1c2VyLgotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCku
cmVwbGFjZSgwLCAiIik7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpLnJlcGxhY2UoMCwg
IiIpOwogfQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFZlY3Rv
cjxVQ2hhcj4mIG91dCwgVGV4dCogdGV4dCkKK3ZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0KiB0ZXh0KQogeyAgICAKICAgICBj
b25zdCBib29sIHBhcmVudElzVGV4dGFyZWEgPSB0ZXh0LT5wYXJlbnRFbGVtZW50KCkgJiYgdGV4
dC0+cGFyZW50RWxlbWVudCgpLT50YWdRTmFtZSgpID09IHRleHRhcmVhVGFnOwogICAgIGNvbnN0
IGJvb2wgd3JhcHBpbmdTcGFuID0gc2hvdWxkQXBwbHlXcmFwcGluZ1N0eWxlKHRleHQpICYmICFw
YXJlbnRJc1RleHRhcmVhOwpAQCAtMjI3LDkgKzIyOCw5IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZFRleHQKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIGlu
Y2x1ZGVkIGluIGZvcmNlSW5saW5lPwogICAgICAgICB3cmFwcGluZ1N0eWxlLT5zdHlsZSgpLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsb2F0LCBDU1NWYWx1ZU5vbmUpOwogCi0gICAgICAgIFZl
Y3RvcjxVQ2hhcj4gb3BlblRhZzsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBvcGVuVGFnOwogICAg
ICAgICBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKG9wZW5UYWcsIHdyYXBwaW5nU3R5bGUtPnN0eWxl
KCksIHRleHQtPmRvY3VtZW50KCkpOwotICAgICAgICBhcHBlbmQob3V0LCBTdHJpbmc6OmFkb3B0
KG9wZW5UYWcpKTsKKyAgICAgICAgb3V0LmFwcGVuZChvcGVuVGFnLmNoYXJhY3RlcnMoKSwgb3Bl
blRhZy5sZW5ndGgoKSk7CiAgICAgfQogCiAgICAgaWYgKCFzaG91bGRBbm5vdGF0ZSgpIHx8IHBh
cmVudElzVGV4dGFyZWEpCkBAIC0yMzcsMTMgKzIzOCwxMyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRUZXh0CiAgICAgZWxzZSB7CiAgICAgICAgIGNvbnN0IGJvb2wgdXNl
UmVuZGVyZWRUZXh0ID0gIWVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUo
dGV4dCksIHNlbGVjdFRhZyk7CiAgICAgICAgIFN0cmluZyBjb250ZW50ID0gdXNlUmVuZGVyZWRU
ZXh0ID8gcmVuZGVyZWRUZXh0KHRleHQsIG1fcmFuZ2UpIDogc3RyaW5nVmFsdWVGb3JSYW5nZSh0
ZXh0LCBtX3JhbmdlKTsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7CisgICAgICAgIFN0
cmluZ0J1aWxkZXIgYnVmZmVyOwogICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50
aXRpZXMoYnVmZmVyLCBjb250ZW50LmNoYXJhY3RlcnMoKSwgY29udGVudC5sZW5ndGgoKSwgRW50
aXR5TWFza0luUENEQVRBKTsKLSAgICAgICAgYXBwZW5kKG91dCwgY29udmVydEhUTUxUZXh0VG9J
bnRlcmNoYW5nZUZvcm1hdChTdHJpbmc6OmFkb3B0KGJ1ZmZlciksIHRleHQpKTsKKyAgICAgICAg
b3V0LmFwcGVuZChjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0KGJ1ZmZlci50b1N0
cmluZygpLCB0ZXh0KSk7CiAgICAgfQogCiAgICAgaWYgKHdyYXBwaW5nU3BhbikKLSAgICAgICAg
YXBwZW5kKG91dCwgc3R5bGVOb2RlQ2xvc2VUYWcoKSk7CisgICAgICAgIG91dC5hcHBlbmQoc3R5
bGVOb2RlQ2xvc2VUYWcoKSk7CiB9CiAgICAgCiBTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0
b3I6OnJlbmRlcmVkVGV4dChjb25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UpCkBA
IC0yODAsNyArMjgxLDcgQEAgU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzdHJpbmdW
YQogICAgIHJldHVybiBzdHI7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBib29sIGFk
ZERpc3BsYXlJbmxpbmUsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05v
ZGUpCit2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0cmluZ0J1
aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5n
ZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQogewogICAgIGNvbnN0IGJv
b2wgZG9jdW1lbnRJc0hUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgp
OwogICAgIGFwcGVuZE9wZW5UYWcob3V0LCBlbGVtZW50LCAwKTsKQEAgLTMyNSw3ICszMjYsNyBA
QCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtCiAKICAgICAgICAgaWYg
KCFuZXdJbmxpbmVTdHlsZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5bGVQcmVmaXgsICgiIHN0eWxlPVwiIikpOwotICAgICAg
ICAgICAgYXBwZW5kKG91dCwgc3R5bGVQcmVmaXgpOworICAgICAgICAgICAgb3V0LmFwcGVuZChz
dHlsZVByZWZpeCk7CiAgICAgICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIG5ld0lu
bGluZVN0eWxlLT5zdHlsZSgpLT5jc3NUZXh0KCksIGRvY3VtZW50SXNIVE1MKTsKICAgICAgICAg
ICAgIG91dC5hcHBlbmQoJ1wiJyk7CiAgICAgICAgIH0KQEAgLTkxNSwxMyArOTE2LDEzIEBAIFN0
cmluZyBjcmVhdGVGdWxsTWFya3VwKGNvbnN0IFJhbmdlKiByYW4KIAogU3RyaW5nIHVybFRvTWFy
a3VwKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKLSAgICBWZWN0b3I8
VUNoYXI+IG1hcmt1cDsKLSAgICBhcHBlbmQobWFya3VwLCAiPGEgaHJlZj1cIiIpOwotICAgIGFw
cGVuZChtYXJrdXAsIHVybC5zdHJpbmcoKSk7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIlwiPiIpOwor
ICAgIFN0cmluZ0J1aWxkZXIgbWFya3VwOworICAgIG1hcmt1cC5hcHBlbmQoIjxhIGhyZWY9XCIi
KTsKKyAgICBtYXJrdXAuYXBwZW5kKHVybC5zdHJpbmcoKSk7CisgICAgbWFya3VwLmFwcGVuZCgi
XCI+Iik7CiAgICAgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKG1hcmt1cCwgdGl0
bGUuY2hhcmFjdGVycygpLCB0aXRsZS5sZW5ndGgoKSwgRW50aXR5TWFza0luUENEQVRBKTsKLSAg
ICBhcHBlbmQobWFya3VwLCAiPC9hPiIpOwotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KG1hcmt1
cCk7CisgICAgbWFya3VwLmFwcGVuZCgiPC9hPiIpOworICAgIHJldHVybiBtYXJrdXAudG9TdHJp
bmcoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5MaXN0LmNwcAkocmV2
aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRva2VuTGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgU3RyaW5nIERPTVRva2VuTGlzdDo6cmVtb3Zl
VG9rZW4oY29uc3QgQQogICAgIC8vIEFsZ29yaXRobSBkZWZpbmVkIGF0IGh0dHA6Ly93d3cud2hh
dHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1vbi1taWNy
b3N5bnRheGVzLmh0bWwjcmVtb3ZlLWEtdG9rZW4tZnJvbS1hLXN0cmluZwogCiAgICAgdW5zaWdu
ZWQgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKLSAgICBWZWN0b3I8VUNoYXI+IG91dHB1
dDsgLy8gMworICAgIFN0cmluZ0J1aWxkZXIgb3V0cHV0OyAvLyAzCiAgICAgb3V0cHV0LnJlc2Vy
dmVDYXBhY2l0eShpbnB1dExlbmd0aCk7CiAgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOyAvLyA0
CiAKQEAgLTc4LDE4ICs3OCwxOCBAQCBTdHJpbmcgRE9NVG9rZW5MaXN0OjpyZW1vdmVUb2tlbihj
b25zdCBBCiAgICAgICAgIH0KIAogICAgICAgICAvLyBTdGVwIDcKLSAgICAgICAgVmVjdG9yPFVD
aGFyPiBzOworICAgICAgICBTdHJpbmdCdWlsZGVyIHM7CiAgICAgICAgIHdoaWxlIChwb3NpdGlv
biA8IGlucHV0TGVuZ3RoICYmIGlzTm90SFRNTFNwYWNlKGlucHV0W3Bvc2l0aW9uXSkpCiAgICAg
ICAgICAgICBzLmFwcGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CiAKICAgICAgICAgLy8gU3RlcCA4
Ci0gICAgICAgIGlmIChzID09IHRva2VuKSB7CisgICAgICAgIGlmIChzLnRvU3RyaW5nUHJlc2Vy
dmVDYXBhY2l0eSgpID09IHRva2VuKSB7CiAgICAgICAgICAgICAvLyBTdGVwIDguMQogICAgICAg
ICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXRMZW5ndGggJiYgaXNIVE1MU3BhY2UoaW5wdXRb
cG9zaXRpb25dKSkKICAgICAgICAgICAgICAgICArK3Bvc2l0aW9uOwogCiAgICAgICAgICAgICAv
LyBTdGVwIDguMgotICAgICAgICAgICAgc2l6ZV90IGogPSBvdXRwdXQuc2l6ZSgpOworICAgICAg
ICAgICAgc2l6ZV90IGogPSBvdXRwdXQubGVuZ3RoKCk7CiAgICAgICAgICAgICB3aGlsZSAoaiA+
IDAgJiYgaXNIVE1MU3BhY2Uob3V0cHV0W2ogLSAxXSkpCiAgICAgICAgICAgICAgICAgLS1qOwog
ICAgICAgICAgICAgb3V0cHV0LnJlc2l6ZShqKTsKQEAgLTk4LDExICs5OCwxMCBAQCBTdHJpbmcg
RE9NVG9rZW5MaXN0OjpyZW1vdmVUb2tlbihjb25zdCBBCiAgICAgICAgICAgICBpZiAocG9zaXRp
b24gPCBpbnB1dExlbmd0aCAmJiAhb3V0cHV0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBv
dXRwdXQuYXBwZW5kKCcgJyk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb3V0cHV0LmFw
cGVuZChzKTsgLy8gU3RlcCA5CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHMudG9TdHJpbmdQ
cmVzZXJ2ZUNhcGFjaXR5KCkpOyAvLyBTdGVwIDkKICAgICB9CiAKLSAgICBvdXRwdXQuc2hyaW5r
VG9GaXQoKTsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChvdXRwdXQpOworICAgIHJldHVybiBv
dXRwdXQudG9TdHJpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIApAQCAtODks
NyArOTAsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZUZvbnRTaXplKGNvbnN0IFN0cmluZyYgCiAgICAg
fQogCiAgICAgLy8gU3RlcCA2Ci0gICAgVmVjdG9yPFVDaGFyLCAxNj4gZGlnaXRzOworICAgIFN0
cmluZ0J1aWxkZXIgZGlnaXRzOworICAgIGRpZ2l0cy5yZXNlcnZlQ2FwYWNpdHkoMTYpOwogICAg
IHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewogICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqcG9z
aXRpb24pKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDEsNyArMTAzLDcgQEAgc3RhdGljIGJv
b2wgcGFyc2VGb250U2l6ZShjb25zdCBTdHJpbmcmIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAvLyBTdGVwIDgKLSAgICBpbnQgdmFsdWUgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoZGln
aXRzLmRhdGEoKSwgZGlnaXRzLnNpemUoKSk7CisgICAgaW50IHZhbHVlID0gY2hhcmFjdGVyc1Rv
SW50U3RyaWN0KGRpZ2l0cy5jaGFyYWN0ZXJzKCksIGRpZ2l0cy5sZW5ndGgoKSk7CiAKICAgICAv
LyBTdGVwIDkKICAgICBpZiAobW9kZSA9PSBSZWxhdGl2ZVBsdXMpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNp
b24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIlJlbmRl
clRoZW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlRl
eHRJdGVyYXRvci5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTEwLDcgKzEx
MCw3IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c3RyaXAKICAgICBpZiAo
IWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKG5ld2xpbmVDaGFyYWN0ZXIpICYmICFhdHRyaWJ1dGVW
YWx1ZS5jb250YWlucyhjYXJyaWFnZVJldHVybikpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVW
YWx1ZTsKIAotICAgIFZlY3RvcjxVQ2hhcj4gc3RyaXBwZWQ7CisgICAgU3RyaW5nQnVpbGRlciBz
dHJpcHBlZDsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVWYWx1ZS5sZW5ndGgoKTsK
ICAgICBzdHJpcHBlZC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKQEAgLTExOSw3ICsxMTksNyBAQCBTdHJpbmcgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN0cmlwCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgc3RyaXBwZWQuYXBwZW5kKGNoYXJhY3Rlcik7CiAgICAgfQotICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KHN0cmlwcGVkKTsKKyAgICByZXR1cm4gc3RyaXBwZWQudG9TdHJpbmcoKTsKIH0K
IAogc3RhdGljIGJvb2wgaXNOb3RMaW5lQnJlYWsoVUNoYXIgY2gpIHsgcmV0dXJuIGNoICE9IG5l
d2xpbmVDaGFyYWN0ZXIgJiYgY2ggIT0gY2FycmlhZ2VSZXR1cm47IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAJKHJldmlzaW9u
IDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsMTQgKzE5MiwxNCBAQCBzdGF0aWMgU3RyaW5nIHBh
cnNlQ1NTU3RyaW5nT3JVUkwoY29uc3QgCiAKIHZvaWQgQ1NTUHJlbG9hZFNjYW5uZXI6OmVtaXRS
dWxlKCkKIHsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoImltcG9ydCIsIG1fcnVsZS5kYXRh
KCksIG1fcnVsZS5zaXplKCkpKSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlQ1NTU3Ry
aW5nT3JVUkwobV9ydWxlVmFsdWUuZGF0YSgpLCBtX3J1bGVWYWx1ZS5zaXplKCkpOworICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZSgiaW1wb3J0IiwgbV9ydWxlLmNoYXJhY3RlcnMoKSwgbV9ydWxl
Lmxlbmd0aCgpKSkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPSBwYXJzZUNTU1N0cmluZ09yVVJM
KG1fcnVsZVZhbHVlLmNoYXJhY3RlcnMoKSwgbV9ydWxlVmFsdWUubGVuZ3RoKCkpOwogICAgICAg
ICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3QobV9kb2N1bWVudC0+Y29tcGxldGVVUkwodmFsdWUpKTsKICAgICAgICAgICAgIG1fZG9j
dW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OkNT
U1N0eWxlU2hlZXQsIHJlcXVlc3QsIFN0cmluZygpLCBtX3NjYW5uaW5nQm9keSk7CiAgICAgICAg
IH0KICAgICAgICAgbV9zdGF0ZSA9IEluaXRpYWw7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQ2FzZSgiY2hhcnNldCIsIG1fcnVsZS5kYXRhKCksIG1fcnVsZS5zaXplKCkpKQorICAgIH0g
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoImNoYXJzZXQiLCBtX3J1bGUuY2hhcmFjdGVycygp
LCBtX3J1bGUubGVuZ3RoKCkpKQogICAgICAgICBtX3N0YXRlID0gSW5pdGlhbDsKICAgICBlbHNl
CiAgICAgICAgIG1fc3RhdGUgPSBEb25lUGFyc2luZ0ltcG9ydFJ1bGVzOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oCShyZXZpc2lvbiA5
Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNkZWZpbmUgQ1NTUHJlbG9hZFNjYW5u
ZXJfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTYxLDggKzYxLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGVtaXRSdWxlKCk7
CiAKICAgICBTdGF0ZSBtX3N0YXRlOwotICAgIFZlY3RvcjxVQ2hhciwgMTY+IG1fcnVsZTsKLSAg
ICBWZWN0b3I8VUNoYXI+IG1fcnVsZVZhbHVlOworICAgIFN0cmluZ0J1aWxkZXIgbV9ydWxlOwor
ICAgIFN0cmluZ0J1aWxkZXIgbV9ydWxlVmFsdWU7CiAKICAgICBib29sIG1fc2Nhbm5pbmdCb2R5
OwogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJ
bmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSFRNTEVudGl0eVNlYXJjaC5oIgogI2luY2x1ZGUg
IkhUTUxFbnRpdHlUYWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTcw
LDcgKzcwLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAg
aW5saW5lIHN0YXRpYyBib29sIGNvbnZlcnRUb1VURjE2KFVDaGFyMzIgdmFsdWUsIFZlY3RvcjxV
Q2hhciwgMTY+JiBkZWNvZGVkRW50aXR5KQorICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb252ZXJ0
VG9VVEYxNihVQ2hhcjMyIHZhbHVlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkRW50aXR5KQogICAg
IHsKICAgICAgICAgaWYgKFVfSVNfQk1QKHZhbHVlKSkgewogICAgICAgICAgICAgVUNoYXIgY2hh
cmFjdGVyID0gc3RhdGljX2Nhc3Q8VUNoYXI+KHZhbHVlKTsKQEAgLTg1LDkgKzg1LDkgQEAgcHVi
bGljOgogCiAgICAgaW5saW5lIHN0YXRpYyBib29sIGFjY2VwdE1hbGZvcm1lZCgpIHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb25zdW1lTmFtZWRFbnRpdHkoU2Vn
bWVudGVkU3RyaW5nJiBzb3VyY2UsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkRW50aXR5LCBi
b29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rl
ciwgVUNoYXImIGNjKQorICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb25zdW1lTmFtZWRFbnRpdHko
U2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRFbnRpdHksIGJv
b2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVy
LCBVQ2hhciYgY2MpCiAgICAgewotICAgICAgICBWZWN0b3I8VUNoYXIsIDEwPiBjb25zdW1lZENo
YXJhY3RlcnM7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgY29uc3VtZWRDaGFyYWN0ZXJzOwogICAg
ICAgICBIVE1MRW50aXR5U2VhcmNoIGVudGl0eVNlYXJjaDsKICAgICAgICAgd2hpbGUgKCFzb3Vy
Y2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjYyA9ICpzb3VyY2U7CkBAIC0xMzksNyArMTM5
LDcgQEAgcHVibGljOgogfQogCiAKLWJvb2wgY29uc3VtZUhUTUxFbnRpdHkoU2VnbWVudGVkU3Ry
aW5nJiBzb3VyY2UsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkRW50aXR5LCBib29sJiBub3RF
bm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKK2Jvb2wg
Y29uc3VtZUhUTUxFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXIm
IGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9u
YWxBbGxvd2VkQ2hhcmFjdGVyKQogewogICAgIHJldHVybiBjb25zdW1lQ2hhcmFjdGVyUmVmZXJl
bmNlPEhUTUxFbnRpdHlQYXJzZXI+KHNvdXJjZSwgZGVjb2RlZEVudGl0eSwgbm90RW5vdWdoQ2hh
cmFjdGVycywgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuaAkocmV2aXNpb24gOTM5NTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29s
IGNvbnN1bWVIVE1MRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIFZlY3RvcjxVQ2hhciwgMTY+JiBk
ZWNvZGVkRW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFs
QWxsb3dlZENoYXJhY3RlciA9ICdcMCcpOworYm9vbCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50
ZWRTdHJpbmcmLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkRW50aXR5LCBib29sJiBub3RFbm91Z2hD
aGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9ICdcMCcpOwogCiAv
LyBVc2VkIGJ5IHRoZSBYTUwgcGFyc2VyLiAgTm90IHN1aXRhYmxlIGZvciB1c2UgaW4gSFRNTCBw
YXJzaW5nLiAgVXNlIGNvbnN1bWVIVE1MRW50aXR5IGluc3RlYWQuCiBVQ2hhciBkZWNvZGVOYW1l
ZEVudGl0eShjb25zdCBjaGFyKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUGFyc2VySWRpb21zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjA4LDcgKzIwOCw3IEBAIGJvb2wgcGFyc2VIVE1MSW50ZWdlcihjb25zdCBTdHJpbmcmIGlucHUK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gU3RlcCA4Ci0gICAgVmVjdG9yPFVDaGFy
LCAxNj4gZGlnaXRzOworICAgIFN0cmluZ0J1aWxkZXIgZGlnaXRzOwogICAgIHdoaWxlIChwb3Np
dGlvbiA8IGVuZCkgewogICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqcG9zaXRpb24pKQogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0yMTYsNyArMjE2LDcgQEAgYm9vbCBwYXJzZUhUTUxJbnRlZ2Vy
KGNvbnN0IFN0cmluZyYgaW5wdQogICAgIH0KIAogICAgIC8vIFN0ZXAgOQotICAgIHZhbHVlID0g
c2lnbiAqIGNoYXJhY3RlcnNUb0ludFN0cmljdChkaWdpdHMuZGF0YSgpLCBkaWdpdHMuc2l6ZSgp
KTsKKyAgICB2YWx1ZSA9IHNpZ24gKiBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoZGlnaXRzLmNoYXJh
Y3RlcnMoKSwgZGlnaXRzLmxlbmd0aCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjU0
LDcgKzI1NCw3IEBAIGJvb2wgcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0IFMKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gU3RlcCA4Ci0gICAgVmVjdG9yPFVDaGFyLCAx
Nj4gZGlnaXRzOworICAgIFN0cmluZ0J1aWxkZXIgZGlnaXRzOwogICAgIHdoaWxlIChwb3NpdGlv
biA8IGVuZCkgewogICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqcG9zaXRpb24pKQogICAgICAg
ICAgICAgYnJlYWs7CkBAIC0yNjIsNyArMjYyLDcgQEAgYm9vbCBwYXJzZUhUTUxOb25OZWdhdGl2
ZUludGVnZXIoY29uc3QgUwogICAgIH0KIAogICAgIC8vIFN0ZXAgOQotICAgIHZhbHVlID0gY2hh
cmFjdGVyc1RvVUludFN0cmljdChkaWdpdHMuZGF0YSgpLCBkaWdpdHMuc2l6ZSgpKTsKKyAgICB2
YWx1ZSA9IGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QoZGlnaXRzLmNoYXJhY3RlcnMoKSwgZGlnaXRz
Lmxlbmd0aCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnJlc2V0KCkKIGlubGluZSBi
b29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2Up
CiB7CiAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAgVmVjdG9yPFVD
aGFyLCAxNj4gZGVjb2RlZEVudGl0eTsKKyAgICBTdHJpbmdCdWlsZGVyIGRlY29kZWRFbnRpdHk7
CiAgICAgYm9vbCBzdWNjZXNzID0gY29uc3VtZUhUTUxFbnRpdHkoc291cmNlLCBkZWNvZGVkRW50
aXR5LCBub3RFbm91Z2hDaGFyYWN0ZXJzKTsKICAgICBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTUzLDkgKzE1Myw4IEBAIGlubGluZSBib29sIEhU
TUxUb2tlbml6ZXI6OnByb2Nlc3NFbnRpdHkKICAgICAgICAgQVNTRVJUKGRlY29kZWRFbnRpdHku
aXNFbXB0eSgpKTsKICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCcmJyk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgVmVjdG9yPFVDaGFyPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlY29kZWRFbnRp
dHkuYmVnaW4oKTsKLSAgICAgICAgZm9yICg7IGl0ZXIgIT0gZGVjb2RlZEVudGl0eS5lbmQoKTsg
KytpdGVyKQotICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCppdGVyKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlY29kZWRFbnRpdHkubGVuZ3RoKCk7ICsraSkKKyAgICAg
ICAgICAgIGJ1ZmZlckNoYXJhY3RlcihkZWNvZGVkRW50aXR5W2ldKTsKICAgICB9CiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC05ODcsNyArOTg2LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpuZXh0
VG9rZW4oU2VnbWVudGVkUwogCiAgICAgSFRNTF9CRUdJTl9TVEFURShDaGFyYWN0ZXJSZWZlcmVu
Y2VJbkF0dHJpYnV0ZVZhbHVlU3RhdGUpIHsKICAgICAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0
ZXJzID0gZmFsc2U7Ci0gICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+IGRlY29kZWRFbnRpdHk7Cisg
ICAgICAgIFN0cmluZ0J1aWxkZXIgZGVjb2RlZEVudGl0eTsKICAgICAgICAgYm9vbCBzdWNjZXNz
ID0gY29uc3VtZUhUTUxFbnRpdHkoc291cmNlLCBkZWNvZGVkRW50aXR5LCBub3RFbm91Z2hDaGFy
YWN0ZXJzLCBtX2FkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKTsKICAgICAgICAgaWYgKG5vdEVu
b3VnaENoYXJhY3RlcnMpCiAgICAgICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVy
VG9rZW4oKTsKQEAgLTk5NSw5ICs5OTQsOCBAQCBib29sIEhUTUxUb2tlbml6ZXI6Om5leHRUb2tl
bihTZWdtZW50ZWRTCiAgICAgICAgICAgICBBU1NFUlQoZGVjb2RlZEVudGl0eS5pc0VtcHR5KCkp
OwogICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZSgnJicpOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgVmVjdG9yPFVDaGFyPjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGRlY29kZWRFbnRpdHkuYmVnaW4oKTsKLSAgICAgICAgICAgIGZvciAoOyBpdGVyICE9
IGRlY29kZWRFbnRpdHkuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBtX3Rva2VuLT5h
cHBlbmRUb0F0dHJpYnV0ZVZhbHVlKCppdGVyKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkZWNvZGVkRW50aXR5Lmxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICAgICAg
bV90b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZShkZWNvZGVkRW50aXR5W2ldKTsKICAgICAg
ICAgfQogICAgICAgICAvLyBXZSdyZSBzdXBwb3NlZCB0byBzd2l0Y2ggYmFjayB0byB0aGUgYXR0
cmlidXRlIHZhbHVlIHN0YXRlIHRoYXQKICAgICAgICAgLy8gd2Ugd2VyZSBpbiB3aGVuIHdlIHdl
cmUgc3dpdGNoZWQgaW50byB0aGlzIHN0YXRlLiBSYXRoZXIgdGhhbgpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiA5Mzk1
MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5MSw3ICsyOTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBT
dHJpbmcoc3RhcnQsIG1fY3VycmVudCAtIHN0YXJ0KTsKICAgICB9CiAKLSAgICB2b2lkIGdpdmVS
ZW1haW5pbmdUbyhWZWN0b3I8VUNoYXI+JiByZWNpcGllbnQpCisgICAgdm9pZCBnaXZlUmVtYWlu
aW5nVG8oU3RyaW5nQnVpbGRlciYgcmVjaXBpZW50KQogICAgIHsKICAgICAgICAgcmVjaXBpZW50
LmFwcGVuZChtX2N1cnJlbnQsIG1fZW5kIC0gbV9jdXJyZW50KTsKICAgICAgICAgbV9jdXJyZW50
ID0gbV9lbmQ7CkBAIC0yNzE4LDcgKzI3MTgsOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVm
YXVsdEZvckFmdGVySGVhCiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5UYWJs
ZVRleHQoKQogewotICAgIFN0cmluZyBjaGFyYWN0ZXJzID0gU3RyaW5nOjphZG9wdChtX3BlbmRp
bmdUYWJsZUNoYXJhY3RlcnMpOworICAgIFN0cmluZyBjaGFyYWN0ZXJzID0gbV9wZW5kaW5nVGFi
bGVDaGFyYWN0ZXJzLnRvU3RyaW5nKCk7CisgICAgbV9wZW5kaW5nVGFibGVDaGFyYWN0ZXJzLmNs
ZWFyKCk7CiAgICAgaWYgKCFpc0FsbFdoaXRlc3BhY2UoY2hhcmFjdGVycykpIHsKICAgICAgICAg
Ly8gRklYTUU6IHBhcnNlIGVycm9yCiAgICAgICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpSZWRp
cmVjdFRvRm9zdGVyUGFyZW50R3VhcmQgcmVkaXJlY3RlcihtX3RyZWUpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgJKHJldmlzaW9uIDkzOTUz
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDEyICszMywxMyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50U3RhY2su
aCIKICNpbmNsdWRlICJIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgiCiAjaW5jbHVkZSAiSFRN
TFRva2VuaXplci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9V
bmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI0MSw3ICsyNDIsNyBAQCBwcml2
YXRlOgogICAgIEluc2VydGlvbk1vZGUgbV9vcmlnaW5hbEluc2VydGlvbk1vZGU7CiAKICAgICAv
LyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRp
cGFnZS90b2tlbml6YXRpb24uaHRtbCNwZW5kaW5nLXRhYmxlLWNoYXJhY3Rlci10b2tlbnMKLSAg
ICBWZWN0b3I8VUNoYXI+IG1fcGVuZGluZ1RhYmxlQ2hhcmFjdGVyczsKKyAgICBTdHJpbmdCdWls
ZGVyIG1fcGVuZGluZ1RhYmxlQ2hhcmFjdGVyczsKIAogICAgIC8vIFdlIGFjY2VzcyBwYXJzZXIg
YmVjYXVzZSBIVE1MNSBzcGVjIHJlcXVpcmVzIHRoYXQgd2UgYmUgYWJsZSB0byBjaGFuZ2UgdGhl
IHN0YXRlIG9mIHRoZSB0b2tlbml6ZXIKICAgICAvLyBmcm9tIHdpdGhpbiBwYXJzZXIgYWN0aW9u
cy4gV2UgYWxzbyBuZWVkIGl0IHRvIHRyYWNrIHRoZSBjdXJyZW50IHBvc2l0aW9uLgpJbmRleDog
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAJKHJldmlzaW9u
IDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQog
CiAjaW5jbHVkZSA8d3RmL0RlY2ltYWxOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjYxLDcgKzI2Miw3IEBA
IGlubGluZSBpbnQgaGV4VG9JbnQoVUNoYXIgYykKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBk
ZWNvZGVTdHJpbmcoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBWZWN0b3I8
VUNoYXI+KiBvdXRwdXQpCitib29sIGRlY29kZVN0cmluZyhjb25zdCBVQ2hhciogc3RhcnQsIGNv
bnN0IFVDaGFyKiBlbmQsIFN0cmluZ0J1aWxkZXIqIG91dHB1dCkKIHsKICAgICB3aGlsZSAoc3Rh
cnQgPCBlbmQpIHsKICAgICAgICAgVUNoYXIgYyA9ICpzdGFydCsrOwpAQCAtMzIxLDExICszMjIs
MTEgQEAgYm9vbCBkZWNvZGVTdHJpbmcoY29uc3QgVUNoYXIqIHN0YXJ0LCBjbwogICAgIH0KICAg
ICBpZiAoc3RhcnQgPiBlbmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBWZWN0b3I8VUNo
YXI+IGJ1ZmZlcjsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1ZmZlcjsKICAgICBidWZmZXIucmVzZXJ2
ZUNhcGFjaXR5KGVuZCAtIHN0YXJ0KTsKICAgICBpZiAoIWRlY29kZVN0cmluZyhzdGFydCwgZW5k
LCAmYnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICpvdXRwdXQgPSBTdHJpbmco
YnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7ICAgIAorICAgICpvdXRwdXQgPSBidWZmZXIu
dG9TdHJpbmcoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDQ0LDcgKzQ0NSw3IEBAIFBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGJ1aWxkVmFsdWUoY28KICAgICByZXR1cm4gcmVzdWx0
LnJlbGVhc2UoKTsKIH0KIAotaW5saW5lIGJvb2wgZXNjYXBlQ2hhcihVQ2hhciBjLCBWZWN0b3I8
VUNoYXI+KiBkc3QpCitpbmxpbmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFyIGMsIFN0cmluZ0J1aWxk
ZXIqIGRzdCkKIHsKICAgICBzd2l0Y2ggKGMpIHsKICAgICBjYXNlICdcYic6IGRzdC0+YXBwZW5k
KCJcXGIiLCAyKTsgYnJlYWs7CkBAIC00NjAsNyArNDYxLDcgQEAgaW5saW5lIGJvb2wgZXNjYXBl
Q2hhcihVQ2hhciBjLCBWZWN0b3I8VQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgdm9p
ZCBkb3VibGVRdW90ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgVmVjdG9yPFVDaGFyPiogZHN0
KQoraW5saW5lIHZvaWQgZG91YmxlUXVvdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIFN0cmlu
Z0J1aWxkZXIqIGRzdCkKIHsKICAgICBkc3QtPmFwcGVuZCgnIicpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7ICsraSkgewpAQCAtNTU2LDEzICs1NTcsMTMgQEAg
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdQogCiBTdHJpbmcgSW5zcGVj
dG9yVmFsdWU6OnRvSlNPTlN0cmluZygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1
bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0
eSg1MTIpOwogICAgIHdyaXRlSlNPTigmcmVzdWx0KTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3Vs
dC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JWYWx1ZTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1
dCkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBv
dXRwdXQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlTnVsbCk7CiAgICAgb3V0
cHV0LT5hcHBlbmQobnVsbFN0cmluZywgNCk7CkBAIC02MTYsNyArNjE3LDcgQEAgYm9vbCBJbnNw
ZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcih1bnNpZwogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQp
IGNvbnN0Cit2b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVy
KiBvdXRwdXQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlQm9vbGVhbiB8fCB0
eXBlKCkgPT0gVHlwZU51bWJlcik7CiAgICAgaWYgKHR5cGUoKSA9PSBUeXBlQm9vbGVhbikgewpA
QCAtNjUyLDcgKzY1Myw3IEBAIGJvb2wgSW5zcGVjdG9yU3RyaW5nOjphc1N0cmluZyhTdHJpbmcq
IG8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JTdHJpbmc6OndyaXRlSlNP
TihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0Cit2b2lkIEluc3BlY3RvclN0cmluZzo6d3Jp
dGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKICAgICBBU1NFUlQodHlwZSgp
ID09IFR5cGVTdHJpbmcpOwogICAgIGRvdWJsZVF1b3RlU3RyaW5nKG1fc3RyaW5nVmFsdWUsIG91
dHB1dCk7CkBAIC03MjQsNyArNzI1LDcgQEAgdm9pZCBJbnNwZWN0b3JPYmplY3Q6OnJlbW92ZShj
b25zdCBTdHJpbgogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JPYmplY3Q6OndyaXRlSlNPTihW
ZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0Cit2b2lkIEluc3BlY3Rvck9iamVjdDo6d3JpdGVK
U09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKICAgICBvdXRwdXQtPmFwcGVuZCgn
eycpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9vcmRlci5zaXplKCk7ICsraSkgewpA
QCAtNzYxLDcgKzc2Miw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckFy
cmEKICAgICByZXR1cm4gdGhpczsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcnJheTo6d3JpdGVKU09O
KFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yQXJyYXk6OndyaXRl
SlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB7CiAgICAgb3V0cHV0LT5hcHBlbmQo
J1snKTsKICAgICBmb3IgKFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9yVmFsdWU+ID46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9kYXRhLmJlZ2luKCk7IGl0ICE9IG1fZGF0YS5lbmQoKTsgKytpdCkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAkocmV2aXNp
b24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uKTsKIAog
ICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVK
U09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdyaXRl
SlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhw
bGljaXQgSW5zcGVjdG9yVmFsdWUoVHlwZSB0eXBlKSA6IG1fdHlwZSh0eXBlKSB7IH0KQEAgLTEy
MSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKHVuc2lnbmVk
IGxvbmcqIG91dHB1dCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKHVuc2lnbmVk
IGludCogb3V0cHV0KSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9y
PFVDaGFyPiogb3V0cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmlu
Z0J1aWxkZXIqIG91dHB1dCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgSW5zcGVj
dG9yQmFzaWNWYWx1ZShib29sIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVCb29sZWFuKSwg
bV9ib29sVmFsdWUodmFsdWUpIHsgfQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgYm9vbCBhc1N0cmluZyhTdHJpbmcqIG91dHB1dCkgY29uc3Q7ICAgIAogCi0gICAg
dmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBleHBsaWNpdCBJbnNwZWN0b3JTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlU3RyaW5nKSwgbV9zdHJpbmdWYWx1ZSh2YWx1ZSkgeyB9
CkBAIC0xOTksNyArMTk5LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZW1vdmUoY29uc3QgU3Ry
aW5nJiBuYW1lKTsKIAotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiog
b3V0cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIq
IG91dHB1dCkgY29uc3Q7CiAKICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fZGF0YS5i
ZWdpbigpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9kYXRhLmVuZCgpOyB9CkBA
IC0yMzMsNyArMjMzLDcgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gZ2V0KHNpemVfdCBpbmRleCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3Rv
cjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJp
bmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEluc3BlY3RvckFycmF5
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9s
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Q3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTUsMTkgKzEx
NiwxOSBAQCBSZXNvdXJjZVJlcXVlc3QgY3JlYXRlQWNjZXNzQ29udHJvbFByZWZsCiAgICAgY29u
c3QgSFRUUEhlYWRlck1hcCYgcmVxdWVzdEhlYWRlckZpZWxkcyA9IHJlcXVlc3QuaHR0cEhlYWRl
ckZpZWxkcygpOwogCiAgICAgaWYgKHJlcXVlc3RIZWFkZXJGaWVsZHMuc2l6ZSgpID4gMCkgewot
ICAgICAgICBWZWN0b3I8VUNoYXI+IGhlYWRlckJ1ZmZlcjsKKyAgICAgICAgU3RyaW5nQnVpbGRl
ciBoZWFkZXJCdWZmZXI7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gcmVxdWVzdEhlYWRlckZpZWxkcy5iZWdpbigpOwotICAgICAgICBhcHBlbmQoaGVhZGVyQnVm
ZmVyLCBpdC0+Zmlyc3QpOworICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5maXJzdCk7
CiAgICAgICAgICsraXQ7CiAKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gcmVxdWVzdEhlYWRlckZpZWxkcy5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZCgnLCcpOwogICAgICAg
ICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZCgnICcpOwotICAgICAgICAgICAgYXBwZW5kKGhlYWRl
ckJ1ZmZlciwgaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQt
PmZpcnN0KTsKICAgICAgICAgfQogCi0gICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhl
YWRlckZpZWxkKCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnMiLCBTdHJpbmc6OmFkb3B0
KGhlYWRlckJ1ZmZlcikpOworICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFkZXJG
aWVsZCgiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzIiwgaGVhZGVyQnVmZmVyLnRvU3Ry
aW5nKCkpOwogICAgIH0KIAogICAgIHJldHVybiBwcmVmbGlnaHRSZXF1ZXN0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
QEAgLTgzNiwxNyArODM3LDE3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3Jl
KEFwcGwKICAgICAvLyBUaGVuLCBpbnNlcnQgdGhlIHJlc291cmNlCiAgICAgCiAgICAgLy8gU2Vy
aWFsaXplIHRoZSBoZWFkZXJzCi0gICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAg
IFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAKICAgICBIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRz
KCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJl
c291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCE9IGVuZDsg
KytpdCkgewotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVy
cygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChp
dC0+Zmlyc3QpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJzonKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJzKCksIGl0LT5z
ZWNvbmQubGVuZ3RoKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25k
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoKFVDaGFyKSdcbicpOwogICAgIH0KICAg
ICAKLSAgICBTdHJpbmcgaGVhZGVycyA9IFN0cmluZzo6YWRvcHQoc3RyaW5nQnVpbGRlcik7Cisg
ICAgU3RyaW5nIGhlYWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgCiAgICAg
U1FMaXRlU3RhdGVtZW50IHJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5U
TyBDYWNoZVJlc291cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVycywg
ZGF0YSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywgPywg
PywgPykiKTsKICAgICBpZiAocmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3Vs
dE9rKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcg
QEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3Bh
Y2UuaCIKQEAgLTQyOCwxMyArNDI5LDEzIEBAIHZvaWQgQ2hyb21lOjpzZXRUb29sVGlwKGNvbnN0
IEhpdFRlc3RSZXMKICAgICAgICAgICAgICAgICAgICAgRmlsZUxpc3QqIGZpbGVzID0gaW5wdXQt
PmZpbGVzKCk7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxpc3RTaXplID0gZmlsZXMt
Pmxlbmd0aCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAobGlzdFNpemUgPiAxKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VUNoYXI+IG5hbWVzOworICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nQnVpbGRlciBuYW1lczsKICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZChuYW1lcywgZmlsZXMtPml0ZW0oaSktPmZpbGVOYW1lKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChmaWxlcy0+aXRlbShpKS0+Zmls
ZU5hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gbGlzdFNpemUg
LSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoJ1xuJyk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b29s
VGlwID0gU3RyaW5nOjphZG9wdChuYW1lcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB0b29s
VGlwID0gbmFtZXMudG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbGVu
YW1lIGFsd2F5cyBkaXNwbGF5IGFzIExUUi4KICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xU
aXBEaXJlY3Rpb24gPSBMVFI7CiAgICAgICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw5ICs5
Niw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3Io
KTsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFZlY3RvcjxVQ2hh
cj4mIG91dCwgVGV4dCopOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxV
Q2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kQ3VzdG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3Bh
Y2VzKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBU
ZXh0Kik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0
LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21B
dHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKICAg
ICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKIAogcHJpdmF0ZToKQEAgLTEyMCwy
NyArMTIwLDI4IEBAIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6flNlcmlhbGl6ZXIKIHsK
IH0KIAotdm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoVmVjdG9y
PFVDaGFyPiYgb3V0LCBUZXh0KiB0ZXh0KQordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0KiB0ZXh0KQogewogICAgIEVs
ZW1lbnQqIHBhcmVudCA9IHRleHQtPnBhcmVudEVsZW1lbnQoKTsKICAgICBpZiAocGFyZW50ICYm
ICFzaG91bGRJZ25vcmVFbGVtZW50KHBhcmVudCkpCiAgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRUZXh0KG91dCwgdGV4dCk7CiB9CiAKLXZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVu
dCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwg
TmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBpZiAoIXNob3VsZElnbm9yZUVsZW1lbnQo
ZWxlbWVudCkpCiAgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KG91dCwg
ZWxlbWVudCwgbmFtZXNwYWNlcyk7CiAKICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmhlYWRUYWcpKSB7Ci0gICAgICAgIFN0cmluZyBtZXRhID0gIjxtZXRhIGNoYXJzZXQ9
XCIiICsgbV9kb2N1bWVudC0+Y2hhcnNldCgpICsgIlwiPiI7Ci0gICAgICAgIG91dC5hcHBlbmQo
bWV0YS5jaGFyYWN0ZXJzKCksIG1ldGEubGVuZ3RoKCkpOworICAgICAgICBvdXQuYXBwZW5kKCI8
bWV0YSBjaGFyc2V0PVwiIik7CisgICAgICAgIG91dC5hcHBlbmQobV9kb2N1bWVudC0+Y2hhcnNl
dCgpKTsKKyAgICAgICAgb3V0LmFwcGVuZCgiXCI+Iik7CiAgICAgfQogCiAgICAgLy8gRklYTUU6
IEZvciBvYmplY3QgKHBsdWdpbnMpIHRhZ3MgYW5kIHZpZGVvIHRhZyB3ZSBjb3VsZCByZXBsYWNl
IHRoZW0gYnkgYW4gaW1hZ2Ugb2YgdGhlaXIgY3VycmVudCBjb250ZW50cy4KIH0KIAotdm9pZCBT
ZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9y
PFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQor
dm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMo
U3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3Bh
Y2VzKQogewogICAgIGlmICghZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2
aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5
LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTM5NSwxOCArMzk2LDE4IEBAIFN0cmluZyBTZWN1cml0eU9yaWdpbjo6
dG9TdHJpbmcoKSBjb25zdAogICAgICAgICByZXR1cm4gImZpbGU6Ly8iOwogICAgIH0KIAotICAg
IFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG1fcHJvdG9jb2wubGVuZ3RoKCkgKyBtX2hvc3QubGVuZ3RoKCkgKyAxMCk7Ci0gICAgYXBwZW5k
KHJlc3VsdCwgbV9wcm90b2NvbCk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgIjovLyIpOwotICAgIGFw
cGVuZChyZXN1bHQsIG1faG9zdCk7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVz
dWx0LnJlc2VydmVDYXBhY2l0eShtX3Byb3RvY29sLmxlbmd0aCgpICsgbV9ob3N0Lmxlbmd0aCgp
ICsgMTApOworICAgIHJlc3VsdC5hcHBlbmQobV9wcm90b2NvbCk7CisgICAgcmVzdWx0LmFwcGVu
ZCgiOi8vIik7CisgICAgcmVzdWx0LmFwcGVuZChtX2hvc3QpOwogCiAgICAgaWYgKG1fcG9ydCkg
ewotICAgICAgICBhcHBlbmQocmVzdWx0LCAiOiIpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBT
dHJpbmc6Om51bWJlcihtX3BvcnQpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiOiIpOworICAg
ICAgICByZXN1bHQuYXBwZW5kKFN0cmluZzo6bnVtYmVyKG1fcG9ydCkpOwogICAgIH0KIAotICAg
IHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmlu
ZygpOwogfQogCiBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0tVUkwuY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0tVUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8
d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogI2lmIFVTRShJQ1VfVU5JQ09E
RSkKQEAgLTg4OSwyMiArODkwLDIyIEBAIFN0cmluZyBLVVJMOjpkZXByZWNhdGVkU3RyaW5nKCkg
Y29uc3QKICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuIG1fc3RyaW5nOwogCi0g
ICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKLSAg
ICBhcHBlbmQocmVzdWx0LCBwcm90b2NvbCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKHByb3RvY29s
KCkpOwogICAgIHJlc3VsdC5hcHBlbmQoJzonKTsKIAotICAgIFZlY3RvcjxVQ2hhcj4gYXV0aG9y
aXR5OworICAgIFN0cmluZ0J1aWxkZXIgYXV0aG9yaXR5OwogCiAgICAgaWYgKG1faG9zdEVuZCAh
PSBtX3Bhc3N3b3JkRW5kKSB7CiAgICAgICAgIGlmIChtX3VzZXJFbmQgIT0gbV91c2VyU3RhcnQp
IHsKLSAgICAgICAgICAgIGFwcGVuZChhdXRob3JpdHksIHVzZXIoKSk7CisgICAgICAgICAgICBh
dXRob3JpdHkuYXBwZW5kKHVzZXIoKSk7CiAgICAgICAgICAgICBhdXRob3JpdHkuYXBwZW5kKCdA
Jyk7CiAgICAgICAgIH0KLSAgICAgICAgYXBwZW5kKGF1dGhvcml0eSwgaG9zdCgpKTsKKyAgICAg
ICAgYXV0aG9yaXR5LmFwcGVuZChob3N0KCkpOwogICAgICAgICBpZiAoaGFzUG9ydCgpKSB7CiAg
ICAgICAgICAgICBhdXRob3JpdHkuYXBwZW5kKCc6Jyk7Ci0gICAgICAgICAgICBhcHBlbmQoYXV0
aG9yaXR5LCBTdHJpbmc6Om51bWJlcihwb3J0KCkpKTsKKyAgICAgICAgICAgIGF1dGhvcml0eS5h
cHBlbmQoU3RyaW5nOjpudW1iZXIocG9ydCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTkx
NywxOSArOTE4LDE5IEBAIFN0cmluZyBLVVJMOjpkZXByZWNhdGVkU3RyaW5nKCkgY29uc3QKICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwogICAgIH0KIAotICAgIGFwcGVuZChyZXN1bHQsIHBh
dGgoKSk7CisgICAgcmVzdWx0LmFwcGVuZChwYXRoKCkpOwogCiAgICAgaWYgKG1fcGF0aEVuZCAh
PSBtX3F1ZXJ5RW5kKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJz8nKTsKLSAgICAgICAgYXBw
ZW5kKHJlc3VsdCwgcXVlcnkoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocXVlcnkoKSk7CiAg
ICAgfQogCiAgICAgaWYgKG1fZnJhZ21lbnRFbmQgIT0gbV9xdWVyeUVuZCkgewogICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcjJyk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIGZyYWdtZW50SWRlbnRp
ZmllcigpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChmcmFnbWVudElkZW50aWZpZXIoKSk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0LnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29u
c3QgU3RyaW5nJiBzdHIpCkBAIC05MzksNyArOTQwLDcgQEAgU3RyaW5nIGRlY29kZVVSTEVzY2Fw
ZVNlcXVlbmNlcyhjb25zdCBTdAogCiBTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNv
bnN0IFN0cmluZyYgc3RyLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewotICAgIFZl
Y3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogCiAgICAgQ2hh
ckJ1ZmZlciBidWZmZXI7CiAKQEAgLTk3OCwxMyArOTc5LDEzIEBAIFN0cmluZyBkZWNvZGVVUkxF
c2NhcGVTZXF1ZW5jZXMoY29uc3QgU3QKIAogICAgICAgICAvLyBCdWlsZCB1cCB0aGUgc3RyaW5n
IHdpdGggd2hhdCB3ZSBqdXN0IHNraXBwZWQgYW5kIHdoYXQgd2UganVzdCBkZWNvZGVkLgogICAg
ICAgICByZXN1bHQuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCkgKyBkZWNvZGVkUG9zaXRpb24sIGVu
Y29kZWRSdW5Qb3NpdGlvbiAtIGRlY29kZWRQb3NpdGlvbik7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQoZGVjb2RlZC5jaGFyYWN0ZXJzKCksIGRlY29kZWQubGVuZ3RoKCkpOworICAgICAgICByZXN1
bHQuYXBwZW5kKGRlY29kZWQpOwogICAgICAgICBkZWNvZGVkUG9zaXRpb24gPSBlbmNvZGVkUnVu
RW5kOwogICAgIH0KIAogICAgIHJlc3VsdC5hcHBlbmQoc3RyLmNoYXJhY3RlcnMoKSArIGRlY29k
ZWRQb3NpdGlvbiwgbGVuZ3RoIC0gZGVjb2RlZFBvc2l0aW9uKTsKIAotICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiAv
LyBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGJvdW5kcyBjaGVjay4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiTGlua0hhc2guaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCkBAIC03OSw5ICs4MCw5IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBjb250YWluc0NvbG9uU2xhc2hTbGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgdm9pZCBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMoVmVjdG9yPFVDaGFy
LCA1MTI+JiBzdHJpbmcpCitzdGF0aWMgaW5saW5lIHZvaWQgc3F1ZWV6ZU91dE51bGxDaGFyYWN0
ZXJzKFN0cmluZ0J1aWxkZXImIHN0cmluZykKIHsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0cmluZy5z
aXplKCk7CisgICAgc2l6ZV90IHNpemUgPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgc2l6ZV90IGkg
PSAwOwogICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgaWYgKCFzdHJp
bmdbaV0pCkBAIC05NSwxNCArOTYsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNxdWVlemVPdXRO
dWxsQ2hhcmFjdAogICAgICAgICAgICAgc3RyaW5nW2orK10gPSBjaGFyYWN0ZXI7CiAgICAgfQog
ICAgIEFTU0VSVChqIDwgc2l6ZSk7Ci0gICAgc3RyaW5nLnNocmluayhqKTsKKyAgICBzdHJpbmcu
cmVzaXplKGopOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhblNsYXNoRG90RG90U2xhc2hlcyhWZWN0
b3I8VUNoYXIsIDUxMj4mIHBhdGgsIHNpemVfdCBmaXJzdFNsYXNoKQorc3RhdGljIHZvaWQgY2xl
YW5TbGFzaERvdERvdFNsYXNoZXMoU3RyaW5nQnVpbGRlciYgcGF0aCwgc2l6ZV90IGZpcnN0U2xh
c2gpCiB7CiAgICAgc2l6ZV90IHNsYXNoID0gZmlyc3RTbGFzaDsKICAgICBkbyB7Ci0gICAgICAg
IHNpemVfdCBwcmV2aW91c1NsYXNoID0gc2xhc2ggPyByZXZlcnNlRmluZChwYXRoLmRhdGEoKSwg
cGF0aC5zaXplKCksICcvJywgc2xhc2ggLSAxKSA6IG5vdEZvdW5kOworICAgICAgICBzaXplX3Qg
cHJldmlvdXNTbGFzaCA9IHNsYXNoID8gcmV2ZXJzZUZpbmQocGF0aC5jaGFyYWN0ZXJzKCksIHBh
dGgubGVuZ3RoKCksICcvJywgc2xhc2ggLSAxKSA6IG5vdEZvdW5kOwogICAgICAgICAvLyBEb24n
dCByZW1vdmUgdGhlIGhvc3QsIGkuZS4gaHR0cDovL2Zvby5vcmcvLi4vZm9vLmh0bWwKICAgICAg
ICAgaWYgKHByZXZpb3VzU2xhc2ggPT0gbm90Rm91bmQgfHwgKHByZXZpb3VzU2xhc2ggPiAzICYm
IHBhdGhbcHJldmlvdXNTbGFzaCAtIDJdID09ICc6JyAmJiBwYXRoW3ByZXZpb3VzU2xhc2ggLSAx
XSA9PSAnLycpKSB7CiAgICAgICAgICAgICBwYXRoW3NsYXNoXSA9IDA7CkBAIC0xMTMsMTUgKzEx
NCwxNSBAQCBzdGF0aWMgdm9pZCBjbGVhblNsYXNoRG90RG90U2xhc2hlcyhWZWN0CiAgICAgICAg
ICAgICAgICAgcGF0aFtpXSA9IDA7CiAgICAgICAgIH0KICAgICAgICAgc2xhc2ggKz0gMzsKLSAg
ICB9IHdoaWxlICgoc2xhc2ggPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0
aC5zaXplKCksIHNsYXNoKSkgIT0gbm90Rm91bmQpOworICAgIH0gd2hpbGUgKChzbGFzaCA9IGZp
bmRTbGFzaERvdERvdFNsYXNoKHBhdGguY2hhcmFjdGVycygpLCBwYXRoLmxlbmd0aCgpLCBzbGFz
aCkpICE9IG5vdEZvdW5kKTsKICAgICBzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMocGF0aCk7CiB9
CiAKLXN0YXRpYyB2b2lkIG1lcmdlRG91YmxlU2xhc2hlcyhWZWN0b3I8VUNoYXIsIDUxMj4mIHBh
dGgsIHNpemVfdCBmaXJzdFNsYXNoKQorc3RhdGljIHZvaWQgbWVyZ2VEb3VibGVTbGFzaGVzKFN0
cmluZ0J1aWxkZXImIHBhdGgsIHNpemVfdCBmaXJzdFNsYXNoKQogewotICAgIHNpemVfdCByZWZQ
b3MgPSBmaW5kKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJyMnKTsKKyAgICBzaXplX3QgcmVm
UG9zID0gZmluZChwYXRoLmNoYXJhY3RlcnMoKSwgcGF0aC5sZW5ndGgoKSwgJyMnKTsKICAgICBp
ZiAoIXJlZlBvcyB8fCByZWZQb3MgPT0gbm90Rm91bmQpCi0gICAgICAgIHJlZlBvcyA9IHBhdGgu
c2l6ZSgpOworICAgICAgICByZWZQb3MgPSBwYXRoLmxlbmd0aCgpOwogCiAgICAgc2l6ZV90IHNs
YXNoID0gZmlyc3RTbGFzaDsKICAgICB3aGlsZSAoc2xhc2ggPCByZWZQb3MpIHsKQEAgLTEyOSwz
NyArMTMwLDM3IEBAIHN0YXRpYyB2b2lkIG1lcmdlRG91YmxlU2xhc2hlcyhWZWN0b3I8VUMKICAg
ICAgICAgICAgIHBhdGhbc2xhc2grK10gPSAwOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBz
bGFzaCArPSAyOwotICAgICAgICBpZiAoKHNsYXNoID0gZmluZFNsYXNoU2xhc2gocGF0aC5kYXRh
KCksIHBhdGguc2l6ZSgpLCBzbGFzaCkpID09IG5vdEZvdW5kKQorICAgICAgICBpZiAoKHNsYXNo
ID0gZmluZFNsYXNoU2xhc2gocGF0aC5jaGFyYWN0ZXJzKCksIHBhdGgubGVuZ3RoKCksIHNsYXNo
KSkgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgc3F1ZWV6ZU91
dE51bGxDaGFyYWN0ZXJzKHBhdGgpOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhblNsYXNoRG90U2xh
c2hlcyhWZWN0b3I8VUNoYXIsIDUxMj4mIHBhdGgsIHNpemVfdCBmaXJzdFNsYXNoKQorc3RhdGlj
IHZvaWQgY2xlYW5TbGFzaERvdFNsYXNoZXMoU3RyaW5nQnVpbGRlciYgcGF0aCwgc2l6ZV90IGZp
cnN0U2xhc2gpCiB7CiAgICAgc2l6ZV90IHNsYXNoID0gZmlyc3RTbGFzaDsKICAgICBkbyB7CiAg
ICAgICAgIHBhdGhbc2xhc2hdID0gMDsKICAgICAgICAgcGF0aFtzbGFzaCArIDFdID0gMDsKICAg
ICAgICAgc2xhc2ggKz0gMjsKLSAgICB9IHdoaWxlICgoc2xhc2ggPSBmaW5kU2xhc2hEb3RTbGFz
aChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIHNsYXNoKSkgIT0gbm90Rm91bmQpOworICAgIH0g
d2hpbGUgKChzbGFzaCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguY2hhcmFjdGVycygpLCBwYXRo
Lmxlbmd0aCgpLCBzbGFzaCkpICE9IG5vdEZvdW5kKTsKICAgICBzcXVlZXplT3V0TnVsbENoYXJh
Y3RlcnMocGF0aCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhblBhdGgoVmVjdG9yPFVD
aGFyLCA1MTI+JiBwYXRoKQorc3RhdGljIGlubGluZSB2b2lkIGNsZWFuUGF0aChTdHJpbmdCdWls
ZGVyJiBwYXRoKQogewogICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IGRvIHRoaXMgaW4gdGhlIHF1
ZXJ5IG9yIGFuY2hvciBwYXJ0IG9mIHRoZSBVUkwuCi0gICAgc2l6ZV90IGZpcnN0U2xhc2ggPSBm
aW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIDApOworICAgIHNp
emVfdCBmaXJzdFNsYXNoID0gZmluZFNsYXNoRG90RG90U2xhc2gocGF0aC5jaGFyYWN0ZXJzKCks
IHBhdGgubGVuZ3RoKCksIDApOwogICAgIGlmIChmaXJzdFNsYXNoICE9IG5vdEZvdW5kKQogICAg
ICAgICBjbGVhblNsYXNoRG90RG90U2xhc2hlcyhwYXRoLCBmaXJzdFNsYXNoKTsKIAogICAgIC8v
IEZJWE1FOiBTaG91bGQgbm90IGRvIHRoaXMgaW4gdGhlIHF1ZXJ5IHBhcnQuCi0gICAgZmlyc3RT
bGFzaCA9IGZpbmRTbGFzaFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgMCk7CisgICAg
Zmlyc3RTbGFzaCA9IGZpbmRTbGFzaFNsYXNoKHBhdGguY2hhcmFjdGVycygpLCBwYXRoLmxlbmd0
aCgpLCAwKTsKICAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKICAgICAgICAgbWVyZ2VE
b3VibGVTbGFzaGVzKHBhdGgsIGZpcnN0U2xhc2gpOwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBu
b3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yIHBhcnQuCi0gICAgZmlyc3RTbGFzaCA9
IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgMCk7CisgICAgZmly
c3RTbGFzaCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguY2hhcmFjdGVycygpLCBwYXRoLmxlbmd0
aCgpLCAwKTsKICAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKICAgICAgICAgY2xlYW5T
bGFzaERvdFNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7CiB9CkBAIC0yMDUsNyArMjA2LDcgQEAg
TGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFyKiB1cgogICAgIHJldHVybiB2aXNp
dGVkTGlua0hhc2hJbmxpbmUodXJsLCBsZW5ndGgpOwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElO
RSB2b2lkIHZpc2l0ZWRVUkxJbmxpbmUoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdHRyaWJ1dGVVUkwsIFZlY3RvcjxVQ2hhciwgNTEyPiYgYnVmZmVyKQorc3RhdGljIEFM
V0FZU19JTkxJTkUgdm9pZCB2aXNpdGVkVVJMSW5saW5lKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0
IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMLCBTdHJpbmdCdWlsZGVyJiBidWZmZXIpCiB7CiAg
ICAgaWYgKGF0dHJpYnV0ZVVSTC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjI3LDcg
KzIyOCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRlZFVSTElubGkKICAgICBi
b29sIGhhc0NvbG9uU2xhc2hTbGFzaCA9IGNvbnRhaW5zQ29sb25TbGFzaFNsYXNoKGNoYXJhY3Rl
cnMsIGxlbmd0aCk7CiAKICAgICBpZiAoaGFzQ29sb25TbGFzaFNsYXNoICYmICFuZWVkc1RyYWls
aW5nU2xhc2goY2hhcmFjdGVycywgbGVuZ3RoKSkgewotICAgICAgICBidWZmZXIuYXBwZW5kKGF0
dHJpYnV0ZVVSTC5jaGFyYWN0ZXJzKCksIGF0dHJpYnV0ZVVSTC5sZW5ndGgoKSk7CisgICAgICAg
IGJ1ZmZlci5hcHBlbmQoYXR0cmlidXRlVVJMKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMjQxLDcgKzI0Miw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRlZFVSTElu
bGkKICAgICB9CiAKICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgYnVmZmVyLmFwcGVuZChiYXNl
LnN0cmluZygpLmNoYXJhY3RlcnMoKSwgYmFzZS5zdHJpbmcoKS5sZW5ndGgoKSk7CisgICAgICAg
IGJ1ZmZlci5hcHBlbmQoYmFzZS5zdHJpbmcoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHN3aXRj
aCAoY2hhcmFjdGVyc1swXSkgewogICAgICAgICAgICAgY2FzZSAnLyc6CkBAIC0yNTcsNyArMjU4
LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCB2aXNpdGVkVVJMSW5saQogICAgIH0KICAg
ICBidWZmZXIuYXBwZW5kKGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgY2xlYW5QYXRoKGJ1ZmZl
cik7Ci0gICAgaWYgKG5lZWRzVHJhaWxpbmdTbGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6
ZSgpKSkgeworICAgIGlmIChuZWVkc1RyYWlsaW5nU2xhc2goYnVmZmVyLmNoYXJhY3RlcnMoKSwg
YnVmZmVyLmxlbmd0aCgpKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmNvcnJlY3Qg
Zm9yIFVSTHMgdGhhdCBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yOyB0aGUgIi8iIG5lZWRzIHRvIGdv
IGF0IHRoZQogICAgICAgICAvLyBlbmQgb2YgdGhlIHBhdGgsICpiZWZvcmUqIHRoZSBxdWVyeSBv
ciBhbmNob3IuCiAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJy8nKTsKQEAgLTI2NiwxOSArMjY3LDIw
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgdmlzaXRlZFVSTElubGkKICAgICByZXR1cm47
CiB9CiAKLXZvaWQgdmlzaXRlZFVSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJp
bmcmIGF0dHJpYnV0ZVVSTCwgVmVjdG9yPFVDaGFyLCA1MTI+JiBidWZmZXIpCit2b2lkIHZpc2l0
ZWRVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkws
IFN0cmluZ0J1aWxkZXImIGJ1ZmZlcikKIHsKICAgICByZXR1cm4gdmlzaXRlZFVSTElubGluZShi
YXNlLCBhdHRyaWJ1dGVVUkwsIGJ1ZmZlcik7CiB9CiAKIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFz
aChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKIHsK
LSAgICBWZWN0b3I8VUNoYXIsIDUxMj4gdXJsOworICAgIFN0cmluZ0J1aWxkZXIgdXJsOworICAg
IHVybC5yZXNlcnZlQ2FwYWNpdHkoNTEyKTsKICAgICB2aXNpdGVkVVJMSW5saW5lKGJhc2UsIGF0
dHJpYnV0ZVVSTCwgdXJsKTsKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICByZXR1cm4gdmlzaXRlZExpbmtIYXNoSW5saW5lKHVybC5kYXRhKCksIHVybC5z
aXplKCkpOworICAgIHJldHVybiB2aXNpdGVkTGlua0hhc2hJbmxpbmUodXJsLmNoYXJhY3RlcnMo
KSwgdXJsLmxlbmd0aCgpKTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBA
IExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXMKIC8vIFJlc29sdmVzIHRo
ZSBwb3RlbnRpYWxseSByZWxhdGl2ZSBVUkwgImF0dHJpYnV0ZVVSTCIgcmVsYXRpdmUgdG8gdGhl
IGdpdmVuCiAvLyBiYXNlIFVSTCwgYW5kIHJldHVybnMgdGhlIGhhc2ggb2YgdGhlIHN0cmluZyB0
aGF0IHdpbGwgYmUgdXNlZCBmb3IgdmlzaXRlZC4KIC8vIEl0IHdpbGwgcmV0dXJuIGFuIGVtcHR5
IFZlY3RvciBpbiBjYXNlIG9mIGVycm9ycy4KLXZvaWQgdmlzaXRlZFVSTChjb25zdCBLVVJMJiBi
YXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCwgVmVjdG9yPFVDaGFyLCA1MTI+
Jik7Cit2b2lkIHZpc2l0ZWRVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBhdHRyaWJ1dGVVUkwsIFN0cmluZ0J1aWxkZXImKTsKIAogCiB9ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3Rr
LmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0
YU9iamVjdEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRl
ICJtYXJrdXAuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0xMTAsMTQgKzExMSwxNCBAQCB2b2lkIERhdGFPYmplY3RHdGs6
OnNldFVSTChjb25zdCBLVVJMJiB1CiAgICAgaWYgKGFjdHVhbExhYmVsLmlzRW1wdHkoKSkKICAg
ICAgICAgYWN0dWFsTGFiZWwgPSB1cmw7CiAKLSAgICBWZWN0b3I8VUNoYXI+IG1hcmt1cDsKLSAg
ICBhcHBlbmQobWFya3VwLCAiPGEgaHJlZj1cIiIpOwotICAgIGFwcGVuZChtYXJrdXAsIHVybC5z
dHJpbmcoKSk7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIlwiPiIpOworICAgIFN0cmluZ0J1aWxkZXIg
bWFya3VwOworICAgIG1hcmt1cC5hcHBlbmQoIjxhIGhyZWY9XCIiKTsKKyAgICBtYXJrdXAuYXBw
ZW5kKHVybC5zdHJpbmcoKSk7CisgICAgbWFya3VwLmFwcGVuZCgiXCI+Iik7CiAgICAgR093blB0
cjxnY2hhcj4gZXNjYXBlZChnX21hcmt1cF9lc2NhcGVfdGV4dChhY3R1YWxMYWJlbC51dGY4KCku
ZGF0YSgpLCAtMSkpOwotICAgIGFwcGVuZChtYXJrdXAsIFN0cmluZzo6ZnJvbVVURjgoZXNjYXBl
ZC5nZXQoKSkpOwotICAgIGFwcGVuZChtYXJrdXAsICI8L2E+Iik7Ci0gICAgc2V0TWFya3VwKFN0
cmluZzo6YWRvcHQobWFya3VwKSk7CisgICAgbWFya3VwLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4
KGVzY2FwZWQuZ2V0KCkpKTsKKyAgICBtYXJrdXAuYXBwZW5kKCI8L2E+Iik7CisgICAgc2V0TWFy
a3VwKG1hcmt1cC50b1N0cmluZygpKTsKIH0KIAogdm9pZCBEYXRhT2JqZWN0R3RrOjpjbGVhclRl
eHQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFy
c2Vycy5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9IVFRQUGFyc2Vycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvRGF0
ZU1hdGguaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKQEAgLTE5Niw3ICsxOTcsNyBAQCBTdHJp
bmcgZmlsZW5hbWVGcm9tSFRUUENvbnRlbnREaXNwb3NpdGlvCiAKIFN0cmluZyBleHRyYWN0TUlN
RVR5cGVGcm9tTWVkaWFUeXBlKGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKQogewotICAgIFZlY3Rv
cjxVQ2hhciwgNjQ+IG1pbWVUeXBlOworICAgIFN0cmluZ0J1aWxkZXIgbWltZVR5cGU7CiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gbWVkaWFUeXBlLmxlbmd0aCgpOwogICAgIG1pbWVUeXBlLnJlc2Vy
dmVDYXBhY2l0eShsZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewpAQCAtMjI0LDkgKzIyNSw5IEBAIFN0cmluZyBleHRyYWN0TUlNRVR5cGVGcm9tTWVk
aWFUeXBlKGNvbnMKICAgICAgICAgbWltZVR5cGUuYXBwZW5kKGMpOwogICAgIH0KIAotICAgIGlm
IChtaW1lVHlwZS5zaXplKCkgPT0gbGVuZ3RoKQorICAgIGlmIChtaW1lVHlwZS5sZW5ndGgoKSA9
PSBsZW5ndGgpCiAgICAgICAgIHJldHVybiBtZWRpYVR5cGU7Ci0gICAgcmV0dXJuIFN0cmluZyht
aW1lVHlwZS5kYXRhKCksIG1pbWVUeXBlLnNpemUoKSk7CisgICAgcmV0dXJuIG1pbWVUeXBlLnRv
U3RyaW5nKCk7CiB9CiAKIFN0cmluZyBleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUoY29uc3Qg
U3RyaW5nJiBtZWRpYVR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY0lDVS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNJQ1UuY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
NyBAQAogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5o
PgogCiB1c2luZyBzdGQ6Om1pbjsKQEAgLTMwOCw3ICszMDksNyBAQCBTdHJpbmcgVGV4dENvZGVj
SUNVOjpkZWNvZGUoY29uc3QgY2hhciogCiAgICAgCiAgICAgRXJyb3JDYWxsYmFja1NldHRlciBj
YWxsYmFja1NldHRlcihtX2NvbnZlcnRlcklDVSwgc3RvcE9uRXJyb3IpOwogCi0gICAgVmVjdG9y
PFVDaGFyPiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKICAgICBVQ2hhciBi
dWZmZXJbQ29udmVyc2lvbkJ1ZmZlclNpemVdOwogICAgIFVDaGFyKiBidWZmZXJMaW1pdCA9IGJ1
ZmZlciArIENvbnZlcnNpb25CdWZmZXJTaXplOwpAQCAtMzMwLDcgKzMzMSw3IEBAIFN0cmluZyBU
ZXh0Q29kZWNJQ1U6OmRlY29kZShjb25zdCBjaGFyKiAKICAgICAgICAgc2F3RXJyb3IgPSB0cnVl
OwogICAgIH0KIAotICAgIFN0cmluZyByZXN1bHRTdHJpbmcgPSBTdHJpbmc6OmFkb3B0KHJlc3Vs
dCk7CisgICAgU3RyaW5nIHJlc3VsdFN0cmluZyA9IHJlc3VsdC50b1N0cmluZygpOwogCiAgICAg
Ly8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDE0PgogICAgIC8v
IFNpbXBsaWZpZWQgQ2hpbmVzZSBwYWdlcyB1c2UgdGhlIGNvZGUgQTNBMCB0byBtZWFuICJmdWxs
LXdpZHRoIHNwYWNlIiwgYnV0IElDVSBkZWNvZGVzIGl0IGFzIFUrRTVFNS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNwcAkocmV2aXNpb24gOTM5NTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NSwxMiArODUsMTAgQEAgVGV4dFN0cmVhbSYgVGV4dFN0cmVhbTo6b3BlcmF0
b3I8PChkb3VibAogVGV4dFN0cmVhbSYgVGV4dFN0cmVhbTo6b3BlcmF0b3I8PChjb25zdCBjaGFy
KiBzdHJpbmcpCiB7CiAgICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IHN0cmxlbihzdHJpbmcpOwot
ICAgIHNpemVfdCB0ZXh0TGVuZ3RoID0gbV90ZXh0LnNpemUoKTsKKyAgICBzaXplX3QgdGV4dExl
bmd0aCA9IG1fdGV4dC5sZW5ndGgoKTsKICAgICBpZiAoc3RyaW5nTGVuZ3RoID4gbnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSB0ZXh0TGVuZ3RoKQogICAgICAgICBDUkFTSCgpOwotICAg
IG1fdGV4dC5ncm93KHRleHRMZW5ndGggKyBzdHJpbmdMZW5ndGgpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc3RyaW5nTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fdGV4dFt0ZXh0TGVuZ3Ro
ICsgaV0gPSBzdHJpbmdbaV07CisgICAgbV90ZXh0LmFwcGVuZChzdHJpbmcsIHN0cmluZ0xlbmd0
aCk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMDMsMTMgKzEwMSwxNSBAQCBUZXh0U3Ry
ZWFtJiBUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0CiAKIFRleHRTdHJlYW0mIFRleHRTdHJl
YW06Om9wZXJhdG9yPDwoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXBwZW5kKG1fdGV4
dCwgc3RyaW5nKTsKKyAgICBtX3RleHQuYXBwZW5kKHN0cmluZyk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCiBTdHJpbmcgVGV4dFN0cmVhbTo6cmVsZWFzZSgpCiB7Ci0gICAgcmV0dXJuIFN0cmlu
Zzo6YWRvcHQobV90ZXh0KTsKKyAgICBTdHJpbmcgcmVzdWx0ID0gbV90ZXh0LnRvU3RyaW5nKCk7
CisgICAgbV90ZXh0LmNsZWFyKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2lmIE9TKFdJ
TkRPV1MpICYmIENQVShYODZfNjQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRTdHJlYW0uaAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2Rl
ZmluZSBUZXh0U3RyZWFtX2gKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNs
dWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUy
LDcgKzUyLDcgQEAgcHVibGljOgogICAgIFN0cmluZyByZWxlYXNlKCk7CiAKIHByaXZhdGU6Ci0g
ICAgVmVjdG9yPFVDaGFyPiBtX3RleHQ7CisgICAgU3RyaW5nQnVpbGRlciBtX3RleHQ7CiB9Owog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCShyZXZpc2lv
biA5Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVy
LmgiCiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIC8vIFdlIHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29tZSBw
bHVnaW5zIGxpa2UgdG8gcmV0dXJuIC0xIHRvIGluZGljYXRlIGVycm9yCkBAIC0xMzgsMjEgKzEz
OSwyMSBAQCB2b2lkIFBsdWdpblN0cmVhbTo6c3RhcnRTdHJlYW0oKQogICAgIGxvbmcgbG9uZyBl
eHBlY3RlZENvbnRlbnRMZW5ndGggPSBtX3Jlc291cmNlUmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50
TGVuZ3RoKCk7CiAKICAgICBpZiAobV9yZXNvdXJjZVJlc3BvbnNlLmlzSFRUUCgpKSB7Ci0gICAg
ICAgIFZlY3RvcjxVQ2hhcj4gc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOwogICAgICAgICBTdHJpbmcgc2VwYXJhdG9yKCI6ICIpOwogCiAgICAgICAg
IFN0cmluZyBzdGF0dXNMaW5lID0gIkhUVFAgIiArIFN0cmluZzo6bnVtYmVyKG1fcmVzb3VyY2VS
ZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKSArICIgT0tcbiI7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHN0YXR1c0xpbmUuY2hhcmFjdGVycygpLCBzdGF0dXNMaW5lLmxlbmd0aCgpKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc3RhdHVzTGluZSk7CiAKICAgICAgICAgSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChp
dC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkpOwotICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoc2VwYXJhdG9yLmNoYXJhY3RlcnMoKSwgc2VwYXJhdG9yLmxl
bmd0aCgpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQuY2hh
cmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChz
ZXBhcmF0b3IpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZCk7
CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICAgICAgfQogCi0g
ICAgICAgIG1faGVhZGVycyA9IFN0cmluZzo6YWRvcHQoc3RyaW5nQnVpbGRlcikudXRmOCgpOwor
ICAgICAgICBtX2hlYWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpOwogCiAg
ICAgICAgIC8vIElmIHRoZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3QgbGlrZWx5IGNvbXByZXNz
ZWQpLCB0aGVuIGRvbid0IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1Z2luLAogICAgICAgICAv
LyB3aGljaCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQgbGVuZ3RoLCBub3QgeWV0
IGtub3duIGF0IHRoZSBtb21lbnQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDggKzE2OCw4IEBA
IHN0YXRpYyB2b2lkIGFkanVzdENoYXJhY3RlcnNBbmRMZW5ndGhGb3IKICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGh5cGhlblN0cmluZyA9IHN0eWxlLT5oeXBoZW5TdHJpbmcoKTsKICAgICBjaGFy
YWN0ZXJzV2l0aEh5cGhlbi5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoICsgaHlwaGVuU3RyaW5nLmxl
bmd0aCgpKTsKICAgICBjaGFyYWN0ZXJzV2l0aEh5cGhlbi5hcHBlbmQoY2hhcmFjdGVycywgbGVu
Z3RoKTsKLSAgICBjaGFyYWN0ZXJzV2l0aEh5cGhlbi5hcHBlbmQoaHlwaGVuU3RyaW5nLmNoYXJh
Y3RlcnMoKSwgaHlwaGVuU3RyaW5nLmxlbmd0aCgpKTsKLSAgICBjaGFyYWN0ZXJzID0gY2hhcmFj
dGVyc1dpdGhIeXBoZW4uZGF0YSgpOworICAgIGNoYXJhY3RlcnNXaXRoSHlwaGVuLmFwcGVuZCho
eXBoZW5TdHJpbmcpOworICAgIGNoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzV2l0aEh5cGhlbi5jaGFy
YWN0ZXJzKCk7CiAgICAgbGVuZ3RoICs9IGh5cGhlblN0cmluZy5sZW5ndGgoKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA5Mzk1
MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJJbmxpbmVCb3guaCIKICNpbmNsdWRl
ICJSZW5kZXJUZXh0LmgiIC8vIHNvIHRleHRSZW5kZXJlcigpIGNhbiBiZSBpbmxpbmUKICNpbmNs
dWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM0LDcgKzM1LDExIEBAIGNsYXNzIERvY3VtZW50TWFy
a2VyOwogCiBjb25zdCB1bnNpZ25lZCBzaG9ydCBjTm9UcnVuY2F0aW9uID0gVVNIUlRfTUFYOwog
Y29uc3QgdW5zaWduZWQgc2hvcnQgY0Z1bGxUcnVuY2F0aW9uID0gVVNIUlRfTUFYIC0gMTsKLXR5
cGVkZWYgVmVjdG9yPFVDaGFyLCAyNTY+IEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbjsKKworY2xh
c3MgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuIDogcHVibGljIFN0cmluZ0J1aWxkZXIgeworcHVi
bGljOgorICAgIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbigpIHsgcmVzZXJ2ZUNhcGFjaXR5KDI1
Nik7IH0KK307CiAKIC8vIEhlbHBlciBmdW5jdGlvbnMgc2hhcmVkIGJ5IElubGluZVRleHRCb3gg
LyBTVkdSb290SW5saW5lQm94CiB2b2lkIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBDb2xvciYgZmlsbENvbG9yLCBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3Is
IGZsb2F0IHN0cm9rZVRoaWNrbmVzcywgQ29sb3JTcGFjZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAt
MzcwLDE3ICszNzEsMTcgQEAgU3RyaW5nIFJlbmRlckxpc3RJdGVtOjptYXJrZXJUZXh0V2l0aFN1
ZgogCiAgICAgY29uc3QgU3RyaW5nJiBtYXJrZXJUZXh0ID0gbV9tYXJrZXItPnRleHQoKTsKICAg
ICBjb25zdCBTdHJpbmcgbWFya2VyU3VmZml4ID0gbV9tYXJrZXItPnN1ZmZpeCgpOwotICAgIFZl
Y3RvcjxVQ2hhcj4gcmVzdWx0VmVjdG9yOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogCiAg
ICAgaWYgKCFtX21hcmtlci0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAg
ICAgICByZXN1bHRWZWN0b3IuYXBwZW5kKG1hcmtlclN1ZmZpeC5jaGFyYWN0ZXJzKCksIG1hcmtl
clN1ZmZpeC5sZW5ndGgoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobWFya2VyU3VmZml4KTsK
IAotICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQobWFya2VyVGV4dC5jaGFyYWN0ZXJzKCksIG1hcmtl
clRleHQubGVuZ3RoKCkpOworICAgIHJlc3VsdC5hcHBlbmQobWFya2VyVGV4dCk7CiAKICAgICBp
ZiAobV9tYXJrZXItPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAg
cmVzdWx0VmVjdG9yLmFwcGVuZChtYXJrZXJTdWZmaXguY2hhcmFjdGVycygpLCBtYXJrZXJTdWZm
aXgubGVuZ3RoKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1hcmtlclN1ZmZpeCk7CiAKLSAg
ICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHRWZWN0b3IpOworICAgIHJldHVybiByZXN1bHQu
dG9TdHJpbmcoKTsKIH0KIAogdm9pZCBSZW5kZXJMaXN0SXRlbTo6ZXhwbGljaXRWYWx1ZUNoYW5n
ZWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2Vy
LmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNs
dWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwpAQCAtMTIzLDEyICsxMjQsMTIgQEAgc3RhdGljIFN0cmluZyB0b1N5bWJvbGljKGludCBudW1i
ZXIsIGNvbgogICAgIC0tbnVtYmVyU2hhZG93OwogCiAgICAgLy8gVGhlIGFzdGVyaXNrcyBsaXN0
LXN0eWxlLXR5cGUgaXMgdGhlIHdvcnN0IGNhc2U7IHdlIHNob3cgfG51bWJlclNoYWRvd3wgYXN0
ZXJpc2tzLgotICAgIFZlY3RvcjxVQ2hhcj4gbGV0dGVyczsKKyAgICBTdHJpbmdCdWlsZGVyIGxl
dHRlcnM7CiAgICAgbGV0dGVycy5hcHBlbmQoc3ltYm9sc1tudW1iZXJTaGFkb3cgJSBzeW1ib2xz
U2l6ZV0pOwogICAgIHVuc2lnbmVkIG51bVN5bWJvbHMgPSBudW1iZXJTaGFkb3cgLyBzeW1ib2xz
U2l6ZTsKICAgICB3aGlsZSAobnVtU3ltYm9scy0tKQogICAgICAgICBsZXR0ZXJzLmFwcGVuZChz
eW1ib2xzW251bWJlclNoYWRvdyAlIHN5bWJvbHNTaXplXSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6
YWRvcHQobGV0dGVycyk7CisgICAgcmV0dXJuIGxldHRlcnMudG9TdHJpbmcoKTsKIH0KIAogc3Rh
dGljIFN0cmluZyB0b0FscGhhYmV0aWMoaW50IG51bWJlciwgY29uc3QgVUNoYXIqIGFscGhhYmV0
LCB1bnNpZ25lZCBhbHBoYWJldFNpemUpCkBAIC0xMjc0LDEzICsxMjc1LDEzIEBAIHZvaWQgUmVu
ZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICAgICAgLy8gVGV4dCBpcyBub3Qg
YXJiaXRyYXJ5LiBXZSBjYW4ganVkZ2Ugd2hldGhlciBpdCdzIFJUTCBmcm9tIHRoZSBmaXJzdCBj
aGFyYWN0ZXIsCiAgICAgICAgIC8vIGFuZCB3ZSBvbmx5IG5lZWQgdG8gaGFuZGxlIHRoZSBkaXJl
Y3Rpb24gUmlnaHRUb0xlZnQgZm9yIG5vdy4KICAgICAgICAgYm9vbCB0ZXh0TmVlZHNSZXZlcnNp
bmcgPSBkaXJlY3Rpb24obV90ZXh0WzBdKSA9PSBSaWdodFRvTGVmdDsKLSAgICAgICAgVmVjdG9y
PFVDaGFyPiByZXZlcnNlZFRleHQ7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgcmV2ZXJzZWRUZXh0
OwogICAgICAgICBpZiAodGV4dE5lZWRzUmV2ZXJzaW5nKSB7CiAgICAgICAgICAgICBpbnQgbGVu
Z3RoID0gbV90ZXh0Lmxlbmd0aCgpOwotICAgICAgICAgICAgcmV2ZXJzZWRUZXh0Lmdyb3cobGVu
Z3RoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAg
ICAgICAgICAgICAgcmV2ZXJzZWRUZXh0W2xlbmd0aCAtIGkgLSAxXSA9IG1fdGV4dFtpXTsKLSAg
ICAgICAgICAgIHRleHRSdW4uc2V0VGV4dChyZXZlcnNlZFRleHQuZGF0YSgpLCBsZW5ndGgpOwor
ICAgICAgICAgICAgcmV2ZXJzZWRUZXh0LnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IGxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKQorICAgICAgICAgICAg
ICAgIHJldmVyc2VkVGV4dC5hcHBlbmQobV90ZXh0W2ldKTsKKyAgICAgICAgICAgIHRleHRSdW4u
c2V0VGV4dChyZXZlcnNlZFRleHQuY2hhcmFjdGVycygpLCBsZW5ndGgpOwogICAgICAgICB9CiAK
ICAgICAgICAgY29uc3QgVUNoYXIgc3VmZml4ID0gbGlzdE1hcmtlclN1ZmZpeCh0eXBlLCBtX2xp
c3RJdGVtLT52YWx1ZSgpKTsKQEAgLTE1NTIsMTggKzE1NTMsMjAgQEAgU3RyaW5nIFJlbmRlckxp
c3RNYXJrZXI6OnN1ZmZpeCgpIGNvbnN0CiAgICAgRUxpc3RTdHlsZVR5cGUgdHlwZSA9IHN0eWxl
KCktPmxpc3RTdHlsZVR5cGUoKTsKICAgICBjb25zdCBVQ2hhciBzdWZmaXggPSBsaXN0TWFya2Vy
U3VmZml4KHR5cGUsIG1fbGlzdEl0ZW0tPnZhbHVlKCkpOwogCi0gICAgVmVjdG9yPFVDaGFyPiBy
ZXN1bHRWZWN0b3I7Ci0gICAgcmVzdWx0VmVjdG9yLmFwcGVuZChzdWZmaXgpOworICAgIGlmIChz
dWZmaXggPT0gJyAnKQorICAgICAgICByZXR1cm4gU3RyaW5nKCIgIik7CiAKICAgICAvLyBJZiB0
aGUgc3VmZml4IGlzIG5vdCAnICcsIGFuIGV4dHJhIHNwYWNlIGlzIG5lZWRlZAotICAgIGlmIChz
dWZmaXggIT0gJyAnKSB7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpCi0gICAgICAgICAgICByZXN1bHRWZWN0b3IuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJlc3VsdFZlY3Rvci5wcmVwZW5kKCcgJyk7CisgICAgVUNoYXIgZGF0
YVsyXTsKKyAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CisgICAg
ICAgIGRhdGFbMF0gPSBzdWZmaXg7CisgICAgICAgIGRhdGFbMV0gPSAnICc7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZGF0YVswXSA9ICcgJzsKKyAgICAgICAgZGF0YVsxXSA9IHN1ZmZpeDsKICAg
ICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHRWZWN0b3IpOworICAgIHJldHVy
biBTdHJpbmcoZGF0YSwgMik7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdE1hcmtlcjo6aXNJbnNpZGUo
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBzdGF0
aWMgYm9vbCBpc0VtcHR5T3JVbnN0eWxlZEFwcGxlU3R5bGVTCiAKIFN0cmluZyBxdW90ZUFuZEVz
Y2FwZU5vblByaW50YWJsZXMoY29uc3QgU3RyaW5nJiBzKQogewotICAgIFZlY3RvcjxVQ2hhcj4g
cmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogICAgIHJlc3VsdC5hcHBlbmQoJyIn
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IHMubGVuZ3RoKCk7ICsraSkgewogICAg
ICAgICBVQ2hhciBjID0gc1tpXTsKQEAgLTIyMiw3ICsyMjIsNyBAQCBTdHJpbmcgcXVvdGVBbmRF
c2NhcGVOb25QcmludGFibGVzKGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAgICAgcmVzdWx0LmFw
cGVuZCgnIicpOwotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdC50b1N0cmluZygpOwogfQogCiB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVu
ZGVyT2JqZWN0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIFJlbmRlckFz
VGV4dEJlaGF2aW9yIGJlaGF2aW9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAkocmV2aXNpb24gOTM5NTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJbmxp
bmUuaCIKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxPcGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRl
clRleHQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAKQEAgLTY0LDEyICs2NSwxMiBAQCB2b2lkIFJlbmRlck1hdGhNTEZl
bmNlZDo6dXBkYXRlRnJvbUVsZW1lCiAgICAgCiAgICAgQXRvbWljU3RyaW5nIHNlcGFyYXRvcnMg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZmVuY2VkKS0+Z2V0QXR0cmlidXRlKE1hdGhNTE5hbWVz
OjpzZXBhcmF0b3JzQXR0cik7CiAgICAgaWYgKCFzZXBhcmF0b3JzLmlzTnVsbCgpKSB7Ci0gICAg
ICAgIFZlY3RvcjxVQ2hhcj4gY2hhcmFjdGVyczsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBjaGFy
YWN0ZXJzOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNlcGFyYXRvcnMu
bGVuZ3RoKCk7IGkrKykgewogICAgICAgICAgICAgaWYgKCFpc1NwYWNlT3JOZXdsaW5lKHNlcGFy
YXRvcnNbaV0pKQogICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMuYXBwZW5kKHNlcGFyYXRvcnNb
aV0pOwogICAgICAgICB9Ci0gICAgICAgIG1fc2VwYXJhdG9ycyA9ICFjaGFyYWN0ZXJzLnNpemUo
KSA/IDAgOiBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFjdGVycy5kYXRhKCkgLCBjaGFyYWN0ZXJz
LnNpemUoKSk7CisgICAgICAgIG1fc2VwYXJhdG9ycyA9ICFjaGFyYWN0ZXJzLmxlbmd0aCgpID8g
MCA6IGNoYXJhY3RlcnMudG9TdHJpbmcoKS5pbXBsKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
Ly8gVGhlIHNlcGFyYXRvciBkZWZhdWx0cyB0byBhIHNpbmdsZSBjb21tYS4KICAgICAgICAgbV9z
ZXBhcmF0b3JzID0gU3RyaW5nSW1wbDo6Y3JlYXRlKCIsIik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiTGV2ZWxE
QlNsaWNlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAvLyBMZXZl
bERCIHN0b3JlcyBrZXkvdmFsdWUgcGFpcnMuIEtleXMgYW5kIHZhbHVlcyBhcmUgc3RyaW5ncyBv
ZiBieXRlcywgbm9ybWFsbHkgb2YgdHlwZSBWZWN0b3I8Y2hhcj4uCiAvLwpAQCAtMjY0LDE2ICsy
NjUsMTcgQEAgU3RyaW5nIGRlY29kZVN0cmluZyhjb25zdCBjaGFyKiBwLCBjb25zdAogICAgIEFT
U0VSVCghKChlbmQgLSBwKSAlIDIpKTsKIAogICAgIHNpemVfdCBsZW4gPSAoZW5kIC0gcCkgLyAy
OwotICAgIFZlY3RvcjxVQ2hhcj4gdmVjdG9yKGxlbik7CisgICAgU3RyaW5nQnVpbGRlciByZXN1
bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShsZW4pOwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICAgICB1bnNpZ25lZCBjaGFyIGhpID0gKnArKzsK
ICAgICAgICAgdW5zaWduZWQgY2hhciBsbyA9ICpwKys7CiAKLSAgICAgICAgdmVjdG9yW2ldID0g
KGhpIDw8IDgpIHwgbG87CisgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+
KChoaSA8PCA4KSB8IGxvKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQodmVj
dG9yKTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFZlY3RvcjxjaGFyPiBl
bmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGNvbnN0IFN0cmluZyYgcykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzQsNyArODc0LDcg
QEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYQogICAgICAgICByZXR1
cm4gIiI7CiAgICAgfQogCi0gICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZv
ciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc3BvbnNlLmh0dHBIZWFk
ZXJGaWVsZHMoKS5iZWdpbigpOyBpdCE9IGVuZDsgKytpdCkgewpAQCAtODkwLDE1ICs4OTAsMTUg
QEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYQogICAgICAgICBpZiAo
IW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJX
aGl0ZWxpc3QoaXQtPmZpcnN0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC5sZW5n
dGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CiAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCcgJyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVy
cygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
aXQtPnNlY29uZCk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdccicpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5n
OjphZG9wdChzdHJpbmdCdWlsZGVyKTsKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOwogfQogCiBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNl
L1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiAr
MzgsNyBAQAogI2luY2x1ZGUgIlhQYXRoVXRpbC5oIgogI2luY2x1ZGUgIlhQYXRoVmFsdWUuaCIK
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFhQYXRoIHsKQEAgLTMx
OCwyNiArMzE5LDI2IEBAIFZhbHVlIEZ1blBvc2l0aW9uOjpldmFsdWF0ZSgpIGNvbnN0CiBWYWx1
ZSBGdW5JZDo6ZXZhbHVhdGUoKSBjb25zdAogewogICAgIFZhbHVlIGEgPSBhcmcoMCktPmV2YWx1
YXRlKCk7Ci0gICAgVmVjdG9yPFVDaGFyPiBpZExpc3Q7IC8vIEEgd2hpdGVzcGFjZS1zZXBhcmF0
ZWQgbGlzdCBvZiBJRHMKKyAgICBTdHJpbmdCdWlsZGVyIGlkTGlzdDsgLy8gQSB3aGl0ZXNwYWNl
LXNlcGFyYXRlZCBsaXN0IG9mIElEcwogCiAgICAgaWYgKGEuaXNOb2RlU2V0KCkpIHsKICAgICAg
ICAgY29uc3QgTm9kZVNldCYgbm9kZXMgPSBhLnRvTm9kZVNldCgpOwogICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBTdHJpbmcg
c3RyID0gc3RyaW5nVmFsdWUobm9kZXNbaV0pOwotICAgICAgICAgICAgaWRMaXN0LmFwcGVuZChz
dHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkpOworICAgICAgICAgICAgaWRMaXN0LmFwcGVu
ZChzdHIpOwogICAgICAgICAgICAgaWRMaXN0LmFwcGVuZCgnICcpOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKICAgICAgICAgU3RyaW5nIHN0ciA9IGEudG9TdHJpbmcoKTsKLSAgICAgICAgaWRM
aXN0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkpOworICAgICAgICBpZExp
c3QuYXBwZW5kKHN0cik7CiAgICAgfQogICAgIAogICAgIFRyZWVTY29wZSogY29udGV4dFNjb3Bl
ID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlLT50cmVlU2NvcGUoKTsKICAgICBOb2RlU2V0IHJl
c3VsdDsKICAgICBIYXNoU2V0PE5vZGUqPiByZXN1bHRTZXQ7CiAKLSAgICBzaXplX3Qgc3RhcnRQ
b3MgPSAwOwotICAgIHNpemVfdCBsZW5ndGggPSBpZExpc3Quc2l6ZSgpOworICAgIHVuc2lnbmVk
IHN0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBpZExpc3QubGVuZ3RoKCk7CiAg
ICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgd2hpbGUgKHN0YXJ0UG9zIDwgbGVuZ3RoICYmIGlz
V2hpdGVzcGFjZShpZExpc3Rbc3RhcnRQb3NdKSkKICAgICAgICAgICAgICsrc3RhcnRQb3M7CkBA
IC0zNTEsNyArMzUyLDcgQEAgVmFsdWUgRnVuSWQ6OmV2YWx1YXRlKCkgY29uc3QKIAogICAgICAg
ICAvLyBJZiB0aGVyZSBhcmUgc2V2ZXJhbCBub2RlcyB3aXRoIHRoZSBzYW1lIGlkLCBpZCgpIHNo
b3VsZCByZXR1cm4gdGhlIGZpcnN0IG9uZS4KICAgICAgICAgLy8gSW4gV2ViS2l0LCBnZXRFbGVt
ZW50QnlJZCBiZWhhdmVzIHNvLCB0b28sIGFsdGhvdWdoIGl0cyBiZWhhdmlvciBpbiB0aGlzIGNh
c2UgaXMgZm9ybWFsbHkgdW5kZWZpbmVkLgotICAgICAgICBOb2RlKiBub2RlID0gY29udGV4dFNj
b3BlLT5nZXRFbGVtZW50QnlJZChTdHJpbmcoJmlkTGlzdFtzdGFydFBvc10sIGVuZFBvcyAtIHN0
YXJ0UG9zKSk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBjb250ZXh0U2NvcGUtPmdldEVsZW1lbnRC
eUlkKFN0cmluZyhpZExpc3QuY2hhcmFjdGVycygpICsgc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0
UG9zKSk7CiAgICAgICAgIGlmIChub2RlICYmIHJlc3VsdFNldC5hZGQobm9kZSkuc2Vjb25kKQog
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChub2RlKTsKICAgICAgICAgCkBAIC00MzYsMTUgKzQz
NywxNiBAQCBWYWx1ZSBGdW5TdHJpbmc6OmV2YWx1YXRlKCkgY29uc3QKIAogVmFsdWUgRnVuQ29u
Y2F0OjpldmFsdWF0ZSgpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFVDaGFyLCAxMDI0PiByZXN1bHQ7
CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgx
MDI0KTsKIAogICAgIHVuc2lnbmVkIGNvdW50ID0gYXJnQ291bnQoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBTdHJpbmcgc3RyKGFyZyhpKS0+
ZXZhbHVhdGUoKS50b1N0cmluZygpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIuY2hhcmFj
dGVycygpLCBzdHIubGVuZ3RoKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKHN0cik7CiAgICAg
fQogCi0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAg
ICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFZhbHVlIEZ1blN0YXJ0c1dpdGg6OmV2
YWx1YXRlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCShyZXZpc2lvbiA5
Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAjaWYgRU5BQkxFKFhQQVRIKQogCiAjaW5jbHVkZSAiQ29udGFp
bmVyTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFhQYXRoIHsKQEAgLTUxLDE3ICs1MiwxNyBAQCBTdHJp
bmcgc3RyaW5nVmFsdWUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIHJldHVybiBub2RlLT5ub2Rl
VmFsdWUoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmIChpc1Jvb3REb21Ob2Rl
KG5vZGUpIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7Ci0gICAg
ICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgICAgICAgICAgICAgU3RyaW5n
QnVpbGRlciByZXN1bHQ7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgx
MDI0KTsKIAogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IG5vZGUtPmZpcnN0Q2hpbGQo
KTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBub2RlVmFsdWUgPSBuLT5ub2RlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQobm9kZVZhbHVlLmNoYXJhY3RlcnMoKSwgbm9kZVZhbHVlLmxlbmd0
aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobm9kZVZhbHVlKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdC50b1N0cmluZygpOwogICAgICAgICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAkocmV2aXNpb24gOTM5
NTMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjgsOSArMTY4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldFhTTFRM
b2FkQ2FsbEJhY2soeAogICAgIGdsb2JhbENhY2hlZFJlc291cmNlTG9hZGVyID0gY2FjaGVkUmVz
b3VyY2VMb2FkZXI7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVUb1ZlY3Rvcih2b2lkKiBjb250ZXh0
LCBjb25zdCBjaGFyKiBidWZmZXIsIGludCBsZW4pCitzdGF0aWMgaW50IHdyaXRlVG9TdHJpbmdC
dWlsZGVyKHZvaWQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50IGxlbikKIHsKLSAg
ICBWZWN0b3I8VUNoYXI+JiByZXN1bHRPdXRwdXQgPSAqc3RhdGljX2Nhc3Q8VmVjdG9yPFVDaGFy
Pio+KGNvbnRleHQpOworICAgIFN0cmluZ0J1aWxkZXImIHJlc3VsdE91dHB1dCA9ICpzdGF0aWNf
Y2FzdDxTdHJpbmdCdWlsZGVyKj4oY29udGV4dCk7CiAKICAgICBpZiAoIWxlbikKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0xOTcsOSArMTk3LDkgQEAgc3RhdGljIGJvb2wgc2F2ZVJlc3VsdFRvU3Ry
aW5nKHhtbERvY1B0cgogICAgIGlmICghb3V0cHV0QnVmKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdFZlY3RvcjsKLSAgICBvdXRwdXRCdWYtPmNvbnRl
eHQgPSAmcmVzdWx0VmVjdG9yOwotICAgIG91dHB1dEJ1Zi0+d3JpdGVjYWxsYmFjayA9IHdyaXRl
VG9WZWN0b3I7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHRCdWlsZGVyOworICAgIG91dHB1dEJ1
Zi0+Y29udGV4dCA9ICZyZXN1bHRCdWlsZGVyOworICAgIG91dHB1dEJ1Zi0+d3JpdGVjYWxsYmFj
ayA9IHdyaXRlVG9TdHJpbmdCdWlsZGVyOwogCiAgICAgaW50IHJldHZhbCA9IHhzbHRTYXZlUmVz
dWx0VG8ob3V0cHV0QnVmLCByZXN1bHREb2MsIHNoZWV0KTsKICAgICB4bWxPdXRwdXRCdWZmZXJD
bG9zZShvdXRwdXRCdWYpOwpAQCAtMjA3LDEwICsyMDcsMTAgQEAgc3RhdGljIGJvb2wgc2F2ZVJl
c3VsdFRvU3RyaW5nKHhtbERvY1B0cgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBX
b3JrYXJvdW5kIGZvciA8aHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDk1NjY4PjogbGlieHNsdCBhcHBlbmRzIGFuIGV4dHJhIGxpbmUgZmVlZCB0byB0aGUgcmVzdWx0
LgotICAgIGlmIChyZXN1bHRWZWN0b3Iuc2l6ZSgpID4gMCAmJiByZXN1bHRWZWN0b3JbcmVzdWx0
VmVjdG9yLnNpemUoKSAtIDFdID09ICdcbicpCi0gICAgICAgIHJlc3VsdFZlY3Rvci5yZW1vdmVM
YXN0KCk7CisgICAgaWYgKHJlc3VsdEJ1aWxkZXIubGVuZ3RoKCkgPiAwICYmIHJlc3VsdEJ1aWxk
ZXJbcmVzdWx0QnVpbGRlci5sZW5ndGgoKSAtIDFdID09ICdcbicpCisgICAgICAgIHJlc3VsdEJ1
aWxkZXIucmVzaXplKHJlc3VsdEJ1aWxkZXIubGVuZ3RoKCkgLSAxKTsKIAotICAgIHJlc3VsdFN0
cmluZyA9IFN0cmluZzo6YWRvcHQocmVzdWx0VmVjdG9yKTsKKyAgICByZXN1bHRTdHJpbmcgPSBy
ZXN1bHRCdWlsZGVyLnRvU3RyaW5nKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0
aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVy
UmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9k
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIENoYXJhY3RlclJl
ZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHNfaAogI2RlZmluZSBDaGFyYWN0ZXJSZWZlcmVuY2VQ
YXJzZXJJbmxpbmVNZXRob2RzX2gKIAotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzYsMTkgKzM2LDE5IEBAIGlubGluZSBib29sIGlzSGV4RGlnaXQoVUNoYXIgY2MpCiAgICAgcmV0
dXJuIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKSB8fCAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykg
fHwgKGNjID49ICdBJyAmJiBjYyA8PSAnRicpOwogfQogCi1pbmxpbmUgdm9pZCB1bmNvbnN1bWVD
aGFyYWN0ZXJzKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBjb25zdCBWZWN0b3I8VUNoYXIsIDEw
PiYgY29uc3VtZWRDaGFyYWN0ZXJzKQoraW5saW5lIHZvaWQgdW5jb25zdW1lQ2hhcmFjdGVycyhT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nQnVpbGRlciYgY29uc3VtZWRDaGFy
YWN0ZXJzKQogewotICAgIGlmIChjb25zdW1lZENoYXJhY3RlcnMuc2l6ZSgpID09IDEpCisgICAg
aWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5ndGgoKSA9PSAxKQogICAgICAgICBzb3VyY2UucHVz
aChjb25zdW1lZENoYXJhY3RlcnNbMF0pOwotICAgIGVsc2UgaWYgKGNvbnN1bWVkQ2hhcmFjdGVy
cy5zaXplKCkgPT0gMikgeworICAgIGVsc2UgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5ndGgo
KSA9PSAyKSB7CiAgICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1swXSk7CiAg
ICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1sxXSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIHNvdXJjZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoY29uc3VtZWRDaGFy
YWN0ZXJzLmRhdGEoKSwgY29uc3VtZWRDaGFyYWN0ZXJzLnNpemUoKSkpKTsKKyAgICAgICAgc291
cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZyhjb25zdW1lZENoYXJhY3RlcnMuY2hh
cmFjdGVycygpLCBjb25zdW1lZENoYXJhY3RlcnMubGVuZ3RoKCkpKSk7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBQYXJzZXJGdW5jdGlvbnM+Ci1ib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVu
Y2UoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkQ2hh
cmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dl
ZENoYXJhY3RlcikKK2Jvb2wgY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZShTZWdtZW50ZWRTdHJp
bmcmIHNvdXJjZSwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5v
dWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpCiB7CiAgICAg
QVNTRVJUKCFhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciB8fCBhZGRpdGlvbmFsQWxsb3dlZENo
YXJhY3RlciA9PSAnIicgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJ1wnJyB8fCBh
ZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9PSAnPicpOwogICAgIEFTU0VSVCghbm90RW5vdWdo
Q2hhcmFjdGVycyk7CkBAIC02NSw3ICs2NSw3IEBAIGJvb2wgY29uc3VtZUNoYXJhY3RlclJlZmVy
ZW5jZShTZWdtZW50ZWQKICAgICB9OwogICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlID0gSW5p
dGlhbDsKICAgICBVQ2hhcjMyIHJlc3VsdCA9IDA7Ci0gICAgVmVjdG9yPFVDaGFyLCAxMD4gY29u
c3VtZWRDaGFyYWN0ZXJzOworICAgIFN0cmluZ0J1aWxkZXIgY29uc3VtZWRDaGFyYWN0ZXJzOwog
ICAgIAogICAgIHdoaWxlICghc291cmNlLmlzRW1wdHkoKSkgewogICAgICAgICBVQ2hhciBjYyA9
ICpzb3VyY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJl
ZmVyZW5jZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2
YWx1ZTsKICAgICB9CiAKLSAgICBpbmxpbmUgc3RhdGljIGJvb2wgY29udmVydFRvVVRGMTYoVUNo
YXIzMiB2YWx1ZSwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRDaGFyYWN0ZXIpCisgICAgaW5s
aW5lIHN0YXRpYyBib29sIGNvbnZlcnRUb1VURjE2KFVDaGFyMzIgdmFsdWUsIFN0cmluZ0J1aWxk
ZXImIGRlY29kZWRDaGFyYWN0ZXIpCiAgICAgewogICAgICAgICBpZiAoVV9JU19CTVAodmFsdWUp
KSB7CiAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0YXRpY19jYXN0PFVDaGFyPih2YWx1ZSk7
CkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKIAogICAgIGlubGluZSBzdGF0aWMgYm9vbCBhY2Nl
cHRNYWxmb3JtZWQoKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgaW5saW5lIHN0YXRpYyBib29s
IGNvbnN1bWVOYW1lZEVudGl0eShTZWdtZW50ZWRTdHJpbmcmLCBWZWN0b3I8VUNoYXIsIDE2PiYs
IGJvb2wmLCBVQ2hhciwgVUNoYXImKQorICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb25zdW1lTmFt
ZWRFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiwgU3RyaW5nQnVpbGRlciYsIGJvb2wmLCBVQ2hhciwg
VUNoYXImKQogICAgIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogCiB9CiAKLWJvb2wgY29uc3Vt
ZVhNTENoYXJhY3RlclJlZmVyZW5jZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVmVjdG9yPFVD
aGFyLCAxNj4mIGRlY29kZWRDaGFyYWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMpCiti
b29sIGNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2Us
IFN0cmluZ0J1aWxkZXImIGRlY29kZWRDaGFyYWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3Rl
cnMpCiB7CiAgICAgcmV0dXJuIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2U8WE1MQ2hhcmFjdGVy
UmVmZXJlbmNlUGFyc2VyPihzb3VyY2UsIGRlY29kZWRDaGFyYWN0ZXIsIG5vdEVub3VnaENoYXJh
Y3RlcnMsIDApOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0
ZXJSZWZlcmVuY2VQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFy
c2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oCShyZXZpc2lvbiA5Mzk1MykKKysrIFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IAotYm9vbCBjb25zdW1lWE1MQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYsIFZl
Y3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0
ZXJzKTsKK2Jvb2wgY29uc3VtZVhNTENoYXJhY3RlclJlZmVyZW5jZShTZWdtZW50ZWRTdHJpbmcm
LCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0
ZXJzKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuaXpl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbml6
ZXIuY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1M
VG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
PHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTI1MSwxMSArMjUyLDEwIEBA
IGJvb2wgWE1MVG9rZW5pemVyOjpuZXh0VG9rZW4oU2VnbWVudGVkU3QKICAgICBYTUxfQkVHSU5f
U1RBVEUoQ2hhcmFjdGVyUmVmZXJlbmNlU3RhcnRTdGF0ZSkgewogICAgICAgICBpZiAoY2MgPT0g
JyMnKSB7CiAgICAgICAgICAgICBib29sIG5vdEVub3VnaENoYXJhY3RlcnMgPSBmYWxzZTsKLSAg
ICAgICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+IGRlY29kZWRDaGFyYWN0ZXI7CisgICAgICAgICAg
ICBTdHJpbmdCdWlsZGVyIGRlY29kZWRDaGFyYWN0ZXI7CiAgICAgICAgICAgICBpZiAoY29uc3Vt
ZVhNTENoYXJhY3RlclJlZmVyZW5jZShzb3VyY2UsIGRlY29kZWRDaGFyYWN0ZXIsIG5vdEVub3Vn
aENoYXJhY3RlcnMpKSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFVDaGFyLCAxNj46OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBkZWNvZGVkQ2hhcmFjdGVyLmJlZ2luKCk7Ci0gICAgICAgICAgICAg
ICAgZm9yICg7IGl0ZXIgIT0gZGVjb2RlZENoYXJhY3Rlci5lbmQoKTsgKytpdGVyKQotICAgICAg
ICAgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXIoKml0ZXIpOworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWNvZGVkQ2hhcmFjdGVyLmxlbmd0aCgpOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcihkZWNvZGVkQ2hhcmFjdGVyW2ldKTsK
ICAgICAgICAgICAgICAgICBYTUxfU1dJVENIX1RPKERhdGFTdGF0ZSk7CiAgICAgICAgICAgICB9
IGVsc2UgaWYgKG5vdEVub3VnaENoYXJhY3RlcnMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGhh
dmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7CkBAIC00MzcsMTIgKzQzNywxMSBAQCBib29sIFhN
TFRva2VuaXplcjo6bmV4dFRva2VuKFNlZ21lbnRlZFN0CiAgICAgWE1MX0JFR0lOX1NUQVRFKENo
YXJhY3RlclJlZmVyZW5jZUluQXR0cmlidXRlVmFsdWVTdGF0ZSkgewogICAgICAgICBpZiAoY2Mg
PT0gJyMnKSB7CiAgICAgICAgICAgICBib29sIG5vdEVub3VnaENoYXJhY3RlcnMgPSBmYWxzZTsK
LSAgICAgICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+IGRlY29kZWRDaGFyYWN0ZXI7CisgICAgICAg
ICAgICBTdHJpbmdCdWlsZGVyIGRlY29kZWRDaGFyYWN0ZXI7CiAgICAgICAgICAgICBzb3VyY2Uu
cHVzaChjYyk7CiAgICAgICAgICAgICBpZiAoY29uc3VtZVhNTENoYXJhY3RlclJlZmVyZW5jZShz
b3VyY2UsIGRlY29kZWRDaGFyYWN0ZXIsIG5vdEVub3VnaENoYXJhY3RlcnMpKSB7Ci0gICAgICAg
ICAgICAgICAgVmVjdG9yPFVDaGFyLCAxNj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBkZWNvZGVk
Q2hhcmFjdGVyLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZGVjb2Rl
ZENoYXJhY3Rlci5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgICAgICAgICBtX3Rva2VuLT5h
cHBlbmRUb0F0dHJpYnV0ZVZhbHVlKCppdGVyKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGVjb2RlZENoYXJhY3Rlci5sZW5ndGgoKTsgKytpKQorICAgICAgICAg
ICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKGRlY29kZWRDaGFyYWN0
ZXJbaV0pOwogICAgICAgICAgICAgICAgIFhNTF9BRFZBTkNFX1RPKEF0dHJpYnV0ZVZhbHVlUXVv
dGVkU3RhdGUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChub3RFbm91Z2hDaGFyYWN0ZXJzKQog
ICAgICAgICAgICAgICAgIHJldHVybiBoYXZlQnVmZmVyZWRDaGFyYWN0ZXJUb2tlbigpOwo=
</data>
<flag name="commit-queue"
          id="101644"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105476</attachid>
            <date>2011-08-29 02:03:09 -0700</date>
            <delta_ts>2011-08-29 21:38:28 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>patch-67079c</filename>
            <type>text/plain</type>
            <size>107382</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM5NTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDgtMjkgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXBsYWNlIHVzYWdlcyBvZiBWZWN0b3I8VUNoYXI+IHdpdGggZXhpc3RpbmcgU3Ry
aW5nQnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjcwNzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0byBzdXBwb3J0IDgtYml0IHN0cmluZyBidWZmZXJzLgor
ICAgICAgICBBZGRzIFN0cmluZ0J1aWxkZXI6OmNoYXJhY3RlcnMoKSBiZWNhdXNlIHRoZSBvcmln
aW5hbCBWZWN0b3I8VUNoYXI+OjpkYXRhKCkKKyAgICAgICAgaXMgd2lkZWx5IHVzZWQuCisgICAg
ICAgIFNldHMgdGhlIG1pbmltdW0gc2l6ZSBvZiBidWZmZXIgdG8gMTYgdG8gcHJldmVudCBwb3Nz
aWJsZSBwZXJmb3JtYW5jZQorICAgICAgICByZWdyZXNzaW9uLiBGdXJ0aGVyIHBlcmZvcm1hbmNl
IGludmVzdGlnYXRpb24gc2hvdWxkIGJlIGRvbmUgaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MDg0LgorCisgICAgICAgICogd3RmL0ZvcndhcmQu
aDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdURjo6
U3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplZCk6IFNldHMgbWluaW11bSBidWZmZXIg
c2l6ZSB0byAxNiBieXRlcy4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6Om9wZXJhdG9yW10pOgorICAgICAgICAoV1RGOjpT
dHJpbmdCdWlsZGVyOjpjaGFyYWN0ZXJzKTogQWRkZWQuCisKIDIwMTEtMDgtMjggIEpvbmF0aGFu
IExpdSAgPG5ldDE0N0BnbWFpbC5jb20+CiAKICAgICAgICAgRml4IGJ1aWxkIGVycm9yIHdoZW4g
Y29tcGlsaW5nIHdpdGggTWluR1ctdzY0IGJ5IGRpc2FibGluZyBKSVQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvRm9yd2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvRm9yd2FyZC5oCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvRm9yd2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgIGNsYXNzIEVuY29kZXI7CiAgICAgY2xhc3MgU3RyaW5nOwogICAg
IGNsYXNzIFN0cmluZ0J1ZmZlcjsKKyAgICBjbGFzcyBTdHJpbmdCdWlsZGVyOwogICAgIGNsYXNz
IFN0cmluZ0ltcGw7CiB9CiAKQEAgLTU5LDYgKzYwLDcgQEAgdXNpbmcgV1RGOjpFbmNvZGVyOwog
dXNpbmcgV1RGOjpEZWNvZGVyOwogdXNpbmcgV1RGOjpTdHJpbmc7CiB1c2luZyBXVEY6OlN0cmlu
Z0J1ZmZlcjsKK3VzaW5nIFdURjo6U3RyaW5nQnVpbGRlcjsKIHVzaW5nIFdURjo6U3RyaW5nSW1w
bDsKIAogI2VuZGlmIC8vIFdURl9Gb3J3YXJkX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWluaW11bUNhcGFjaXR5ID0gMTY7CisKIHZvaWQgU3RyaW5nQnVpbGRlcjo6
cmVpZnlTdHJpbmcoKQogewogICAgIC8vIENoZWNrIGlmIHRoZSBzdHJpbmcgYWxyZWFkeSBleGlz
dHMuCkBAIC0xMjYsMTAgKzEyOCwxMCBAQCBVQ2hhciogU3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5p
bml0aWFsaXplCiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBuZWVkIHRvIHJlYWxsb2MgdGhl
IGJ1ZmZlci4KLSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnMoKSwg
c3RkOjptYXgocmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyLT5sZW5ndGgoKSAqIDIpKTsKKyAgICAg
ICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnMoKSwgc3RkOjptYXgocmVxdWly
ZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgbV9idWZmZXItPmxlbmd0aCgpICog
MikpKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0g
bV9sZW5ndGgpOwotICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzKCks
IHN0ZDo6bWF4KHJlcXVpcmVkTGVuZ3RoLCByZXF1aXJlZExlbmd0aCAqIDIpKTsKKyAgICAgICAg
YWxsb2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFjdGVycygpLCBzdGQ6Om1heChyZXF1aXJlZExl
bmd0aCwgc3RkOjptYXgobWluaW11bUNhcGFjaXR5LCBtX2xlbmd0aCAqIDIpKSk7CiAgICAgfQog
CiAgICAgVUNoYXIqIHJlc3VsdCA9IG1fYnVmZmVyQ2hhcmFjdGVycyArIG1fbGVuZ3RoOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCShy
ZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMCArMTA4LDE1IEBAIHB1YmxpYzoKICAg
ICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NF
UlQoaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnMoKVtpXTsKKyAgICB9
CisKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0CisgICAgewogICAgICAgICBp
ZiAoIW1fc3RyaW5nLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5nW2ldOwor
ICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5nLmNoYXJhY3RlcnMoKTsKICAgICAgICAgQVNTRVJU
KG1fYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzKClbaV07Cisg
ICAgICAgIHJldHVybiBtX2J1ZmZlci0+Y2hhcmFjdGVycygpOwogICAgIH0KIAogICAgIHZvaWQg
Y2xlYXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM5NTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNjQgQEAKKzIwMTEtMDgtMjkg
IFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXBs
YWNlIHVzYWdlcyBvZiBWZWN0b3I8VUNoYXI+IHdpdGggZXhpc3RpbmcgU3RyaW5nQnVpbGRlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcwNzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMuIEFsbCBleGlzdGluZyB1bml0IHRlc3RzIGFuZCBsYXlvdXQgdGVzdHMgc2hvdWxkIHJ1bgor
ICAgICAgICBhcyBiZWZvcmUuCisKKyAgICAgICAgKiBjc3MvQ1NTT01VdGlscy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjphcHBlbmRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFs
aXplQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUNoYXJhY3RlckFzQ29k
ZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUlkZW50aWZpZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2VyaWFsaXplU3RyaW5nKToKKyAgICAgICAgKiBjc3MvQ1NTT01VdGlscy5o
OgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JD
aGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZSk6CisgICAgICAgICogY3NzL0NTU1dy
YXBTaGFwZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTV3JhcFNoYXBlUmVjdDo6Y3NzVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NXcmFwU2hhcGVDaXJjbGU6OmNzc1RleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTV3JhcFNoYXBlRWxsaXBzZTo6Y3NzVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NXcmFwU2hhcGVQb2x5Z29uOjpjc3NUZXh0KToKKyAgICAgICAgKiBlZGl0aW5n
L0hUTUxJbnRlcmNoYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0SFRNTFRleHRU
b0ludGVyY2hhbmdlRm9ybWF0KToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGll
cyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcpOgorICAg
ICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmNvbmNhdGVuYXRlTWFya3VwKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGVWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmli
dXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVk
VVJMQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZE5vZGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRD
b21tZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmREb2N1
bWVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kT3BlblRhZyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kQ2xvc2VUYWcpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
Q0RBVEFTZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRTdGFydE1hcmt1cCk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRW5kTWFya3VwKToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6Cisg
ICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhTdHlsZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9wZW5UYWcpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRha2VSZXN1bHRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OnVybFRvTWFya3VwKToKKyAgICAgICAgKiBodG1sL0RPTVRva2VuTGlz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01Ub2tlbkxpc3Q6OnJlbW92ZVRva2VuKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGb250RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZUZvbnRTaXplKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzdHJpcHBl
ZFBsYWNlaG9sZGVyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmVsb2FkU2Nhbm5lcjo6ZW1pdFJ1bGUpOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmg6CisgICAgICAgICogaHRtbC9w
YXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lSFRN
TEVudGl0eSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5oOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VIVE1MSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhUTUxOb25OZWdh
dGl2ZUludGVnZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6cHJvY2Vzc0VudGl0eSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpuZXh0VG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxk
ZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXI6OmdpdmVSZW1haW5pbmdUbyk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJblRhYmxlVGV4dCk6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1
ZTo6dG9KU09OU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZhbHVlOjp3cml0
ZUpTT04pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09O
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFycmF5Ojp3cml0ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9s
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjY2Vzc0NvbnRyb2xQcmVmbGlnaHRSZXF1
ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToK
KyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OnNl
dFRvb2xUaXApOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1
c3RvbUF0dHJpYnV0ZXMpOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OnRvU3RyaW5nKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9LVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmRlcHJlY2F0ZWRTdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9MaW5rSGFzaC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcXVlZXplT3V0TnVs
bENoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYW5TbGFzaERvdERvdFNsYXNoZXMp
OgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VEb3VibGVTbGFzaGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmNsZWFuU2xhc2hEb3RTbGFzaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFuUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjp2aXNpdGVkVVJMSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6
OnZpc2l0ZWRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNoKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9MaW5rSGFzaC5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9EYXRhT2Jq
ZWN0R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnNldFVSTCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY0lDVS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OmRl
Y29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRTdHJlYW06Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFN0cmVhbTo6cmVsZWFzZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmg6
CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0Q2hhcmFjdGVyc0FuZExlbmd0aEZv
ckh5cGhlbik6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAg
KFdlYkNvcmU6OkJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbjo6QnVmZmVyRm9yQXBwZW5kaW5nSHlw
aGVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06Om1hcmtlclRleHRXaXRoU3VmZml4KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1N5
bWJvbGljKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnN1ZmZpeCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cXVvdGVBbmRF
c2NhcGVOb25QcmludGFibGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTEZlbmNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxGZW5jZWQ6OnVw
ZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkNvZGluZzo6ZGVjb2RlU3RyaW5nKToKKyAg
ICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycyk6CisgICAgICAgICogeG1sL1hQYXRoRnVu
Y3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5JZDo6ZXZhbHVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNvbmNhdDo6ZXZhbHVhdGUpOgorICAgICAgICAq
IHhtbC9YUGF0aFV0aWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OnN0cmluZ1ZhbHVl
KToKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6d3JpdGVUb1N0cmluZ0J1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2F2ZVJlc3Vs
dFRvU3RyaW5nKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNl
cklubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OnVuY29uc3VtZUNoYXJhY3RlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZSk6CisgICAgICAg
ICogeG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3VtZVhNTENoYXJhY3RlclJlZmVyZW5jZSk6CisgICAgICAgICogeG1sL3Bh
cnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaDoKKyAgICAgICAgKiB4bWwvcGFyc2Vy
L1hNTFRva2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6Om5leHRU
b2tlbik6CisKIDIwMTEtMDgtMjkgIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFwcGxlLmNv
bT4KIAogICAgICAgICBmYXN0L2NhbnZhcy9zaGFkb3ctb2Zmc2V0LSouaHRtbCBmYWlsIG9uIExl
b3BhcmQvU25vdyBMZW9wYXJkIHdoZW4gcmVtb3ZpbmcgdGhlIHdvcmsgYXJvdW5kIGZvciA8cmRh
cjovL3Byb2JsZW0vNTUzOTM4OD4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTT01VdGls
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU09NVXRpbHMuY3BwCShy
ZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NPTVV0aWxzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDExIEBACiAjaW5jbHVkZSAiQ1NTT01VdGlscy5oIgog
CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdm9pZCBhcHBlbmRDaGFy
YWN0ZXIoVUNoYXIzMiBjLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbykKK3N0YXRpYyB2b2lkIGFw
cGVuZENoYXJhY3RlcihVQ2hhcjMyIGMsIFN0cmluZ0J1aWxkZXImIGFwcGVuZFRvKQogewogICAg
IGlmIChVMTZfTEVOR1RIKGMpID09IDEpCiAgICAgICAgIGFwcGVuZFRvLmFwcGVuZChzdGF0aWNf
Y2FzdDxVQ2hhcj4oYykpOwpAQCAtNDUsMTMgKzQ2LDEzIEBAIHN0YXRpYyB2b2lkIGFwcGVuZENo
YXJhY3RlcihVQ2hhcjMyIGMsIFYKICAgICB9CiB9CiAKLXZvaWQgc2VyaWFsaXplQ2hhcmFjdGVy
KFVDaGFyMzIgYywgVmVjdG9yPFVDaGFyPiYgYXBwZW5kVG8pCit2b2lkIHNlcmlhbGl6ZUNoYXJh
Y3RlcihVQ2hhcjMyIGMsIFN0cmluZ0J1aWxkZXImIGFwcGVuZFRvKQogewogICAgIGFwcGVuZFRv
LmFwcGVuZCgnXFwnKTsKICAgICBhcHBlbmRDaGFyYWN0ZXIoYywgYXBwZW5kVG8pOwogfQogCi12
b2lkIHNlcmlhbGl6ZUNoYXJhY3RlckFzQ29kZVBvaW50KFVDaGFyMzIgYywgVmVjdG9yPFVDaGFy
PiYgYXBwZW5kVG8pCit2b2lkIHNlcmlhbGl6ZUNoYXJhY3RlckFzQ29kZVBvaW50KFVDaGFyMzIg
YywgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pCiB7CiAgICAgYXBwZW5kVG8uYXBwZW5kKCdcXCcp
OwogICAgIGFwcGVuZFVuc2lnbmVkQXNIZXgoYywgYXBwZW5kVG8sIExvd2VyY2FzZSk7CkBAIC02
MCwxMiArNjEsMTIgQEAgdm9pZCBzZXJpYWxpemVDaGFyYWN0ZXJBc0NvZGVQb2ludChVQ2hhcgog
CiB2b2lkIHNlcmlhbGl6ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBTdHJp
bmcmIGFwcGVuZFRvKQogewotICAgIFZlY3RvcjxVQ2hhcj4gYWRkZW5kOworICAgIFN0cmluZ0J1
aWxkZXIgYWRkZW5kOwogICAgIHNlcmlhbGl6ZUlkZW50aWZpZXIoaWRlbnRpZmllciwgYWRkZW5k
KTsKLSAgICBhcHBlbmRUby5hcHBlbmQoU3RyaW5nOjphZG9wdChhZGRlbmQpKTsKKyAgICBhcHBl
bmRUby5hcHBlbmQoYWRkZW5kLnRvU3RyaW5nKCkpOwogfQogCi12b2lkIHNlcmlhbGl6ZUlkZW50
aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbykK
K3ZvaWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFN0cmlu
Z0J1aWxkZXImIGFwcGVuZFRvKQogewogICAgIGJvb2wgaXNGaXJzdCA9IHRydWU7CiAgICAgYm9v
bCBpc1NlY29uZCA9IGZhbHNlOwpAQCAtOTYsMTIgKzk3LDEyIEBAIHZvaWQgc2VyaWFsaXplSWRl
bnRpZmllcihjb25zdCBTdHJpbmcmIGkKIAogdm9pZCBzZXJpYWxpemVTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIFN0cmluZyYgYXBwZW5kVG8pCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBhZGRl
bmQ7CisgICAgU3RyaW5nQnVpbGRlciBhZGRlbmQ7CiAgICAgc2VyaWFsaXplU3RyaW5nKHN0cmlu
ZywgYWRkZW5kKTsKLSAgICBhcHBlbmRUby5hcHBlbmQoU3RyaW5nOjphZG9wdChhZGRlbmQpKTsK
KyAgICBhcHBlbmRUby5hcHBlbmQoYWRkZW5kLnRvU3RyaW5nKCkpOwogfQogCi12b2lkIHNlcmlh
bGl6ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgVmVjdG9yPFVDaGFyPiYgYXBwZW5kVG8p
Cit2b2lkIHNlcmlhbGl6ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgU3RyaW5nQnVpbGRl
ciYgYXBwZW5kVG8pCiB7CiAgICAgYXBwZW5kVG8uYXBwZW5kKCdcIicpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTT01VdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NPTVV0aWxzLmgJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU09NVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTIgKzQwLDEyIEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIC8vIENvbW1vbiBzZXJpYWxpemluZyBtZXRob2RzLiBTZWU6IGh0dHA6
Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zCi12b2lk
IHNlcmlhbGl6ZUNoYXJhY3RlcihVQ2hhcjMyLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbyk7Ci12
b2lkIHNlcmlhbGl6ZUNoYXJhY3RlckFzQ29kZVBvaW50KFVDaGFyMzIsIFZlY3RvcjxVQ2hhcj4m
IGFwcGVuZFRvKTsKK3ZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyKFVDaGFyMzIsIFN0cmluZ0J1aWxk
ZXImIGFwcGVuZFRvKTsKK3ZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIz
MiwgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pOwogdm9pZCBzZXJpYWxpemVJZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllciwgU3RyaW5nJiBhcHBlbmRUbyk7Ci12b2lkIHNlcmlhbGl6
ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBWZWN0b3I8VUNoYXI+JiBhcHBl
bmRUbyk7Ci12b2lkIHNlcmlhbGl6ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgU3RyaW5n
JiBhcHBlbmRUbyk7Ci12b2lkIHNlcmlhbGl6ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywg
VmVjdG9yPFVDaGFyPiYgYXBwZW5kVG8pOwordm9pZCBzZXJpYWxpemVJZGVudGlmaWVyKGNvbnN0
IFN0cmluZyYgaWRlbnRpZmllciwgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pOwordm9pZCBzZXJp
YWxpemVTdHJpbmcoY29uc3QgU3RyaW5nJiwgU3RyaW5nJiBhcHBlbmRUbyk7Cit2b2lkIHNlcmlh
bGl6ZVN0cmluZyhjb25zdCBTdHJpbmcmLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbyk7CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0
aXZlVmFsdWUuY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
cmltaXRpdmVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNs
dWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAjaW5jbHVk
ZSAiRGFzaGJvYXJkUmVnaW9uLmgiCkBAIC03MDgsMTQgKzcwOSwxNCBAQCBTdHJpbmcgQ1NTUHJp
bWl0aXZlVmFsdWU6OmNzc1RleHQoKSBjb25zCiAgICAgICAgIGNhc2UgQ1NTX0FUVFI6IHsKICAg
ICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBhdHRyUGFyZW4sICgi
YXR0cigiKSk7CiAKLSAgICAgICAgICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgICAgICAg
ICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNiArIG1fdmFsdWUuc3RyaW5nLT5sZW5n
dGgoKSk7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICAgICAgICAgIHJl
c3VsdC5yZXNlcnZlQ2FwYWNpdHkoNiArIG1fdmFsdWUuc3RyaW5nLT5sZW5ndGgoKSk7CiAKLSAg
ICAgICAgICAgIGFwcGVuZChyZXN1bHQsIGF0dHJQYXJlbik7Ci0gICAgICAgICAgICBhcHBlbmQo
cmVzdWx0LCBtX3ZhbHVlLnN0cmluZyk7Ci0gICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKCcpJyk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGF0dHJQYXJlbik7CisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKG1fdmFsdWUuc3RyaW5nKTsKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJyknKTsKIAotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6YWRvcHQocmVzdWx0KTsK
KyAgICAgICAgICAgIHRleHQgPSByZXN1bHQudG9TdHJpbmcoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTX0NPVU5URVJfTkFNRToKQEAgLTczMywyMyAr
NzM0LDIzIEBAIFN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCgpIGNvbnMKICAgICAg
ICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCByZWN0UGFyZW4sICgicmVj
dCgiKSk7CiAKICAgICAgICAgICAgIFJlY3QqIHJlY3RWYWwgPSBnZXRSZWN0VmFsdWUoKTsKLSAg
ICAgICAgICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgICAgICAgICAgcmVzdWx0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoMzIpOwotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgcmVjdFBh
cmVuKTsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgICAgICAgICAgcmVz
dWx0LnJlc2VydmVDYXBhY2l0eSgzMik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlY3RQ
YXJlbik7CiAKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlY3RWYWwtPnRvcCgpLT5jc3NU
ZXh0KCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZWN0VmFsLT50b3AoKS0+Y3NzVGV4
dCgpKTsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKIAotICAgICAgICAgICAgYXBw
ZW5kKHJlc3VsdCwgcmVjdFZhbC0+cmlnaHQoKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQocmVjdFZhbC0+cmlnaHQoKS0+Y3NzVGV4dCgpKTsKICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAnKTsKIAotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgcmVjdFZhbC0+
Ym90dG9tKCktPmNzc1RleHQoKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlY3RWYWwt
PmJvdHRvbSgpLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwog
Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCByZWN0VmFsLT5sZWZ0KCktPmNzc1RleHQoKSk7
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlY3RWYWwtPmxlZnQoKS0+Y3NzVGV4dCgpKTsK
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKIAotICAgICAgICAgICAgdGV4dCA9IFN0
cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICAgICAgICAgIHRleHQgPSByZXN1bHQudG9TdHJpbmco
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTX1JHQkNP
TE9SOgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1dyYXBTaGFwZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NXcmFwU2hhcGVzLmNwcAkocmV2aXNpb24gOTM5
NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTV3JhcFNoYXBlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDggQEAKIAogI2luY2x1ZGUgIkNTU1dyYXBTaGFwZXMuaCIKIAorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwogdXNpbmcgbmFtZXNwYWNlIFdURjsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsMzQgKzQyLDM0IEBAIFN0cmluZyBDU1NXcmFw
U2hhcGVSZWN0Ojpjc3NUZXh0KCkgY29uc3QKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0
IFN0cmluZywgcmVjdFBhcmVuLCAoInJlY3QoIikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgU3RyaW5nLCBjb21tYSwgKCIsICIpKTsKICAgICAKLSAgICBWZWN0b3I8VUNoYXI+IHJl
c3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7Ci0gICAgYXBwZW5k
KHJlc3VsdCwgcmVjdFBhcmVuKTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1
bHQucmVzZXJ2ZUNhcGFjaXR5KDMyKTsKKyAgICByZXN1bHQuYXBwZW5kKHJlY3RQYXJlbik7CiAK
LSAgICBhcHBlbmQocmVzdWx0LCBtX2xlZnQtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3Vs
dCwgY29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV9sZWZ0LT5jc3NUZXh0KCkpOworICAgIHJl
c3VsdC5hcHBlbmQoY29tbWEpOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgbV90b3AtPmNzc1RleHQo
KSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV90b3At
PmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVz
dWx0LCBtX3dpZHRoLT5jc3NUZXh0KCkpOwotICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hKTsKKyAg
ICByZXN1bHQuYXBwZW5kKG1fd2lkdGgtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChj
b21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX2hlaWdodC0+Y3NzVGV4dCgpKTsKKyAgICBy
ZXN1bHQuYXBwZW5kKG1faGVpZ2h0LT5jc3NUZXh0KCkpOwogICAgIAogICAgIGlmIChtX3JhZGl1
c1guZ2V0KCkpIHsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOwotICAgICAgICBhcHBl
bmQocmVzdWx0LCBtX3JhZGl1c1gtPmNzc1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
Y29tbWEpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fcmFkaXVzWC0+Y3NzVGV4dCgpKTsKIAog
ICAgICAgICBpZiAobV9yYWRpdXNZLmdldCgpKSB7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0
LCBjb21tYSk7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBtX3JhZGl1c1ktPmNzc1RleHQo
KSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQobV9yYWRpdXNZLT5jc3NUZXh0KCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAog
ICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKICAgICAgICAgICAgIAotICAgIHJldHVybiBTdHJpbmc6
OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBTdHJp
bmcgQ1NTV3JhcFNoYXBlQ2lyY2xlOjpjc3NUZXh0KCkgY29uc3QKQEAgLTc1LDIwICs3NywyMCBA
QCBTdHJpbmcgQ1NTV3JhcFNoYXBlQ2lyY2xlOjpjc3NUZXh0KCkgY29uCiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGNpcmNsZVBhcmVuLCAoImNpcmNsZSgiKSk7CiAgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGNvbW1hLCAoIiwgIikpOwogICAgIAot
ICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KDMyKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjaXJjbGVQYXJlbik7CisgICAgU3RyaW5nQnVp
bGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgzMik7CisgICAgcmVzdWx0
LmFwcGVuZChjaXJjbGVQYXJlbik7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX2xlZnQtPmNzc1Rl
eHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV9s
ZWZ0LT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwogCi0gICAgYXBwZW5k
KHJlc3VsdCwgbV90b3AtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOwor
ICAgIHJlc3VsdC5hcHBlbmQobV90b3AtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChj
b21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3JhZGl1cy0+Y3NzVGV4dCgpKTsKKyAgICBy
ZXN1bHQuYXBwZW5kKG1fcmFkaXVzLT5jc3NUZXh0KCkpOwogICAgIHJlc3VsdC5hcHBlbmQoJykn
KTsKICAgICAgICAgICAgIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBTdHJpbmcgQ1NTV3JhcFNoYXBlRWxsaXBz
ZTo6Y3NzVGV4dCgpIGNvbnN0CkBAIC05NiwyMyArOTgsMjMgQEAgU3RyaW5nIENTU1dyYXBTaGFw
ZUVsbGlwc2U6OmNzc1RleHQoKSBjbwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3Ry
aW5nLCBlbGxpcHNlUGFyZW4sICgiZWxsaXBzZSgiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIGNvbW1hLCAoIiwgIikpOwogICAgIAotICAgIFZlY3RvcjxVQ2hhcj4g
cmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMyKTsKLSAgICBhcHBl
bmQocmVzdWx0LCBlbGxpcHNlUGFyZW4pOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAg
IHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOworICAgIHJlc3VsdC5hcHBlbmQoZWxsaXBzZVBh
cmVuKTsKIAotICAgIGFwcGVuZChyZXN1bHQsIG1fbGVmdC0+Y3NzVGV4dCgpKTsKLSAgICBhcHBl
bmQocmVzdWx0LCBjb21tYSk7CisgICAgcmVzdWx0LmFwcGVuZChtX2xlZnQtPmNzc1RleHQoKSk7
CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3RvcC0+
Y3NzVGV4dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7CisgICAgcmVzdWx0LmFwcGVu
ZChtX3RvcC0+Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKIAotICAgIGFw
cGVuZChyZXN1bHQsIG1fcmFkaXVzWC0+Y3NzVGV4dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBj
b21tYSk7CisgICAgcmVzdWx0LmFwcGVuZChtX3JhZGl1c1gtPmNzc1RleHQoKSk7CisgICAgcmVz
dWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3JhZGl1c1ktPmNzc1Rl
eHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChtX3JhZGl1c1ktPmNzc1RleHQoKSk7CiAgICAgcmVz
dWx0LmFwcGVuZCgnKScpOwogICAgICAgICAgICAgCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBDU1NX
cmFwU2hhcGVQb2x5Z29uOjpjc3NUZXh0KCkgY29uc3QKQEAgLTEyMSwyNiArMTIzLDI2IEBAIFN0
cmluZyBDU1NXcmFwU2hhcGVQb2x5Z29uOjpjc3NUZXh0KCkgY28KICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgcG9seWdvblBhcmVuTm9uWmVybywgKCJwb2x5Z29uKG5vbnpl
cm8sICIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgY29tbWEsICgi
LCAiKSk7CiAgICAgCi0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoMzIpOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJl
c3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOwogICAgIGlmIChtX3dpbmRSdWxlID09IFJVTEVfRVZF
Tk9ERCkKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgcG9seWdvblBhcmVuRXZlbk9kZCk7CisgICAg
ICAgIHJlc3VsdC5hcHBlbmQocG9seWdvblBhcmVuRXZlbk9kZCk7CiAgICAgZWxzZQotICAgICAg
ICBhcHBlbmQocmVzdWx0LCBwb2x5Z29uUGFyZW5Ob25aZXJvKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChwb2x5Z29uUGFyZW5Ob25aZXJvKTsKIAogICAgIEFTU0VSVCghKG1fdmFsdWVzLnNpemUo
KSAlIDIpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7
IGkgKz0gMikgewogICAgICAgICBpZiAoaSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAn
KTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgbV92YWx1ZXMuYXQoaSktPmNzc1RleHQoKSk7Ci0g
ICAgICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgbV92
YWx1ZXMuYXQoaSArIDEpLT5jc3NUZXh0KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fdmFs
dWVzLmF0KGkpLT5jc3NUZXh0KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChtX3ZhbHVlcy5hdChpICsgMSktPmNzc1RleHQoKSk7CiAgICAg
fQogICAgIAogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKICAgICAgICAgICAgIAotICAgIHJldHVy
biBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0hUTUxJbnRlcmNoYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9IVE1MSW50ZXJjaGFuZ2UuY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSFRNTEludGVyY2hhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTU3LDcgKzU4LDcgQEAgU3RyaW5nIGNvbnZlcnRIVE1MVGV4dFRvSW50
ZXJjaGFuZ2VGb3JtYQogICAgIGlmIChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVy
KCktPnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKQogICAgICAgICByZXR1cm4gaW47CiAKLSAg
ICBWZWN0b3I8VUNoYXI+IHM7CisgICAgU3RyaW5nQnVpbGRlciBzOwogCiAgICAgdW5zaWduZWQg
aSA9IDA7CiAgICAgdW5zaWduZWQgY29uc3VtZWQgPSAwOwpAQCAtNzQsMjggKzc1LDI4IEBAIFN0
cmluZyBjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWEKICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBhZGQgPSBjb3VudCAlIDM7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChhZGQpIHsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
cy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzLmFwcGVuZCgnICcpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZl
cnRlZFNwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoY29u
dmVydGVkU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgPSAzOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDAgfHwgaSArIDEgPT0gaW4ubGVu
Z3RoKCkpIC8vIGF0IHN0YXJ0IG9yIGVuZCBvZiBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcHBlbmQocywgY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBl
bmQoJyAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHN0YXJ0IG9mIHN0cmluZwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmluZygp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZCgnICcpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpICsgMiA9PSBpbi5sZW5ndGgoKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCBlbmQgb2Ygc3RyaW5nCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmlu
ZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFj
ZVN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKCcgJyk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEwNyw3
ICsxMDgsNyBAQCBTdHJpbmcgY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hCiAgICAg
ICAgIGkgKz0gY29uc3VtZWQ7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocyk7
CisgICAgcmV0dXJuIHMudG9TdHJpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAJKHJl
dmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNywxNCBAQAogI2luY2x1ZGUgIktVUkwu
aCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJYTUxOU05h
bWVzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0
Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotdm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5n
RW50aXRpZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBVQ2hhciogY29udGVudCwgc2l6ZV90
IGxlbmd0aCwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQordm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVw
bGFjaW5nRW50aXRpZXMoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBVQ2hhciogY29udGVudCwg
c2l6ZV90IGxlbmd0aCwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQogewogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgU3RyaW5nLCBhbXBSZWZlcmVuY2UsICgiJmFtcDsiKSk7CiAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGx0UmVmZXJlbmNlLCAoIiZsdDsiKSk7CkBA
IC02NCw3ICs2NSw3IEBAIHZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKFYK
ICAgICAgICAgZm9yIChzaXplX3QgbSA9IDA7IG0gPCBXVEZfQVJSQVlfTEVOR1RIKGVudGl0eU1h
cHMpOyArK20pIHsKICAgICAgICAgICAgIGlmIChjb250ZW50W2ldID09IGVudGl0eU1hcHNbbV0u
ZW50aXR5ICYmIGVudGl0eU1hcHNbbV0ubWFzayAmIGVudGl0eU1hc2spIHsKICAgICAgICAgICAg
ICAgICBvdXQuYXBwZW5kKGNvbnRlbnQgKyBwb3NpdGlvbkFmdGVyTGFzdEVudGl0eSwgaSAtIHBv
c2l0aW9uQWZ0ZXJMYXN0RW50aXR5KTsKLSAgICAgICAgICAgICAgICBhcHBlbmQob3V0LCBlbnRp
dHlNYXBzW21dLnJlZmVyZW5jZSk7CisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZChlbnRpdHlN
YXBzW21dLnJlZmVyZW5jZSk7CiAgICAgICAgICAgICAgICAgcG9zaXRpb25BZnRlckxhc3RFbnRp
dHkgPSBpICsgMTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTg2
LDExICs4NywxMSBAQCBNYXJrdXBBY2N1bXVsYXRvcjo6fk1hcmt1cEFjY3VtdWxhdG9yKCkKIAog
U3RyaW5nIE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2RlcyhOb2RlKiBub2RlLCBOb2Rl
KiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25seSkKIHsKLSAgICBWZWN0b3I8
VUNoYXI+IG91dDsKKyAgICBTdHJpbmdCdWlsZGVyIG91dDsKICAgICBzZXJpYWxpemVOb2Rlc1dp
dGhOYW1lc3BhY2VzKG5vZGUsIG5vZGVUb1NraXAsIGNoaWxkcmVuT25seSwgMCk7Ci0gICAgb3V0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKCkpOworICAgIG91dC5yZXNlcnZlQ2FwYWNp
dHkobGVuZ3RoKCkpOwogICAgIGNvbmNhdGVuYXRlTWFya3VwKG91dCk7Ci0gICAgcmV0dXJuIFN0
cmluZzo6YWRvcHQob3V0KTsKKyAgICByZXR1cm4gb3V0LnRvU3RyaW5nKCk7CiB9CiAKIHZvaWQg
TWFya3VwQWNjdW11bGF0b3I6OnNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSogbm9k
ZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHksIGNvbnN0IE5h
bWVzcGFjZXMqIG5hbWVzcGFjZXMpCkBAIC0xMzgsMTggKzEzOSwxOCBAQCB2b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRTdHJpbmcoY29uCiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFN0YXJ0VGFnKE5vZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7Ci0gICAg
VmVjdG9yPFVDaGFyPiBtYXJrdXA7CisgICAgU3RyaW5nQnVpbGRlciBtYXJrdXA7CiAgICAgYXBw
ZW5kU3RhcnRNYXJrdXAobWFya3VwLCBub2RlLCBuYW1lc3BhY2VzKTsKLSAgICBhcHBlbmRTdHJp
bmcoU3RyaW5nOjphZG9wdChtYXJrdXApKTsKKyAgICBhcHBlbmRTdHJpbmcobWFya3VwLnRvU3Ry
aW5nKCkpOwogICAgIGlmIChtX25vZGVzKQogICAgICAgICBtX25vZGVzLT5hcHBlbmQobm9kZSk7
CiB9CiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhOb2RlKiBub2RlKQog
ewotICAgIFZlY3RvcjxVQ2hhcj4gbWFya3VwOworICAgIFN0cmluZ0J1aWxkZXIgbWFya3VwOwog
ICAgIGFwcGVuZEVuZE1hcmt1cChtYXJrdXAsIG5vZGUpOwotICAgIGFwcGVuZFN0cmluZyhTdHJp
bmc6OmFkb3B0KG1hcmt1cCkpOworICAgIGFwcGVuZFN0cmluZyhtYXJrdXAudG9TdHJpbmcoKSk7
CiB9CiAKIHNpemVfdCBNYXJrdXBBY2N1bXVsYXRvcjo6dG90YWxMZW5ndGgoY29uc3QgVmVjdG9y
PFN0cmluZz4mIHN0cmluZ3MpCkBAIC0xNjEsMjUgKzE2MiwyNSBAQCBzaXplX3QgTWFya3VwQWNj
dW11bGF0b3I6OnRvdGFsTGVuZ3RoKGNvCiB9CiAKIC8vIEZJWE1FOiBUaGlzIGlzIGEgdmVyeSBp
bmVmZmljaWVudCB3YXkgb2YgYWNjdW11bGF0aW5nIHRoZSBtYXJrdXAuCi0vLyBXZSdyZSBjb252
ZXJ0aW5nIHJlc3VsdHMgb2YgYXBwZW5kU3RhcnRNYXJrdXAgYW5kIGFwcGVuZEVuZE1hcmt1cCBm
cm9tIFZlY3RvcjxVQ2hhcj4gdG8gU3RyaW5nCi0vLyBhbmQgdGhlbiBiYWNrIHRvIFZlY3RvcjxV
Q2hhcj4gYW5kIGFnYWluIHRvIFN0cmluZyBoZXJlLgotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
Y29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KQorLy8gV2UncmUgY29udmVydGlu
ZyByZXN1bHRzIG9mIGFwcGVuZFN0YXJ0TWFya3VwIGFuZCBhcHBlbmRFbmRNYXJrdXAgZnJvbSBT
dHJpbmdCdWlsZGVyIHRvIFN0cmluZworLy8gYW5kIHRoZW4gYmFjayB0byBTdHJpbmdCdWlsZGVy
IGFuZCBhZ2FpbiB0byBTdHJpbmcgaGVyZS4KK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmNvbmNh
dGVuYXRlTWFya3VwKFN0cmluZ0J1aWxkZXImIG91dCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fc3VjY2VlZGluZ01hcmt1cC5zaXplKCk7ICsraSkKLSAgICAgICAgYXBwZW5kKG91
dCwgbV9zdWNjZWVkaW5nTWFya3VwW2ldKTsKKyAgICAgICAgb3V0LmFwcGVuZChtX3N1Y2NlZWRp
bmdNYXJrdXBbaV0pOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1
dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlLCBi
b29sIGRvY3VtZW50SXNIVE1MKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmli
dXRlVmFsdWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwg
Ym9vbCBkb2N1bWVudElzSFRNTCkKIHsKICAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50
aXRpZXMocmVzdWx0LCBhdHRyaWJ1dGUuY2hhcmFjdGVycygpLCBhdHRyaWJ1dGUubGVuZ3RoKCks
CiAgICAgICAgIGRvY3VtZW50SXNIVE1MID8gRW50aXR5TWFza0luSFRNTEF0dHJpYnV0ZVZhbHVl
IDogRW50aXR5TWFza0luQXR0cmlidXRlVmFsdWUpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFt
ZXNwYWNlcyopCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVz
KFN0cmluZ0J1aWxkZXImLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopCiB7CiB9CiAKLXZvaWQgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hh
cj4mIHJlc3VsdCwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBhdHRy
aWJ1dGUpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVW
YWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogewogICAgIEFTU0VSVChlbGVtZW50LT5pc1VSTEF0dHJp
YnV0ZShjb25zdF9jYXN0PEF0dHJpYnV0ZSo+KCZhdHRyaWJ1dGUpKSk7CiAgICAgY29uc3QgU3Ry
aW5nIHJlc29sdmVkVVJMU3RyaW5nID0gcmVzb2x2ZVVSTElmTmVlZGVkKGVsZW1lbnQsIGF0dHJp
YnV0ZS52YWx1ZSgpKTsKQEAgLTE5NCw3ICsxOTUsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRRdW90ZWRVUkxBCiAgICAgICAgICAgICAgICAgcXVvdGVDaGFyID0gJ1wnJzsKICAg
ICAgICAgfQogICAgICAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hhcik7Ci0gICAgICAgIGFwcGVu
ZChyZXN1bHQsIHN0cmlwcGVkVVJMU3RyaW5nKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdHJp
cHBlZFVSTFN0cmluZyk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQocXVvdGVDaGFyKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTIwNSw3ICsyMDYsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRRdW90ZWRVUkxBCiAgICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIpOwogfQog
Ci12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVmFsdWUoVmVjdG9yPFVDaGFyPiYg
b3V0LCBjb25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UsIEVudGl0eU1hc2sgZW50
aXR5TWFzaykKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVWYWx1ZShTdHJpbmdC
dWlsZGVyJiBvdXQsIGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSwgRW50aXR5
TWFzayBlbnRpdHlNYXNrKQogewogICAgIFN0cmluZyBzdHIgPSBub2RlLT5ub2RlVmFsdWUoKTsK
ICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHN0ci5jaGFyYWN0ZXJzKCk7CkBAIC0yNTUs
NyArMjU2LDcgQEAgYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6c2hvdWxkQWRkTmFtZXNwYQogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROYW1lc3Bh
Y2UoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmIG5hbWVzcGFjZXMpCit2
b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROYW1lc3BhY2UoU3RyaW5nQnVpbGRlciYgcmVz
dWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
c3BhY2VVUkksIE5hbWVzcGFjZXMmIG5hbWVzcGFjZXMpCiB7CiAgICAgbmFtZXNwYWNlcy5jaGVj
a0NvbnNpc3RlbmN5KCk7CiAgICAgaWYgKG5hbWVzcGFjZVVSSS5pc0VtcHR5KCkpCkBAIC0yNjcs
MTAgKzI2OCwxMCBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROYW1lc3BhY2UoCiAg
ICAgaWYgKGZvdW5kTlMgIT0gbmFtZXNwYWNlVVJJLmltcGwoKSkgewogICAgICAgICBuYW1lc3Bh
Y2VzLnNldChwcmUsIG5hbWVzcGFjZVVSSS5pbXBsKCkpOwogICAgICAgICByZXN1bHQuYXBwZW5k
KCcgJyk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIHhtbG5zQXRvbS5zdHJpbmcoKSk7CisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoeG1sbnNBdG9tLnN0cmluZygpKTsKICAgICAgICAgaWYgKCFwcmVm
aXguaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCc6Jyk7Ci0gICAgICAg
ICAgICBhcHBlbmQocmVzdWx0LCBwcmVmaXgpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChw
cmVmaXgpOwogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnPScpOwpAQCAtMjky
LDU5ICsyOTMsNTkgQEAgRW50aXR5TWFzayBNYXJrdXBBY2N1bXVsYXRvcjo6ZW50aXR5TWFzawog
ICAgIHJldHVybiB0ZXh0LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpID8gRW50aXR5TWFz
a0luSFRNTFBDREFUQSA6IEVudGl0eU1hc2tJblBDREFUQTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqIHRleHQpCit2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCog
dGV4dCkKIHsKICAgICBhcHBlbmROb2RlVmFsdWUob3V0LCB0ZXh0LCBtX3JhbmdlLCBlbnRpdHlN
YXNrRm9yVGV4dCh0ZXh0KSk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENv
bW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpCit2b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3Qg
U3RyaW5nJiBjb21tZW50KQogewogICAgIC8vIEZJWE1FOiBDb21tZW50IGNvbnRlbnQgaXMgbm90
IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykg
c2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRlcyAiLS0+Ii4KLSAgICBhcHBl
bmQob3V0LCAiPCEtLSIpOwotICAgIGFwcGVuZChvdXQsIGNvbW1lbnQpOwotICAgIGFwcGVuZChv
dXQsICItLT4iKTsKKyAgICBvdXQuYXBwZW5kKCI8IS0tIik7CisgICAgb3V0LmFwcGVuZChjb21t
ZW50KTsKKyAgICBvdXQuYXBwZW5kKCItLT4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kRG9jdW1lbnRUeXBlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgRG9jdW1l
bnRUeXBlKiBuKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKFN0
cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKiBuKQogewogICAgIGlmIChu
LT5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhcHBlbmQocmVzdWx0
LCAiPCFET0NUWVBFICIpOwotICAgIGFwcGVuZChyZXN1bHQsIG4tPm5hbWUoKSk7CisgICAgcmVz
dWx0LmFwcGVuZCgiPCFET0NUWVBFICIpOworICAgIHJlc3VsdC5hcHBlbmQobi0+bmFtZSgpKTsK
ICAgICBpZiAoIW4tPnB1YmxpY0lkKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGFwcGVuZChyZXN1
bHQsICIgUFVCTElDIFwiIik7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIG4tPnB1YmxpY0lkKCkp
OwotICAgICAgICBhcHBlbmQocmVzdWx0LCAiXCIiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgi
IFBVQkxJQyBcIiIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG4tPnB1YmxpY0lkKCkpOworICAg
ICAgICByZXN1bHQuYXBwZW5kKCJcIiIpOwogICAgICAgICBpZiAoIW4tPnN5c3RlbUlkKCkuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCAiIFwiIik7Ci0gICAgICAgICAg
ICBhcHBlbmQocmVzdWx0LCBuLT5zeXN0ZW1JZCgpKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1
bHQsICJcIiIpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiIFwiIik7CisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiXCIiKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoIW4tPnN5c3RlbUlkKCkuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsICIgU1lTVEVNIFwiIik7Ci0gICAgICAgIGFw
cGVuZChyZXN1bHQsIG4tPnN5c3RlbUlkKCkpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCAiXCIi
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiIFNZU1RFTSBcIiIpOworICAgICAgICByZXN1bHQu
YXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiIpOwogICAg
IH0KICAgICBpZiAoIW4tPmludGVybmFsU3Vic2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGFw
cGVuZChyZXN1bHQsICIgWyIpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBuLT5pbnRlcm5hbFN1
YnNldCgpKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgIl0iKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZCgiIFsiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChuLT5pbnRlcm5hbFN1YnNldCgpKTsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgiXSIpOwogICAgIH0KLSAgICBhcHBlbmQocmVzdWx0LCAi
PiIpOworICAgIHJlc3VsdC5hcHBlbmQoIj4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3ZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpCiB7CiAgICAgLy8gRklYTUU6IFBJ
IGRhdGEgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3Ro
ZXIgY2FsbGVycykgdGhpcyBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVz
ICI/PiIuCi0gICAgYXBwZW5kKG91dCwgIjw/Iik7Ci0gICAgYXBwZW5kKG91dCwgdGFyZ2V0KTsK
LSAgICBhcHBlbmQob3V0LCAiICIpOwotICAgIGFwcGVuZChvdXQsIGRhdGEpOwotICAgIGFwcGVu
ZChvdXQsICI/PiIpOworICAgIG91dC5hcHBlbmQoIjw/Iik7CisgICAgb3V0LmFwcGVuZCh0YXJn
ZXQpOworICAgIG91dC5hcHBlbmQoIiAiKTsKKyAgICBvdXQuYXBwZW5kKGRhdGEpOworICAgIG91
dC5hcHBlbmQoIj8+Iik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1l
bnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1l
c3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWls
ZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAg
ICAgYXBwZW5kT3BlblRhZyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwogCkBAIC0zNTksMTUg
KzM2MCwxNSBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZlCiAgICAg
YXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVtZW50KTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5h
bWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRPcGVu
VGFnKFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFt
ZXNwYWNlcykKIHsKICAgICBvdXQuYXBwZW5kKCc8Jyk7Ci0gICAgYXBwZW5kKG91dCwgZWxlbWVu
dC0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKKyAgICBvdXQuYXBwZW5kKGVsZW1lbnQtPm5v
ZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CiAgICAgaWYgKCFlbGVtZW50LT5kb2N1bWVudCgpLT5p
c0hUTUxEb2N1bWVudCgpICYmIG5hbWVzcGFjZXMgJiYgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVu
dChlbGVtZW50KSkKICAgICAgICAgYXBwZW5kTmFtZXNwYWNlKG91dCwgZWxlbWVudC0+cHJlZml4
KCksIGVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpLCAqbmFtZXNwYWNlcyk7ICAgIAogfQogCi12b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVs
ZW1lbnQqIGVsZW1lbnQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhT
dHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgaWYgKHNob3VsZFNl
bGZDbG9zZShlbGVtZW50KSkgewogICAgICAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgp
KQpAQCAtMzc3LDE2ICszNzgsMTYgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2xv
c2VUYWcoVgogICAgIG91dC5hcHBlbmQoJz4nKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYgb3V0LCBF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFtZXNwYWNlcyog
bmFtZXNwYWNlcykKIHsKICAgICBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC0+ZG9jdW1l
bnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsKIAogICAgIG91dC5hcHBlbmQoJyAnKTsKIAogICAgIGlm
IChkb2N1bWVudElzSFRNTCkKLSAgICAgICAgYXBwZW5kKG91dCwgYXR0cmlidXRlLm5hbWUoKS5s
b2NhbE5hbWUoKSk7CisgICAgICAgIG91dC5hcHBlbmQoYXR0cmlidXRlLm5hbWUoKS5sb2NhbE5h
bWUoKSk7CiAgICAgZWxzZQotICAgICAgICBhcHBlbmQob3V0LCBhdHRyaWJ1dGUubmFtZSgpLnRv
U3RyaW5nKCkpOworICAgICAgICBvdXQuYXBwZW5kKGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmco
KSk7CiAKICAgICBvdXQuYXBwZW5kKCc9Jyk7CiAKQEAgLTQwMiwxNSArNDAzLDE1IEBAIHZvaWQg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZSgKICAgICAgICAgYXBwZW5kTmFtZXNw
YWNlKG91dCwgYXR0cmlidXRlLnByZWZpeCgpLCBhdHRyaWJ1dGUubmFtZXNwYWNlVVJJKCksICpu
YW1lc3BhY2VzKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0
aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKQordm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKFN0cmluZ0J1aWxkZXImIG91dCwgY29u
c3QgU3RyaW5nJiBzZWN0aW9uKQogewogICAgIC8vIEZJWE1FOiBDREFUQSBjb250ZW50IGlzIG5v
dCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMp
IHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMgIl1dPiIuCi0gICAgYXBw
ZW5kKG91dCwgIjwhW0NEQVRBWyIpOwotICAgIGFwcGVuZChvdXQsIHNlY3Rpb24pOwotICAgIGFw
cGVuZChvdXQsICJdXT4iKTsKKyAgICBvdXQuYXBwZW5kKCI8IVtDREFUQVsiKTsKKyAgICBvdXQu
YXBwZW5kKHNlY3Rpb24pOworICAgIG91dC5hcHBlbmQoIl1dPiIpOwogfQogCi12b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNv
bnN0IE5vZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5v
ZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgaWYgKG5hbWVzcGFjZXMp
CiAgICAgICAgIG5hbWVzcGFjZXMtPmNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTQ3NiwxNCArNDc3
LDE0IEBAIGJvb2wgTWFya3VwQWNjdW11bGF0b3I6OmVsZW1lbnRDYW5ub3RIYXYKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKS0+aWVGb3JiaWRzSW5zZXJ0
SFRNTCgpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRNYXJrdXAoVmVj
dG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKiBub2RlKQordm9pZCBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kRW5kTWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSog
bm9kZSkKIHsKICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSB8fCBzaG91bGRTZWxmQ2xv
c2Uobm9kZSkgfHwgKCFub2RlLT5oYXNDaGlsZE5vZGVzKCkgJiYgZWxlbWVudENhbm5vdEhhdmVF
bmRUYWcobm9kZSkpKQogICAgICAgICByZXR1cm47CiAKICAgICByZXN1bHQuYXBwZW5kKCc8Jyk7
CiAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwotICAgIGFwcGVuZChyZXN1bHQsIHN0YXRpY19jYXN0
PGNvbnN0IEVsZW1lbnQqPihub2RlKS0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKKyAgICBy
ZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKS0+bm9kZU5hbWVQ
cmVzZXJ2aW5nQ2FzZSgpKTsKICAgICByZXN1bHQuYXBwZW5kKCc+Jyk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgJKHJldmlzaW9uIDkzOTUz
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC03NywzNCArNzcsMzQgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBh
cHBlbmRFbmRUYWcoTm9kZSopOwogICAgIHN0YXRpYyBzaXplX3QgdG90YWxMZW5ndGgoY29uc3Qg
VmVjdG9yPFN0cmluZz4mKTsKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdG90
YWxMZW5ndGgobV9zdWNjZWVkaW5nTWFya3VwKTsgfQotICAgIHZvaWQgY29uY2F0ZW5hdGVNYXJr
dXAoVmVjdG9yPFVDaGFyPiYgb3V0KTsKLSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFZl
Y3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUsIGJvb2wgZG9jdW1l
bnRJc0hUTUwpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFZlY3Rv
cjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kTm9kZVZh
bHVlKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5
TWFzayk7CisgICAgdm9pZCBjb25jYXRlbmF0ZU1hcmt1cChTdHJpbmdCdWlsZGVyJiBvdXQpOwor
ICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25z
dCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBkb2N1bWVudElzSFRNTCk7CisgICAgdmlydHVhbCB2
b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoU3RyaW5nQnVpbGRlciYsIEVsZW1lbnQqLCBOYW1l
c3BhY2VzKik7CisgICAgdm9pZCBhcHBlbmROb2RlVmFsdWUoU3RyaW5nQnVpbGRlciYgb3V0LCBj
b25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqLCBFbnRpdHlNYXNrKTsKICAgICBib29sIHNob3VsZEFk
ZE5hbWVzcGFjZUVsZW1lbnQoY29uc3QgRWxlbWVudCopOwogICAgIGJvb2wgc2hvdWxkQWRkTmFt
ZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMmKTsKLSAgICB2b2lk
IGFwcGVuZE5hbWVzcGFjZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgTmFtZXNwYWNlcyYp
OworICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBO
YW1lc3BhY2VzJik7CiAgICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0
Kik7Ci0gICAgdm9pZCBhcHBlbmRDb21tZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3Ry
aW5nJiBjb21tZW50KTsKLSAgICB2b2lkIGFwcGVuZERvY3VtZW50VHlwZShWZWN0b3I8VUNoYXI+
JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSopOwotICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2lu
Z0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNv
bnN0IFN0cmluZyYgZGF0YSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9y
PFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kT3Bl
blRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9p
ZCBhcHBlbmRDbG9zZVRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqKTsKLSAgICB2b2lk
IGFwcGVuZEF0dHJpYnV0ZShWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBjb25zdCBBdHRy
aWJ1dGUmLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRDREFUQVNlY3Rpb24oVmVjdG9y
PFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIHNlY3Rpb24pOwotICAgIHZvaWQgYXBwZW5kU3Rh
cnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKiwgTmFtZXNwYWNlcyop
OworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCop
OworICAgIHZvaWQgYXBwZW5kQ29tbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmlu
ZyYgY29tbWVudCk7CisgICAgdm9pZCBhcHBlbmREb2N1bWVudFR5cGUoU3RyaW5nQnVpbGRlciYg
cmVzdWx0LCBjb25zdCBEb2N1bWVudFR5cGUqKTsKKyAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbihTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25z
dCBTdHJpbmcmIGRhdGEpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1
aWxkZXImIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZE9wZW5U
YWcoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQg
YXBwZW5kQ2xvc2VUYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50Kik7CisgICAgdm9pZCBh
cHBlbmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgY29uc3QgQXR0cmli
dXRlJiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBwZW5kQ0RBVEFTZWN0aW9uKFN0cmluZ0J1
aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKTsKKyAgICB2b2lkIGFwcGVuZFN0YXJ0
TWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSosIE5hbWVzcGFjZXMqKTsK
ICAgICBib29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlKik7CiAgICAgYm9vbCBlbGVtZW50
Q2Fubm90SGF2ZUVuZFRhZyhjb25zdCBOb2RlKiBub2RlKTsKLSAgICB2b2lkIGFwcGVuZEVuZE1h
cmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqKTsKKyAgICB2b2lkIGFwcGVu
ZEVuZE1hcmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUqKTsKIAogICAgIFZl
Y3RvcjxOb2RlKj4qIGNvbnN0IG1fbm9kZXM7CiAgICAgY29uc3QgUmFuZ2UqIGNvbnN0IG1fcmFu
Z2U7CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIHJlc29sdmVVUkxJZk5lZWRlZChjb25zdCBFbGVt
ZW50KiwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kUXVv
dGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBFbGVtZW50
KiwgY29uc3QgQXR0cmlidXRlJik7CisgICAgdm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVW
YWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQqLCBjb25zdCBBdHRyaWJ1
dGUmKTsKICAgICB2b2lkIHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSosIE5vZGUq
IG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHksIGNvbnN0IE5hbWVzcGFjZXMqKTsKIAogICAgIFZl
Y3RvcjxTdHJpbmc+IG1fc3VjY2VlZGluZ01hcmt1cDsKQEAgLTExMiw3ICsxMTIsNyBAQCBwcml2
YXRlOgogfTsKIAogLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBiZSBpbnRlZ3JhdGVkIHdp
dGggTWFya3VwQWNjdW11bGF0b3IuCi12b2lkIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRp
dGllcyhWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFVDaGFyKiBjb250ZW50LCBzaXplX3QgbGVu
Z3RoLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spOwordm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFj
aW5nRW50aXRpZXMoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBVQ2hhciogY29udGVudCwgc2l6
ZV90IGxlbmd0aCwgRW50aXR5TWFzayk7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJodG1sZWRp
dGluZy5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUg
PHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBA
IC0xMjgsMTMgKzEyOSwxMyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRha2VSZXN1bHRzKCk7CiAK
IHByaXZhdGU6Ci0gICAgdm9pZCBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKFZlY3RvcjxVQ2hhcj4m
LCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgRG9jdW1lbnQqLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7
CisgICAgdm9pZCBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImLCBDU1NTdHls
ZURlY2xhcmF0aW9uKiwgRG9jdW1lbnQqLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CiAgICAgY29u
c3QgU3RyaW5nIHN0eWxlTm9kZUNsb3NlVGFnKGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKLSAgICB2
aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqKTsKICAgICBT
dHJpbmcgcmVuZGVyZWRUZXh0KGNvbnN0IE5vZGUqLCBjb25zdCBSYW5nZSopOwogICAgIFN0cmlu
ZyBzdHJpbmdWYWx1ZUZvclJhbmdlKGNvbnN0IE5vZGUqLCBjb25zdCBSYW5nZSopOwotICAgIHZv
aWQgYXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIGJv
b2wgYWRkRGlzcGxheUlubGluZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsKLSAgICB2b2lkIGFw
cGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3Bh
Y2VzKikgeyBhcHBlbmRFbGVtZW50KG91dCwgZWxlbWVudCwgZmFsc2UsIERvZXNGdWxseVNlbGVj
dE5vZGUpOyB9CisgICAgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxl
bWVudCosIGJvb2wgYWRkRGlzcGxheUlubGluZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsKKyAg
ICB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50
LCBOYW1lc3BhY2VzKikgeyBhcHBlbmRFbGVtZW50KG91dCwgZWxlbWVudCwgZmFsc2UsIERvZXNG
dWxseVNlbGVjdE5vZGUpOyB9CiAKICAgICBlbnVtIE5vZGVUcmF2ZXJzYWxNb2RlIHsgRW1pdFN0
cmluZywgRG9Ob3RFbWl0U3RyaW5nIH07CiAgICAgTm9kZSogdHJhdmVyc2VOb2Rlc0ZvclNlcmlh
bGl6YXRpb24oTm9kZSogc3RhcnROb2RlLCBOb2RlKiBwYXN0RW5kLCBOb2RlVHJhdmVyc2FsTW9k
ZSk7CkBAIC0xNjIsMTIgKzE2MywxMiBAQCBpbmxpbmUgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OlN0eWxlZE1hCiAKIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm9kZShO
b2RlKiBub2RlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIFJhbmdlRnVsbHlTZWxlY3Rz
Tm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7
CisgICAgU3RyaW5nQnVpbGRlciBtYXJrdXA7CiAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUo
KSkKICAgICAgICAgYXBwZW5kRWxlbWVudChtYXJrdXAsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
b2RlKSwgY29udmVydEJsb2Nrc1RvSW5saW5lcyAmJiBpc0Jsb2NrKGNvbnN0X2Nhc3Q8Tm9kZSo+
KG5vZGUpKSwgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsKICAgICBlbHNlCiAgICAgICAgIGFwcGVu
ZFN0YXJ0TWFya3VwKG1hcmt1cCwgbm9kZSwgMCk7Ci0gICAgbV9yZXZlcnNlZFByZWNlZGluZ01h
cmt1cC5hcHBlbmQoU3RyaW5nOjphZG9wdChtYXJrdXApKTsKKyAgICBtX3JldmVyc2VkUHJlY2Vk
aW5nTWFya3VwLmFwcGVuZChtYXJrdXAudG9TdHJpbmcoKSk7CiAgICAgYXBwZW5kRW5kVGFnKG5v
ZGUpOwogICAgIGlmIChtX25vZGVzKQogICAgICAgICBtX25vZGVzLT5hcHBlbmQobm9kZSk7CkBA
IC0xNzUsMjAgKzE3NiwyMCBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0
aE5vCiAKIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoU3R5bGVOb2RlKENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9j
aykKIHsKLSAgICBWZWN0b3I8VUNoYXI+IG9wZW5UYWc7CisgICAgU3RyaW5nQnVpbGRlciBvcGVu
VGFnOwogICAgIGFwcGVuZFN0eWxlTm9kZU9wZW5UYWcob3BlblRhZywgc3R5bGUsIGRvY3VtZW50
LCBpc0Jsb2NrKTsKLSAgICBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwLmFwcGVuZChTdHJpbmc6
OmFkb3B0KG9wZW5UYWcpKTsKKyAgICBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwLmFwcGVuZChv
cGVuVGFnLnRvU3RyaW5nKCkpOwogICAgIGFwcGVuZFN0cmluZyhzdHlsZU5vZGVDbG9zZVRhZyhp
c0Jsb2NrKSk7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0eWxl
Tm9kZU9wZW5UYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGlzQmxvY2spCit2b2lkIFN0eWxlZE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRTdHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImIG91dCwgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBpc0Jsb2Nr
KQogewogICAgIC8vIEFsbCB0ZXh0LWRlY29yYXRpb24tcmVsYXRlZCBlbGVtZW50cyBzaG91bGQg
aGF2ZSBiZWVuIHRyZWF0ZWQgYXMgc3BlY2lhbCBhbmNlc3RvcnMKICAgICAvLyBJZiB3ZSBldmVy
IGhpdCB0aGlzIEFTU0VSVCwgd2Ugc2hvdWxkIGV4cG9ydCBTdHlsZUNoYW5nZSBpbiBBcHBseVN0
eWxlQ29tbWFuZCBhbmQgdXNlIGl0IGhlcmUKICAgICBBU1NFUlQocHJvcGVydHlNaXNzaW5nT3JF
cXVhbFRvTm9uZShzdHlsZSwgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbikgJiYgcHJvcGVydHlN
aXNzaW5nT3JFcXVhbFRvTm9uZShzdHlsZSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCkpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBkaXZT
dHlsZSwgKCI8ZGl2IHN0eWxlPVwiIikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
U3RyaW5nLCBzdHlsZVNwYW5PcGVuLCAoIjxzcGFuIHN0eWxlPVwiIikpOwotICAgIGFwcGVuZChv
dXQsIGlzQmxvY2sgPyBkaXZTdHlsZSA6IHN0eWxlU3Bhbk9wZW4pOworICAgIG91dC5hcHBlbmQo
aXNCbG9jayA/IGRpdlN0eWxlIDogc3R5bGVTcGFuT3Blbik7CiAgICAgYXBwZW5kQXR0cmlidXRl
VmFsdWUob3V0LCBzdHlsZS0+Y3NzVGV4dCgpLCBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7
CiAgICAgb3V0LmFwcGVuZCgnXCInKTsKICAgICBvdXQuYXBwZW5kKCc+Jyk7CkBAIC0yMDMsMTkg
KzIwNCwxOSBAQCBjb25zdCBTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnN0CiAKIFN0
cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dGFrZVJlc3VsdHMoKQogewotICAgIFZlY3Rv
cjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRvdGFs
TGVuZ3RoKG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXApICsgbGVuZ3RoKCkpOworICAgIFN0cmlu
Z0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkodG90YWxMZW5ndGgo
bV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cCkgKyBsZW5ndGgoKSk7CiAKICAgICBmb3IgKHNpemVf
dCBpID0gbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cC5zaXplKCk7IGkgPiAwOyAtLWkpCi0gICAg
ICAgIGFwcGVuZChyZXN1bHQsIG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXBbaSAtIDFdKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwW2kgLSAxXSk7CiAK
ICAgICBjb25jYXRlbmF0ZU1hcmt1cChyZXN1bHQpOwogCiAgICAgLy8gV2UgcmVtb3ZlICdcMCcg
Y2hhcmFjdGVycyBiZWNhdXNlIHRoZXkgYXJlIG5vdCB2aXNpYmx5IHJlbmRlcmVkIHRvIHRoZSB1
c2VyLgotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCkucmVwbGFjZSgwLCAiIik7Cisg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpLnJlcGxhY2UoMCwgIiIpOwogfQogCi12b2lkIFN0
eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4
dCogdGV4dCkKK3ZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5n
QnVpbGRlciYgb3V0LCBUZXh0KiB0ZXh0KQogeyAgICAKICAgICBjb25zdCBib29sIHBhcmVudElz
VGV4dGFyZWEgPSB0ZXh0LT5wYXJlbnRFbGVtZW50KCkgJiYgdGV4dC0+cGFyZW50RWxlbWVudCgp
LT50YWdRTmFtZSgpID09IHRleHRhcmVhVGFnOwogICAgIGNvbnN0IGJvb2wgd3JhcHBpbmdTcGFu
ID0gc2hvdWxkQXBwbHlXcmFwcGluZ1N0eWxlKHRleHQpICYmICFwYXJlbnRJc1RleHRhcmVhOwpA
QCAtMjI3LDkgKzIyOCw5IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRl
eHQKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIGluY2x1ZGVkIGluIGZvcmNlSW5s
aW5lPwogICAgICAgICB3cmFwcGluZ1N0eWxlLT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZsb2F0LCBDU1NWYWx1ZU5vbmUpOwogCi0gICAgICAgIFZlY3RvcjxVQ2hhcj4gb3BlblRh
ZzsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBvcGVuVGFnOwogICAgICAgICBhcHBlbmRTdHlsZU5v
ZGVPcGVuVGFnKG9wZW5UYWcsIHdyYXBwaW5nU3R5bGUtPnN0eWxlKCksIHRleHQtPmRvY3VtZW50
KCkpOwotICAgICAgICBhcHBlbmQob3V0LCBTdHJpbmc6OmFkb3B0KG9wZW5UYWcpKTsKKyAgICAg
ICAgb3V0LmFwcGVuZChvcGVuVGFnLmNoYXJhY3RlcnMoKSwgb3BlblRhZy5sZW5ndGgoKSk7CiAg
ICAgfQogCiAgICAgaWYgKCFzaG91bGRBbm5vdGF0ZSgpIHx8IHBhcmVudElzVGV4dGFyZWEpCkBA
IC0yMzcsMTMgKzIzOCwxMyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRU
ZXh0CiAgICAgZWxzZSB7CiAgICAgICAgIGNvbnN0IGJvb2wgdXNlUmVuZGVyZWRUZXh0ID0gIWVu
Y2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUodGV4dCksIHNlbGVjdFRhZyk7
CiAgICAgICAgIFN0cmluZyBjb250ZW50ID0gdXNlUmVuZGVyZWRUZXh0ID8gcmVuZGVyZWRUZXh0
KHRleHQsIG1fcmFuZ2UpIDogc3RyaW5nVmFsdWVGb3JSYW5nZSh0ZXh0LCBtX3JhbmdlKTsKLSAg
ICAgICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVy
OwogICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoYnVmZmVyLCBjb250
ZW50LmNoYXJhY3RlcnMoKSwgY29udGVudC5sZW5ndGgoKSwgRW50aXR5TWFza0luUENEQVRBKTsK
LSAgICAgICAgYXBwZW5kKG91dCwgY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hdChT
dHJpbmc6OmFkb3B0KGJ1ZmZlciksIHRleHQpKTsKKyAgICAgICAgb3V0LmFwcGVuZChjb252ZXJ0
SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0KGJ1ZmZlci50b1N0cmluZygpLCB0ZXh0KSk7CiAg
ICAgfQogCiAgICAgaWYgKHdyYXBwaW5nU3BhbikKLSAgICAgICAgYXBwZW5kKG91dCwgc3R5bGVO
b2RlQ2xvc2VUYWcoKSk7CisgICAgICAgIG91dC5hcHBlbmQoc3R5bGVOb2RlQ2xvc2VUYWcoKSk7
CiB9CiAgICAgCiBTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnJlbmRlcmVkVGV4dChj
b25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UpCkBAIC0yODAsNyArMjgxLDcgQEAg
U3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzdHJpbmdWYQogICAgIHJldHVybiBzdHI7
CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9y
PFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBib29sIGFkZERpc3BsYXlJbmxpbmUsIFJh
bmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCit2b2lkIFN0eWxlZE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVu
dCogZWxlbWVudCwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUg
cmFuZ2VGdWxseVNlbGVjdHNOb2RlKQogewogICAgIGNvbnN0IGJvb2wgZG9jdW1lbnRJc0hUTUwg
PSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpOwogICAgIGFwcGVuZE9wZW5U
YWcob3V0LCBlbGVtZW50LCAwKTsKQEAgLTMyNSw3ICszMjYsNyBAQCB2b2lkIFN0eWxlZE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtCiAKICAgICAgICAgaWYgKCFuZXdJbmxpbmVTdHlsZS0+
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmlu
Zywgc3R5bGVQcmVmaXgsICgiIHN0eWxlPVwiIikpOwotICAgICAgICAgICAgYXBwZW5kKG91dCwg
c3R5bGVQcmVmaXgpOworICAgICAgICAgICAgb3V0LmFwcGVuZChzdHlsZVByZWZpeCk7CiAgICAg
ICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgp
LT5jc3NUZXh0KCksIGRvY3VtZW50SXNIVE1MKTsKICAgICAgICAgICAgIG91dC5hcHBlbmQoJ1wi
Jyk7CiAgICAgICAgIH0KQEAgLTkxNSwxMyArOTE2LDEzIEBAIFN0cmluZyBjcmVhdGVGdWxsTWFy
a3VwKGNvbnN0IFJhbmdlKiByYW4KIAogU3RyaW5nIHVybFRvTWFya3VwKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKLSAgICBWZWN0b3I8VUNoYXI+IG1hcmt1cDsKLSAg
ICBhcHBlbmQobWFya3VwLCAiPGEgaHJlZj1cIiIpOwotICAgIGFwcGVuZChtYXJrdXAsIHVybC5z
dHJpbmcoKSk7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIlwiPiIpOworICAgIFN0cmluZ0J1aWxkZXIg
bWFya3VwOworICAgIG1hcmt1cC5hcHBlbmQoIjxhIGhyZWY9XCIiKTsKKyAgICBtYXJrdXAuYXBw
ZW5kKHVybC5zdHJpbmcoKSk7CisgICAgbWFya3VwLmFwcGVuZCgiXCI+Iik7CiAgICAgYXBwZW5k
Q2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKG1hcmt1cCwgdGl0bGUuY2hhcmFjdGVycygpLCB0
aXRsZS5sZW5ndGgoKSwgRW50aXR5TWFza0luUENEQVRBKTsKLSAgICBhcHBlbmQobWFya3VwLCAi
PC9hPiIpOwotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KG1hcmt1cCk7CisgICAgbWFya3VwLmFw
cGVuZCgiPC9hPiIpOworICAgIHJldHVybiBtYXJrdXAudG9TdHJpbmcoKTsKIH0KIAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5MaXN0LmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0RPTVRva2VuTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDcgKzY2LDcgQEAgU3RyaW5nIERPTVRva2VuTGlzdDo6cmVtb3ZlVG9rZW4oY29uc3QgQQogICAg
IC8vIEFsZ29yaXRobSBkZWZpbmVkIGF0IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWIt
YXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1vbi1taWNyb3N5bnRheGVzLmh0bWwjcmVt
b3ZlLWEtdG9rZW4tZnJvbS1hLXN0cmluZwogCiAgICAgdW5zaWduZWQgaW5wdXRMZW5ndGggPSBp
bnB1dC5sZW5ndGgoKTsKLSAgICBWZWN0b3I8VUNoYXI+IG91dHB1dDsgLy8gMworICAgIFN0cmlu
Z0J1aWxkZXIgb3V0cHV0OyAvLyAzCiAgICAgb3V0cHV0LnJlc2VydmVDYXBhY2l0eShpbnB1dExl
bmd0aCk7CiAgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOyAvLyA0CiAKQEAgLTc4LDE4ICs3OCwx
OCBAQCBTdHJpbmcgRE9NVG9rZW5MaXN0OjpyZW1vdmVUb2tlbihjb25zdCBBCiAgICAgICAgIH0K
IAogICAgICAgICAvLyBTdGVwIDcKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBzOworICAgICAgICBT
dHJpbmdCdWlsZGVyIHM7CiAgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0TGVuZ3RoICYm
IGlzTm90SFRNTFNwYWNlKGlucHV0W3Bvc2l0aW9uXSkpCiAgICAgICAgICAgICBzLmFwcGVuZChp
bnB1dFtwb3NpdGlvbisrXSk7CiAKICAgICAgICAgLy8gU3RlcCA4Ci0gICAgICAgIGlmIChzID09
IHRva2VuKSB7CisgICAgICAgIGlmIChzLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpID09IHRv
a2VuKSB7CiAgICAgICAgICAgICAvLyBTdGVwIDguMQogICAgICAgICAgICAgd2hpbGUgKHBvc2l0
aW9uIDwgaW5wdXRMZW5ndGggJiYgaXNIVE1MU3BhY2UoaW5wdXRbcG9zaXRpb25dKSkKICAgICAg
ICAgICAgICAgICArK3Bvc2l0aW9uOwogCiAgICAgICAgICAgICAvLyBTdGVwIDguMgotICAgICAg
ICAgICAgc2l6ZV90IGogPSBvdXRwdXQuc2l6ZSgpOworICAgICAgICAgICAgc2l6ZV90IGogPSBv
dXRwdXQubGVuZ3RoKCk7CiAgICAgICAgICAgICB3aGlsZSAoaiA+IDAgJiYgaXNIVE1MU3BhY2Uo
b3V0cHV0W2ogLSAxXSkpCiAgICAgICAgICAgICAgICAgLS1qOwogICAgICAgICAgICAgb3V0cHV0
LnJlc2l6ZShqKTsKQEAgLTk4LDExICs5OCwxMCBAQCBTdHJpbmcgRE9NVG9rZW5MaXN0OjpyZW1v
dmVUb2tlbihjb25zdCBBCiAgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBpbnB1dExlbmd0aCAm
JiAhb3V0cHV0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCcgJyk7
CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzKTsgLy8gU3RlcCA5
CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHMudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkp
OyAvLyBTdGVwIDkKICAgICB9CiAKLSAgICBvdXRwdXQuc2hyaW5rVG9GaXQoKTsKLSAgICByZXR1
cm4gU3RyaW5nOjphZG9wdChvdXRwdXQpOworICAgIHJldHVybiBvdXRwdXQudG9TdHJpbmcoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9udEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvbnRFbGVtZW50LmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb250RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIApAQCAtODksNyArOTAsOCBAQCBzdGF0aWMg
Ym9vbCBwYXJzZUZvbnRTaXplKGNvbnN0IFN0cmluZyYgCiAgICAgfQogCiAgICAgLy8gU3RlcCA2
Ci0gICAgVmVjdG9yPFVDaGFyLCAxNj4gZGlnaXRzOworICAgIFN0cmluZ0J1aWxkZXIgZGlnaXRz
OworICAgIGRpZ2l0cy5yZXNlcnZlQ2FwYWNpdHkoMTYpOwogICAgIHdoaWxlIChwb3NpdGlvbiA8
IGVuZCkgewogICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqcG9zaXRpb24pKQogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xMDEsNyArMTAzLDcgQEAgc3RhdGljIGJvb2wgcGFyc2VGb250U2l6ZShj
b25zdCBTdHJpbmcmIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBTdGVwIDgKLSAg
ICBpbnQgdmFsdWUgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoZGlnaXRzLmRhdGEoKSwgZGlnaXRz
LnNpemUoKSk7CisgICAgaW50IHZhbHVlID0gY2hhcmFjdGVyc1RvSW50U3RyaWN0KGRpZ2l0cy5j
aGFyYWN0ZXJzKCksIGRpZ2l0cy5sZW5ndGgoKSk7CiAKICAgICAvLyBTdGVwIDkKICAgICBpZiAo
bW9kZSA9PSBSZWxhdGl2ZVBsdXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTEwLDcgKzExMCw3IEBAIFN0cmluZyBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6c3RyaXAKICAgICBpZiAoIWF0dHJpYnV0ZVZhbHVlLmNv
bnRhaW5zKG5ld2xpbmVDaGFyYWN0ZXIpICYmICFhdHRyaWJ1dGVWYWx1ZS5jb250YWlucyhjYXJy
aWFnZVJldHVybikpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTsKIAotICAgIFZlY3Rv
cjxVQ2hhcj4gc3RyaXBwZWQ7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpcHBlZDsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBhdHRyaWJ1dGVWYWx1ZS5sZW5ndGgoKTsKICAgICBzdHJpcHBlZC5yZXNl
cnZlQ2FwYWNpdHkobGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKQEAgLTExOSw3ICsxMTksNyBAQCBTdHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ6OnN0cmlwCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgc3RyaXBwZWQuYXBw
ZW5kKGNoYXJhY3Rlcik7CiAgICAgfQotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHN0cmlwcGVk
KTsKKyAgICByZXR1cm4gc3RyaXBwZWQudG9TdHJpbmcoKTsKIH0KIAogc3RhdGljIGJvb2wgaXNO
b3RMaW5lQnJlYWsoVUNoYXIgY2gpIHsgcmV0dXJuIGNoICE9IG5ld2xpbmVDaGFyYWN0ZXIgJiYg
Y2ggIT0gY2FycmlhZ2VSZXR1cm47IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0NTU1ByZWxvYWRTY2FubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTIsMTQgKzE5MiwxNCBAQCBzdGF0aWMgU3RyaW5nIHBhcnNlQ1NTU3RyaW5nT3JVUkwo
Y29uc3QgCiAKIHZvaWQgQ1NTUHJlbG9hZFNjYW5uZXI6OmVtaXRSdWxlKCkKIHsKLSAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoImltcG9ydCIsIG1fcnVsZS5kYXRhKCksIG1fcnVsZS5zaXplKCkp
KSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlQ1NTU3RyaW5nT3JVUkwobV9ydWxlVmFs
dWUuZGF0YSgpLCBtX3J1bGVWYWx1ZS5zaXplKCkpOworICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZSgiaW1wb3J0IiwgbV9ydWxlLmNoYXJhY3RlcnMoKSwgbV9ydWxlLmxlbmd0aCgpKSkgeworICAg
ICAgICBTdHJpbmcgdmFsdWUgPSBwYXJzZUNTU1N0cmluZ09yVVJMKG1fcnVsZVZhbHVlLmNoYXJh
Y3RlcnMoKSwgbV9ydWxlVmFsdWUubGVuZ3RoKCkpOwogICAgICAgICBpZiAoIXZhbHVlLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV9kb2N1bWVudC0+
Y29tcGxldGVVUkwodmFsdWUpKTsKICAgICAgICAgICAgIG1fZG9jdW1lbnQtPmNhY2hlZFJlc291
cmNlTG9hZGVyKCktPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQsIHJlcXVl
c3QsIFN0cmluZygpLCBtX3NjYW5uaW5nQm9keSk7CiAgICAgICAgIH0KICAgICAgICAgbV9zdGF0
ZSA9IEluaXRpYWw7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSgiY2hhcnNldCIs
IG1fcnVsZS5kYXRhKCksIG1fcnVsZS5zaXplKCkpKQorICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoImNoYXJzZXQiLCBtX3J1bGUuY2hhcmFjdGVycygpLCBtX3J1bGUubGVuZ3RoKCkp
KQogICAgICAgICBtX3N0YXRlID0gSW5pdGlhbDsKICAgICBlbHNlCiAgICAgICAgIG1fc3RhdGUg
PSBEb25lUGFyc2luZ0ltcG9ydFJ1bGVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDcgKzI4LDcgQEAKICNkZWZpbmUgQ1NTUHJlbG9hZFNjYW5uZXJfaAogCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYxLDgg
KzYxLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGVtaXRSdWxlKCk7CiAKICAgICBTdGF0ZSBtX3N0
YXRlOwotICAgIFZlY3RvcjxVQ2hhciwgMTY+IG1fcnVsZTsKLSAgICBWZWN0b3I8VUNoYXI+IG1f
cnVsZVZhbHVlOworICAgIFN0cmluZ0J1aWxkZXIgbV9ydWxlOworICAgIFN0cmluZ0J1aWxkZXIg
bV9ydWxlVmFsdWU7CiAKICAgICBib29sIG1fc2Nhbm5pbmdCb2R5OwogICAgIERvY3VtZW50KiBt
X2RvY3VtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVu
dGl0eVBhcnNlci5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKICNpbmNsdWRlICJDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmgiCiAj
aW5jbHVkZSAiSFRNTEVudGl0eVNlYXJjaC5oIgogI2luY2x1ZGUgIkhUTUxFbnRpdHlUYWJsZS5o
IgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAgaW5saW5lIHN0YXRpYyBib29s
IGNvbnZlcnRUb1VURjE2KFVDaGFyMzIgdmFsdWUsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVk
RW50aXR5KQorICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb252ZXJ0VG9VVEYxNihVQ2hhcjMyIHZh
bHVlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkRW50aXR5KQogICAgIHsKICAgICAgICAgaWYgKFVf
SVNfQk1QKHZhbHVlKSkgewogICAgICAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gc3RhdGljX2Nh
c3Q8VUNoYXI+KHZhbHVlKTsKQEAgLTg1LDkgKzg1LDkgQEAgcHVibGljOgogCiAgICAgaW5saW5l
IHN0YXRpYyBib29sIGFjY2VwdE1hbGZvcm1lZCgpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIGlu
bGluZSBzdGF0aWMgYm9vbCBjb25zdW1lTmFtZWRFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiBzb3Vy
Y2UsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkRW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFy
YWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciwgVUNoYXImIGNjKQorICAg
IGlubGluZSBzdGF0aWMgYm9vbCBjb25zdW1lTmFtZWRFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiBz
b3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENoYXJh
Y3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyLCBVQ2hhciYgY2MpCiAgICAg
ewotICAgICAgICBWZWN0b3I8VUNoYXIsIDEwPiBjb25zdW1lZENoYXJhY3RlcnM7CisgICAgICAg
IFN0cmluZ0J1aWxkZXIgY29uc3VtZWRDaGFyYWN0ZXJzOwogICAgICAgICBIVE1MRW50aXR5U2Vh
cmNoIGVudGl0eVNlYXJjaDsKICAgICAgICAgd2hpbGUgKCFzb3VyY2UuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICBjYyA9ICpzb3VyY2U7CkBAIC0xMzksNyArMTM5LDcgQEAgcHVibGljOgogfQog
CiAKLWJvb2wgY29uc3VtZUhUTUxFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFZlY3Rv
cjxVQ2hhciwgMTY+JiBkZWNvZGVkRW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBV
Q2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKK2Jvb2wgY29uc3VtZUhUTUxFbnRpdHko
U2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRFbnRpdHksIGJv
b2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVy
KQogewogICAgIHJldHVybiBjb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlPEhUTUxFbnRpdHlQYXJz
ZXI+KHNvdXJjZSwgZGVjb2RlZEVudGl0eSwgbm90RW5vdWdoQ2hhcmFjdGVycywgYWRkaXRpb25h
bEFsbG93ZWRDaGFyYWN0ZXIpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTEVudGl0eVBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxFbnRpdHlQYXJzZXIuaAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGNvbnN1bWVIVE1MRW50aXR5
KFNlZ21lbnRlZFN0cmluZyYsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkRW50aXR5LCBib29s
JiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9
ICdcMCcpOworYm9vbCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmLCBTdHJpbmdC
dWlsZGVyJiBkZWNvZGVkRW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBh
ZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9ICdcMCcpOwogCiAvLyBVc2VkIGJ5IHRoZSBYTUwg
cGFyc2VyLiAgTm90IHN1aXRhYmxlIGZvciB1c2UgaW4gSFRNTCBwYXJzaW5nLiAgVXNlIGNvbnN1
bWVIVE1MRW50aXR5IGluc3RlYWQuCiBVQ2hhciBkZWNvZGVOYW1lZEVudGl0eShjb25zdCBjaGFy
Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRp
b21zLmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUGFyc2VySWRpb21zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw3IEBAIGJv
b2wgcGFyc2VIVE1MSW50ZWdlcihjb25zdCBTdHJpbmcmIGlucHUKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gU3RlcCA4Ci0gICAgVmVjdG9yPFVDaGFyLCAxNj4gZGlnaXRzOworICAg
IFN0cmluZ0J1aWxkZXIgZGlnaXRzOwogICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewogICAg
ICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqcG9zaXRpb24pKQogICAgICAgICAgICAgYnJlYWs7CkBA
IC0yMTYsNyArMjE2LDcgQEAgYm9vbCBwYXJzZUhUTUxJbnRlZ2VyKGNvbnN0IFN0cmluZyYgaW5w
dQogICAgIH0KIAogICAgIC8vIFN0ZXAgOQotICAgIHZhbHVlID0gc2lnbiAqIGNoYXJhY3RlcnNU
b0ludFN0cmljdChkaWdpdHMuZGF0YSgpLCBkaWdpdHMuc2l6ZSgpKTsKKyAgICB2YWx1ZSA9IHNp
Z24gKiBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoZGlnaXRzLmNoYXJhY3RlcnMoKSwgZGlnaXRzLmxl
bmd0aCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjU0LDcgKzI1NCw3IEBAIGJvb2wg
cGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0IFMKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gU3RlcCA4Ci0gICAgVmVjdG9yPFVDaGFyLCAxNj4gZGlnaXRzOworICAgIFN0
cmluZ0J1aWxkZXIgZGlnaXRzOwogICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewogICAgICAg
ICBpZiAoIWlzQVNDSUlEaWdpdCgqcG9zaXRpb24pKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0y
NjIsNyArMjYyLDcgQEAgYm9vbCBwYXJzZUhUTUxOb25OZWdhdGl2ZUludGVnZXIoY29uc3QgUwog
ICAgIH0KIAogICAgIC8vIFN0ZXAgOQotICAgIHZhbHVlID0gY2hhcmFjdGVyc1RvVUludFN0cmlj
dChkaWdpdHMuZGF0YSgpLCBkaWdpdHMuc2l6ZSgpKTsKKyAgICB2YWx1ZSA9IGNoYXJhY3RlcnNU
b1VJbnRTdHJpY3QoZGlnaXRzLmNoYXJhY3RlcnMoKSwgZGlnaXRzLmxlbmd0aCgpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRv
a2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRva2VuaXplci5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBA
QCB2b2lkIEhUTUxUb2tlbml6ZXI6OnJlc2V0KCkKIGlubGluZSBib29sIEhUTUxUb2tlbml6ZXI6
OnByb2Nlc3NFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiB7CiAgICAgYm9vbCBub3RF
bm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAgVmVjdG9yPFVDaGFyLCAxNj4gZGVjb2RlZEVu
dGl0eTsKKyAgICBTdHJpbmdCdWlsZGVyIGRlY29kZWRFbnRpdHk7CiAgICAgYm9vbCBzdWNjZXNz
ID0gY29uc3VtZUhUTUxFbnRpdHkoc291cmNlLCBkZWNvZGVkRW50aXR5LCBub3RFbm91Z2hDaGFy
YWN0ZXJzKTsKICAgICBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTUzLDkgKzE1Myw4IEBAIGlubGluZSBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nl
c3NFbnRpdHkKICAgICAgICAgQVNTRVJUKGRlY29kZWRFbnRpdHkuaXNFbXB0eSgpKTsKICAgICAg
ICAgYnVmZmVyQ2hhcmFjdGVyKCcmJyk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVmVjdG9yPFVD
aGFyPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlY29kZWRFbnRpdHkuYmVnaW4oKTsKLSAgICAg
ICAgZm9yICg7IGl0ZXIgIT0gZGVjb2RlZEVudGl0eS5lbmQoKTsgKytpdGVyKQotICAgICAgICAg
ICAgYnVmZmVyQ2hhcmFjdGVyKCppdGVyKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRlY29kZWRFbnRpdHkubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgIGJ1ZmZlckNoYXJh
Y3RlcihkZWNvZGVkRW50aXR5W2ldKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC05
ODcsNyArOTg2LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpuZXh0VG9rZW4oU2VnbWVudGVkUwog
CiAgICAgSFRNTF9CRUdJTl9TVEFURShDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVl
U3RhdGUpIHsKICAgICAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAg
ICAgIFZlY3RvcjxVQ2hhciwgMTY+IGRlY29kZWRFbnRpdHk7CisgICAgICAgIFN0cmluZ0J1aWxk
ZXIgZGVjb2RlZEVudGl0eTsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gY29uc3VtZUhUTUxFbnRp
dHkoc291cmNlLCBkZWNvZGVkRW50aXR5LCBub3RFbm91Z2hDaGFyYWN0ZXJzLCBtX2FkZGl0aW9u
YWxBbGxvd2VkQ2hhcmFjdGVyKTsKICAgICAgICAgaWYgKG5vdEVub3VnaENoYXJhY3RlcnMpCiAg
ICAgICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKTsKQEAgLTk5NSw5
ICs5OTQsOCBAQCBib29sIEhUTUxUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRTCiAgICAg
ICAgICAgICBBU1NFUlQoZGVjb2RlZEVudGl0eS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgbV90
b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZSgnJicpOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgVmVjdG9yPFVDaGFyPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlY29kZWRFbnRp
dHkuYmVnaW4oKTsKLSAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGRlY29kZWRFbnRpdHkuZW5k
KCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb0F0dHJpYnV0ZVZh
bHVlKCppdGVyKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWNvZGVk
RW50aXR5Lmxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9B
dHRyaWJ1dGVWYWx1ZShkZWNvZGVkRW50aXR5W2ldKTsKICAgICAgICAgfQogICAgICAgICAvLyBX
ZSdyZSBzdXBwb3NlZCB0byBzd2l0Y2ggYmFjayB0byB0aGUgYXR0cmlidXRlIHZhbHVlIHN0YXRl
IHRoYXQKICAgICAgICAgLy8gd2Ugd2VyZSBpbiB3aGVuIHdlIHdlcmUgc3dpdGNoZWQgaW50byB0
aGlzIHN0YXRlLiBSYXRoZXIgdGhhbgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRyZWVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
MSw3ICsyOTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJpbmcoc3RhcnQsIG1fY3Vy
cmVudCAtIHN0YXJ0KTsKICAgICB9CiAKLSAgICB2b2lkIGdpdmVSZW1haW5pbmdUbyhWZWN0b3I8
VUNoYXI+JiByZWNpcGllbnQpCisgICAgdm9pZCBnaXZlUmVtYWluaW5nVG8oU3RyaW5nQnVpbGRl
ciYgcmVjaXBpZW50KQogICAgIHsKICAgICAgICAgcmVjaXBpZW50LmFwcGVuZChtX2N1cnJlbnQs
IG1fZW5kIC0gbV9jdXJyZW50KTsKICAgICAgICAgbV9jdXJyZW50ID0gbV9lbmQ7CkBAIC0yNzE4
LDcgKzI3MTgsOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckFmdGVySGVhCiAK
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5UYWJsZVRleHQoKQogewotICAgIFN0
cmluZyBjaGFyYWN0ZXJzID0gU3RyaW5nOjphZG9wdChtX3BlbmRpbmdUYWJsZUNoYXJhY3RlcnMp
OworICAgIFN0cmluZyBjaGFyYWN0ZXJzID0gbV9wZW5kaW5nVGFibGVDaGFyYWN0ZXJzLnRvU3Ry
aW5nKCk7CisgICAgbV9wZW5kaW5nVGFibGVDaGFyYWN0ZXJzLmNsZWFyKCk7CiAgICAgaWYgKCFp
c0FsbFdoaXRlc3BhY2UoY2hhcmFjdGVycykpIHsKICAgICAgICAgLy8gRklYTUU6IHBhcnNlIGVy
cm9yCiAgICAgICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpSZWRpcmVjdFRvRm9zdGVyUGFyZW50
R3VhcmQgcmVkaXJlY3RlcihtX3RyZWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEy
ICszMywxMyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50U3RhY2suaCIKICNpbmNsdWRlICJIVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTI0MSw3ICsyNDIsNyBAQCBwcml2YXRlOgogICAgIEluc2VydGlv
bk1vZGUgbV9vcmlnaW5hbEluc2VydGlvbk1vZGU7CiAKICAgICAvLyBodHRwOi8vd3d3LndoYXR3
Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24u
aHRtbCNwZW5kaW5nLXRhYmxlLWNoYXJhY3Rlci10b2tlbnMKLSAgICBWZWN0b3I8VUNoYXI+IG1f
cGVuZGluZ1RhYmxlQ2hhcmFjdGVyczsKKyAgICBTdHJpbmdCdWlsZGVyIG1fcGVuZGluZ1RhYmxl
Q2hhcmFjdGVyczsKIAogICAgIC8vIFdlIGFjY2VzcyBwYXJzZXIgYmVjYXVzZSBIVE1MNSBzcGVj
IHJlcXVpcmVzIHRoYXQgd2UgYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSB0b2tl
bml6ZXIKICAgICAvLyBmcm9tIHdpdGhpbiBwYXJzZXIgYWN0aW9ucy4gV2UgYWxzbyBuZWVkIGl0
IHRvIHRyYWNrIHRoZSBjdXJyZW50IHBvc2l0aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSA8d3RmL0Rl
Y2ltYWxOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjYxLDcgKzI2Miw3IEBAIGlubGluZSBpbnQgaGV4VG9J
bnQoVUNoYXIgYykKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBkZWNvZGVTdHJpbmcoY29uc3Qg
VUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBWZWN0b3I8VUNoYXI+KiBvdXRwdXQpCiti
b29sIGRlY29kZVN0cmluZyhjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIFN0
cmluZ0J1aWxkZXIqIG91dHB1dCkKIHsKICAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsKICAgICAg
ICAgVUNoYXIgYyA9ICpzdGFydCsrOwpAQCAtMzIxLDExICszMjIsMTEgQEAgYm9vbCBkZWNvZGVT
dHJpbmcoY29uc3QgVUNoYXIqIHN0YXJ0LCBjbwogICAgIH0KICAgICBpZiAoc3RhcnQgPiBlbmQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcjsKKyAgICBT
dHJpbmdCdWlsZGVyIGJ1ZmZlcjsKICAgICBidWZmZXIucmVzZXJ2ZUNhcGFjaXR5KGVuZCAtIHN0
YXJ0KTsKICAgICBpZiAoIWRlY29kZVN0cmluZyhzdGFydCwgZW5kLCAmYnVmZmVyKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICpvdXRwdXQgPSBTdHJpbmcoYnVmZmVyLmRhdGEoKSwgYnVm
ZmVyLnNpemUoKSk7ICAgIAorICAgICpvdXRwdXQgPSBidWZmZXIudG9TdHJpbmcoKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDQ0LDcgKzQ0NSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IGJ1aWxkVmFsdWUoY28KICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAot
aW5saW5lIGJvb2wgZXNjYXBlQ2hhcihVQ2hhciBjLCBWZWN0b3I8VUNoYXI+KiBkc3QpCitpbmxp
bmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFyIGMsIFN0cmluZ0J1aWxkZXIqIGRzdCkKIHsKICAgICBz
d2l0Y2ggKGMpIHsKICAgICBjYXNlICdcYic6IGRzdC0+YXBwZW5kKCJcXGIiLCAyKTsgYnJlYWs7
CkBAIC00NjAsNyArNDYxLDcgQEAgaW5saW5lIGJvb2wgZXNjYXBlQ2hhcihVQ2hhciBjLCBWZWN0
b3I8VQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBkb3VibGVRdW90ZVN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0ciwgVmVjdG9yPFVDaGFyPiogZHN0KQoraW5saW5lIHZvaWQgZG91
YmxlUXVvdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIFN0cmluZ0J1aWxkZXIqIGRzdCkKIHsK
ICAgICBkc3QtPmFwcGVuZCgnIicpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHIu
bGVuZ3RoKCk7ICsraSkgewpAQCAtNTU2LDEzICs1NTcsMTMgQEAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdQogCiBTdHJpbmcgSW5zcGVjdG9yVmFsdWU6OnRvSlNPTlN0
cmluZygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgU3RyaW5nQnVp
bGRlciByZXN1bHQ7CiAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSg1MTIpOwogICAgIHdyaXRl
SlNPTigmcmVzdWx0KTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5z
aXplKCkpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JWYWx1ZTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKK3ZvaWQgSW5z
cGVjdG9yVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlTnVsbCk7CiAgICAgb3V0cHV0LT5hcHBlbmQobnVsbFN0
cmluZywgNCk7CkBAIC02MTYsNyArNjE3LDcgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjph
c051bWJlcih1bnNpZwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvckJhc2lj
VmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0Cit2b2lkIEluc3Bl
Y3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlQm9vbGVhbiB8fCB0eXBlKCkgPT0gVHlwZU51bWJl
cik7CiAgICAgaWYgKHR5cGUoKSA9PSBUeXBlQm9vbGVhbikgewpAQCAtNjUyLDcgKzY1Myw3IEBA
IGJvb2wgSW5zcGVjdG9yU3RyaW5nOjphc1N0cmluZyhTdHJpbmcqIG8KICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JTdHJpbmc6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBv
dXRwdXQpIGNvbnN0Cit2b2lkIEluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKFN0cmluZ0J1aWxk
ZXIqIG91dHB1dCkgY29uc3QKIHsKICAgICBBU1NFUlQodHlwZSgpID09IFR5cGVTdHJpbmcpOwog
ICAgIGRvdWJsZVF1b3RlU3RyaW5nKG1fc3RyaW5nVmFsdWUsIG91dHB1dCk7CkBAIC03MjQsNyAr
NzI1LDcgQEAgdm9pZCBJbnNwZWN0b3JPYmplY3Q6OnJlbW92ZShjb25zdCBTdHJpbgogICAgIH0K
IH0KIAotdm9pZCBJbnNwZWN0b3JPYmplY3Q6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRw
dXQpIGNvbnN0Cit2b2lkIEluc3BlY3Rvck9iamVjdDo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIq
IG91dHB1dCkgY29uc3QKIHsKICAgICBvdXRwdXQtPmFwcGVuZCgneycpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9vcmRlci5zaXplKCk7ICsraSkgewpAQCAtNzYxLDcgKzc2Miw3IEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckFycmEKICAgICByZXR1cm4gdGhp
czsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcnJheTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91
dHB1dCkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yQXJyYXk6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVy
KiBvdXRwdXQpIGNvbnN0CiB7CiAgICAgb3V0cHV0LT5hcHBlbmQoJ1snKTsKICAgICBmb3IgKFZl
Y3RvcjxSZWZQdHI8SW5zcGVjdG9yVmFsdWU+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRh
LmJlZ2luKCk7IGl0ICE9IG1fZGF0YS5lbmQoKTsgKytpdCkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg3LDcgKzg3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uKTsKIAogICAgIFN0cmluZyB0b0pTT05T
dHJpbmcoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4q
IG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVy
KiBvdXRwdXQpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgSW5zcGVjdG9yVmFs
dWUoVHlwZSB0eXBlKSA6IG1fdHlwZSh0eXBlKSB7IH0KQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKHVuc2lnbmVkIGxvbmcqIG91dHB1dCkgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKHVuc2lnbmVkIGludCogb3V0cHV0KSBjb25z
dDsKIAotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkg
Y29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShib29s
IHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVCb29sZWFuKSwgbV9ib29sVmFsdWUodmFsdWUp
IHsgfQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBhc1N0
cmluZyhTdHJpbmcqIG91dHB1dCkgY29uc3Q7ICAgIAogCi0gICAgdmlydHVhbCB2b2lkIHdyaXRl
SlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3cml0
ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBleHBs
aWNpdCBJbnNwZWN0b3JTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1
ZShUeXBlU3RyaW5nKSwgbV9zdHJpbmdWYWx1ZSh2YWx1ZSkgeyB9CkBAIC0xOTksNyArMTk5LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAg
IHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3Q7CiAK
ICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fZGF0YS5iZWdpbigpOyB9CiAgICAgaXRl
cmF0b3IgZW5kKCkgeyByZXR1cm4gbV9kYXRhLmVuZCgpOyB9CkBAIC0yMzMsNyArMjMzLDcgQEAg
cHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0KHNpemVfdCBpbmRl
eCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIEluc3BlY3RvckFycmF5KCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAkocmV2
aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3ND
b250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTUsMTkgKzExNiwxOSBAQCBSZXNvdXJjZVJl
cXVlc3QgY3JlYXRlQWNjZXNzQ29udHJvbFByZWZsCiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCYg
cmVxdWVzdEhlYWRlckZpZWxkcyA9IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpOwogCiAgICAg
aWYgKHJlcXVlc3RIZWFkZXJGaWVsZHMuc2l6ZSgpID4gMCkgewotICAgICAgICBWZWN0b3I8VUNo
YXI+IGhlYWRlckJ1ZmZlcjsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBoZWFkZXJCdWZmZXI7CiAg
ICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVxdWVzdEhlYWRlckZp
ZWxkcy5iZWdpbigpOwotICAgICAgICBhcHBlbmQoaGVhZGVyQnVmZmVyLCBpdC0+Zmlyc3QpOwor
ICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5maXJzdCk7CiAgICAgICAgICsraXQ7CiAK
ICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVzdEhlYWRl
ckZpZWxkcy5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZCgnLCcpOwogICAgICAgICAgICAgaGVhZGVyQnVmZmVy
LmFwcGVuZCgnICcpOwotICAgICAgICAgICAgYXBwZW5kKGhlYWRlckJ1ZmZlciwgaXQtPmZpcnN0
KTsKKyAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmZpcnN0KTsKICAgICAgICAg
fQogCi0gICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJBY2Nlc3Mt
Q29udHJvbC1SZXF1ZXN0LUhlYWRlcnMiLCBTdHJpbmc6OmFkb3B0KGhlYWRlckJ1ZmZlcikpOwor
ICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiQWNjZXNzLUNvbnRy
b2wtUmVxdWVzdC1IZWFkZXJzIiwgaGVhZGVyQnVmZmVyLnRvU3RyaW5nKCkpOwogICAgIH0KIAog
ICAgIHJldHVybiBwcmVmbGlnaHRSZXF1ZXN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCShy
ZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTgzNiwxNyArODM3LDE3
IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGwKICAgICAvLyBUaGVu
LCBpbnNlcnQgdGhlIHJlc291cmNlCiAgICAgCiAgICAgLy8gU2VyaWFsaXplIHRoZSBoZWFkZXJz
Ci0gICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAgIFN0cmluZ0J1aWxkZXIgc3Ry
aW5nQnVpbGRlcjsKICAgICAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9y
IChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc291cmNlLT5yZXNwb25zZSgp
Lmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCE9IGVuZDsgKytpdCkgewotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVu
Z3RoKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJzonKTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJzKCksIGl0LT5zZWNvbmQubGVuZ3RoKCkpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoKFVDaGFyKSdcbicpOwogICAgIH0KICAgICAKLSAgICBTdHJpbmcgaGVh
ZGVycyA9IFN0cmluZzo6YWRvcHQoc3RyaW5nQnVpbGRlcik7CisgICAgU3RyaW5nIGhlYWRlcnMg
PSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgCiAgICAgU1FMaXRlU3RhdGVtZW50IHJl
c291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlcyAo
dXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVycywgZGF0YSwgbWltZVR5cGUsIHRl
eHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiKTsKICAgICBpZiAo
cmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lLmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgRU5BQkxF
KERPTV9TVE9SQUdFKQogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKQEAgLTQyOCwxMyAr
NDI5LDEzIEBAIHZvaWQgQ2hyb21lOjpzZXRUb29sVGlwKGNvbnN0IEhpdFRlc3RSZXMKICAgICAg
ICAgICAgICAgICAgICAgRmlsZUxpc3QqIGZpbGVzID0gaW5wdXQtPmZpbGVzKCk7CiAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGxpc3RTaXplID0gZmlsZXMtPmxlbmd0aCgpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAobGlzdFNpemUgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8VUNoYXI+IG5hbWVzOworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVp
bGRlciBuYW1lczsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGlzdFNpemU7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChu
YW1lcywgZmlsZXMtPml0ZW0oaSktPmZpbGVOYW1lKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWVzLmFwcGVuZChmaWxlcy0+aXRlbShpKS0+ZmlsZU5hbWUoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gbGlzdFNpemUgLSAxKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoJ1xuJyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwID0gU3RyaW5nOjphZG9w
dChuYW1lcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwID0gbmFtZXMudG9TdHJp
bmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbGVuYW1lIGFsd2F5cyBkaXNwbGF5
IGFzIExUUi4KICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXBEaXJlY3Rpb24gPSBMVFI7
CiAgICAgICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNl
cmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNl
cmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw5ICs5Niw5IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5TZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoKTsKIAogcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCopOwot
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVu
dCosIE5hbWVzcGFjZXMqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRl
cyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAgdmlydHVh
bCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0Kik7CisgICAgdmlydHVh
bCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgTmFtZXNw
YWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1
aWxkZXImIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKICAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kRW5kVGFnKE5vZGUqKTsKIAogcHJpdmF0ZToKQEAgLTEyMCwyNyArMTIwLDI4IEBAIFNlcmlh
bGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6flNlcmlhbGl6ZXIKIHsKIH0KIAotdm9pZCBTZXJpYWxp
emVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0
KiB0ZXh0KQordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3Ry
aW5nQnVpbGRlciYgb3V0LCBUZXh0KiB0ZXh0KQogewogICAgIEVsZW1lbnQqIHBhcmVudCA9IHRl
eHQtPnBhcmVudEVsZW1lbnQoKTsKICAgICBpZiAocGFyZW50ICYmICFzaG91bGRJZ25vcmVFbGVt
ZW50KHBhcmVudCkpCiAgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KG91dCwg
dGV4dCk7CiB9CiAKLXZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVt
ZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFt
ZXNwYWNlcykKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50
KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNw
YWNlcykKIHsKICAgICBpZiAoIXNob3VsZElnbm9yZUVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAg
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KG91dCwgZWxlbWVudCwgbmFtZXNwYWNl
cyk7CiAKICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKSB7
Ci0gICAgICAgIFN0cmluZyBtZXRhID0gIjxtZXRhIGNoYXJzZXQ9XCIiICsgbV9kb2N1bWVudC0+
Y2hhcnNldCgpICsgIlwiPiI7Ci0gICAgICAgIG91dC5hcHBlbmQobWV0YS5jaGFyYWN0ZXJzKCks
IG1ldGEubGVuZ3RoKCkpOworICAgICAgICBvdXQuYXBwZW5kKCI8bWV0YSBjaGFyc2V0PVwiIik7
CisgICAgICAgIG91dC5hcHBlbmQobV9kb2N1bWVudC0+Y2hhcnNldCgpKTsKKyAgICAgICAgb3V0
LmFwcGVuZCgiXCI+Iik7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IEZvciBvYmplY3QgKHBsdWdp
bnMpIHRhZ3MgYW5kIHZpZGVvIHRhZyB3ZSBjb3VsZCByZXBsYWNlIHRoZW0gYnkgYW4gaW1hZ2Ug
b2YgdGhlaXIgY3VycmVudCBjb250ZW50cy4KIH0KIAotdm9pZCBTZXJpYWxpemVyTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVt
ZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBTZXJpYWxpemVyTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoU3RyaW5nQnVpbGRlciYgb3V0
LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGlmICgh
ZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5
NSwxOCArMzk2LDE4IEBAIFN0cmluZyBTZWN1cml0eU9yaWdpbjo6dG9TdHJpbmcoKSBjb25zdAog
ICAgICAgICByZXR1cm4gImZpbGU6Ly8iOwogICAgIH0KIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVz
dWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcHJvdG9jb2wubGVuZ3Ro
KCkgKyBtX2hvc3QubGVuZ3RoKCkgKyAxMCk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgbV9wcm90b2Nv
bCk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgIjovLyIpOwotICAgIGFwcGVuZChyZXN1bHQsIG1faG9z
dCk7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0
eShtX3Byb3RvY29sLmxlbmd0aCgpICsgbV9ob3N0Lmxlbmd0aCgpICsgMTApOworICAgIHJlc3Vs
dC5hcHBlbmQobV9wcm90b2NvbCk7CisgICAgcmVzdWx0LmFwcGVuZCgiOi8vIik7CisgICAgcmVz
dWx0LmFwcGVuZChtX2hvc3QpOwogCiAgICAgaWYgKG1fcG9ydCkgewotICAgICAgICBhcHBlbmQo
cmVzdWx0LCAiOiIpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBTdHJpbmc6Om51bWJlcihtX3Bv
cnQpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiOiIpOworICAgICAgICByZXN1bHQuYXBwZW5k
KFN0cmluZzo6bnVtYmVyKG1fcG9ydCkpOwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmc6OmFk
b3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhjb25z
dCBTdHJpbmcmIG9yaWdpblN0cmluZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tV
UkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCShy
ZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KIAogI2lmIFVTRShJQ1VfVU5JQ09ERSkKQEAgLTg4OSw0NyArODkw
LDQ3IEBAIFN0cmluZyBLVVJMOjpkZXByZWNhdGVkU3RyaW5nKCkgY29uc3QKICAgICBpZiAoIW1f
aXNWYWxpZCkKICAgICAgICAgcmV0dXJuIG1fc3RyaW5nOwogCi0gICAgVmVjdG9yPFVDaGFyPiBy
ZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBw
cm90b2NvbCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKHByb3RvY29sKCkpOwogICAgIHJlc3VsdC5h
cHBlbmQoJzonKTsKIAotICAgIFZlY3RvcjxVQ2hhcj4gYXV0aG9yaXR5OworICAgIFN0cmluZ0J1
aWxkZXIgYXV0aG9yaXR5OwogCiAgICAgaWYgKG1faG9zdEVuZCAhPSBtX3Bhc3N3b3JkRW5kKSB7
CiAgICAgICAgIGlmIChtX3VzZXJFbmQgIT0gbV91c2VyU3RhcnQpIHsKLSAgICAgICAgICAgIGFw
cGVuZChhdXRob3JpdHksIHVzZXIoKSk7CisgICAgICAgICAgICBhdXRob3JpdHkuYXBwZW5kKHVz
ZXIoKSk7CiAgICAgICAgICAgICBhdXRob3JpdHkuYXBwZW5kKCdAJyk7CiAgICAgICAgIH0KLSAg
ICAgICAgYXBwZW5kKGF1dGhvcml0eSwgaG9zdCgpKTsKKyAgICAgICAgYXV0aG9yaXR5LmFwcGVu
ZChob3N0KCkpOwogICAgICAgICBpZiAoaGFzUG9ydCgpKSB7CiAgICAgICAgICAgICBhdXRob3Jp
dHkuYXBwZW5kKCc6Jyk7Ci0gICAgICAgICAgICBhcHBlbmQoYXV0aG9yaXR5LCBTdHJpbmc6Om51
bWJlcihwb3J0KCkpKTsKKyAgICAgICAgICAgIGF1dGhvcml0eS5hcHBlbmQoU3RyaW5nOjpudW1i
ZXIocG9ydCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIWF1dGhvcml0eS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwogICAgICAgICByZXN1bHQuYXBw
ZW5kKCcvJyk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYXV0aG9yaXR5KTsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChhdXRob3JpdHkuY2hhcmFjdGVycygpLCBhdXRob3JpdHkubGVuZ3RoKCkpOwog
ICAgIH0gZWxzZSBpZiAocHJvdG9jb2xJcygiZmlsZSIpKSB7CiAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJy8nKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwogICAgIH0KIAotICAgIGFwcGVu
ZChyZXN1bHQsIHBhdGgoKSk7CisgICAgcmVzdWx0LmFwcGVuZChwYXRoKCkpOwogCiAgICAgaWYg
KG1fcGF0aEVuZCAhPSBtX3F1ZXJ5RW5kKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJz8nKTsK
LSAgICAgICAgYXBwZW5kKHJlc3VsdCwgcXVlcnkoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
cXVlcnkoKSk7CiAgICAgfQogCiAgICAgaWYgKG1fZnJhZ21lbnRFbmQgIT0gbV9xdWVyeUVuZCkg
ewogICAgICAgICByZXN1bHQuYXBwZW5kKCcjJyk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIGZy
YWdtZW50SWRlbnRpZmllcigpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChmcmFnbWVudElkZW50
aWZpZXIoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBkZWNvZGVVUkxFc2NhcGVT
ZXF1ZW5jZXMoY29uc3QgU3RyaW5nJiBzdHIpCkBAIC05MzksNyArOTQwLDcgQEAgU3RyaW5nIGRl
Y29kZVVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdAogCiBTdHJpbmcgZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKGNvbnN0IFN0cmluZyYgc3RyLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5n
KQogewotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0
OwogCiAgICAgQ2hhckJ1ZmZlciBidWZmZXI7CiAKQEAgLTk3OCwxMyArOTc5LDEzIEBAIFN0cmlu
ZyBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3QKIAogICAgICAgICAvLyBCdWlsZCB1
cCB0aGUgc3RyaW5nIHdpdGggd2hhdCB3ZSBqdXN0IHNraXBwZWQgYW5kIHdoYXQgd2UganVzdCBk
ZWNvZGVkLgogICAgICAgICByZXN1bHQuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCkgKyBkZWNvZGVk
UG9zaXRpb24sIGVuY29kZWRSdW5Qb3NpdGlvbiAtIGRlY29kZWRQb3NpdGlvbik7Ci0gICAgICAg
IHJlc3VsdC5hcHBlbmQoZGVjb2RlZC5jaGFyYWN0ZXJzKCksIGRlY29kZWQubGVuZ3RoKCkpOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKGRlY29kZWQpOwogICAgICAgICBkZWNvZGVkUG9zaXRpb24g
PSBlbmNvZGVkUnVuRW5kOwogICAgIH0KIAogICAgIHJlc3VsdC5hcHBlbmQoc3RyLmNoYXJhY3Rl
cnMoKSArIGRlY29kZWRQb3NpdGlvbiwgbGVuZ3RoIC0gZGVjb2RlZFBvc2l0aW9uKTsKIAotICAg
IHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmlu
ZygpOwogfQogCiAvLyBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGJvdW5kcyBjaGVj
ay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5j
cHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFP
YmplY3RHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAi
bWFya3VwLmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dP
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMTEwLDE0ICsxMTEsMTQgQEAgdm9pZCBEYXRhT2JqZWN0R3RrOjpz
ZXRVUkwoY29uc3QgS1VSTCYgdQogICAgIGlmIChhY3R1YWxMYWJlbC5pc0VtcHR5KCkpCiAgICAg
ICAgIGFjdHVhbExhYmVsID0gdXJsOwogCi0gICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7Ci0gICAg
YXBwZW5kKG1hcmt1cCwgIjxhIGhyZWY9XCIiKTsKLSAgICBhcHBlbmQobWFya3VwLCB1cmwuc3Ry
aW5nKCkpOwotICAgIGFwcGVuZChtYXJrdXAsICJcIj4iKTsKKyAgICBTdHJpbmdCdWlsZGVyIG1h
cmt1cDsKKyAgICBtYXJrdXAuYXBwZW5kKCI8YSBocmVmPVwiIik7CisgICAgbWFya3VwLmFwcGVu
ZCh1cmwuc3RyaW5nKCkpOworICAgIG1hcmt1cC5hcHBlbmQoIlwiPiIpOwogICAgIEdPd25QdHI8
Z2NoYXI+IGVzY2FwZWQoZ19tYXJrdXBfZXNjYXBlX3RleHQoYWN0dWFsTGFiZWwudXRmOCgpLmRh
dGEoKSwgLTEpKTsKLSAgICBhcHBlbmQobWFya3VwLCBTdHJpbmc6OmZyb21VVEY4KGVzY2FwZWQu
Z2V0KCkpKTsKLSAgICBhcHBlbmQobWFya3VwLCAiPC9hPiIpOwotICAgIHNldE1hcmt1cChTdHJp
bmc6OmFkb3B0KG1hcmt1cCkpOworICAgIG1hcmt1cC5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChl
c2NhcGVkLmdldCgpKSk7CisgICAgbWFya3VwLmFwcGVuZCgiPC9hPiIpOworICAgIHNldE1hcmt1
cChtYXJrdXAudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgRGF0YU9iamVjdEd0azo6Y2xlYXJUZXh0
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNl
cnMuY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvSFRUUFBhcnNlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGVN
YXRoLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC0xOTYsNyArMTk3LDcgQEAgU3RyaW5n
IGZpbGVuYW1lRnJvbUhUVFBDb250ZW50RGlzcG9zaXRpbwogCiBTdHJpbmcgZXh0cmFjdE1JTUVU
eXBlRnJvbU1lZGlhVHlwZShjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSkKIHsKLSAgICBWZWN0b3I8
VUNoYXIsIDY0PiBtaW1lVHlwZTsKKyAgICBTdHJpbmdCdWlsZGVyIG1pbWVUeXBlOwogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG1lZGlhVHlwZS5sZW5ndGgoKTsKICAgICBtaW1lVHlwZS5yZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKQEAgLTIyNCw5ICsyMjUsOSBAQCBTdHJpbmcgZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlh
VHlwZShjb25zCiAgICAgICAgIG1pbWVUeXBlLmFwcGVuZChjKTsKICAgICB9CiAKLSAgICBpZiAo
bWltZVR5cGUuc2l6ZSgpID09IGxlbmd0aCkKKyAgICBpZiAobWltZVR5cGUubGVuZ3RoKCkgPT0g
bGVuZ3RoKQogICAgICAgICByZXR1cm4gbWVkaWFUeXBlOwotICAgIHJldHVybiBTdHJpbmcobWlt
ZVR5cGUuZGF0YSgpLCBtaW1lVHlwZS5zaXplKCkpOworICAgIHJldHVybiBtaW1lVHlwZS50b1N0
cmluZygpOwogfQogCiBTdHJpbmcgZXh0cmFjdENoYXJzZXRGcm9tTWVkaWFUeXBlKGNvbnN0IFN0
cmluZyYgbWVkaWFUeXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dENvZGVjSUNVLmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcg
QEAKICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4K
IAogdXNpbmcgc3RkOjptaW47CkBAIC0zMDgsNyArMzA5LDcgQEAgU3RyaW5nIFRleHRDb2RlY0lD
VTo6ZGVjb2RlKGNvbnN0IGNoYXIqIAogICAgIAogICAgIEVycm9yQ2FsbGJhY2tTZXR0ZXIgY2Fs
bGJhY2tTZXR0ZXIobV9jb252ZXJ0ZXJJQ1UsIHN0b3BPbkVycm9yKTsKIAotICAgIFZlY3RvcjxV
Q2hhcj4gcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogCiAgICAgVUNoYXIgYnVm
ZmVyW0NvbnZlcnNpb25CdWZmZXJTaXplXTsKICAgICBVQ2hhciogYnVmZmVyTGltaXQgPSBidWZm
ZXIgKyBDb252ZXJzaW9uQnVmZmVyU2l6ZTsKQEAgLTMzMCw3ICszMzEsNyBAQCBTdHJpbmcgVGV4
dENvZGVjSUNVOjpkZWNvZGUoY29uc3QgY2hhciogCiAgICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsK
ICAgICB9CiAKLSAgICBTdHJpbmcgcmVzdWx0U3RyaW5nID0gU3RyaW5nOjphZG9wdChyZXN1bHQp
OworICAgIFN0cmluZyByZXN1bHRTdHJpbmcgPSByZXN1bHQudG9TdHJpbmcoKTsKIAogICAgIC8v
IDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxND4KICAgICAvLyBT
aW1wbGlmaWVkIENoaW5lc2UgcGFnZXMgdXNlIHRoZSBjb2RlIEEzQTAgdG8gbWVhbiAiZnVsbC13
aWR0aCBzcGFjZSIsIGJ1dCBJQ1UgZGVjb2RlcyBpdCBhcyBVK0U1RTUuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAJKHJldmlzaW9uIDkzOTUzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODUsMTIgKzg1LDEwIEBAIFRleHRTdHJlYW0mIFRleHRTdHJlYW06Om9wZXJhdG9y
PDwoZG91YmwKIFRleHRTdHJlYW0mIFRleHRTdHJlYW06Om9wZXJhdG9yPDwoY29uc3QgY2hhciog
c3RyaW5nKQogewogICAgIHNpemVfdCBzdHJpbmdMZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKLSAg
ICBzaXplX3QgdGV4dExlbmd0aCA9IG1fdGV4dC5zaXplKCk7CisgICAgc2l6ZV90IHRleHRMZW5n
dGggPSBtX3RleHQubGVuZ3RoKCk7CiAgICAgaWYgKHN0cmluZ0xlbmd0aCA+IG51bWVyaWNfbGlt
aXRzPHNpemVfdD46Om1heCgpIC0gdGV4dExlbmd0aCkKICAgICAgICAgQ1JBU0goKTsKLSAgICBt
X3RleHQuZ3Jvdyh0ZXh0TGVuZ3RoICsgc3RyaW5nTGVuZ3RoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHN0cmluZ0xlbmd0aDsgKytpKQotICAgICAgICBtX3RleHRbdGV4dExlbmd0aCAr
IGldID0gc3RyaW5nW2ldOworICAgIG1fdGV4dC5hcHBlbmQoc3RyaW5nLCBzdHJpbmdMZW5ndGgp
OwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTAzLDEzICsxMDEsMTUgQEAgVGV4dFN0cmVh
bSYgVGV4dFN0cmVhbTo6b3BlcmF0b3I8PChjb25zdAogCiBUZXh0U3RyZWFtJiBUZXh0U3RyZWFt
OjpvcGVyYXRvcjw8KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGFwcGVuZChtX3RleHQs
IHN0cmluZyk7CisgICAgbV90ZXh0LmFwcGVuZChzdHJpbmcpOwogICAgIHJldHVybiAqdGhpczsK
IH0KIAogU3RyaW5nIFRleHRTdHJlYW06OnJlbGVhc2UoKQogewotICAgIHJldHVybiBTdHJpbmc6
OmFkb3B0KG1fdGV4dCk7CisgICAgU3RyaW5nIHJlc3VsdCA9IG1fdGV4dC50b1N0cmluZygpOwor
ICAgIG1fdGV4dC5jbGVhcigpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNpZiBPUyhXSU5E
T1dTKSAmJiBDUFUoWDg2XzY0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0U3RyZWFtLmgJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0U3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZp
bmUgVGV4dFN0cmVhbV9oCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Miw3
ICs1Miw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgcmVsZWFzZSgpOwogCiBwcml2YXRlOgotICAg
IFZlY3RvcjxVQ2hhcj4gbV90ZXh0OworICAgIFN0cmluZ0J1aWxkZXIgbV90ZXh0OwogfTsKIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAkocmV2aXNpb24g
OTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5o
IgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiAvLyBXZSB1c2UgLTIgaGVyZSBiZWNhdXNlIHNvbWUgcGx1
Z2lucyBsaWtlIHRvIHJldHVybiAtMSB0byBpbmRpY2F0ZSBlcnJvcgpAQCAtMTM4LDIxICsxMzks
MjEgQEAgdm9pZCBQbHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtKCkKICAgICBsb25nIGxvbmcgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExl
bmd0aCgpOwogCiAgICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5pc0hUVFAoKSkgewotICAgICAg
ICBWZWN0b3I8VUNoYXI+IHN0cmluZ0J1aWxkZXI7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgc3Ry
aW5nQnVpbGRlcjsKICAgICAgICAgU3RyaW5nIHNlcGFyYXRvcigiOiAiKTsKIAogICAgICAgICBT
dHJpbmcgc3RhdHVzTGluZSA9ICJIVFRQICIgKyBTdHJpbmc6Om51bWJlcihtX3Jlc291cmNlUmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkgKyAiIE9LXG4iOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChzdGF0dXNMaW5lLmNoYXJhY3RlcnMoKSwgc3RhdHVzTGluZS5sZW5ndGgoKSk7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHN0YXR1c0xpbmUpOwogCiAgICAgICAgIEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVh
ZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQt
PmZpcnN0LmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsKLSAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvci5jaGFyYWN0ZXJzKCksIHNlcGFyYXRvci5sZW5n
dGgoKSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJh
Y3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2Vw
YXJhdG9yKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQpOwog
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgICAgIH0KIAotICAg
ICAgICBtX2hlYWRlcnMgPSBTdHJpbmc6OmFkb3B0KHN0cmluZ0J1aWxkZXIpLnV0ZjgoKTsKKyAg
ICAgICAgbV9oZWFkZXJzID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKIAogICAg
ICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBlbmNvZGVkIChtb3N0IGxpa2VseSBjb21wcmVzc2Vk
KSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5ndGggdG8gdGhlIHBsdWdpbiwKICAgICAgICAgLy8g
d2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSBkZWNvZGVkIGxlbmd0aCwgbm90IHlldCBr
bm93biBhdCB0aGUgbW9tZW50LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw4ICsxNjgsOCBAQCBz
dGF0aWMgdm9pZCBhZGp1c3RDaGFyYWN0ZXJzQW5kTGVuZ3RoRm9yCiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBoeXBoZW5TdHJpbmcgPSBzdHlsZS0+aHlwaGVuU3RyaW5nKCk7CiAgICAgY2hhcmFj
dGVyc1dpdGhIeXBoZW4ucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCArIGh5cGhlblN0cmluZy5sZW5n
dGgoKSk7CiAgICAgY2hhcmFjdGVyc1dpdGhIeXBoZW4uYXBwZW5kKGNoYXJhY3RlcnMsIGxlbmd0
aCk7Ci0gICAgY2hhcmFjdGVyc1dpdGhIeXBoZW4uYXBwZW5kKGh5cGhlblN0cmluZy5jaGFyYWN0
ZXJzKCksIGh5cGhlblN0cmluZy5sZW5ndGgoKSk7Ci0gICAgY2hhcmFjdGVycyA9IGNoYXJhY3Rl
cnNXaXRoSHlwaGVuLmRhdGEoKTsKKyAgICBjaGFyYWN0ZXJzV2l0aEh5cGhlbi5hcHBlbmQoaHlw
aGVuU3RyaW5nKTsKKyAgICBjaGFyYWN0ZXJzID0gY2hhcmFjdGVyc1dpdGhIeXBoZW4uY2hhcmFj
dGVycygpOwogICAgIGxlbmd0aCArPSBoeXBoZW5TdHJpbmcubGVuZ3RoKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24gOTM5NTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiSW5saW5lQm94LmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGV4dC5oIiAvLyBzbyB0ZXh0UmVuZGVyZXIoKSBjYW4gYmUgaW5saW5lCiAjaW5jbHVk
ZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNCw3ICszNSwxMSBAQCBjbGFzcyBEb2N1bWVudE1hcmtl
cjsKIAogY29uc3QgdW5zaWduZWQgc2hvcnQgY05vVHJ1bmNhdGlvbiA9IFVTSFJUX01BWDsKIGNv
bnN0IHVuc2lnbmVkIHNob3J0IGNGdWxsVHJ1bmNhdGlvbiA9IFVTSFJUX01BWCAtIDE7Ci10eXBl
ZGVmIFZlY3RvcjxVQ2hhciwgMjU2PiBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW47CisKK2NsYXNz
IEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiA6IHB1YmxpYyBTdHJpbmdCdWlsZGVyIHsKK3B1Ymxp
YzoKKyAgICBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4oKSB7IHJlc2VydmVDYXBhY2l0eSgyNTYp
OyB9Cit9OwogCiAvLyBIZWxwZXIgZnVuY3Rpb25zIHNoYXJlZCBieSBJbmxpbmVUZXh0Qm94IC8g
U1ZHUm9vdElubGluZUJveAogdm9pZCB1cGRhdGVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgQ29sb3ImIGZpbGxDb2xvciwgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yLCBm
bG9hdCBzdHJva2VUaGlja25lc3MsIENvbG9yU3BhY2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTM3
MCwxNyArMzcxLDE3IEBAIFN0cmluZyBSZW5kZXJMaXN0SXRlbTo6bWFya2VyVGV4dFdpdGhTdWYK
IAogICAgIGNvbnN0IFN0cmluZyYgbWFya2VyVGV4dCA9IG1fbWFya2VyLT50ZXh0KCk7CiAgICAg
Y29uc3QgU3RyaW5nIG1hcmtlclN1ZmZpeCA9IG1fbWFya2VyLT5zdWZmaXgoKTsKLSAgICBWZWN0
b3I8VUNoYXI+IHJlc3VsdFZlY3RvcjsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKIAogICAg
IGlmICghbV9tYXJrZXItPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAg
ICAgcmVzdWx0VmVjdG9yLmFwcGVuZChtYXJrZXJTdWZmaXguY2hhcmFjdGVycygpLCBtYXJrZXJT
dWZmaXgubGVuZ3RoKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1hcmtlclN1ZmZpeCk7CiAK
LSAgICByZXN1bHRWZWN0b3IuYXBwZW5kKG1hcmtlclRleHQuY2hhcmFjdGVycygpLCBtYXJrZXJU
ZXh0Lmxlbmd0aCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKG1hcmtlclRleHQpOwogCiAgICAgaWYg
KG1fbWFya2VyLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgIHJl
c3VsdFZlY3Rvci5hcHBlbmQobWFya2VyU3VmZml4LmNoYXJhY3RlcnMoKSwgbWFya2VyU3VmZml4
Lmxlbmd0aCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtYXJrZXJTdWZmaXgpOwogCi0gICAg
cmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0VmVjdG9yKTsKKyAgICByZXR1cm4gcmVzdWx0LnRv
U3RyaW5nKCk7CiB9CiAKIHZvaWQgUmVuZGVyTGlzdEl0ZW06OmV4cGxpY2l0VmFsdWVDaGFuZ2Vk
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5j
cHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
QEAgLTEyMywxMiArMTI0LDEyIEBAIHN0YXRpYyBTdHJpbmcgdG9TeW1ib2xpYyhpbnQgbnVtYmVy
LCBjb24KICAgICAtLW51bWJlclNoYWRvdzsKIAogICAgIC8vIFRoZSBhc3Rlcmlza3MgbGlzdC1z
dHlsZS10eXBlIGlzIHRoZSB3b3JzdCBjYXNlOyB3ZSBzaG93IHxudW1iZXJTaGFkb3d8IGFzdGVy
aXNrcy4KLSAgICBWZWN0b3I8VUNoYXI+IGxldHRlcnM7CisgICAgU3RyaW5nQnVpbGRlciBsZXR0
ZXJzOwogICAgIGxldHRlcnMuYXBwZW5kKHN5bWJvbHNbbnVtYmVyU2hhZG93ICUgc3ltYm9sc1Np
emVdKTsKICAgICB1bnNpZ25lZCBudW1TeW1ib2xzID0gbnVtYmVyU2hhZG93IC8gc3ltYm9sc1Np
emU7CiAgICAgd2hpbGUgKG51bVN5bWJvbHMtLSkKICAgICAgICAgbGV0dGVycy5hcHBlbmQoc3lt
Ym9sc1tudW1iZXJTaGFkb3cgJSBzeW1ib2xzU2l6ZV0pOwotICAgIHJldHVybiBTdHJpbmc6OmFk
b3B0KGxldHRlcnMpOworICAgIHJldHVybiBsZXR0ZXJzLnRvU3RyaW5nKCk7CiB9CiAKIHN0YXRp
YyBTdHJpbmcgdG9BbHBoYWJldGljKGludCBudW1iZXIsIGNvbnN0IFVDaGFyKiBhbHBoYWJldCwg
dW5zaWduZWQgYWxwaGFiZXRTaXplKQpAQCAtMTI3NCwxMyArMTI3NSwxMyBAQCB2b2lkIFJlbmRl
ckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgICAgIC8vIFRleHQgaXMgbm90IGFy
Yml0cmFyeS4gV2UgY2FuIGp1ZGdlIHdoZXRoZXIgaXQncyBSVEwgZnJvbSB0aGUgZmlyc3QgY2hh
cmFjdGVyLAogICAgICAgICAvLyBhbmQgd2Ugb25seSBuZWVkIHRvIGhhbmRsZSB0aGUgZGlyZWN0
aW9uIFJpZ2h0VG9MZWZ0IGZvciBub3cuCiAgICAgICAgIGJvb2wgdGV4dE5lZWRzUmV2ZXJzaW5n
ID0gZGlyZWN0aW9uKG1fdGV4dFswXSkgPT0gUmlnaHRUb0xlZnQ7Ci0gICAgICAgIFZlY3RvcjxV
Q2hhcj4gcmV2ZXJzZWRUZXh0OworICAgICAgICBTdHJpbmdCdWlsZGVyIHJldmVyc2VkVGV4dDsK
ICAgICAgICAgaWYgKHRleHROZWVkc1JldmVyc2luZykgewogICAgICAgICAgICAgaW50IGxlbmd0
aCA9IG1fdGV4dC5sZW5ndGgoKTsKLSAgICAgICAgICAgIHJldmVyc2VkVGV4dC5ncm93KGxlbmd0
aCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgICAgIHJldmVyc2VkVGV4dFtsZW5ndGggLSBpIC0gMV0gPSBtX3RleHRbaV07Ci0gICAg
ICAgICAgICB0ZXh0UnVuLnNldFRleHQocmV2ZXJzZWRUZXh0LmRhdGEoKSwgbGVuZ3RoKTsKKyAg
ICAgICAgICAgIHJldmVyc2VkVGV4dC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IC0taSkKKyAgICAgICAgICAgICAg
ICByZXZlcnNlZFRleHQuYXBwZW5kKG1fdGV4dFtpXSk7CisgICAgICAgICAgICB0ZXh0UnVuLnNl
dFRleHQocmV2ZXJzZWRUZXh0LmNoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGNvbnN0IFVDaGFyIHN1ZmZpeCA9IGxpc3RNYXJrZXJTdWZmaXgodHlwZSwgbV9saXN0
SXRlbS0+dmFsdWUoKSk7CkBAIC0xNTUyLDE4ICsxNTUzLDIwIEBAIFN0cmluZyBSZW5kZXJMaXN0
TWFya2VyOjpzdWZmaXgoKSBjb25zdAogICAgIEVMaXN0U3R5bGVUeXBlIHR5cGUgPSBzdHlsZSgp
LT5saXN0U3R5bGVUeXBlKCk7CiAgICAgY29uc3QgVUNoYXIgc3VmZml4ID0gbGlzdE1hcmtlclN1
ZmZpeCh0eXBlLCBtX2xpc3RJdGVtLT52YWx1ZSgpKTsKIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVz
dWx0VmVjdG9yOwotICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQoc3VmZml4KTsKKyAgICBpZiAoc3Vm
Zml4ID09ICcgJykKKyAgICAgICAgcmV0dXJuIFN0cmluZygiICIpOwogCiAgICAgLy8gSWYgdGhl
IHN1ZmZpeCBpcyBub3QgJyAnLCBhbiBleHRyYSBzcGFjZSBpcyBuZWVkZWQKLSAgICBpZiAoc3Vm
Zml4ICE9ICcgJykgewotICAgICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpKQotICAgICAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZCgnICcpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZXN1bHRWZWN0b3IucHJlcGVuZCgnICcpOworICAgIFVDaGFyIGRhdGFb
Ml07CisgICAgaWYgKHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgeworICAgICAg
ICBkYXRhWzBdID0gc3VmZml4OworICAgICAgICBkYXRhWzFdID0gJyAnOworICAgIH0gZWxzZSB7
CisgICAgICAgIGRhdGFbMF0gPSAnICc7CisgICAgICAgIGRhdGFbMV0gPSBzdWZmaXg7CiAgICAg
fQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0VmVjdG9yKTsKKyAgICByZXR1cm4g
U3RyaW5nKGRhdGEsIDIpOwogfQogCiBib29sIFJlbmRlckxpc3RNYXJrZXI6OmlzSW5zaWRlKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAgc3RhdGlj
IGJvb2wgaXNFbXB0eU9yVW5zdHlsZWRBcHBsZVN0eWxlUwogCiBTdHJpbmcgcXVvdGVBbmRFc2Nh
cGVOb25QcmludGFibGVzKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBWZWN0b3I8VUNoYXI+IHJl
c3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICByZXN1bHQuYXBwZW5kKCciJyk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBzLmxlbmd0aCgpOyArK2kpIHsKICAgICAg
ICAgVUNoYXIgYyA9IHNbaV07CkBAIC0yMjIsNyArMjIyLDcgQEAgU3RyaW5nIHF1b3RlQW5kRXNj
YXBlTm9uUHJpbnRhYmxlcyhjb25zdAogICAgICAgICB9CiAgICAgfQogICAgIHJlc3VsdC5hcHBl
bmQoJyInKTsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogdm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRl
ck9iamVjdChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBSZW5kZXJBc1Rl
eHRCZWhhdmlvciBiZWhhdmlvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHAJKHJldmlzaW9uIDkzOTUzKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5l
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJU
ZXh0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgCkBAIC02NCwxMiArNjUsMTIgQEAgdm9pZCBSZW5kZXJNYXRoTUxGZW5j
ZWQ6OnVwZGF0ZUZyb21FbGVtZQogICAgIAogICAgIEF0b21pY1N0cmluZyBzZXBhcmF0b3JzID0g
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZlbmNlZCktPmdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6
c2VwYXJhdG9yc0F0dHIpOwogICAgIGlmICghc2VwYXJhdG9ycy5pc051bGwoKSkgewotICAgICAg
ICBWZWN0b3I8VUNoYXI+IGNoYXJhY3RlcnM7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgY2hhcmFj
dGVyczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzZXBhcmF0b3JzLmxl
bmd0aCgpOyBpKyspIHsKICAgICAgICAgICAgIGlmICghaXNTcGFjZU9yTmV3bGluZShzZXBhcmF0
b3JzW2ldKSkKICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzLmFwcGVuZChzZXBhcmF0b3JzW2ld
KTsKICAgICAgICAgfQotICAgICAgICBtX3NlcGFyYXRvcnMgPSAhY2hhcmFjdGVycy5zaXplKCkg
PyAwIDogU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnMuZGF0YSgpICwgY2hhcmFjdGVycy5z
aXplKCkpOworICAgICAgICBtX3NlcGFyYXRvcnMgPSAhY2hhcmFjdGVycy5sZW5ndGgoKSA/IDAg
OiBjaGFyYWN0ZXJzLnRvU3RyaW5nKCkuaW1wbCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IFRoZSBzZXBhcmF0b3IgZGVmYXVsdHMgdG8gYSBzaW5nbGUgY29tbWEuCiAgICAgICAgIG1fc2Vw
YXJhdG9ycyA9IFN0cmluZ0ltcGw6OmNyZWF0ZSgiLCIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIkxldmVsREJT
bGljZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogLy8gTGV2ZWxE
QiBzdG9yZXMga2V5L3ZhbHVlIHBhaXJzLiBLZXlzIGFuZCB2YWx1ZXMgYXJlIHN0cmluZ3Mgb2Yg
Ynl0ZXMsIG5vcm1hbGx5IG9mIHR5cGUgVmVjdG9yPGNoYXI+LgogLy8KQEAgLTI2NCwxNiArMjY1
LDE3IEBAIFN0cmluZyBkZWNvZGVTdHJpbmcoY29uc3QgY2hhciogcCwgY29uc3QKICAgICBBU1NF
UlQoISgoZW5kIC0gcCkgJSAyKSk7CiAKICAgICBzaXplX3QgbGVuID0gKGVuZCAtIHApIC8gMjsK
LSAgICBWZWN0b3I8VUNoYXI+IHZlY3RvcihsZW4pOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0
OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobGVuKTsKIAogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBoaSA9ICpwKys7CiAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgbG8gPSAqcCsrOwogCi0gICAgICAgIHZlY3RvcltpXSA9ICho
aSA8PCA4KSB8IGxvOworICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPigo
aGkgPDwgOCkgfCBsbykpOwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHZlY3Rv
cik7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBWZWN0b3I8Y2hhcj4gZW5j
b2RlU3RyaW5nV2l0aExlbmd0aChjb25zdCBTdHJpbmcmIHMpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDkzOTUzKQorKysgU291cmNlL1dlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODc0LDcgKzg3NCw3IEBA
IFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWEKICAgICAgICAgcmV0dXJu
ICIiOwogICAgIH0KIAotICAgIFZlY3RvcjxVQ2hhcj4gc3RyaW5nQnVpbGRlcjsKKyAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3Ig
KEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNwb25zZS5odHRwSGVhZGVy
RmllbGRzKCkuYmVnaW4oKTsgaXQhPSBlbmQ7ICsraXQpIHsKQEAgLTg5MCwxNSArODkwLDE1IEBA
IFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWEKICAgICAgICAgaWYgKCFt
X3NhbWVPcmlnaW5SZXF1ZXN0ICYmICFpc09uQWNjZXNzQ29udHJvbFJlc3BvbnNlSGVhZGVyV2hp
dGVsaXN0KGl0LT5maXJzdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3Ro
KCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOwogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnOicpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgn
ICcpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMo
KSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0
LT5zZWNvbmQpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXHInKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6
YWRvcHQoc3RyaW5nQnVpbGRlcik7CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KTsKIH0KIAogU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXNwb25zZUhlYWRlcihjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiA5Mzk1MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDcgQEAKICNpbmNsdWRlICJYUGF0aFV0aWwuaCIKICNpbmNsdWRlICJYUGF0aFZhbHVlLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBYUGF0aCB7CkBAIC0zMTgs
MjYgKzMxOSwyNiBAQCBWYWx1ZSBGdW5Qb3NpdGlvbjo6ZXZhbHVhdGUoKSBjb25zdAogVmFsdWUg
RnVuSWQ6OmV2YWx1YXRlKCkgY29uc3QKIHsKICAgICBWYWx1ZSBhID0gYXJnKDApLT5ldmFsdWF0
ZSgpOwotICAgIFZlY3RvcjxVQ2hhcj4gaWRMaXN0OyAvLyBBIHdoaXRlc3BhY2Utc2VwYXJhdGVk
IGxpc3Qgb2YgSURzCisgICAgU3RyaW5nQnVpbGRlciBpZExpc3Q7IC8vIEEgd2hpdGVzcGFjZS1z
ZXBhcmF0ZWQgbGlzdCBvZiBJRHMKIAogICAgIGlmIChhLmlzTm9kZVNldCgpKSB7CiAgICAgICAg
IGNvbnN0IE5vZGVTZXQmIG5vZGVzID0gYS50b05vZGVTZXQoKTsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgU3RyaW5nIHN0
ciA9IHN0cmluZ1ZhbHVlKG5vZGVzW2ldKTsKLSAgICAgICAgICAgIGlkTGlzdC5hcHBlbmQoc3Ry
LmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlkTGlzdC5hcHBlbmQo
c3RyKTsKICAgICAgICAgICAgIGlkTGlzdC5hcHBlbmQoJyAnKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7CiAgICAgICAgIFN0cmluZyBzdHIgPSBhLnRvU3RyaW5nKCk7Ci0gICAgICAgIGlkTGlz
dC5hcHBlbmQoc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgaWRMaXN0
LmFwcGVuZChzdHIpOwogICAgIH0KICAgICAKICAgICBUcmVlU2NvcGUqIGNvbnRleHRTY29wZSA9
IGV2YWx1YXRpb25Db250ZXh0KCkubm9kZS0+dHJlZVNjb3BlKCk7CiAgICAgTm9kZVNldCByZXN1
bHQ7CiAgICAgSGFzaFNldDxOb2RlKj4gcmVzdWx0U2V0OwogCi0gICAgc2l6ZV90IHN0YXJ0UG9z
ID0gMDsKLSAgICBzaXplX3QgbGVuZ3RoID0gaWRMaXN0LnNpemUoKTsKKyAgICB1bnNpZ25lZCBz
dGFydFBvcyA9IDA7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaWRMaXN0Lmxlbmd0aCgpOwogICAg
IHdoaWxlICh0cnVlKSB7CiAgICAgICAgIHdoaWxlIChzdGFydFBvcyA8IGxlbmd0aCAmJiBpc1do
aXRlc3BhY2UoaWRMaXN0W3N0YXJ0UG9zXSkpCiAgICAgICAgICAgICArK3N0YXJ0UG9zOwpAQCAt
MzUxLDcgKzM1Miw3IEBAIFZhbHVlIEZ1bklkOjpldmFsdWF0ZSgpIGNvbnN0CiAKICAgICAgICAg
Ly8gSWYgdGhlcmUgYXJlIHNldmVyYWwgbm9kZXMgd2l0aCB0aGUgc2FtZSBpZCwgaWQoKSBzaG91
bGQgcmV0dXJuIHRoZSBmaXJzdCBvbmUuCiAgICAgICAgIC8vIEluIFdlYktpdCwgZ2V0RWxlbWVu
dEJ5SWQgYmVoYXZlcyBzbywgdG9vLCBhbHRob3VnaCBpdHMgYmVoYXZpb3IgaW4gdGhpcyBjYXNl
IGlzIGZvcm1hbGx5IHVuZGVmaW5lZC4KLSAgICAgICAgTm9kZSogbm9kZSA9IGNvbnRleHRTY29w
ZS0+Z2V0RWxlbWVudEJ5SWQoU3RyaW5nKCZpZExpc3Rbc3RhcnRQb3NdLCBlbmRQb3MgLSBzdGFy
dFBvcykpOworICAgICAgICBOb2RlKiBub2RlID0gY29udGV4dFNjb3BlLT5nZXRFbGVtZW50QnlJ
ZChTdHJpbmcoaWRMaXN0LmNoYXJhY3RlcnMoKSArIHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBv
cykpOwogICAgICAgICBpZiAobm9kZSAmJiByZXN1bHRTZXQuYWRkKG5vZGUpLnNlY29uZCkKICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQobm9kZSk7CiAgICAgICAgIApAQCAtNDM2LDE1ICs0Mzcs
MTYgQEAgVmFsdWUgRnVuU3RyaW5nOjpldmFsdWF0ZSgpIGNvbnN0CiAKIFZhbHVlIEZ1bkNvbmNh
dDo6ZXZhbHVhdGUoKSBjb25zdAogewotICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gcmVzdWx0Owor
ICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMTAy
NCk7CiAKICAgICB1bnNpZ25lZCBjb3VudCA9IGFyZ0NvdW50KCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgU3RyaW5nIHN0cihhcmcoaSktPmV2
YWx1YXRlKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoc3RyLmNoYXJhY3Rl
cnMoKSwgc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIpOwogICAgIH0K
IAotICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CisgICAg
cmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBWYWx1ZSBGdW5TdGFydHNXaXRoOjpldmFs
dWF0ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhVdGlsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhVdGlsLmNwcAkocmV2aXNpb24gOTM5
NTMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhVdGlsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2lmIEVOQUJMRShYUEFUSCkKIAogI2luY2x1ZGUgIkNvbnRhaW5l
ck5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBYUGF0aCB7CkBAIC01MSwxNyArNTIsMTcgQEAgU3RyaW5n
IHN0cmluZ1ZhbHVlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICByZXR1cm4gbm9kZS0+bm9kZVZh
bHVlKCk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAoaXNSb290RG9tTm9kZShu
b2RlKSB8fCBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewotICAgICAg
ICAgICAgICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgICAgICAgICAgICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OwogICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMTAy
NCk7CiAKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBub2RlLT5maXJzdENoaWxkKCk7
IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChuLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgbm9kZVZhbHVlID0gbi0+bm9kZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKG5vZGVWYWx1ZS5jaGFyYWN0ZXJzKCksIG5vZGVWYWx1ZS5sZW5ndGgo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG5vZGVWYWx1ZSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQudG9TdHJpbmcoKTsKICAgICAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAJKHJldmlzaW9uIDkzOTUz
KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY4LDkgKzE2OCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRYU0xUTG9h
ZENhbGxCYWNrKHgKICAgICBnbG9iYWxDYWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291
cmNlTG9hZGVyOwogfQogCi1zdGF0aWMgaW50IHdyaXRlVG9WZWN0b3Iodm9pZCogY29udGV4dCwg
Y29uc3QgY2hhciogYnVmZmVyLCBpbnQgbGVuKQorc3RhdGljIGludCB3cml0ZVRvU3RyaW5nQnVp
bGRlcih2b2lkKiBjb250ZXh0LCBjb25zdCBjaGFyKiBidWZmZXIsIGludCBsZW4pCiB7Ci0gICAg
VmVjdG9yPFVDaGFyPiYgcmVzdWx0T3V0cHV0ID0gKnN0YXRpY19jYXN0PFZlY3RvcjxVQ2hhcj4q
Pihjb250ZXh0KTsKKyAgICBTdHJpbmdCdWlsZGVyJiByZXN1bHRPdXRwdXQgPSAqc3RhdGljX2Nh
c3Q8U3RyaW5nQnVpbGRlcio+KGNvbnRleHQpOwogCiAgICAgaWYgKCFsZW4pCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTk3LDkgKzE5Nyw5IEBAIHN0YXRpYyBib29sIHNhdmVSZXN1bHRUb1N0cmlu
Zyh4bWxEb2NQdHIKICAgICBpZiAoIW91dHB1dEJ1ZikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHRWZWN0b3I7Ci0gICAgb3V0cHV0QnVmLT5jb250ZXh0
ID0gJnJlc3VsdFZlY3RvcjsKLSAgICBvdXRwdXRCdWYtPndyaXRlY2FsbGJhY2sgPSB3cml0ZVRv
VmVjdG9yOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0QnVpbGRlcjsKKyAgICBvdXRwdXRCdWYt
PmNvbnRleHQgPSAmcmVzdWx0QnVpbGRlcjsKKyAgICBvdXRwdXRCdWYtPndyaXRlY2FsbGJhY2sg
PSB3cml0ZVRvU3RyaW5nQnVpbGRlcjsKIAogICAgIGludCByZXR2YWwgPSB4c2x0U2F2ZVJlc3Vs
dFRvKG91dHB1dEJ1ZiwgcmVzdWx0RG9jLCBzaGVldCk7CiAgICAgeG1sT3V0cHV0QnVmZmVyQ2xv
c2Uob3V0cHV0QnVmKTsKQEAgLTIwNywxMCArMjA3LDEwIEBAIHN0YXRpYyBib29sIHNhdmVSZXN1
bHRUb1N0cmluZyh4bWxEb2NQdHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV29y
a2Fyb3VuZCBmb3IgPGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5
NTY2OD46IGxpYnhzbHQgYXBwZW5kcyBhbiBleHRyYSBsaW5lIGZlZWQgdG8gdGhlIHJlc3VsdC4K
LSAgICBpZiAocmVzdWx0VmVjdG9yLnNpemUoKSA+IDAgJiYgcmVzdWx0VmVjdG9yW3Jlc3VsdFZl
Y3Rvci5zaXplKCkgLSAxXSA9PSAnXG4nKQotICAgICAgICByZXN1bHRWZWN0b3IucmVtb3ZlTGFz
dCgpOworICAgIGlmIChyZXN1bHRCdWlsZGVyLmxlbmd0aCgpID4gMCAmJiByZXN1bHRCdWlsZGVy
W3Jlc3VsdEJ1aWxkZXIubGVuZ3RoKCkgLSAxXSA9PSAnXG4nKQorICAgICAgICByZXN1bHRCdWls
ZGVyLnJlc2l6ZShyZXN1bHRCdWlsZGVyLmxlbmd0aCgpIC0gMSk7CiAKLSAgICByZXN1bHRTdHJp
bmcgPSBTdHJpbmc6OmFkb3B0KHJlc3VsdFZlY3Rvcik7CisgICAgcmVzdWx0U3RyaW5nID0gcmVz
dWx0QnVpbGRlci50b1N0cmluZygpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhv
ZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJl
ZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBDaGFyYWN0ZXJSZWZl
cmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzX2gKICNkZWZpbmUgQ2hhcmFjdGVyUmVmZXJlbmNlUGFy
c2VySW5saW5lTWV0aG9kc19oCiAKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2
LDE5ICszNiwxOSBAQCBpbmxpbmUgYm9vbCBpc0hleERpZ2l0KFVDaGFyIGNjKQogICAgIHJldHVy
biAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykgfHwgKGNjID49ICdhJyAmJiBjYyA8PSAnZicpIHx8
IChjYyA+PSAnQScgJiYgY2MgPD0gJ0YnKTsKIH0KIAotaW5saW5lIHZvaWQgdW5jb25zdW1lQ2hh
cmFjdGVycyhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgY29uc3QgVmVjdG9yPFVDaGFyLCAxMD4m
IGNvbnN1bWVkQ2hhcmFjdGVycykKK2lubGluZSB2b2lkIHVuY29uc3VtZUNoYXJhY3RlcnMoU2Vn
bWVudGVkU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNvbnN1bWVkQ2hhcmFj
dGVycykKIHsKLSAgICBpZiAoY29uc3VtZWRDaGFyYWN0ZXJzLnNpemUoKSA9PSAxKQorICAgIGlm
IChjb25zdW1lZENoYXJhY3RlcnMubGVuZ3RoKCkgPT0gMSkKICAgICAgICAgc291cmNlLnB1c2go
Y29uc3VtZWRDaGFyYWN0ZXJzWzBdKTsKLSAgICBlbHNlIGlmIChjb25zdW1lZENoYXJhY3RlcnMu
c2l6ZSgpID09IDIpIHsKKyAgICBlbHNlIGlmIChjb25zdW1lZENoYXJhY3RlcnMubGVuZ3RoKCkg
PT0gMikgewogICAgICAgICBzb3VyY2UucHVzaChjb25zdW1lZENoYXJhY3RlcnNbMF0pOwogICAg
ICAgICBzb3VyY2UucHVzaChjb25zdW1lZENoYXJhY3RlcnNbMV0pOwogICAgIH0gZWxzZQotICAg
ICAgICBzb3VyY2UucHJlcGVuZChTZWdtZW50ZWRTdHJpbmcoU3RyaW5nKGNvbnN1bWVkQ2hhcmFj
dGVycy5kYXRhKCksIGNvbnN1bWVkQ2hhcmFjdGVycy5zaXplKCkpKSk7CisgICAgICAgIHNvdXJj
ZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoY29uc3VtZWRDaGFyYWN0ZXJzLmNoYXJh
Y3RlcnMoKSwgY29uc3VtZWRDaGFyYWN0ZXJzLmxlbmd0aCgpKSkpOwogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgUGFyc2VyRnVuY3Rpb25zPgotYm9vbCBjb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNl
KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZENoYXJh
Y3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRD
aGFyYWN0ZXIpCitib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5n
JiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRDaGFyYWN0ZXIsIGJvb2wmIG5vdEVub3Vn
aENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQogewogICAgIEFT
U0VSVCghYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFy
YWN0ZXIgPT0gJyInIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICdcJycgfHwgYWRk
aXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJz4nKTsKICAgICBBU1NFUlQoIW5vdEVub3VnaENo
YXJhY3RlcnMpOwpAQCAtNjUsNyArNjUsNyBAQCBib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVu
Y2UoU2VnbWVudGVkCiAgICAgfTsKICAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSA9IEluaXRp
YWw7CiAgICAgVUNoYXIzMiByZXN1bHQgPSAwOwotICAgIFZlY3RvcjxVQ2hhciwgMTA+IGNvbnN1
bWVkQ2hhcmFjdGVyczsKKyAgICBTdHJpbmdCdWlsZGVyIGNvbnN1bWVkQ2hhcmFjdGVyczsKICAg
ICAKICAgICB3aGlsZSAoIXNvdXJjZS5pc0VtcHR5KCkpIHsKICAgICAgICAgVUNoYXIgY2MgPSAq
c291cmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZl
cmVuY2VQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFs
dWU7CiAgICAgfQogCi0gICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnZlcnRUb1VURjE2KFVDaGFy
MzIgdmFsdWUsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkQ2hhcmFjdGVyKQorICAgIGlubGlu
ZSBzdGF0aWMgYm9vbCBjb252ZXJ0VG9VVEYxNihVQ2hhcjMyIHZhbHVlLCBTdHJpbmdCdWlsZGVy
JiBkZWNvZGVkQ2hhcmFjdGVyKQogICAgIHsKICAgICAgICAgaWYgKFVfSVNfQk1QKHZhbHVlKSkg
ewogICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcj4odmFsdWUpOwpA
QCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAKICAgICBpbmxpbmUgc3RhdGljIGJvb2wgYWNjZXB0
TWFsZm9ybWVkKCkgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGlubGluZSBzdGF0aWMgYm9vbCBj
b25zdW1lTmFtZWRFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiwgVmVjdG9yPFVDaGFyLCAxNj4mLCBi
b29sJiwgVUNoYXIsIFVDaGFyJikKKyAgICBpbmxpbmUgc3RhdGljIGJvb2wgY29uc3VtZU5hbWVk
RW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIFN0cmluZ0J1aWxkZXImLCBib29sJiwgVUNoYXIsIFVD
aGFyJikKICAgICB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKIAogfQogCi1ib29sIGNvbnN1bWVY
TUxDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFZlY3RvcjxVQ2hh
ciwgMTY+JiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzKQorYm9v
bCBjb25zdW1lWE1MQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBT
dHJpbmdCdWlsZGVyJiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJz
KQogewogICAgIHJldHVybiBjb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlPFhNTENoYXJhY3RlclJl
ZmVyZW5jZVBhcnNlcj4oc291cmNlLCBkZWNvZGVkQ2hhcmFjdGVyLCBub3RFbm91Z2hDaGFyYWN0
ZXJzLCAwKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVy
UmVmZXJlbmNlUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAK
LWJvb2wgY29uc3VtZVhNTENoYXJhY3RlclJlZmVyZW5jZShTZWdtZW50ZWRTdHJpbmcmLCBWZWN0
b3I8VUNoYXIsIDE2PiYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVy
cyk7Citib29sIGNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiwg
U3RyaW5nQnVpbGRlciYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVy
cyk7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbml6ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVG9rZW5pemVy
LmNwcAkocmV2aXNpb24gOTM5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRv
a2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3
dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0yNTEsMTEgKzI1MiwxMCBAQCBi
b29sIFhNTFRva2VuaXplcjo6bmV4dFRva2VuKFNlZ21lbnRlZFN0CiAgICAgWE1MX0JFR0lOX1NU
QVRFKENoYXJhY3RlclJlZmVyZW5jZVN0YXJ0U3RhdGUpIHsKICAgICAgICAgaWYgKGNjID09ICcj
JykgewogICAgICAgICAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAg
ICAgICAgICBWZWN0b3I8VUNoYXIsIDE2PiBkZWNvZGVkQ2hhcmFjdGVyOworICAgICAgICAgICAg
U3RyaW5nQnVpbGRlciBkZWNvZGVkQ2hhcmFjdGVyOwogICAgICAgICAgICAgaWYgKGNvbnN1bWVY
TUxDaGFyYWN0ZXJSZWZlcmVuY2Uoc291cmNlLCBkZWNvZGVkQ2hhcmFjdGVyLCBub3RFbm91Z2hD
aGFyYWN0ZXJzKSkgewotICAgICAgICAgICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gZGVjb2RlZENoYXJhY3Rlci5iZWdpbigpOwotICAgICAgICAgICAgICAg
IGZvciAoOyBpdGVyICE9IGRlY29kZWRDaGFyYWN0ZXIuZW5kKCk7ICsraXRlcikKLSAgICAgICAg
ICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCppdGVyKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVjb2RlZENoYXJhY3Rlci5sZW5ndGgoKTsgKytpKQorICAg
ICAgICAgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXIoZGVjb2RlZENoYXJhY3RlcltpXSk7CiAg
ICAgICAgICAgICAgICAgWE1MX1NXSVRDSF9UTyhEYXRhU3RhdGUpOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChub3RFbm91Z2hDaGFyYWN0ZXJzKQogICAgICAgICAgICAgICAgIHJldHVybiBoYXZl
QnVmZmVyZWRDaGFyYWN0ZXJUb2tlbigpOwpAQCAtNDM3LDEyICs0MzcsMTEgQEAgYm9vbCBYTUxU
b2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRTdAogICAgIFhNTF9CRUdJTl9TVEFURShDaGFy
YWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVlU3RhdGUpIHsKICAgICAgICAgaWYgKGNjID09
ICcjJykgewogICAgICAgICAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0g
ICAgICAgICAgICBWZWN0b3I8VUNoYXIsIDE2PiBkZWNvZGVkQ2hhcmFjdGVyOworICAgICAgICAg
ICAgU3RyaW5nQnVpbGRlciBkZWNvZGVkQ2hhcmFjdGVyOwogICAgICAgICAgICAgc291cmNlLnB1
c2goY2MpOwogICAgICAgICAgICAgaWYgKGNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2Uoc291
cmNlLCBkZWNvZGVkQ2hhcmFjdGVyLCBub3RFbm91Z2hDaGFyYWN0ZXJzKSkgewotICAgICAgICAg
ICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZGVjb2RlZENo
YXJhY3Rlci5iZWdpbigpOwotICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGRlY29kZWRD
aGFyYWN0ZXIuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICAgICAgbV90b2tlbi0+YXBw
ZW5kVG9BdHRyaWJ1dGVWYWx1ZSgqaXRlcik7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRlY29kZWRDaGFyYWN0ZXIubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZShkZWNvZGVkQ2hhcmFjdGVy
W2ldKTsKICAgICAgICAgICAgICAgICBYTUxfQURWQU5DRV9UTyhBdHRyaWJ1dGVWYWx1ZVF1b3Rl
ZFN0YXRlKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykKICAg
ICAgICAgICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKTsK
</data>
<flag name="review"
          id="101646"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105574</attachid>
            <date>2011-08-29 21:38:28 -0700</date>
            <delta_ts>2011-08-31 03:57:17 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>patch-67079d</filename>
            <type>text/plain</type>
            <size>107249</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM5ODApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDgtMjkgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXBsYWNlIHVzYWdlcyBvZiBWZWN0b3I8VUNoYXI+IHdpdGggZXhpc3RpbmcgU3Ry
aW5nQnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjcwNzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0byBzdXBwb3J0IDgtYml0IHN0cmluZyBidWZmZXJzLgor
ICAgICAgICBBZGRzIFN0cmluZ0J1aWxkZXI6OmNoYXJhY3RlcnMoKSBiZWNhdXNlIHRoZSBvcmln
aW5hbCBWZWN0b3I8VUNoYXI+OjpkYXRhKCkKKyAgICAgICAgaXMgd2lkZWx5IHVzZWQuCisgICAg
ICAgIFNldHMgdGhlIG1pbmltdW0gc2l6ZSBvZiBidWZmZXIgdG8gMTYgdG8gcHJldmVudCBwb3Nz
aWJsZSBwZXJmb3JtYW5jZQorICAgICAgICByZWdyZXNzaW9uLiBGdXJ0aGVyIHBlcmZvcm1hbmNl
IGludmVzdGlnYXRpb24gc2hvdWxkIGJlIGRvbmUgaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MDg0LgorCisgICAgICAgICogd3RmL0ZvcndhcmQu
aDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdURjo6
U3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplZCk6IFNldHMgbWluaW11bSBidWZmZXIg
c2l6ZSB0byAxNiBieXRlcy4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6Om9wZXJhdG9yW10pOgorICAgICAgICAoV1RGOjpT
dHJpbmdCdWlsZGVyOjpjaGFyYWN0ZXJzKTogQWRkZWQuCisKIDIwMTEtMDgtMjggIEpvbmF0aGFu
IExpdSAgPG5ldDE0N0BnbWFpbC5jb20+CiAKICAgICAgICAgRml4IGJ1aWxkIGVycm9yIHdoZW4g
Y29tcGlsaW5nIHdpdGggTWluR1ctdzY0IGJ5IGRpc2FibGluZyBKSVQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvRm9yd2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvRm9yd2FyZC5oCShyZXZpc2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvRm9yd2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgIGNsYXNzIEVuY29kZXI7CiAgICAgY2xhc3MgU3RyaW5nOwogICAg
IGNsYXNzIFN0cmluZ0J1ZmZlcjsKKyAgICBjbGFzcyBTdHJpbmdCdWlsZGVyOwogICAgIGNsYXNz
IFN0cmluZ0ltcGw7CiB9CiAKQEAgLTU5LDYgKzYwLDcgQEAgdXNpbmcgV1RGOjpFbmNvZGVyOwog
dXNpbmcgV1RGOjpEZWNvZGVyOwogdXNpbmcgV1RGOjpTdHJpbmc7CiB1c2luZyBXVEY6OlN0cmlu
Z0J1ZmZlcjsKK3VzaW5nIFdURjo6U3RyaW5nQnVpbGRlcjsKIHVzaW5nIFdURjo6U3RyaW5nSW1w
bDsKIAogI2VuZGlmIC8vIFdURl9Gb3J3YXJkX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAJKHJldmlzaW9uIDkzOTgwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWluaW11bUNhcGFjaXR5ID0gMTY7CisKIHZvaWQgU3RyaW5nQnVpbGRlcjo6
cmVpZnlTdHJpbmcoKQogewogICAgIC8vIENoZWNrIGlmIHRoZSBzdHJpbmcgYWxyZWFkeSBleGlz
dHMuCkBAIC0xMjYsMTAgKzEyOCwxMCBAQCBVQ2hhciogU3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5p
bml0aWFsaXplCiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBuZWVkIHRvIHJlYWxsb2MgdGhl
IGJ1ZmZlci4KLSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnMoKSwg
c3RkOjptYXgocmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyLT5sZW5ndGgoKSAqIDIpKTsKKyAgICAg
ICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnMoKSwgc3RkOjptYXgocmVxdWly
ZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgbV9idWZmZXItPmxlbmd0aCgpICog
MikpKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0g
bV9sZW5ndGgpOwotICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzKCks
IHN0ZDo6bWF4KHJlcXVpcmVkTGVuZ3RoLCByZXF1aXJlZExlbmd0aCAqIDIpKTsKKyAgICAgICAg
YWxsb2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFjdGVycygpLCBzdGQ6Om1heChyZXF1aXJlZExl
bmd0aCwgc3RkOjptYXgobWluaW11bUNhcGFjaXR5LCBtX2xlbmd0aCAqIDIpKSk7CiAgICAgfQog
CiAgICAgVUNoYXIqIHJlc3VsdCA9IG1fYnVmZmVyQ2hhcmFjdGVycyArIG1fbGVuZ3RoOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCShy
ZXZpc2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMCArMTA4LDE1IEBAIHB1YmxpYzoKICAg
ICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NF
UlQoaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnMoKVtpXTsKKyAgICB9
CisKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0CisgICAgewogICAgICAgICBp
ZiAoIW1fc3RyaW5nLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5nW2ldOwor
ICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5nLmNoYXJhY3RlcnMoKTsKICAgICAgICAgQVNTRVJU
KG1fYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzKClbaV07Cisg
ICAgICAgIHJldHVybiBtX2J1ZmZlci0+Y2hhcmFjdGVycygpOwogICAgIH0KIAogICAgIHZvaWQg
Y2xlYXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM5ODApCisrKyBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNjQgQEAKKzIwMTEtMDgtMjkg
IFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXBs
YWNlIHVzYWdlcyBvZiBWZWN0b3I8VUNoYXI+IHdpdGggZXhpc3RpbmcgU3RyaW5nQnVpbGRlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcwNzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMuIEFsbCBleGlzdGluZyB1bml0IHRlc3RzIGFuZCBsYXlvdXQgdGVzdHMgc2hvdWxkIHJ1bgor
ICAgICAgICBhcyBiZWZvcmUuCisKKyAgICAgICAgKiBjc3MvQ1NTT01VdGlscy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjphcHBlbmRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFs
aXplQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUNoYXJhY3RlckFzQ29k
ZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUlkZW50aWZpZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2VyaWFsaXplU3RyaW5nKToKKyAgICAgICAgKiBjc3MvQ1NTT01VdGlscy5o
OgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JD
aGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZSk6CisgICAgICAgICogY3NzL0NTU1dy
YXBTaGFwZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTV3JhcFNoYXBlUmVjdDo6Y3NzVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NXcmFwU2hhcGVDaXJjbGU6OmNzc1RleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTV3JhcFNoYXBlRWxsaXBzZTo6Y3NzVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NXcmFwU2hhcGVQb2x5Z29uOjpjc3NUZXh0KToKKyAgICAgICAgKiBlZGl0aW5n
L0hUTUxJbnRlcmNoYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0SFRNTFRleHRU
b0ludGVyY2hhbmdlRm9ybWF0KToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGll
cyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcpOgorICAg
ICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmNvbmNhdGVuYXRlTWFya3VwKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGVWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmli
dXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVk
VVJMQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZE5vZGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRD
b21tZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmREb2N1
bWVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kT3BlblRhZyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kQ2xvc2VUYWcpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
Q0RBVEFTZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRTdGFydE1hcmt1cCk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRW5kTWFya3VwKToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6Cisg
ICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhTdHlsZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9wZW5UYWcpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRha2VSZXN1bHRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OnVybFRvTWFya3VwKToKKyAgICAgICAgKiBodG1sL0RPTVRva2VuTGlz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01Ub2tlbkxpc3Q6OnJlbW92ZVRva2VuKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGb250RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZUZvbnRTaXplKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzdHJpcHBl
ZFBsYWNlaG9sZGVyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmVsb2FkU2Nhbm5lcjo6ZW1pdFJ1bGUpOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmg6CisgICAgICAgICogaHRtbC9w
YXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lSFRN
TEVudGl0eSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5oOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VIVE1MSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhUTUxOb25OZWdh
dGl2ZUludGVnZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6cHJvY2Vzc0VudGl0eSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpuZXh0VG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxk
ZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXI6OmdpdmVSZW1haW5pbmdUbyk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJblRhYmxlVGV4dCk6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1
ZTo6dG9KU09OU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZhbHVlOjp3cml0
ZUpTT04pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09O
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFycmF5Ojp3cml0ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9s
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjY2Vzc0NvbnRyb2xQcmVmbGlnaHRSZXF1
ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToK
KyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OnNl
dFRvb2xUaXApOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1
c3RvbUF0dHJpYnV0ZXMpOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OnRvU3RyaW5nKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9LVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmRlcHJlY2F0ZWRTdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9MaW5rSGFzaC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcXVlZXplT3V0TnVs
bENoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYW5TbGFzaERvdERvdFNsYXNoZXMp
OgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VEb3VibGVTbGFzaGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmNsZWFuU2xhc2hEb3RTbGFzaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFuUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjp2aXNpdGVkVVJMSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6
OnZpc2l0ZWRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNoKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9MaW5rSGFzaC5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9EYXRhT2Jq
ZWN0R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnNldFVSTCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY0lDVS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OmRl
Y29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRTdHJlYW06Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFN0cmVhbTo6cmVsZWFzZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmg6
CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0Q2hhcmFjdGVyc0FuZExlbmd0aEZv
ckh5cGhlbik6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAg
KFdlYkNvcmU6OkJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbjo6QnVmZmVyRm9yQXBwZW5kaW5nSHlw
aGVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06Om1hcmtlclRleHRXaXRoU3VmZml4KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1N5
bWJvbGljKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnN1ZmZpeCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cXVvdGVBbmRF
c2NhcGVOb25QcmludGFibGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTEZlbmNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxGZW5jZWQ6OnVw
ZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkNvZGluZzo6ZGVjb2RlU3RyaW5nKToKKyAg
ICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycyk6CisgICAgICAgICogeG1sL1hQYXRoRnVu
Y3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5JZDo6ZXZhbHVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNvbmNhdDo6ZXZhbHVhdGUpOgorICAgICAgICAq
IHhtbC9YUGF0aFV0aWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OnN0cmluZ1ZhbHVl
KToKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6d3JpdGVUb1N0cmluZ0J1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2F2ZVJlc3Vs
dFRvU3RyaW5nKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNl
cklubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OnVuY29uc3VtZUNoYXJhY3RlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZSk6CisgICAgICAg
ICogeG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3VtZVhNTENoYXJhY3RlclJlZmVyZW5jZSk6CisgICAgICAgICogeG1sL3Bh
cnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaDoKKyAgICAgICAgKiB4bWwvcGFyc2Vy
L1hNTFRva2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6Om5leHRU
b2tlbik6CisKIDIwMTEtMDgtMjMgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFttYWNdIHJlcXVlc3RBbmltYXRpb25GcmFtZSBzdXBwb3J0IGZvciBtYWMgcG9y
dApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU09NVXRpbHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NPTVV0aWxzLmNwcAkocmV2aXNpb24gOTM5ODApCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTT01VdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEw
ICszMiwxMSBAQAogI2luY2x1ZGUgIkNTU09NVXRpbHMuaCIKIAogI2luY2x1ZGUgPHd0Zi9IZXhO
dW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotc3RhdGljIHZvaWQgYXBwZW5kQ2hhcmFjdGVyKFVDaGFyMzIgYywgVmVj
dG9yPFVDaGFyPiYgYXBwZW5kVG8pCitzdGF0aWMgdm9pZCBhcHBlbmRDaGFyYWN0ZXIoVUNoYXIz
MiBjLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbykKIHsKICAgICBpZiAoVTE2X0xFTkdUSChjKSA9
PSAxKQogICAgICAgICBhcHBlbmRUby5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KGMpKTsKQEAg
LTQ1LDEzICs0NiwxMyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRDaGFyYWN0ZXIoVUNoYXIzMiBjLCBW
CiAgICAgfQogfQogCi12b2lkIHNlcmlhbGl6ZUNoYXJhY3RlcihVQ2hhcjMyIGMsIFZlY3RvcjxV
Q2hhcj4mIGFwcGVuZFRvKQordm9pZCBzZXJpYWxpemVDaGFyYWN0ZXIoVUNoYXIzMiBjLCBTdHJp
bmdCdWlsZGVyJiBhcHBlbmRUbykKIHsKICAgICBhcHBlbmRUby5hcHBlbmQoJ1xcJyk7CiAgICAg
YXBwZW5kQ2hhcmFjdGVyKGMsIGFwcGVuZFRvKTsKIH0KIAotdm9pZCBzZXJpYWxpemVDaGFyYWN0
ZXJBc0NvZGVQb2ludChVQ2hhcjMyIGMsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKQordm9pZCBz
ZXJpYWxpemVDaGFyYWN0ZXJBc0NvZGVQb2ludChVQ2hhcjMyIGMsIFN0cmluZ0J1aWxkZXImIGFw
cGVuZFRvKQogewogICAgIGFwcGVuZFRvLmFwcGVuZCgnXFwnKTsKICAgICBhcHBlbmRVbnNpZ25l
ZEFzSGV4KGMsIGFwcGVuZFRvLCBMb3dlcmNhc2UpOwpAQCAtNjAsMTIgKzYxLDEyIEBAIHZvaWQg
c2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIKIAogdm9pZCBzZXJpYWxpemVJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgU3RyaW5nJiBhcHBlbmRUbykKIHsKLSAg
ICBWZWN0b3I8VUNoYXI+IGFkZGVuZDsKKyAgICBTdHJpbmdCdWlsZGVyIGFkZGVuZDsKICAgICBz
ZXJpYWxpemVJZGVudGlmaWVyKGlkZW50aWZpZXIsIGFkZGVuZCk7Ci0gICAgYXBwZW5kVG8uYXBw
ZW5kKFN0cmluZzo6YWRvcHQoYWRkZW5kKSk7CisgICAgYXBwZW5kVG8uYXBwZW5kKGFkZGVuZC50
b1N0cmluZygpKTsKIH0KIAotdm9pZCBzZXJpYWxpemVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllciwgVmVjdG9yPFVDaGFyPiYgYXBwZW5kVG8pCit2b2lkIHNlcmlhbGl6ZUlkZW50
aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbykK
IHsKICAgICBib29sIGlzRmlyc3QgPSB0cnVlOwogICAgIGJvb2wgaXNTZWNvbmQgPSBmYWxzZTsK
QEAgLTk2LDEyICs5NywxMiBAQCB2b2lkIHNlcmlhbGl6ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5n
JiBpCiAKIHZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBTdHJpbmcm
IGFwcGVuZFRvKQogewotICAgIFZlY3RvcjxVQ2hhcj4gYWRkZW5kOworICAgIFN0cmluZ0J1aWxk
ZXIgYWRkZW5kOwogICAgIHNlcmlhbGl6ZVN0cmluZyhzdHJpbmcsIGFkZGVuZCk7Ci0gICAgYXBw
ZW5kVG8uYXBwZW5kKFN0cmluZzo6YWRvcHQoYWRkZW5kKSk7CisgICAgYXBwZW5kVG8uYXBwZW5k
KGFkZGVuZC50b1N0cmluZygpKTsKIH0KIAotdm9pZCBzZXJpYWxpemVTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKQordm9pZCBzZXJpYWxpemVTdHJp
bmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIFN0cmluZ0J1aWxkZXImIGFwcGVuZFRvKQogewogICAg
IGFwcGVuZFRvLmFwcGVuZCgnXCInKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU09N
VXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTT01VdGlscy5oCShy
ZXZpc2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NPTVV0aWxzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDEyICs0MCwxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBD
b21tb24gc2VyaWFsaXppbmcgbWV0aG9kcy4gU2VlOiBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9j
c3NvbS8jY29tbW9uLXNlcmlhbGl6aW5nLWlkaW9tcwotdm9pZCBzZXJpYWxpemVDaGFyYWN0ZXIo
VUNoYXIzMiwgVmVjdG9yPFVDaGFyPiYgYXBwZW5kVG8pOwotdm9pZCBzZXJpYWxpemVDaGFyYWN0
ZXJBc0NvZGVQb2ludChVQ2hhcjMyLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbyk7Cit2b2lkIHNl
cmlhbGl6ZUNoYXJhY3RlcihVQ2hhcjMyLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbyk7Cit2b2lk
IHNlcmlhbGl6ZUNoYXJhY3RlckFzQ29kZVBvaW50KFVDaGFyMzIsIFN0cmluZ0J1aWxkZXImIGFw
cGVuZFRvKTsKIHZvaWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXIsIFN0cmluZyYgYXBwZW5kVG8pOwotdm9pZCBzZXJpYWxpemVJZGVudGlmaWVyKGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllciwgVmVjdG9yPFVDaGFyPiYgYXBwZW5kVG8pOwotdm9pZCBzZXJpYWxp
emVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIFN0cmluZyYgYXBwZW5kVG8pOwotdm9pZCBz
ZXJpYWxpemVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIFZlY3RvcjxVQ2hhcj4mIGFwcGVu
ZFRvKTsKK3ZvaWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIs
IFN0cmluZ0J1aWxkZXImIGFwcGVuZFRvKTsKK3ZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0
cmluZyYsIFN0cmluZyYgYXBwZW5kVG8pOwordm9pZCBzZXJpYWxpemVTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkocmV2aXNp
b24gOTM5ODApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8d3RmL0RlY2ltYWxOdW1i
ZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAj
aWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogI2luY2x1ZGUgIkRhc2hib2FyZFJlZ2lvbi5o
IgpAQCAtNzA4LDE0ICs3MDksMTQgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0
KCkgY29ucwogICAgICAgICBjYXNlIENTU19BVFRSOiB7CiAgICAgICAgICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IFN0cmluZywgYXR0clBhcmVuLCAoImF0dHIoIikpOwogCi0gICAgICAg
ICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICAgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KDYgKyBtX3ZhbHVlLnN0cmluZy0+bGVuZ3RoKCkpOworICAgICAgICAgICAg
U3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5
KDYgKyBtX3ZhbHVlLnN0cmluZy0+bGVuZ3RoKCkpOwogCi0gICAgICAgICAgICBhcHBlbmQocmVz
dWx0LCBhdHRyUGFyZW4pOwotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgbV92YWx1ZS5zdHJp
bmcpOwotICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgnKScpOworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChhdHRyUGFyZW4pOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCht
X3ZhbHVlLnN0cmluZyk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcpJyk7CiAKLSAgICAg
ICAgICAgIHRleHQgPSBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgICAgICAgICB0ZXh0ID0g
cmVzdWx0LnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIENTU19DT1VOVEVSX05BTUU6CkBAIC03MzMsMjMgKzczNCwyMyBAQCBTdHJpbmcgQ1NT
UHJpbWl0aXZlVmFsdWU6OmNzc1RleHQoKSBjb25zCiAgICAgICAgICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgcmVjdFBhcmVuLCAoInJlY3QoIikpOwogCiAgICAgICAgICAg
ICBSZWN0KiByZWN0VmFsID0gZ2V0UmVjdFZhbHVlKCk7Ci0gICAgICAgICAgICBWZWN0b3I8VUNo
YXI+IHJlc3VsdDsKLSAgICAgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMy
KTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlY3RQYXJlbik7CisgICAgICAgICAgICBT
dHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHko
MzIpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZWN0UGFyZW4pOwogCi0gICAgICAgICAg
ICBhcHBlbmQocmVzdWx0LCByZWN0VmFsLT50b3AoKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQocmVjdFZhbC0+dG9wKCktPmNzc1RleHQoKSk7CiAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgJyk7CiAKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlY3RWYWwt
PnJpZ2h0KCktPmNzc1RleHQoKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlY3RWYWwt
PnJpZ2h0KCktPmNzc1RleHQoKSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CiAK
LSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlY3RWYWwtPmJvdHRvbSgpLT5jc3NUZXh0KCkp
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZWN0VmFsLT5ib3R0b20oKS0+Y3NzVGV4dCgp
KTsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKIAotICAgICAgICAgICAgYXBwZW5k
KHJlc3VsdCwgcmVjdFZhbC0+bGVmdCgpLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChyZWN0VmFsLT5sZWZ0KCktPmNzc1RleHQoKSk7CiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcpJyk7CiAKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7
CisgICAgICAgICAgICB0ZXh0ID0gcmVzdWx0LnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU19SR0JDT0xPUjoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NXcmFwU2hhcGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTV3JhcFNoYXBlcy5jcHAJKHJldmlzaW9uIDkzOTgwKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU1dyYXBTaGFwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBA
CiAKICNpbmNsdWRlICJDU1NXcmFwU2hhcGVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTQwLDM0ICs0MiwzNCBAQCBTdHJpbmcgQ1NTV3JhcFNoYXBlUmVjdDo6Y3NzVGV4dCgp
IGNvbnN0CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHJlY3RQYXJlbiwg
KCJyZWN0KCIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgY29tbWEs
ICgiLCAiKSk7CiAgICAgCi0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoMzIpOwotICAgIGFwcGVuZChyZXN1bHQsIHJlY3RQYXJlbik7
CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgz
Mik7CisgICAgcmVzdWx0LmFwcGVuZChyZWN0UGFyZW4pOwogCi0gICAgYXBwZW5kKHJlc3VsdCwg
bV9sZWZ0LT5jc3NUZXh0KCkpOwotICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hKTsKKyAgICByZXN1
bHQuYXBwZW5kKG1fbGVmdC0+Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsK
IAotICAgIGFwcGVuZChyZXN1bHQsIG1fdG9wLT5jc3NUZXh0KCkpOwotICAgIGFwcGVuZChyZXN1
bHQsIGNvbW1hKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fdG9wLT5jc3NUZXh0KCkpOworICAgIHJl
c3VsdC5hcHBlbmQoY29tbWEpOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgbV93aWR0aC0+Y3NzVGV4
dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7CisgICAgcmVzdWx0LmFwcGVuZChtX3dp
ZHRoLT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwogCi0gICAgYXBwZW5k
KHJlc3VsdCwgbV9oZWlnaHQtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChtX2hlaWdo
dC0+Y3NzVGV4dCgpKTsKICAgICAKICAgICBpZiAobV9yYWRpdXNYLmdldCgpKSB7Ci0gICAgICAg
IGFwcGVuZChyZXN1bHQsIGNvbW1hKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgbV9yYWRpdXNY
LT5jc3NUZXh0KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChtX3JhZGl1c1gtPmNzc1RleHQoKSk7CiAKICAgICAgICAgaWYgKG1fcmFkaXVz
WS5nZXQoKSkgewotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOwotICAgICAgICAg
ICAgYXBwZW5kKHJlc3VsdCwgbV9yYWRpdXNZLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChjb21tYSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fcmFkaXVzWS0+
Y3NzVGV4dCgpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICByZXN1bHQuYXBwZW5kKCcp
Jyk7CiAgICAgICAgICAgICAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogU3RyaW5nIENTU1dyYXBTaGFwZUNpcmNs
ZTo6Y3NzVGV4dCgpIGNvbnN0CkBAIC03NSwyMCArNzcsMjAgQEAgU3RyaW5nIENTU1dyYXBTaGFw
ZUNpcmNsZTo6Y3NzVGV4dCgpIGNvbgogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3Ry
aW5nLCBjaXJjbGVQYXJlbiwgKCJjaXJjbGUoIikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgU3RyaW5nLCBjb21tYSwgKCIsICIpKTsKICAgICAKLSAgICBWZWN0b3I8VUNoYXI+IHJl
c3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7Ci0gICAgYXBwZW5k
KHJlc3VsdCwgY2lyY2xlUGFyZW4pOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJl
c3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOworICAgIHJlc3VsdC5hcHBlbmQoY2lyY2xlUGFyZW4p
OwogCi0gICAgYXBwZW5kKHJlc3VsdCwgbV9sZWZ0LT5jc3NUZXh0KCkpOwotICAgIGFwcGVuZChy
ZXN1bHQsIGNvbW1hKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fbGVmdC0+Y3NzVGV4dCgpKTsKKyAg
ICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKIAotICAgIGFwcGVuZChyZXN1bHQsIG1fdG9wLT5jc3NU
ZXh0KCkpOwotICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hKTsKKyAgICByZXN1bHQuYXBwZW5kKG1f
dG9wLT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwogCi0gICAgYXBwZW5k
KHJlc3VsdCwgbV9yYWRpdXMtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChtX3JhZGl1
cy0+Y3NzVGV4dCgpKTsKICAgICByZXN1bHQuYXBwZW5kKCcpJyk7CiAgICAgICAgICAgICAKLSAg
ICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQudG9TdHJp
bmcoKTsKIH0KIAogU3RyaW5nIENTU1dyYXBTaGFwZUVsbGlwc2U6OmNzc1RleHQoKSBjb25zdApA
QCAtOTYsMjMgKzk4LDIzIEBAIFN0cmluZyBDU1NXcmFwU2hhcGVFbGxpcHNlOjpjc3NUZXh0KCkg
Y28KICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZWxsaXBzZVBhcmVuLCAo
ImVsbGlwc2UoIikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBjb21t
YSwgKCIsICIpKTsKICAgICAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7Ci0gICAgYXBwZW5kKHJlc3VsdCwgZWxsaXBzZVBh
cmVuKTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFj
aXR5KDMyKTsKKyAgICByZXN1bHQuYXBwZW5kKGVsbGlwc2VQYXJlbik7CiAKLSAgICBhcHBlbmQo
cmVzdWx0LCBtX2xlZnQtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOwor
ICAgIHJlc3VsdC5hcHBlbmQobV9sZWZ0LT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQo
Y29tbWEpOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgbV90b3AtPmNzc1RleHQoKSk7Ci0gICAgYXBw
ZW5kKHJlc3VsdCwgY29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV90b3AtPmNzc1RleHQoKSk7
CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3JhZGl1
c1gtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAgIHJlc3VsdC5h
cHBlbmQobV9yYWRpdXNYLT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwog
Ci0gICAgYXBwZW5kKHJlc3VsdCwgbV9yYWRpdXNZLT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5h
cHBlbmQobV9yYWRpdXNZLT5jc3NUZXh0KCkpOwogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKICAg
ICAgICAgICAgIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdC50b1N0cmluZygpOwogfQogCiBTdHJpbmcgQ1NTV3JhcFNoYXBlUG9seWdvbjo6Y3Nz
VGV4dCgpIGNvbnN0CkBAIC0xMjEsMjYgKzEyMywyNiBAQCBTdHJpbmcgQ1NTV3JhcFNoYXBlUG9s
eWdvbjo6Y3NzVGV4dCgpIGNvCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcs
IHBvbHlnb25QYXJlbk5vblplcm8sICgicG9seWdvbihub256ZXJvLCAiKSk7CiAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGNvbW1hLCAoIiwgIikpOwogICAgIAotICAgIFZl
Y3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMy
KTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5
KDMyKTsKICAgICBpZiAobV93aW5kUnVsZSA9PSBSVUxFX0VWRU5PREQpCi0gICAgICAgIGFwcGVu
ZChyZXN1bHQsIHBvbHlnb25QYXJlbkV2ZW5PZGQpOworICAgICAgICByZXN1bHQuYXBwZW5kKHBv
bHlnb25QYXJlbkV2ZW5PZGQpOwogICAgIGVsc2UKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgcG9s
eWdvblBhcmVuTm9uWmVybyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocG9seWdvblBhcmVuTm9u
WmVybyk7CiAKICAgICBBU1NFUlQoIShtX3ZhbHVlcy5zaXplKCkgJSAyKSk7CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyBpICs9IDIpIHsKICAgICAgICAg
aWYgKGkpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGFwcGVuZChy
ZXN1bHQsIG1fdmFsdWVzLmF0KGkpLT5jc3NUZXh0KCkpOwotICAgICAgICBhcHBlbmQocmVzdWx0
LCBjb21tYSk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIG1fdmFsdWVzLmF0KGkgKyAxKS0+Y3Nz
VGV4dCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtX3ZhbHVlcy5hdChpKS0+Y3NzVGV4dCgp
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
bV92YWx1ZXMuYXQoaSArIDEpLT5jc3NUZXh0KCkpOwogICAgIH0KICAgICAKICAgICByZXN1bHQu
YXBwZW5kKCcpJyk7CiAgICAgICAgICAgICAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSFRNTEludGVyY2hhbmdlLmNw
cAkocmV2aXNpb24gOTM5ODApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0hUTUxJbnRlcmNo
YW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJUZXh0
LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYv
dW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Nyw3
ICs1OCw3IEBAIFN0cmluZyBjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWEKICAgICBp
ZiAobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wcmVzZXJ2
ZU5ld2xpbmUoKSkKICAgICAgICAgcmV0dXJuIGluOwogCi0gICAgVmVjdG9yPFVDaGFyPiBzOwor
ICAgIFN0cmluZ0J1aWxkZXIgczsKIAogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIHVuc2lnbmVk
IGNvbnN1bWVkID0gMDsKQEAgLTc0LDI4ICs3NSwyOCBAQCBTdHJpbmcgY29udmVydEhUTUxUZXh0
VG9JbnRlcmNoYW5nZUZvcm1hCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWRkID0gY291bnQg
JSAzOwogICAgICAgICAgICAgICAgIHN3aXRjaCAoYWRkKSB7CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChzLCBjb252ZXJ0ZWRTcGFj
ZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKGNvbnZlcnRlZFNw
YWNlU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoJyAnKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgYWRkID0gMzsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaSA9PSAwIHx8IGkgKyAxID09IGluLmxlbmd0aCgpKSAvLyBhdCBzdGFydCBv
ciBlbmQgb2Ygc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNv
bnZlcnRlZFNwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBw
ZW5kKGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKCcgJyk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBhdCBzdGFydCBvZiBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmQocywgY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcy5hcHBlbmQoJyAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaSArIDIgPT0gaW4ubGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYXQgZW5kIG9mIHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcHBlbmQocywgY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzLmFwcGVuZCgnICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDcsNyArMTA4LDcgQEAgU3RyaW5nIGNv
bnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYQogICAgICAgICBpICs9IGNvbnN1bWVkOwog
ICAgIH0KIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHMpOworICAgIHJldHVybiBzLnRvU3Ry
aW5nKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCShyZXZpc2lvbiA5Mzk4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywxMyArMzcsMTQgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJO
YW1lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKLXZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKFZlY3RvcjxVQ2hh
cj4mIG91dCwgY29uc3QgVUNoYXIqIGNvbnRlbnQsIHNpemVfdCBsZW5ndGgsIEVudGl0eU1hc2sg
ZW50aXR5TWFzaykKK3ZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKFN0cmlu
Z0J1aWxkZXImIG91dCwgY29uc3QgVUNoYXIqIGNvbnRlbnQsIHNpemVfdCBsZW5ndGgsIEVudGl0
eU1hc2sgZW50aXR5TWFzaykKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmlu
ZywgYW1wUmVmZXJlbmNlLCAoIiZhbXA7IikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29u
c3QgU3RyaW5nLCBsdFJlZmVyZW5jZSwgKCImbHQ7IikpOwpAQCAtNjQsNyArNjUsNyBAQCB2b2lk
IGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhWCiAgICAgICAgIGZvciAoc2l6ZV90
IG0gPSAwOyBtIDwgV1RGX0FSUkFZX0xFTkdUSChlbnRpdHlNYXBzKTsgKyttKSB7CiAgICAgICAg
ICAgICBpZiAoY29udGVudFtpXSA9PSBlbnRpdHlNYXBzW21dLmVudGl0eSAmJiBlbnRpdHlNYXBz
W21dLm1hc2sgJiBlbnRpdHlNYXNrKSB7CiAgICAgICAgICAgICAgICAgb3V0LmFwcGVuZChjb250
ZW50ICsgcG9zaXRpb25BZnRlckxhc3RFbnRpdHksIGkgLSBwb3NpdGlvbkFmdGVyTGFzdEVudGl0
eSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kKG91dCwgZW50aXR5TWFwc1ttXS5yZWZlcmVuY2Up
OworICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoZW50aXR5TWFwc1ttXS5yZWZlcmVuY2UpOwog
ICAgICAgICAgICAgICAgIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5ID0gaSArIDE7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC04NiwxMSArODcsMTEgQEAgTWFya3Vw
QWNjdW11bGF0b3I6On5NYXJrdXBBY2N1bXVsYXRvcigpCiAKIFN0cmluZyBNYXJrdXBBY2N1bXVs
YXRvcjo6c2VyaWFsaXplTm9kZXMoTm9kZSogbm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxk
cmVuT25seSBjaGlsZHJlbk9ubHkpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBvdXQ7CisgICAgU3Ry
aW5nQnVpbGRlciBvdXQ7CiAgICAgc2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyhub2RlLCBu
b2RlVG9Ta2lwLCBjaGlsZHJlbk9ubHksIDApOwotICAgIG91dC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGxlbmd0aCgpKTsKKyAgICBvdXQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCgpKTsKICAgICBj
b25jYXRlbmF0ZU1hcmt1cChvdXQpOwotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KG91dCk7Cisg
ICAgcmV0dXJuIG91dC50b1N0cmluZygpOwogfQogCiB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjpz
ZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKE5vZGUqIG5vZGUsIE5vZGUqIG5vZGVUb1NraXAs
IEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBjb25zdCBOYW1lc3BhY2VzKiBuYW1lc3BhY2Vz
KQpAQCAtMTM4LDE4ICsxMzksMTggQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3Ry
aW5nKGNvbgogCiB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydFRhZyhOb2RlKiBu
b2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewotICAgIFZlY3RvcjxVQ2hhcj4gbWFya3Vw
OworICAgIFN0cmluZ0J1aWxkZXIgbWFya3VwOwogICAgIGFwcGVuZFN0YXJ0TWFya3VwKG1hcmt1
cCwgbm9kZSwgbmFtZXNwYWNlcyk7Ci0gICAgYXBwZW5kU3RyaW5nKFN0cmluZzo6YWRvcHQobWFy
a3VwKSk7CisgICAgYXBwZW5kU3RyaW5nKG1hcmt1cC50b1N0cmluZygpKTsKICAgICBpZiAobV9u
b2RlcykKICAgICAgICAgbV9ub2Rlcy0+YXBwZW5kKG5vZGUpOwogfQogCiB2b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRFbmRUYWcoTm9kZSogbm9kZSkKIHsKLSAgICBWZWN0b3I8VUNoYXI+
IG1hcmt1cDsKKyAgICBTdHJpbmdCdWlsZGVyIG1hcmt1cDsKICAgICBhcHBlbmRFbmRNYXJrdXAo
bWFya3VwLCBub2RlKTsKLSAgICBhcHBlbmRTdHJpbmcoU3RyaW5nOjphZG9wdChtYXJrdXApKTsK
KyAgICBhcHBlbmRTdHJpbmcobWFya3VwLnRvU3RyaW5nKCkpOwogfQogCiBzaXplX3QgTWFya3Vw
QWNjdW11bGF0b3I6OnRvdGFsTGVuZ3RoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdHJpbmdzKQpA
QCAtMTYxLDI1ICsxNjIsMjUgQEAgc2l6ZV90IE1hcmt1cEFjY3VtdWxhdG9yOjp0b3RhbExlbmd0
aChjbwogfQogCiAvLyBGSVhNRTogVGhpcyBpcyBhIHZlcnkgaW5lZmZpY2llbnQgd2F5IG9mIGFj
Y3VtdWxhdGluZyB0aGUgbWFya3VwLgotLy8gV2UncmUgY29udmVydGluZyByZXN1bHRzIG9mIGFw
cGVuZFN0YXJ0TWFya3VwIGFuZCBhcHBlbmRFbmRNYXJrdXAgZnJvbSBWZWN0b3I8VUNoYXI+IHRv
IFN0cmluZwotLy8gYW5kIHRoZW4gYmFjayB0byBWZWN0b3I8VUNoYXI+IGFuZCBhZ2FpbiB0byBT
dHJpbmcgaGVyZS4KLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmNvbmNhdGVuYXRlTWFya3VwKFZl
Y3RvcjxVQ2hhcj4mIG91dCkKKy8vIFdlJ3JlIGNvbnZlcnRpbmcgcmVzdWx0cyBvZiBhcHBlbmRT
dGFydE1hcmt1cCBhbmQgYXBwZW5kRW5kTWFya3VwIGZyb20gU3RyaW5nQnVpbGRlciB0byBTdHJp
bmcKKy8vIGFuZCB0aGVuIGJhY2sgdG8gU3RyaW5nQnVpbGRlciBhbmQgYWdhaW4gdG8gU3RyaW5n
IGhlcmUuCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjpjb25jYXRlbmF0ZU1hcmt1cChTdHJpbmdC
dWlsZGVyJiBvdXQpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N1Y2NlZWRpbmdN
YXJrdXAuc2l6ZSgpOyArK2kpCi0gICAgICAgIGFwcGVuZChvdXQsIG1fc3VjY2VlZGluZ01hcmt1
cFtpXSk7CisgICAgICAgIG91dC5hcHBlbmQobV9zdWNjZWVkaW5nTWFya3VwW2ldKTsKIH0KIAot
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFy
PiYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBkb2N1bWVudElzSFRNTCkK
K3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZVZhbHVlKFN0cmluZ0J1aWxk
ZXImIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUsIGJvb2wgZG9jdW1lbnRJc0hUTUwp
CiB7CiAgICAgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKHJlc3VsdCwgYXR0cmli
dXRlLmNoYXJhY3RlcnMoKSwgYXR0cmlidXRlLmxlbmd0aCgpLAogICAgICAgICBkb2N1bWVudElz
SFRNTCA/IEVudGl0eU1hc2tJbkhUTUxBdHRyaWJ1dGVWYWx1ZSA6IEVudGl0eU1hc2tJbkF0dHJp
YnV0ZVZhbHVlKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0
cmlidXRlcyhWZWN0b3I8VUNoYXI+JiwgRWxlbWVudCosIE5hbWVzcGFjZXMqKQordm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiwgRWxl
bWVudCosIE5hbWVzcGFjZXMqKQogewogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQordm9pZCBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYg
cmVzdWx0LCBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0
ZSkKIHsKICAgICBBU1NFUlQoZWxlbWVudC0+aXNVUkxBdHRyaWJ1dGUoY29uc3RfY2FzdDxBdHRy
aWJ1dGUqPigmYXR0cmlidXRlKSkpOwogICAgIGNvbnN0IFN0cmluZyByZXNvbHZlZFVSTFN0cmlu
ZyA9IHJlc29sdmVVUkxJZk5lZWRlZChlbGVtZW50LCBhdHRyaWJ1dGUudmFsdWUoKSk7CkBAIC0x
OTQsNyArMTk1LDcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkVVJMQQog
ICAgICAgICAgICAgICAgIHF1b3RlQ2hhciA9ICdcJyc7CiAgICAgICAgIH0KICAgICAgICAgcmVz
dWx0LmFwcGVuZChxdW90ZUNoYXIpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBzdHJpcHBlZFVS
TFN0cmluZyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RyaXBwZWRVUkxTdHJpbmcpOwogICAg
ICAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hhcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0yMDUsNyArMjA2LDcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkVVJM
QQogICAgIHJlc3VsdC5hcHBlbmQocXVvdGVDaGFyKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kTm9kZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgTm9kZSogbm9k
ZSwgY29uc3QgUmFuZ2UqIHJhbmdlLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spCit2b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVmFsdWUoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBO
b2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UsIEVudGl0eU1hc2sgZW50aXR5TWFzaykKIHsK
ICAgICBTdHJpbmcgc3RyID0gbm9kZS0+bm9kZVZhbHVlKCk7CiAgICAgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMgPSBzdHIuY2hhcmFjdGVycygpOwpAQCAtMjU1LDcgKzI1Niw3IEBAIGJvb2wgTWFy
a3VwQWNjdW11bGF0b3I6OnNob3VsZEFkZE5hbWVzcGEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTmFtZXNwYWNlKFZlY3RvcjxVQ2hhcj4mIHJl
c3VsdCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZXNwYWNlVVJJLCBOYW1lc3BhY2VzJiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kTmFtZXNwYWNlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBOYW1lc3BhY2Vz
JiBuYW1lc3BhY2VzKQogewogICAgIG5hbWVzcGFjZXMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAg
IGlmIChuYW1lc3BhY2VVUkkuaXNFbXB0eSgpKQpAQCAtMjY3LDEwICsyNjgsMTAgQEAgdm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTmFtZXNwYWNlKAogICAgIGlmIChmb3VuZE5TICE9IG5h
bWVzcGFjZVVSSS5pbXBsKCkpIHsKICAgICAgICAgbmFtZXNwYWNlcy5zZXQocHJlLCBuYW1lc3Bh
Y2VVUkkuaW1wbCgpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwotICAgICAgICBhcHBl
bmQocmVzdWx0LCB4bWxuc0F0b20uc3RyaW5nKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKHht
bG5zQXRvbS5zdHJpbmcoKSk7CiAgICAgICAgIGlmICghcHJlZml4LmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnOicpOwotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwg
cHJlZml4KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocHJlZml4KTsKICAgICAgICAgfQog
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJz0nKTsKQEAgLTI5Miw1OSArMjkzLDU5IEBAIEVudGl0
eU1hc2sgTWFya3VwQWNjdW11bGF0b3I6OmVudGl0eU1hc2sKICAgICByZXR1cm4gdGV4dC0+ZG9j
dW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSA/IEVudGl0eU1hc2tJbkhUTUxQQ0RBVEEgOiBFbnRp
dHlNYXNrSW5QQ0RBVEE7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQo
VmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0KiB0ZXh0KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqIHRleHQpCiB7CiAgICAgYXBwZW5k
Tm9kZVZhbHVlKG91dCwgdGV4dCwgbV9yYW5nZSwgZW50aXR5TWFza0ZvclRleHQodGV4dCkpOwog
fQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KFZlY3RvcjxVQ2hhcj4m
IG91dCwgY29uc3QgU3RyaW5nJiBjb21tZW50KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kQ29tbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgY29tbWVudCkKIHsK
ICAgICAvLyBGSVhNRTogQ29tbWVudCBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2Vy
aWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNl
cHRpb24gaWYgaXQgaW5jbHVkZXMgIi0tPiIuCi0gICAgYXBwZW5kKG91dCwgIjwhLS0iKTsKLSAg
ICBhcHBlbmQob3V0LCBjb21tZW50KTsKLSAgICBhcHBlbmQob3V0LCAiLS0+Iik7CisgICAgb3V0
LmFwcGVuZCgiPCEtLSIpOworICAgIG91dC5hcHBlbmQoY29tbWVudCk7CisgICAgb3V0LmFwcGVu
ZCgiLS0+Iik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZERvY3VtZW50VHlw
ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSogbikKK3ZvaWQgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZERvY3VtZW50VHlwZShTdHJpbmdCdWlsZGVyJiByZXN1bHQs
IGNvbnN0IERvY3VtZW50VHlwZSogbikKIHsKICAgICBpZiAobi0+bmFtZSgpLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgIjwhRE9DVFlQRSAiKTsKLSAg
ICBhcHBlbmQocmVzdWx0LCBuLT5uYW1lKCkpOworICAgIHJlc3VsdC5hcHBlbmQoIjwhRE9DVFlQ
RSAiKTsKKyAgICByZXN1bHQuYXBwZW5kKG4tPm5hbWUoKSk7CiAgICAgaWYgKCFuLT5wdWJsaWNJ
ZCgpLmlzRW1wdHkoKSkgewotICAgICAgICBhcHBlbmQocmVzdWx0LCAiIFBVQkxJQyBcIiIpOwot
ICAgICAgICBhcHBlbmQocmVzdWx0LCBuLT5wdWJsaWNJZCgpKTsKLSAgICAgICAgYXBwZW5kKHJl
c3VsdCwgIlwiIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiBQVUJMSUMgXCIiKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChuLT5wdWJsaWNJZCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgi
XCIiKTsKICAgICAgICAgaWYgKCFuLT5zeXN0ZW1JZCgpLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgYXBwZW5kKHJlc3VsdCwgIiBcIiIpOwotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgbi0+
c3lzdGVtSWQoKSk7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCAiXCIiKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoIiBcIiIpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChuLT5z
eXN0ZW1JZCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiIik7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgaWYgKCFuLT5zeXN0ZW1JZCgpLmlzRW1wdHkoKSkgewotICAgICAgICBhcHBl
bmQocmVzdWx0LCAiIFNZU1RFTSBcIiIpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBuLT5zeXN0
ZW1JZCgpKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgIlwiIik7CisgICAgICAgIHJlc3VsdC5h
cHBlbmQoIiBTWVNURU0gXCIiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChuLT5zeXN0ZW1JZCgp
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCIiKTsKICAgICB9CiAgICAgaWYgKCFuLT5pbnRl
cm5hbFN1YnNldCgpLmlzRW1wdHkoKSkgewotICAgICAgICBhcHBlbmQocmVzdWx0LCAiIFsiKTsK
LSAgICAgICAgYXBwZW5kKHJlc3VsdCwgbi0+aW50ZXJuYWxTdWJzZXQoKSk7Ci0gICAgICAgIGFw
cGVuZChyZXN1bHQsICJdIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiBbIik7CisgICAgICAg
IHJlc3VsdC5hcHBlbmQobi0+aW50ZXJuYWxTdWJzZXQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoIl0iKTsKICAgICB9Ci0gICAgYXBwZW5kKHJlc3VsdCwgIj4iKTsKKyAgICByZXN1bHQuYXBw
ZW5kKCI+Iik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25z
dCBTdHJpbmcmIGRhdGEpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24oU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29u
c3QgU3RyaW5nJiBkYXRhKQogewogICAgIC8vIEZJWE1FOiBQSSBkYXRhIGlzIG5vdCBlc2NhcGVk
LCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHRoaXMgc2hv
dWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRlcyAiPz4iLgotICAgIGFwcGVuZChv
dXQsICI8PyIpOwotICAgIGFwcGVuZChvdXQsIHRhcmdldCk7Ci0gICAgYXBwZW5kKG91dCwgIiAi
KTsKLSAgICBhcHBlbmQob3V0LCBkYXRhKTsKLSAgICBhcHBlbmQob3V0LCAiPz4iKTsKKyAgICBv
dXQuYXBwZW5kKCI8PyIpOworICAgIG91dC5hcHBlbmQodGFyZ2V0KTsKKyAgICBvdXQuYXBwZW5k
KCIgIik7CisgICAgb3V0LmFwcGVuZChkYXRhKTsKKyAgICBvdXQuYXBwZW5kKCI/PiIpOwogfQog
Ci12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91
dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3ZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBl
bGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGFwcGVuZE9wZW5UYWcob3V0
LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsKIApAQCAtMzU5LDE1ICszNjAsMTUgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChWZQogICAgIGFwcGVuZENsb3NlVGFnKG91dCwg
ZWxlbWVudCk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE9wZW5UYWcoVmVj
dG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2Vz
KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kT3BlblRhZyhTdHJpbmdCdWlsZGVyJiBv
dXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgb3V0
LmFwcGVuZCgnPCcpOwotICAgIGFwcGVuZChvdXQsIGVsZW1lbnQtPm5vZGVOYW1lUHJlc2Vydmlu
Z0Nhc2UoKSk7CisgICAgb3V0LmFwcGVuZChlbGVtZW50LT5ub2RlTmFtZVByZXNlcnZpbmdDYXNl
KCkpOwogICAgIGlmICghZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSAmJiBu
YW1lc3BhY2VzICYmIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAg
IGFwcGVuZE5hbWVzcGFjZShvdXQsIGVsZW1lbnQtPnByZWZpeCgpLCBlbGVtZW50LT5uYW1lc3Bh
Y2VVUkkoKSwgKm5hbWVzcGFjZXMpOyAgICAKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kQ2xvc2VUYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50KQordm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2xvc2VUYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBF
bGVtZW50KiBlbGVtZW50KQogewogICAgIGlmIChzaG91bGRTZWxmQ2xvc2UoZWxlbWVudCkpIHsK
ICAgICAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKQEAgLTM3NywxNiArMzc4LDE2
IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENsb3NlVGFnKFYKICAgICBvdXQuYXBw
ZW5kKCc+Jyk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZShW
ZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYgYXR0
cmlidXRlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kQXR0cmlidXRlKFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAg
Ym9vbCBkb2N1bWVudElzSFRNTCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50
KCk7CiAKICAgICBvdXQuYXBwZW5kKCcgJyk7CiAKICAgICBpZiAoZG9jdW1lbnRJc0hUTUwpCi0g
ICAgICAgIGFwcGVuZChvdXQsIGF0dHJpYnV0ZS5uYW1lKCkubG9jYWxOYW1lKCkpOworICAgICAg
ICBvdXQuYXBwZW5kKGF0dHJpYnV0ZS5uYW1lKCkubG9jYWxOYW1lKCkpOwogICAgIGVsc2UKLSAg
ICAgICAgYXBwZW5kKG91dCwgYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpKTsKKyAgICAgICAg
b3V0LmFwcGVuZChhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkpOwogCiAgICAgb3V0LmFwcGVu
ZCgnPScpOwogCkBAIC00MDIsMTUgKzQwMywxNSBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRBdHRyaWJ1dGUoCiAgICAgICAgIGFwcGVuZE5hbWVzcGFjZShvdXQsIGF0dHJpYnV0ZS5w
cmVmaXgoKSwgYXR0cmlidXRlLm5hbWVzcGFjZVVSSSgpLCAqbmFtZXNwYWNlcyk7CiB9CiAKLXZv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENEQVRBU2VjdGlvbihWZWN0b3I8VUNoYXI+JiBv
dXQsIGNvbnN0IFN0cmluZyYgc2VjdGlvbikKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZENEQVRBU2VjdGlvbihTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgc2VjdGlvbikK
IHsKICAgICAvLyBGSVhNRTogQ0RBVEEgY29udGVudCBpcyBub3QgZXNjYXBlZCwgYnV0IFhNTFNl
cmlhbGl6ZXIgKGFuZCBwb3NzaWJseSBvdGhlciBjYWxsZXJzKSBzaG91bGQgcmFpc2UgYW4gZXhj
ZXB0aW9uIGlmIGl0IGluY2x1ZGVzICJdXT4iLgotICAgIGFwcGVuZChvdXQsICI8IVtDREFUQVsi
KTsKLSAgICBhcHBlbmQob3V0LCBzZWN0aW9uKTsKLSAgICBhcHBlbmQob3V0LCAiXV0+Iik7Cisg
ICAgb3V0LmFwcGVuZCgiPCFbQ0RBVEFbIik7CisgICAgb3V0LmFwcGVuZChzZWN0aW9uKTsKKyAg
ICBvdXQuYXBwZW5kKCJdXT4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
U3RhcnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKiBub2RlLCBOYW1l
c3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRN
YXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBOb2RlKiBub2RlLCBOYW1lc3BhY2Vz
KiBuYW1lc3BhY2VzKQogewogICAgIGlmIChuYW1lc3BhY2VzKQogICAgICAgICBuYW1lc3BhY2Vz
LT5jaGVja0NvbnNpc3RlbmN5KCk7CkBAIC00NzYsMTQgKzQ3NywxNCBAQCBib29sIE1hcmt1cEFj
Y3VtdWxhdG9yOjplbGVtZW50Q2Fubm90SGF2CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IEhUTUxFbGVtZW50Kj4obm9kZSktPmllRm9yYmlkc0luc2VydEhUTUwoKTsKIH0KIAotdm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kTWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwg
Y29uc3QgTm9kZSogbm9kZSkKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZE1hcmt1
cChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFu
b2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgc2hvdWxkU2VsZkNsb3NlKG5vZGUpIHx8ICghbm9kZS0+
aGFzQ2hpbGROb2RlcygpICYmIGVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKG5vZGUpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgcmVzdWx0LmFwcGVuZCgnPCcpOwogICAgIHJlc3VsdC5hcHBlbmQo
Jy8nKTsKLSAgICBhcHBlbmQocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9k
ZSktPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CisgICAgcmVzdWx0LmFwcGVuZChzdGF0aWNf
Y2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSktPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CiAg
ICAgcmVzdWx0LmFwcGVuZCgnPicpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L01hcmt1cEFjY3VtdWxhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5oCShyZXZpc2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsMzQgKzc3
LDM0IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsK
ICAgICBzdGF0aWMgc2l6ZV90IHRvdGFsTGVuZ3RoKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAg
ICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHRvdGFsTGVuZ3RoKG1fc3VjY2VlZGlu
Z01hcmt1cCk7IH0KLSAgICB2b2lkIGNvbmNhdGVuYXRlTWFya3VwKFZlY3RvcjxVQ2hhcj4mIG91
dCk7Ci0gICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQs
IGNvbnN0IFN0cmluZyYgYXR0cmlidXRlLCBib29sIGRvY3VtZW50SXNIVE1MKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiwgRWxlbWVudCos
IE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZE5vZGVWYWx1ZShWZWN0b3I8VUNoYXI+JiBv
dXQsIGNvbnN0IE5vZGUqLCBjb25zdCBSYW5nZSosIEVudGl0eU1hc2spOworICAgIHZvaWQgY29u
Y2F0ZW5hdGVNYXJrdXAoU3RyaW5nQnVpbGRlciYgb3V0KTsKKyAgICB2b2lkIGFwcGVuZEF0dHJp
YnV0ZVZhbHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUs
IGJvb2wgZG9jdW1lbnRJc0hUTUwpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21BdHRy
aWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQg
YXBwZW5kTm9kZVZhbHVlKFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgTm9kZSosIGNvbnN0IFJh
bmdlKiwgRW50aXR5TWFzayk7CiAgICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNv
bnN0IEVsZW1lbnQqKTsKICAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25z
dCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzJik7Ci0gICAgdm9pZCBhcHBlbmROYW1lc3BhY2UoVmVj
dG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmKTsKKyAgICB2b2lkIGFwcGVuZE5h
bWVzcGFjZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgTmFtZXNwYWNlcyYpOwogICAgIEVu
dGl0eU1hc2sgZW50aXR5TWFza0ZvclRleHQoVGV4dCopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCopOwotICAgIHZvaWQgYXBwZW5k
Q29tbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgY29tbWVudCk7Ci0gICAg
dm9pZCBhcHBlbmREb2N1bWVudFR5cGUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBEb2N1
bWVudFR5cGUqKTsKLSAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihWZWN0b3I8
VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpOwot
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVu
dCosIE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZE9wZW5UYWcoVmVjdG9yPFVDaGFyPiYg
b3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kQ2xvc2VUYWcoVmVj
dG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50Kik7Ci0gICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoVmVj
dG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyop
OwotICAgIHZvaWQgYXBwZW5kQ0RBVEFTZWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3Qg
U3RyaW5nJiBzZWN0aW9uKTsKLSAgICB2b2lkIGFwcGVuZFN0YXJ0TWFya3VwKFZlY3RvcjxVQ2hh
cj4mIHJlc3VsdCwgY29uc3QgTm9kZSosIE5hbWVzcGFjZXMqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqKTsKKyAgICB2b2lkIGFwcGVuZENv
bW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpOworICAgIHZv
aWQgYXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1l
bnRUeXBlKik7CisgICAgdm9pZCBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oU3RyaW5nQnVp
bGRlciYgb3V0LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBkYXRhKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQq
LCBOYW1lc3BhY2VzKik7CisgICAgdm9pZCBhcHBlbmRPcGVuVGFnKFN0cmluZ0J1aWxkZXImIG91
dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFN0cmlu
Z0J1aWxkZXImIG91dCwgRWxlbWVudCopOworICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlKFN0cmlu
Z0J1aWxkZXImIG91dCwgRWxlbWVudCosIGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsK
KyAgICB2b2lkIGFwcGVuZENEQVRBU2VjdGlvbihTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0
cmluZyYgc2VjdGlvbik7CisgICAgdm9pZCBhcHBlbmRTdGFydE1hcmt1cChTdHJpbmdCdWlsZGVy
JiByZXN1bHQsIGNvbnN0IE5vZGUqLCBOYW1lc3BhY2VzKik7CiAgICAgYm9vbCBzaG91bGRTZWxm
Q2xvc2UoY29uc3QgTm9kZSopOwogICAgIGJvb2wgZWxlbWVudENhbm5vdEhhdmVFbmRUYWcoY29u
c3QgTm9kZSogbm9kZSk7Ci0gICAgdm9pZCBhcHBlbmRFbmRNYXJrdXAoVmVjdG9yPFVDaGFyPiYg
cmVzdWx0LCBjb25zdCBOb2RlKik7CisgICAgdm9pZCBhcHBlbmRFbmRNYXJrdXAoU3RyaW5nQnVp
bGRlciYgcmVzdWx0LCBjb25zdCBOb2RlKik7CiAKICAgICBWZWN0b3I8Tm9kZSo+KiBjb25zdCBt
X25vZGVzOwogICAgIGNvbnN0IFJhbmdlKiBjb25zdCBtX3JhbmdlOwogCiBwcml2YXRlOgogICAg
IFN0cmluZyByZXNvbHZlVVJMSWZOZWVkZWQoY29uc3QgRWxlbWVudCosIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nKSBjb25zdDsKLSAgICB2b2lkIGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVl
KFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgRWxlbWVudCosIGNvbnN0IEF0dHJpYnV0ZSYp
OworICAgIHZvaWQgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYg
cmVzdWx0LCBjb25zdCBFbGVtZW50KiwgY29uc3QgQXR0cmlidXRlJik7CiAgICAgdm9pZCBzZXJp
YWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKE5vZGUqLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRy
ZW5Pbmx5LCBjb25zdCBOYW1lc3BhY2VzKik7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBtX3N1Y2Nl
ZWRpbmdNYXJrdXA7CkBAIC0xMTIsNyArMTEyLDcgQEAgcHJpdmF0ZToKIH07CiAKIC8vIEZJWE1F
OiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgaW50ZWdyYXRlZCB3aXRoIE1hcmt1cEFjY3VtdWxhdG9y
Lgotdm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoVmVjdG9yPFVDaGFyPiYg
b3V0LCBjb25zdCBVQ2hhciogY29udGVudCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5TWFzayBlbnRp
dHlNYXNrKTsKK3ZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKFN0cmluZ0J1
aWxkZXImIG91dCwgY29uc3QgVUNoYXIqIGNvbnRlbnQsIHNpemVfdCBsZW5ndGgsIEVudGl0eU1h
c2spOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDkz
OTgwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2
aXNpYmxlX3VuaXRzLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0
ZXJOYW1lcy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMTI4LDEzICsxMjksMTMgQEAg
cHVibGljOgogICAgIFN0cmluZyB0YWtlUmVzdWx0cygpOwogCiBwcml2YXRlOgotICAgIHZvaWQg
YXBwZW5kU3R5bGVOb2RlT3BlblRhZyhWZWN0b3I8VUNoYXI+JiwgQ1NTU3R5bGVEZWNsYXJhdGlv
biosIERvY3VtZW50KiwgYm9vbCBpc0Jsb2NrID0gZmFsc2UpOworICAgIHZvaWQgYXBwZW5kU3R5
bGVOb2RlT3BlblRhZyhTdHJpbmdCdWlsZGVyJiwgQ1NTU3R5bGVEZWNsYXJhdGlvbiosIERvY3Vt
ZW50KiwgYm9vbCBpc0Jsb2NrID0gZmFsc2UpOwogICAgIGNvbnN0IFN0cmluZyBzdHlsZU5vZGVD
bG9zZVRhZyhib29sIGlzQmxvY2sgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFRl
eHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0Kik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRl
eHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0Kik7CiAgICAgU3RyaW5nIHJlbmRlcmVkVGV4dChj
b25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqKTsKICAgICBTdHJpbmcgc3RyaW5nVmFsdWVGb3JSYW5n
ZShjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqKTsKLSAgICB2b2lkIGFwcGVuZEVsZW1lbnQoVmVj
dG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBib29sIGFkZERpc3BsYXlJbmxpbmUs
IFJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7Ci0gICAgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxV
Q2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyopIHsgYXBwZW5kRWxlbWVu
dChvdXQsIGVsZW1lbnQsIGZhbHNlLCBEb2VzRnVsbHlTZWxlY3ROb2RlKTsgfQorICAgIHZvaWQg
YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqLCBib29sIGFkZERpc3Bs
YXlJbmxpbmUsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7CisgICAgdm9pZCBhcHBlbmRFbGVtZW50
KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyopIHsgYXBw
ZW5kRWxlbWVudChvdXQsIGVsZW1lbnQsIGZhbHNlLCBEb2VzRnVsbHlTZWxlY3ROb2RlKTsgfQog
CiAgICAgZW51bSBOb2RlVHJhdmVyc2FsTW9kZSB7IEVtaXRTdHJpbmcsIERvTm90RW1pdFN0cmlu
ZyB9OwogICAgIE5vZGUqIHRyYXZlcnNlTm9kZXNGb3JTZXJpYWxpemF0aW9uKE5vZGUqIHN0YXJ0
Tm9kZSwgTm9kZSogcGFzdEVuZCwgTm9kZVRyYXZlcnNhbE1vZGUpOwpAQCAtMTYyLDEyICsxNjMs
MTIgQEAgaW5saW5lIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpTdHlsZWRNYQogCiB2b2lkIFN0
eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aE5vZGUoTm9kZSogbm9kZSwgYm9vbCBjb252
ZXJ0QmxvY2tzVG9JbmxpbmVzLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVj
dHNOb2RlKQogewotICAgIFZlY3RvcjxVQ2hhcj4gbWFya3VwOworICAgIFN0cmluZ0J1aWxkZXIg
bWFya3VwOwogICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIGFwcGVuZEVs
ZW1lbnQobWFya3VwLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSksIGNvbnZlcnRCbG9ja3NU
b0lubGluZXMgJiYgaXNCbG9jayhjb25zdF9jYXN0PE5vZGUqPihub2RlKSksIHJhbmdlRnVsbHlT
ZWxlY3RzTm9kZSk7CiAgICAgZWxzZQogICAgICAgICBhcHBlbmRTdGFydE1hcmt1cChtYXJrdXAs
IG5vZGUsIDApOwotICAgIG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuYXBwZW5kKFN0cmluZzo6
YWRvcHQobWFya3VwKSk7CisgICAgbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cC5hcHBlbmQobWFy
a3VwLnRvU3RyaW5nKCkpOwogICAgIGFwcGVuZEVuZFRhZyhub2RlKTsKICAgICBpZiAobV9ub2Rl
cykKICAgICAgICAgbV9ub2Rlcy0+YXBwZW5kKG5vZGUpOwpAQCAtMTc1LDIwICsxNzYsMjAgQEAg
dm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhObwogCiB2b2lkIFN0eWxlZE1h
cmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aFN0eWxlTm9kZShDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGlzQmxvY2spCiB7Ci0gICAgVmVjdG9yPFVD
aGFyPiBvcGVuVGFnOworICAgIFN0cmluZ0J1aWxkZXIgb3BlblRhZzsKICAgICBhcHBlbmRTdHls
ZU5vZGVPcGVuVGFnKG9wZW5UYWcsIHN0eWxlLCBkb2N1bWVudCwgaXNCbG9jayk7Ci0gICAgbV9y
ZXZlcnNlZFByZWNlZGluZ01hcmt1cC5hcHBlbmQoU3RyaW5nOjphZG9wdChvcGVuVGFnKSk7Cisg
ICAgbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cC5hcHBlbmQob3BlblRhZy50b1N0cmluZygpKTsK
ICAgICBhcHBlbmRTdHJpbmcoc3R5bGVOb2RlQ2xvc2VUYWcoaXNCbG9jaykpOwogfQogCi12b2lk
IFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHlsZU5vZGVPcGVuVGFnKFZlY3RvcjxV
Q2hhcj4mIG91dCwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIERvY3VtZW50KiBkb2N1bWVu
dCwgYm9vbCBpc0Jsb2NrKQordm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3R5
bGVOb2RlT3BlblRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKIHsKICAgICAvLyBBbGwgdGV4
dC1kZWNvcmF0aW9uLXJlbGF0ZWQgZWxlbWVudHMgc2hvdWxkIGhhdmUgYmVlbiB0cmVhdGVkIGFz
IHNwZWNpYWwgYW5jZXN0b3JzCiAgICAgLy8gSWYgd2UgZXZlciBoaXQgdGhpcyBBU1NFUlQsIHdl
IHNob3VsZCBleHBvcnQgU3R5bGVDaGFuZ2UgaW4gQXBwbHlTdHlsZUNvbW1hbmQgYW5kIHVzZSBp
dCBoZXJlCiAgICAgQVNTRVJUKHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoc3R5bGUsIENT
U1Byb3BlcnR5VGV4dERlY29yYXRpb24pICYmIHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUo
c3R5bGUsIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpKTsKICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZGl2U3R5bGUsICgiPGRpdiBzdHlsZT1c
IiIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5bGVTcGFuT3Bl
biwgKCI8c3BhbiBzdHlsZT1cIiIpKTsKLSAgICBhcHBlbmQob3V0LCBpc0Jsb2NrID8gZGl2U3R5
bGUgOiBzdHlsZVNwYW5PcGVuKTsKKyAgICBvdXQuYXBwZW5kKGlzQmxvY2sgPyBkaXZTdHlsZSA6
IHN0eWxlU3Bhbk9wZW4pOwogICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgc3R5bGUtPmNz
c1RleHQoKSwgZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpOwogICAgIG91dC5hcHBlbmQoJ1wi
Jyk7CiAgICAgb3V0LmFwcGVuZCgnPicpOwpAQCAtMjAzLDE5ICsyMDQsMTkgQEAgY29uc3QgU3Ry
aW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzdAogCiBTdHJpbmcgU3R5bGVkTWFya3VwQWNj
dW11bGF0b3I6OnRha2VSZXN1bHRzKCkKIHsKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0b3RhbExlbmd0aChtX3JldmVyc2VkUHJl
Y2VkaW5nTWFya3VwKSArIGxlbmd0aCgpKTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAg
ICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsTGVuZ3RoKG1fcmV2ZXJzZWRQcmVjZWRpbmdN
YXJrdXApICsgbGVuZ3RoKCkpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IG1fcmV2ZXJzZWRQcmVj
ZWRpbmdNYXJrdXAuc2l6ZSgpOyBpID4gMDsgLS1pKQotICAgICAgICBhcHBlbmQocmVzdWx0LCBt
X3JldmVyc2VkUHJlY2VkaW5nTWFya3VwW2kgLSAxXSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
bV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cFtpIC0gMV0pOwogCiAgICAgY29uY2F0ZW5hdGVNYXJr
dXAocmVzdWx0KTsKIAogICAgIC8vIFdlIHJlbW92ZSAnXDAnIGNoYXJhY3RlcnMgYmVjYXVzZSB0
aGV5IGFyZSBub3QgdmlzaWJseSByZW5kZXJlZCB0byB0aGUgdXNlci4KLSAgICByZXR1cm4gU3Ry
aW5nOjphZG9wdChyZXN1bHQpLnJlcGxhY2UoMCwgIiIpOworICAgIHJldHVybiByZXN1bHQudG9T
dHJpbmcoKS5yZXBsYWNlKDAsICIiKTsKIH0KIAotdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqIHRleHQpCit2b2lkIFN0eWxl
ZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCog
dGV4dCkKIHsgICAgCiAgICAgY29uc3QgYm9vbCBwYXJlbnRJc1RleHRhcmVhID0gdGV4dC0+cGFy
ZW50RWxlbWVudCgpICYmIHRleHQtPnBhcmVudEVsZW1lbnQoKS0+dGFnUU5hbWUoKSA9PSB0ZXh0
YXJlYVRhZzsKICAgICBjb25zdCBib29sIHdyYXBwaW5nU3BhbiA9IHNob3VsZEFwcGx5V3JhcHBp
bmdTdHlsZSh0ZXh0KSAmJiAhcGFyZW50SXNUZXh0YXJlYTsKQEAgLTIyNyw5ICsyMjgsOSBAQCB2
b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0CiAgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgdGhpcyBiZSBpbmNsdWRlZCBpbiBmb3JjZUlubGluZT8KICAgICAgICAgd3JhcHBp
bmdTdHlsZS0+c3R5bGUoKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGbG9hdCwgQ1NTVmFsdWVO
b25lKTsKIAotICAgICAgICBWZWN0b3I8VUNoYXI+IG9wZW5UYWc7CisgICAgICAgIFN0cmluZ0J1
aWxkZXIgb3BlblRhZzsKICAgICAgICAgYXBwZW5kU3R5bGVOb2RlT3BlblRhZyhvcGVuVGFnLCB3
cmFwcGluZ1N0eWxlLT5zdHlsZSgpLCB0ZXh0LT5kb2N1bWVudCgpKTsKLSAgICAgICAgYXBwZW5k
KG91dCwgU3RyaW5nOjphZG9wdChvcGVuVGFnKSk7CisgICAgICAgIG91dC5hcHBlbmQob3BlblRh
Zy5jaGFyYWN0ZXJzKCksIG9wZW5UYWcubGVuZ3RoKCkpOwogICAgIH0KIAogICAgIGlmICghc2hv
dWxkQW5ub3RhdGUoKSB8fCBwYXJlbnRJc1RleHRhcmVhKQpAQCAtMjM3LDEzICsyMzgsMTMgQEAg
dm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dAogICAgIGVsc2UgewogICAg
ICAgICBjb25zdCBib29sIHVzZVJlbmRlcmVkVGV4dCA9ICFlbmNsb3NpbmdOb2RlV2l0aFRhZyhm
aXJzdFBvc2l0aW9uSW5Ob2RlKHRleHQpLCBzZWxlY3RUYWcpOwogICAgICAgICBTdHJpbmcgY29u
dGVudCA9IHVzZVJlbmRlcmVkVGV4dCA/IHJlbmRlcmVkVGV4dCh0ZXh0LCBtX3JhbmdlKSA6IHN0
cmluZ1ZhbHVlRm9yUmFuZ2UodGV4dCwgbV9yYW5nZSk7Ci0gICAgICAgIFZlY3RvcjxVQ2hhcj4g
YnVmZmVyOworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1ZmZlcjsKICAgICAgICAgYXBwZW5kQ2hh
cmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKGJ1ZmZlciwgY29udGVudC5jaGFyYWN0ZXJzKCksIGNv
bnRlbnQubGVuZ3RoKCksIEVudGl0eU1hc2tJblBDREFUQSk7Ci0gICAgICAgIGFwcGVuZChvdXQs
IGNvbnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYXQoU3RyaW5nOjphZG9wdChidWZmZXIp
LCB0ZXh0KSk7CisgICAgICAgIG91dC5hcHBlbmQoY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5n
ZUZvcm1hdChidWZmZXIudG9TdHJpbmcoKSwgdGV4dCkpOwogICAgIH0KIAogICAgIGlmICh3cmFw
cGluZ1NwYW4pCi0gICAgICAgIGFwcGVuZChvdXQsIHN0eWxlTm9kZUNsb3NlVGFnKCkpOworICAg
ICAgICBvdXQuYXBwZW5kKHN0eWxlTm9kZUNsb3NlVGFnKCkpOwogfQogICAgIAogU3RyaW5nIFN0
eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpyZW5kZXJlZFRleHQoY29uc3QgTm9kZSogbm9kZSwgY29u
c3QgUmFuZ2UqIHJhbmdlKQpAQCAtMjgwLDcgKzI4MSw3IEBAIFN0cmluZyBTdHlsZWRNYXJrdXBB
Y2N1bXVsYXRvcjo6c3RyaW5nVmEKICAgICByZXR1cm4gc3RyOwogfQogCi12b2lkIFN0eWxlZE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVu
dCogZWxlbWVudCwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUg
cmFuZ2VGdWxseVNlbGVjdHNOb2RlKQordm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgYWRk
RGlzcGxheUlubGluZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9k
ZSkKIHsKICAgICBjb25zdCBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKTsKICAgICBhcHBlbmRPcGVuVGFnKG91dCwgZWxlbWVudCwgMCk7
CkBAIC0zMjUsNyArMzI2LDcgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
RWxlbQogCiAgICAgICAgIGlmICghbmV3SW5saW5lU3R5bGUtPmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHN0eWxlUHJlZml4LCAoIiBz
dHlsZT1cIiIpKTsKLSAgICAgICAgICAgIGFwcGVuZChvdXQsIHN0eWxlUHJlZml4KTsKKyAgICAg
ICAgICAgIG91dC5hcHBlbmQoc3R5bGVQcmVmaXgpOwogICAgICAgICAgICAgYXBwZW5kQXR0cmli
dXRlVmFsdWUob3V0LCBuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpLCBkb2N1bWVu
dElzSFRNTCk7CiAgICAgICAgICAgICBvdXQuYXBwZW5kKCdcIicpOwogICAgICAgICB9CkBAIC05
MTUsMTMgKzkxNiwxMyBAQCBTdHJpbmcgY3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5nZSogcmFu
CiAKIFN0cmluZyB1cmxUb01hcmt1cChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0
bGUpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIjxh
IGhyZWY9XCIiKTsKLSAgICBhcHBlbmQobWFya3VwLCB1cmwuc3RyaW5nKCkpOwotICAgIGFwcGVu
ZChtYXJrdXAsICJcIj4iKTsKKyAgICBTdHJpbmdCdWlsZGVyIG1hcmt1cDsKKyAgICBtYXJrdXAu
YXBwZW5kKCI8YSBocmVmPVwiIik7CisgICAgbWFya3VwLmFwcGVuZCh1cmwuc3RyaW5nKCkpOwor
ICAgIG1hcmt1cC5hcHBlbmQoIlwiPiIpOwogICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdF
bnRpdGllcyhtYXJrdXAsIHRpdGxlLmNoYXJhY3RlcnMoKSwgdGl0bGUubGVuZ3RoKCksIEVudGl0
eU1hc2tJblBDREFUQSk7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIjwvYT4iKTsKLSAgICByZXR1cm4g
U3RyaW5nOjphZG9wdChtYXJrdXApOworICAgIG1hcmt1cC5hcHBlbmQoIjwvYT4iKTsKKyAgICBy
ZXR1cm4gbWFya3VwLnRvU3RyaW5nKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvRE9NVG9rZW5MaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RP
TVRva2VuTGlzdC5jcHAJKHJldmlzaW9uIDkzOTgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9E
T01Ub2tlbkxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIFN0cmluZyBE
T01Ub2tlbkxpc3Q6OnJlbW92ZVRva2VuKGNvbnN0IEEKICAgICAvLyBBbGdvcml0aG0gZGVmaW5l
ZCBhdCBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211
bHRpcGFnZS9jb21tb24tbWljcm9zeW50YXhlcy5odG1sI3JlbW92ZS1hLXRva2VuLWZyb20tYS1z
dHJpbmcKIAogICAgIHVuc2lnbmVkIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Ci0gICAg
VmVjdG9yPFVDaGFyPiBvdXRwdXQ7IC8vIDMKKyAgICBTdHJpbmdCdWlsZGVyIG91dHB1dDsgLy8g
MwogICAgIG91dHB1dC5yZXNlcnZlQ2FwYWNpdHkoaW5wdXRMZW5ndGgpOwogICAgIHVuc2lnbmVk
IHBvc2l0aW9uID0gMDsgLy8gNAogCkBAIC03OCwxOCArNzgsMTggQEAgU3RyaW5nIERPTVRva2Vu
TGlzdDo6cmVtb3ZlVG9rZW4oY29uc3QgQQogICAgICAgICB9CiAKICAgICAgICAgLy8gU3RlcCA3
Ci0gICAgICAgIFZlY3RvcjxVQ2hhcj4gczsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBzOwogICAg
ICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dExlbmd0aCAmJiBpc05vdEhUTUxTcGFjZShpbnB1
dFtwb3NpdGlvbl0pKQogICAgICAgICAgICAgcy5hcHBlbmQoaW5wdXRbcG9zaXRpb24rK10pOwog
CiAgICAgICAgIC8vIFN0ZXAgOAotICAgICAgICBpZiAocyA9PSB0b2tlbikgeworICAgICAgICBp
ZiAocy50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSA9PSB0b2tlbikgewogICAgICAgICAgICAg
Ly8gU3RlcCA4LjEKICAgICAgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0TGVuZ3RoICYm
IGlzSFRNTFNwYWNlKGlucHV0W3Bvc2l0aW9uXSkpCiAgICAgICAgICAgICAgICAgKytwb3NpdGlv
bjsKIAogICAgICAgICAgICAgLy8gU3RlcCA4LjIKLSAgICAgICAgICAgIHNpemVfdCBqID0gb3V0
cHV0LnNpemUoKTsKKyAgICAgICAgICAgIHNpemVfdCBqID0gb3V0cHV0Lmxlbmd0aCgpOwogICAg
ICAgICAgICAgd2hpbGUgKGogPiAwICYmIGlzSFRNTFNwYWNlKG91dHB1dFtqIC0gMV0pKQogICAg
ICAgICAgICAgICAgIC0tajsKICAgICAgICAgICAgIG91dHB1dC5yZXNpemUoaik7CkBAIC05OCwx
MSArOTgsMTAgQEAgU3RyaW5nIERPTVRva2VuTGlzdDo6cmVtb3ZlVG9rZW4oY29uc3QgQQogICAg
ICAgICAgICAgaWYgKHBvc2l0aW9uIDwgaW5wdXRMZW5ndGggJiYgIW91dHB1dC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnICcpOwogICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQocyk7IC8vIFN0ZXAgOQorICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZChzLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsgLy8gU3RlcCA5CiAgICAgfQog
Ci0gICAgb3V0cHV0LnNocmlua1RvRml0KCk7Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQob3V0
cHV0KTsKKyAgICByZXR1cm4gb3V0cHV0LnRvU3RyaW5nKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDkzOTgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3
b3Jkcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlv
bXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBXVEY7CiAKQEAgLTg5LDcgKzkwLDggQEAgc3RhdGljIGJvb2wgcGFyc2VGb250U2l6ZShj
b25zdCBTdHJpbmcmIAogICAgIH0KIAogICAgIC8vIFN0ZXAgNgotICAgIFZlY3RvcjxVQ2hhciwg
MTY+IGRpZ2l0czsKKyAgICBTdHJpbmdCdWlsZGVyIGRpZ2l0czsKKyAgICBkaWdpdHMucmVzZXJ2
ZUNhcGFjaXR5KDE2KTsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKICAgICAgICAgaWYg
KCFpc0FTQ0lJRGlnaXQoKnBvc2l0aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAxLDcg
KzEwMyw3IEBAIHN0YXRpYyBib29sIHBhcnNlRm9udFNpemUoY29uc3QgU3RyaW5nJiAKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gU3RlcCA4Ci0gICAgaW50IHZhbHVlID0gY2hhcmFj
dGVyc1RvSW50U3RyaWN0KGRpZ2l0cy5kYXRhKCksIGRpZ2l0cy5zaXplKCkpOworICAgIGludCB2
YWx1ZSA9IGNoYXJhY3RlcnNUb0ludFN0cmljdChkaWdpdHMuY2hhcmFjdGVycygpLCBkaWdpdHMu
bGVuZ3RoKCkpOwogCiAgICAgLy8gU3RlcCA5CiAgICAgaWYgKG1vZGUgPT0gUmVsYXRpdmVQbHVz
KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudC5jcHAJKHJldmlzaW9uIDkzOTgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcg
QEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVu
ZXIuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTExMCw3ICsxMTAsNyBAQCBTdHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQ6OnN0cmlwCiAgICAgaWYgKCFhdHRyaWJ1dGVWYWx1ZS5jb250YWlucyhuZXdsaW5lQ2hhcmFj
dGVyKSAmJiAhYXR0cmlidXRlVmFsdWUuY29udGFpbnMoY2FycmlhZ2VSZXR1cm4pKQogICAgICAg
ICByZXR1cm4gYXR0cmlidXRlVmFsdWU7CiAKLSAgICBWZWN0b3I8VUNoYXI+IHN0cmlwcGVkOwor
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaXBwZWQ7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmli
dXRlVmFsdWUubGVuZ3RoKCk7CiAgICAgc3RyaXBwZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkBAIC0xMTksNyAr
MTE5LDcgQEAgU3RyaW5nIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzdHJpcAogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIHN0cmlwcGVkLmFwcGVuZChjaGFyYWN0ZXIpOwogICAg
IH0KLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChzdHJpcHBlZCk7CisgICAgcmV0dXJuIHN0cmlw
cGVkLnRvU3RyaW5nKCk7CiB9CiAKIHN0YXRpYyBib29sIGlzTm90TGluZUJyZWFrKFVDaGFyIGNo
KSB7IHJldHVybiBjaCAhPSBuZXdsaW5lQ2hhcmFjdGVyICYmIGNoICE9IGNhcnJpYWdlUmV0dXJu
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNj
YW5uZXIuY3BwCShyZXZpc2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0NTU1ByZWxvYWRTY2FubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDE0ICsxOTIsMTQg
QEAgc3RhdGljIFN0cmluZyBwYXJzZUNTU1N0cmluZ09yVVJMKGNvbnN0IAogCiB2b2lkIENTU1By
ZWxvYWRTY2FubmVyOjplbWl0UnVsZSgpCiB7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCJp
bXBvcnQiLCBtX3J1bGUuZGF0YSgpLCBtX3J1bGUuc2l6ZSgpKSkgewotICAgICAgICBTdHJpbmcg
dmFsdWUgPSBwYXJzZUNTU1N0cmluZ09yVVJMKG1fcnVsZVZhbHVlLmRhdGEoKSwgbV9ydWxlVmFs
dWUuc2l6ZSgpKTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoImltcG9ydCIsIG1fcnVsZS5j
aGFyYWN0ZXJzKCksIG1fcnVsZS5sZW5ndGgoKSkpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0g
cGFyc2VDU1NTdHJpbmdPclVSTChtX3J1bGVWYWx1ZS5jaGFyYWN0ZXJzKCksIG1fcnVsZVZhbHVl
Lmxlbmd0aCgpKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHZhbHVlKSk7
CiAgICAgICAgICAgICBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5wcmVsb2Fk
KENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCByZXF1ZXN0LCBTdHJpbmcoKSwgbV9zY2Fu
bmluZ0JvZHkpOwogICAgICAgICB9CiAgICAgICAgIG1fc3RhdGUgPSBJbml0aWFsOwotICAgIH0g
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoImNoYXJzZXQiLCBtX3J1bGUuZGF0YSgpLCBtX3J1
bGUuc2l6ZSgpKSkKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCJjaGFyc2V0Iiwg
bV9ydWxlLmNoYXJhY3RlcnMoKSwgbV9ydWxlLmxlbmd0aCgpKSkKICAgICAgICAgbV9zdGF0ZSA9
IEluaXRpYWw7CiAgICAgZWxzZQogICAgICAgICBtX3N0YXRlID0gRG9uZVBhcnNpbmdJbXBvcnRS
dWxlczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNj
YW5uZXIuaAkocmV2aXNpb24gOTM5ODApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9D
U1NQcmVsb2FkU2Nhbm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVm
aW5lIENTU1ByZWxvYWRTY2FubmVyX2gKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02MSw4ICs2MSw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBlbWl0UnVsZSgpOwogCiAgICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBWZWN0b3I8VUNo
YXIsIDE2PiBtX3J1bGU7Ci0gICAgVmVjdG9yPFVDaGFyPiBtX3J1bGVWYWx1ZTsKKyAgICBTdHJp
bmdCdWlsZGVyIG1fcnVsZTsKKyAgICBTdHJpbmdCdWlsZGVyIG1fcnVsZVZhbHVlOwogCiAgICAg
Ym9vbCBtX3NjYW5uaW5nQm9keTsKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwCShyZXZp
c2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiQ2hhcmFj
dGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkhUTUxFbnRpdHlT
ZWFyY2guaCIKICNpbmNsdWRlICJIVE1MRW50aXR5VGFibGUuaCIKLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV1RGOwogCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHZh
bHVlOwogICAgIH0KIAotICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb252ZXJ0VG9VVEYxNihVQ2hh
cjMyIHZhbHVlLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZEVudGl0eSkKKyAgICBpbmxpbmUg
c3RhdGljIGJvb2wgY29udmVydFRvVVRGMTYoVUNoYXIzMiB2YWx1ZSwgU3RyaW5nQnVpbGRlciYg
ZGVjb2RlZEVudGl0eSkKICAgICB7CiAgICAgICAgIGlmIChVX0lTX0JNUCh2YWx1ZSkpIHsKICAg
ICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0YXRpY19jYXN0PFVDaGFyPih2YWx1ZSk7CkBA
IC04NSw5ICs4NSw5IEBAIHB1YmxpYzoKIAogICAgIGlubGluZSBzdGF0aWMgYm9vbCBhY2NlcHRN
YWxmb3JtZWQoKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBpbmxpbmUgc3RhdGljIGJvb2wgY29u
c3VtZU5hbWVkRW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBWZWN0b3I8VUNoYXIsIDE2
PiYgZGVjb2RlZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRp
b25hbEFsbG93ZWRDaGFyYWN0ZXIsIFVDaGFyJiBjYykKKyAgICBpbmxpbmUgc3RhdGljIGJvb2wg
Y29uc3VtZU5hbWVkRW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWlsZGVy
JiBkZWNvZGVkRW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlv
bmFsQWxsb3dlZENoYXJhY3RlciwgVUNoYXImIGNjKQogICAgIHsKLSAgICAgICAgVmVjdG9yPFVD
aGFyLCAxMD4gY29uc3VtZWRDaGFyYWN0ZXJzOworICAgICAgICBTdHJpbmdCdWlsZGVyIGNvbnN1
bWVkQ2hhcmFjdGVyczsKICAgICAgICAgSFRNTEVudGl0eVNlYXJjaCBlbnRpdHlTZWFyY2g7CiAg
ICAgICAgIHdoaWxlICghc291cmNlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgY2MgPSAqc291
cmNlOwpAQCAtMTM5LDcgKzEzOSw3IEBAIHB1YmxpYzoKIH0KIAogCi1ib29sIGNvbnN1bWVIVE1M
RW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2Rl
ZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93
ZWRDaGFyYWN0ZXIpCitib29sIGNvbnN1bWVIVE1MRW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291
cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkRW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0
ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKIHsKICAgICByZXR1cm4gY29u
c3VtZUNoYXJhY3RlclJlZmVyZW5jZTxIVE1MRW50aXR5UGFyc2VyPihzb3VyY2UsIGRlY29kZWRF
bnRpdHksIG5vdEVub3VnaENoYXJhY3RlcnMsIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2Vy
LmgJKHJldmlzaW9uIDkzOTgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVu
dGl0eVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotYm9vbCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmLCBW
ZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVy
cywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPSAnXDAnKTsKK2Jvb2wgY29uc3Vt
ZUhUTUxFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZEVudGl0
eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFy
YWN0ZXIgPSAnXDAnKTsKIAogLy8gVXNlZCBieSB0aGUgWE1MIHBhcnNlci4gIE5vdCBzdWl0YWJs
ZSBmb3IgdXNlIGluIEhUTUwgcGFyc2luZy4gIFVzZSBjb25zdW1lSFRNTEVudGl0eSBpbnN0ZWFk
LgogVUNoYXIgZGVjb2RlTmFtZWRFbnRpdHkoY29uc3QgY2hhciopOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAJKHJldmlzaW9uIDkz
OTgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsNyBAQCBib29sIHBhcnNlSFRNTEludGVnZXIo
Y29uc3QgU3RyaW5nJiBpbnB1CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFN0ZXAg
OAotICAgIFZlY3RvcjxVQ2hhciwgMTY+IGRpZ2l0czsKKyAgICBTdHJpbmdCdWlsZGVyIGRpZ2l0
czsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKICAgICAgICAgaWYgKCFpc0FTQ0lJRGln
aXQoKnBvc2l0aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjE2LDcgKzIxNiw3IEBAIGJv
b2wgcGFyc2VIVE1MSW50ZWdlcihjb25zdCBTdHJpbmcmIGlucHUKICAgICB9CiAKICAgICAvLyBT
dGVwIDkKLSAgICB2YWx1ZSA9IHNpZ24gKiBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoZGlnaXRzLmRh
dGEoKSwgZGlnaXRzLnNpemUoKSk7CisgICAgdmFsdWUgPSBzaWduICogY2hhcmFjdGVyc1RvSW50
U3RyaWN0KGRpZ2l0cy5jaGFyYWN0ZXJzKCksIGRpZ2l0cy5sZW5ndGgoKSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTI1NCw3ICsyNTQsNyBAQCBib29sIHBhcnNlSFRNTE5vbk5lZ2F0aXZl
SW50ZWdlcihjb25zdCBTCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFN0ZXAgOAot
ICAgIFZlY3RvcjxVQ2hhciwgMTY+IGRpZ2l0czsKKyAgICBTdHJpbmdCdWlsZGVyIGRpZ2l0czsK
ICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKICAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQo
KnBvc2l0aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjYyLDcgKzI2Miw3IEBAIGJvb2wg
cGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0IFMKICAgICB9CiAKICAgICAvLyBTdGVw
IDkKLSAgICB2YWx1ZSA9IGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QoZGlnaXRzLmRhdGEoKSwgZGln
aXRzLnNpemUoKSk7CisgICAgdmFsdWUgPSBjaGFyYWN0ZXJzVG9VSW50U3RyaWN0KGRpZ2l0cy5j
aGFyYWN0ZXJzKCksIGRpZ2l0cy5sZW5ndGgoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCShyZXZp
c2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBIVE1MVG9rZW5pemVy
OjpyZXNldCgpCiBpbmxpbmUgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzRW50aXR5KFNlZ21l
bnRlZFN0cmluZyYgc291cmNlKQogewogICAgIGJvb2wgbm90RW5vdWdoQ2hhcmFjdGVycyA9IGZh
bHNlOwotICAgIFZlY3RvcjxVQ2hhciwgMTY+IGRlY29kZWRFbnRpdHk7CisgICAgU3RyaW5nQnVp
bGRlciBkZWNvZGVkRW50aXR5OwogICAgIGJvb2wgc3VjY2VzcyA9IGNvbnN1bWVIVE1MRW50aXR5
KHNvdXJjZSwgZGVjb2RlZEVudGl0eSwgbm90RW5vdWdoQ2hhcmFjdGVycyk7CiAgICAgaWYgKG5v
dEVub3VnaENoYXJhY3RlcnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1Myw5ICsxNTMs
OCBAQCBpbmxpbmUgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzRW50aXR5CiAgICAgICAgIEFT
U0VSVChkZWNvZGVkRW50aXR5LmlzRW1wdHkoKSk7CiAgICAgICAgIGJ1ZmZlckNoYXJhY3Rlcign
JicpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFZlY3RvcjxVQ2hhcj46OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBkZWNvZGVkRW50aXR5LmJlZ2luKCk7Ci0gICAgICAgIGZvciAoOyBpdGVyICE9IGRl
Y29kZWRFbnRpdHkuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3Rlcigq
aXRlcik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWNvZGVkRW50aXR5Lmxl
bmd0aCgpOyArK2kpCisgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXIoZGVjb2RlZEVudGl0eVtp
XSk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQpAQCAtOTg3LDcgKzk4Niw3IEBAIGJvb2wg
SFRNTFRva2VuaXplcjo6bmV4dFRva2VuKFNlZ21lbnRlZFMKIAogICAgIEhUTUxfQkVHSU5fU1RB
VEUoQ2hhcmFjdGVyUmVmZXJlbmNlSW5BdHRyaWJ1dGVWYWx1ZVN0YXRlKSB7CiAgICAgICAgIGJv
b2wgbm90RW5vdWdoQ2hhcmFjdGVycyA9IGZhbHNlOwotICAgICAgICBWZWN0b3I8VUNoYXIsIDE2
PiBkZWNvZGVkRW50aXR5OworICAgICAgICBTdHJpbmdCdWlsZGVyIGRlY29kZWRFbnRpdHk7CiAg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IGNvbnN1bWVIVE1MRW50aXR5KHNvdXJjZSwgZGVjb2RlZEVu
dGl0eSwgbm90RW5vdWdoQ2hhcmFjdGVycywgbV9hZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rlcik7
CiAgICAgICAgIGlmIChub3RFbm91Z2hDaGFyYWN0ZXJzKQogICAgICAgICAgICAgcmV0dXJuIGhh
dmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7CkBAIC05OTUsOSArOTk0LDggQEAgYm9vbCBIVE1M
VG9rZW5pemVyOjpuZXh0VG9rZW4oU2VnbWVudGVkUwogICAgICAgICAgICAgQVNTRVJUKGRlY29k
ZWRFbnRpdHkuaXNFbXB0eSgpKTsKICAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQXR0cmli
dXRlVmFsdWUoJyYnKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFZlY3RvcjxVQ2hh
cj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBkZWNvZGVkRW50aXR5LmJlZ2luKCk7Ci0gICAgICAg
ICAgICBmb3IgKDsgaXRlciAhPSBkZWNvZGVkRW50aXR5LmVuZCgpOyArK2l0ZXIpCi0gICAgICAg
ICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZSgqaXRlcik7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVjb2RlZEVudGl0eS5sZW5ndGgoKTsgKytp
KQorICAgICAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQXR0cmlidXRlVmFsdWUoZGVjb2Rl
ZEVudGl0eVtpXSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gV2UncmUgc3VwcG9zZWQgdG8gc3dp
dGNoIGJhY2sgdG8gdGhlIGF0dHJpYnV0ZSB2YWx1ZSBzdGF0ZSB0aGF0CiAgICAgICAgIC8vIHdl
IHdlcmUgaW4gd2hlbiB3ZSB3ZXJlIHN3aXRjaGVkIGludG8gdGhpcyBzdGF0ZS4gUmF0aGVyIHRo
YW4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVy
LmNwcAkocmV2aXNpb24gOTM5ODApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
VHJlZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTEsNyArMjkxLDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gU3RyaW5nKHN0YXJ0LCBtX2N1cnJlbnQgLSBzdGFydCk7CiAgICAg
fQogCi0gICAgdm9pZCBnaXZlUmVtYWluaW5nVG8oVmVjdG9yPFVDaGFyPiYgcmVjaXBpZW50KQor
ICAgIHZvaWQgZ2l2ZVJlbWFpbmluZ1RvKFN0cmluZ0J1aWxkZXImIHJlY2lwaWVudCkKICAgICB7
CiAgICAgICAgIHJlY2lwaWVudC5hcHBlbmQobV9jdXJyZW50LCBtX2VuZCAtIG1fY3VycmVudCk7
CiAgICAgICAgIG1fY3VycmVudCA9IG1fZW5kOwpAQCAtMjcxOCw3ICsyNzE4LDggQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JBZnRlckhlYQogCiB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6ZGVmYXVsdEZvckluVGFibGVUZXh0KCkKIHsKLSAgICBTdHJpbmcgY2hhcmFjdGVycyA9IFN0
cmluZzo6YWRvcHQobV9wZW5kaW5nVGFibGVDaGFyYWN0ZXJzKTsKKyAgICBTdHJpbmcgY2hhcmFj
dGVycyA9IG1fcGVuZGluZ1RhYmxlQ2hhcmFjdGVycy50b1N0cmluZygpOworICAgIG1fcGVuZGlu
Z1RhYmxlQ2hhcmFjdGVycy5jbGVhcigpOwogICAgIGlmICghaXNBbGxXaGl0ZXNwYWNlKGNoYXJh
Y3RlcnMpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBwYXJzZSBlcnJvcgogICAgICAgICBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6UmVkaXJlY3RUb0Zvc3RlclBhcmVudEd1YXJkIHJlZGlyZWN0ZXIobV90
cmVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5oCShyZXZpc2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxU
cmVlQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTMgQEAKICNpbmNsdWRl
ICJIVE1MRWxlbWVudFN0YWNrLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dC5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0y
NDEsNyArMjQyLDcgQEAgcHJpdmF0ZToKICAgICBJbnNlcnRpb25Nb2RlIG1fb3JpZ2luYWxJbnNl
cnRpb25Nb2RlOwogCiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBz
L2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwjcGVuZGluZy10YWJsZS1j
aGFyYWN0ZXItdG9rZW5zCi0gICAgVmVjdG9yPFVDaGFyPiBtX3BlbmRpbmdUYWJsZUNoYXJhY3Rl
cnM7CisgICAgU3RyaW5nQnVpbGRlciBtX3BlbmRpbmdUYWJsZUNoYXJhY3RlcnM7CiAKICAgICAv
LyBXZSBhY2Nlc3MgcGFyc2VyIGJlY2F1c2UgSFRNTDUgc3BlYyByZXF1aXJlcyB0aGF0IHdlIGJl
IGFibGUgdG8gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgdG9rZW5pemVyCiAgICAgLy8gZnJvbSB3
aXRoaW4gcGFyc2VyIGFjdGlvbnMuIFdlIGFsc28gbmVlZCBpdCB0byB0cmFjayB0aGUgY3VycmVu
dCBwb3NpdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuY3BwCShyZXZpc2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgPHd0Zi9EZWNpbWFsTnVtYmVyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTI2MSw3ICsyNjIsNyBAQCBpbmxpbmUgaW50IGhleFRvSW50KFVDaGFyIGMpCiAgICAgcmV0
dXJuIDA7CiB9CiAKLWJvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3Qg
VUNoYXIqIGVuZCwgVmVjdG9yPFVDaGFyPiogb3V0cHV0KQorYm9vbCBkZWNvZGVTdHJpbmcoY29u
c3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmdCdWlsZGVyKiBvdXRwdXQp
CiB7CiAgICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAgICAgICAgIFVDaGFyIGMgPSAqc3RhcnQr
KzsKQEAgLTMyMSwxMSArMzIyLDExIEBAIGJvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFVDaGFyKiBz
dGFydCwgY28KICAgICB9CiAgICAgaWYgKHN0YXJ0ID4gZW5kKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7CisgICAgU3RyaW5nQnVpbGRlciBidWZmZXI7
CiAgICAgYnVmZmVyLnJlc2VydmVDYXBhY2l0eShlbmQgLSBzdGFydCk7CiAgICAgaWYgKCFkZWNv
ZGVTdHJpbmcoc3RhcnQsIGVuZCwgJmJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAqb3V0cHV0ID0gU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOyAgICAKKyAg
ICAqb3V0cHV0ID0gYnVmZmVyLnRvU3RyaW5nKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTQ0NCw3ICs0NDUsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBidWlsZFZhbHVlKGNv
CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLWlubGluZSBib29sIGVzY2FwZUNo
YXIoVUNoYXIgYywgVmVjdG9yPFVDaGFyPiogZHN0KQoraW5saW5lIGJvb2wgZXNjYXBlQ2hhcihV
Q2hhciBjLCBTdHJpbmdCdWlsZGVyKiBkc3QpCiB7CiAgICAgc3dpdGNoIChjKSB7CiAgICAgY2Fz
ZSAnXGInOiBkc3QtPmFwcGVuZCgiXFxiIiwgMik7IGJyZWFrOwpAQCAtNDYwLDcgKzQ2MSw3IEBA
IGlubGluZSBib29sIGVzY2FwZUNoYXIoVUNoYXIgYywgVmVjdG9yPFUKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotaW5saW5lIHZvaWQgZG91YmxlUXVvdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIs
IFZlY3RvcjxVQ2hhcj4qIGRzdCkKK2lubGluZSB2b2lkIGRvdWJsZVF1b3RlU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyLCBTdHJpbmdCdWlsZGVyKiBkc3QpCiB7CiAgICAgZHN0LT5hcHBlbmQoJyIn
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RyLmxlbmd0aCgpOyArK2kpIHsKQEAg
LTU1NiwxMyArNTU3LDEzIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvclZh
bHUKIAogU3RyaW5nIEluc3BlY3RvclZhbHVlOjp0b0pTT05TdHJpbmcoKSBjb25zdAogewotICAg
IFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogICAgIHJl
c3VsdC5yZXNlcnZlQ2FwYWNpdHkoNTEyKTsKICAgICB3cml0ZUpTT04oJnJlc3VsdCk7Ci0gICAg
cmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICByZXR1cm4g
cmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVmFsdWU6OndyaXRlSlNPTihW
ZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0Cit2b2lkIEluc3BlY3RvclZhbHVlOjp3cml0ZUpT
T04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdAogewogICAgIEFTU0VSVChtX3R5cGUgPT0g
VHlwZU51bGwpOwogICAgIG91dHB1dC0+YXBwZW5kKG51bGxTdHJpbmcsIDQpOwpAQCAtNjE2LDcg
KzYxNyw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWcKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04oVmVj
dG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAordm9pZCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0
ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdAogewogICAgIEFTU0VSVCh0eXBlKCkg
PT0gVHlwZUJvb2xlYW4gfHwgdHlwZSgpID09IFR5cGVOdW1iZXIpOwogICAgIGlmICh0eXBlKCkg
PT0gVHlwZUJvb2xlYW4pIHsKQEAgLTY1Miw3ICs2NTMsNyBAQCBib29sIEluc3BlY3RvclN0cmlu
Zzo6YXNTdHJpbmcoU3RyaW5nKiBvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yU3RyaW5nOjp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAordm9pZCBJ
bnNwZWN0b3JTdHJpbmc6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlU3RyaW5nKTsKICAgICBkb3VibGVRdW90ZVN0cmlu
ZyhtX3N0cmluZ1ZhbHVlLCBvdXRwdXQpOwpAQCAtNzI0LDcgKzcyNSw3IEBAIHZvaWQgSW5zcGVj
dG9yT2JqZWN0OjpyZW1vdmUoY29uc3QgU3RyaW4KICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9y
T2JqZWN0Ojp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAordm9pZCBJbnNw
ZWN0b3JPYmplY3Q6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB7CiAg
ICAgb3V0cHV0LT5hcHBlbmQoJ3snKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fb3Jk
ZXIuc2l6ZSgpOyArK2kpIHsKQEAgLTc2MSw3ICs3NjIsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBJbnNwZWN0b3JBcnJhCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQXJyYXk6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0Cit2b2lkIElu
c3BlY3RvckFycmF5Ojp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdAogewog
ICAgIG91dHB1dC0+YXBwZW5kKCdbJyk7CiAgICAgZm9yIChWZWN0b3I8UmVmUHRyPEluc3BlY3Rv
clZhbHVlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YS5iZWdpbigpOyBpdCAhPSBtX2Rh
dGEuZW5kKCk7ICsraXQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmgJKHJldmlzaW9uIDkzOTgwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VKU09OKGNvbnN0
IFN0cmluZyYganNvbik7CiAKICAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdDsKIAog
cHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEluc3BlY3RvclZhbHVlKFR5cGUgdHlwZSkgOiBtX3R5
cGUodHlwZSkgeyB9CkBAIC0xMjEsNyArMTIxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBhc051bWJlcih1bnNpZ25lZCBsb25nKiBvdXRwdXQpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBhc051bWJlcih1bnNpZ25lZCBpbnQqIG91dHB1dCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0OwogCiBwcml2YXRlOgog
ICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoYm9vbCB2YWx1ZSkgOiBJbnNwZWN0b3JW
YWx1ZShUeXBlQm9vbGVhbiksIG1fYm9vbFZhbHVlKHZhbHVlKSB7IH0KQEAgLTE0OCw3ICsxNDgs
NyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgYXNTdHJpbmcoU3RyaW5nKiBvdXRwdXQp
IGNvbnN0OyAgICAKIAotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiog
b3V0cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIq
IG91dHB1dCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgSW5zcGVjdG9yU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZVN0cmluZyksIG1fc3Ry
aW5nVmFsdWUodmFsdWUpIHsgfQpAQCAtMTk5LDcgKzE5OSw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVK
U09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdyaXRl
SlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0OwogCiAgICAgaXRlcmF0b3IgYmVnaW4o
KSB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQogICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJu
IG1fZGF0YS5lbmQoKTsgfQpAQCAtMjMzLDcgKzIzMyw3IEBAIHB1YmxpYzoKIAogICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldChzaXplX3QgaW5kZXgpOwogCi0gICAgdmlydHVhbCB2
b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdDsKIAogcHJpdmF0ZToK
ICAgICBJbnNwZWN0b3JBcnJheSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3Nz
T3JpZ2luQWNjZXNzQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAJKHJldmlzaW9uIDkzOTgwKQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMTE1LDE5ICsxMTYsMTkgQEAgUmVzb3VyY2VSZXF1ZXN0IGNyZWF0ZUFjY2Vzc0Nv
bnRyb2xQcmVmbAogICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIHJlcXVlc3RIZWFkZXJGaWVsZHMg
PSByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKTsKIAogICAgIGlmIChyZXF1ZXN0SGVhZGVyRmll
bGRzLnNpemUoKSA+IDApIHsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBoZWFkZXJCdWZmZXI7Cisg
ICAgICAgIFN0cmluZ0J1aWxkZXIgaGVhZGVyQnVmZmVyOwogICAgICAgICBIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlcXVlc3RIZWFkZXJGaWVsZHMuYmVnaW4oKTsKLSAgICAg
ICAgYXBwZW5kKGhlYWRlckJ1ZmZlciwgaXQtPmZpcnN0KTsKKyAgICAgICAgaGVhZGVyQnVmZmVy
LmFwcGVuZChpdC0+Zmlyc3QpOwogICAgICAgICArK2l0OwogCiAgICAgICAgIEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJGaWVsZHMuZW5kKCk7CiAgICAg
ICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5h
cHBlbmQoJywnKTsKICAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoJyAnKTsKLSAgICAg
ICAgICAgIGFwcGVuZChoZWFkZXJCdWZmZXIsIGl0LT5maXJzdCk7CisgICAgICAgICAgICBoZWFk
ZXJCdWZmZXIuYXBwZW5kKGl0LT5maXJzdCk7CiAgICAgICAgIH0KIAotICAgICAgICBwcmVmbGln
aHRSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFk
ZXJzIiwgU3RyaW5nOjphZG9wdChoZWFkZXJCdWZmZXIpKTsKKyAgICAgICAgcHJlZmxpZ2h0UmVx
dWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycyIs
IGhlYWRlckJ1ZmZlci50b1N0cmluZygpKTsKICAgICB9CiAKICAgICByZXR1cm4gcHJlZmxpZ2h0
UmVxdWVzdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gOTM5ODApCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC04MzYsMTcgKzgzNywxNyBAQCBib29sIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsCiAgICAgLy8gVGhlbiwgaW5zZXJ0IHRoZSByZXNvdXJj
ZQogICAgIAogICAgIC8vIFNlcmlhbGl6ZSB0aGUgaGVhZGVycwotICAgIFZlY3RvcjxVQ2hhcj4g
c3RyaW5nQnVpbGRlcjsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgCiAg
ICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVzb3VyY2UtPnJlc3BvbnNl
KCkuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCku
YmVnaW4oKTsgaXQhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
aXQtPmZpcnN0LmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoKFVDaGFyKSc6Jyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQu
Y2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoaXQtPnNlY29uZCk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hh
ciknXG4nKTsKICAgICB9CiAgICAgCi0gICAgU3RyaW5nIGhlYWRlcnMgPSBTdHJpbmc6OmFkb3B0
KHN0cmluZ0J1aWxkZXIpOworICAgIFN0cmluZyBoZWFkZXJzID0gc3RyaW5nQnVpbGRlci50b1N0
cmluZygpOwogICAgIAogICAgIFNRTGl0ZVN0YXRlbWVudCByZXNvdXJjZVN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVSZXNvdXJjZXMgKHVybCwgc3RhdHVzQ29kZSwgcmVz
cG9uc2VVUkwsIGhlYWRlcnMsIGRhdGEsIG1pbWVUeXBlLCB0ZXh0RW5jb2RpbmdOYW1lKSBWQUxV
RVMgKD8sID8sID8sID8sID8sID8sID8pIik7CiAgICAgaWYgKHJlc291cmNlU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAJKHJldmlz
aW9uIDkzOTgwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKICNpbmNs
dWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCkBAIC00MjgsMTMgKzQyOSwxMyBAQCB2b2lkIENocm9t
ZTo6c2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzCiAgICAgICAgICAgICAgICAgICAgIEZpbGVM
aXN0KiBmaWxlcyA9IGlucHV0LT5maWxlcygpOwogICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsaXN0U2l6ZSA9IGZpbGVzLT5sZW5ndGgoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxp
c3RTaXplID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiBuYW1l
czsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgbmFtZXM7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQobmFtZXMsIGZpbGVzLT5pdGVtKGkp
LT5maWxlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQo
ZmlsZXMtPml0ZW0oaSktPmZpbGVOYW1lKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpICE9IGxpc3RTaXplIC0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZXMuYXBwZW5kKCdcbicpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgdG9vbFRpcCA9IFN0cmluZzo6YWRvcHQobmFtZXMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdG9vbFRpcCA9IG5hbWVzLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBmaWxlbmFtZSBhbHdheXMgZGlzcGxheSBhcyBMVFIuCiAgICAgICAgICAg
ICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0gTFRSOwogICAgICAgICAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkocmV2aXNpb24g
OTM5ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkod29ya2lu
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
cml0eU9yaWdpbi5jcHAJKHJldmlzaW9uIDkzOTgwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9T
ZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOTUsMTggKzM5NiwxOCBAQCBTdHJp
bmcgU2VjdXJpdHlPcmlnaW46OnRvU3RyaW5nKCkgY29uc3QKICAgICAgICAgcmV0dXJuICJmaWxl
Oi8vIjsKICAgICB9CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Byb3RvY29sLmxlbmd0aCgpICsgbV9ob3N0Lmxlbmd0aCgp
ICsgMTApOwotICAgIGFwcGVuZChyZXN1bHQsIG1fcHJvdG9jb2wpOwotICAgIGFwcGVuZChyZXN1
bHQsICI6Ly8iKTsKLSAgICBhcHBlbmQocmVzdWx0LCBtX2hvc3QpOworICAgIFN0cmluZ0J1aWxk
ZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobV9wcm90b2NvbC5sZW5ndGgo
KSArIG1faG9zdC5sZW5ndGgoKSArIDEwKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fcHJvdG9jb2wp
OworICAgIHJlc3VsdC5hcHBlbmQoIjovLyIpOworICAgIHJlc3VsdC5hcHBlbmQobV9ob3N0KTsK
IAogICAgIGlmIChtX3BvcnQpIHsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgIjoiKTsKLSAgICAg
ICAgYXBwZW5kKHJlc3VsdCwgU3RyaW5nOjpudW1iZXIobV9wb3J0KSk7CisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIjoiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmc6Om51bWJlcihtX3Bv
cnQpKTsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4g
U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJp
bmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gOTM5ODApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAK
ICNpZiBVU0UoSUNVX1VOSUNPREUpCkBAIC04ODksNDcgKzg5MCw0NyBAQCBTdHJpbmcgS1VSTDo6
ZGVwcmVjYXRlZFN0cmluZygpIGNvbnN0CiAgICAgaWYgKCFtX2lzVmFsaWQpCiAgICAgICAgIHJl
dHVybiBtX3N0cmluZzsKIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OwogCi0gICAgYXBwZW5kKHJlc3VsdCwgcHJvdG9jb2woKSk7CisgICAgcmVz
dWx0LmFwcGVuZChwcm90b2NvbCgpKTsKICAgICByZXN1bHQuYXBwZW5kKCc6Jyk7CiAKLSAgICBW
ZWN0b3I8VUNoYXI+IGF1dGhvcml0eTsKKyAgICBTdHJpbmdCdWlsZGVyIGF1dGhvcml0eTsKIAog
ICAgIGlmIChtX2hvc3RFbmQgIT0gbV9wYXNzd29yZEVuZCkgewogICAgICAgICBpZiAobV91c2Vy
RW5kICE9IG1fdXNlclN0YXJ0KSB7Ci0gICAgICAgICAgICBhcHBlbmQoYXV0aG9yaXR5LCB1c2Vy
KCkpOworICAgICAgICAgICAgYXV0aG9yaXR5LmFwcGVuZCh1c2VyKCkpOwogICAgICAgICAgICAg
YXV0aG9yaXR5LmFwcGVuZCgnQCcpOwogICAgICAgICB9Ci0gICAgICAgIGFwcGVuZChhdXRob3Jp
dHksIGhvc3QoKSk7CisgICAgICAgIGF1dGhvcml0eS5hcHBlbmQoaG9zdCgpKTsKICAgICAgICAg
aWYgKGhhc1BvcnQoKSkgewogICAgICAgICAgICAgYXV0aG9yaXR5LmFwcGVuZCgnOicpOwotICAg
ICAgICAgICAgYXBwZW5kKGF1dGhvcml0eSwgU3RyaW5nOjpudW1iZXIocG9ydCgpKSk7CisgICAg
ICAgICAgICBhdXRob3JpdHkuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHBvcnQoKSkpOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgaWYgKCFhdXRob3JpdHkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJy8nKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKGF1dGhvcml0eSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYXV0aG9yaXR5
LmNoYXJhY3RlcnMoKSwgYXV0aG9yaXR5Lmxlbmd0aCgpKTsKICAgICB9IGVsc2UgaWYgKHByb3Rv
Y29sSXMoImZpbGUiKSkgewogICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7CiAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJy8nKTsKICAgICB9CiAKLSAgICBhcHBlbmQocmVzdWx0LCBwYXRoKCkpOwor
ICAgIHJlc3VsdC5hcHBlbmQocGF0aCgpKTsKIAogICAgIGlmIChtX3BhdGhFbmQgIT0gbV9xdWVy
eUVuZCkgewogICAgICAgICByZXN1bHQuYXBwZW5kKCc/Jyk7Ci0gICAgICAgIGFwcGVuZChyZXN1
bHQsIHF1ZXJ5KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKHF1ZXJ5KCkpOwogICAgIH0KIAog
ICAgIGlmIChtX2ZyYWdtZW50RW5kICE9IG1fcXVlcnlFbmQpIHsKICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnIycpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBmcmFnbWVudElkZW50aWZpZXIoKSk7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZnJhZ21lbnRJZGVudGlmaWVyKCkpOwogICAgIH0KIAot
ICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0
cmluZygpOwogfQogCiBTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmlu
ZyYgc3RyKQpAQCAtOTM5LDcgKzk0MCw3IEBAIFN0cmluZyBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5j
ZXMoY29uc3QgU3QKIAogU3RyaW5nIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdHJp
bmcmIHN0ciwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKLSAgICBWZWN0b3I8VUNo
YXI+IHJlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKIAogICAgIENoYXJCdWZmZXIg
YnVmZmVyOwogCkBAIC05NzgsMTMgKzk3OSwxMyBAQCBTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2Vx
dWVuY2VzKGNvbnN0IFN0CiAKICAgICAgICAgLy8gQnVpbGQgdXAgdGhlIHN0cmluZyB3aXRoIHdo
YXQgd2UganVzdCBza2lwcGVkIGFuZCB3aGF0IHdlIGp1c3QgZGVjb2RlZC4KICAgICAgICAgcmVz
dWx0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpICsgZGVjb2RlZFBvc2l0aW9uLCBlbmNvZGVkUnVu
UG9zaXRpb24gLSBkZWNvZGVkUG9zaXRpb24pOwotICAgICAgICByZXN1bHQuYXBwZW5kKGRlY29k
ZWQuY2hhcmFjdGVycygpLCBkZWNvZGVkLmxlbmd0aCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChkZWNvZGVkKTsKICAgICAgICAgZGVjb2RlZFBvc2l0aW9uID0gZW5jb2RlZFJ1bkVuZDsKICAg
ICB9CiAKICAgICByZXN1bHQuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCkgKyBkZWNvZGVkUG9zaXRp
b24sIGxlbmd0aCAtIGRlY29kZWRQb3NpdGlvbik7CiAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9w
dChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogLy8gQ2F1dGlv
bjogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBib3VuZHMgY2hlY2suCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCShyZXZpc2lvbiA5Mzk4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUg
PGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEx
MCwxNCArMTExLDE0IEBAIHZvaWQgRGF0YU9iamVjdEd0azo6c2V0VVJMKGNvbnN0IEtVUkwmIHUK
ICAgICBpZiAoYWN0dWFsTGFiZWwuaXNFbXB0eSgpKQogICAgICAgICBhY3R1YWxMYWJlbCA9IHVy
bDsKIAotICAgIFZlY3RvcjxVQ2hhcj4gbWFya3VwOwotICAgIGFwcGVuZChtYXJrdXAsICI8YSBo
cmVmPVwiIik7Ci0gICAgYXBwZW5kKG1hcmt1cCwgdXJsLnN0cmluZygpKTsKLSAgICBhcHBlbmQo
bWFya3VwLCAiXCI+Iik7CisgICAgU3RyaW5nQnVpbGRlciBtYXJrdXA7CisgICAgbWFya3VwLmFw
cGVuZCgiPGEgaHJlZj1cIiIpOworICAgIG1hcmt1cC5hcHBlbmQodXJsLnN0cmluZygpKTsKKyAg
ICBtYXJrdXAuYXBwZW5kKCJcIj4iKTsKICAgICBHT3duUHRyPGdjaGFyPiBlc2NhcGVkKGdfbWFy
a3VwX2VzY2FwZV90ZXh0KGFjdHVhbExhYmVsLnV0ZjgoKS5kYXRhKCksIC0xKSk7Ci0gICAgYXBw
ZW5kKG1hcmt1cCwgU3RyaW5nOjpmcm9tVVRGOChlc2NhcGVkLmdldCgpKSk7Ci0gICAgYXBwZW5k
KG1hcmt1cCwgIjwvYT4iKTsKLSAgICBzZXRNYXJrdXAoU3RyaW5nOjphZG9wdChtYXJrdXApKTsK
KyAgICBtYXJrdXAuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoZXNjYXBlZC5nZXQoKSkpOworICAg
IG1hcmt1cC5hcHBlbmQoIjwvYT4iKTsKKyAgICBzZXRNYXJrdXAobWFya3VwLnRvU3RyaW5nKCkp
OwogfQogCiB2b2lkIERhdGFPYmplY3RHdGs6OmNsZWFyVGV4dCgpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAkocmV2aXNpb24gOTM5
ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV1RGOwpAQCAtMTk2LDcgKzE5Nyw3IEBAIFN0cmluZyBmaWxlbmFtZUZyb21IVFRQQ29u
dGVudERpc3Bvc2l0aW8KIAogU3RyaW5nIGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29u
c3QgU3RyaW5nJiBtZWRpYVR5cGUpCiB7Ci0gICAgVmVjdG9yPFVDaGFyLCA2ND4gbWltZVR5cGU7
CisgICAgU3RyaW5nQnVpbGRlciBtaW1lVHlwZTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBtZWRp
YVR5cGUubGVuZ3RoKCk7CiAgICAgbWltZVR5cGUucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0yMjQsOSArMjI1
LDkgQEAgU3RyaW5nIGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29ucwogICAgICAgICBt
aW1lVHlwZS5hcHBlbmQoYyk7CiAgICAgfQogCi0gICAgaWYgKG1pbWVUeXBlLnNpemUoKSA9PSBs
ZW5ndGgpCisgICAgaWYgKG1pbWVUeXBlLmxlbmd0aCgpID09IGxlbmd0aCkKICAgICAgICAgcmV0
dXJuIG1lZGlhVHlwZTsKLSAgICByZXR1cm4gU3RyaW5nKG1pbWVUeXBlLmRhdGEoKSwgbWltZVR5
cGUuc2l6ZSgpKTsKKyAgICByZXR1cm4gbWltZVR5cGUudG9TdHJpbmcoKTsKIH0KIAogU3RyaW5n
IGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAJKHJl
dmlzaW9uIDkzOTgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJ
Q1UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL1N0
cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2lu
Y2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIHVzaW5nIHN0ZDo6bWluOwpA
QCAtMzA4LDcgKzMwOSw3IEBAIFN0cmluZyBUZXh0Q29kZWNJQ1U6OmRlY29kZShjb25zdCBjaGFy
KiAKICAgICAKICAgICBFcnJvckNhbGxiYWNrU2V0dGVyIGNhbGxiYWNrU2V0dGVyKG1fY29udmVy
dGVySUNVLCBzdG9wT25FcnJvcik7CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAgICBT
dHJpbmdCdWlsZGVyIHJlc3VsdDsKIAogICAgIFVDaGFyIGJ1ZmZlcltDb252ZXJzaW9uQnVmZmVy
U2l6ZV07CiAgICAgVUNoYXIqIGJ1ZmZlckxpbWl0ID0gYnVmZmVyICsgQ29udmVyc2lvbkJ1ZmZl
clNpemU7CkBAIC0zMzAsNyArMzMxLDcgQEAgU3RyaW5nIFRleHRDb2RlY0lDVTo6ZGVjb2RlKGNv
bnN0IGNoYXIqIAogICAgICAgICBzYXdFcnJvciA9IHRydWU7CiAgICAgfQogCi0gICAgU3RyaW5n
IHJlc3VsdFN0cmluZyA9IFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICBTdHJpbmcgcmVzdWx0
U3RyaW5nID0gcmVzdWx0LnRvU3RyaW5nKCk7CiAKICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTQ+CiAgICAgLy8gU2ltcGxpZmllZCBDaGluZXNlIHBh
Z2VzIHVzZSB0aGUgY29kZSBBM0EwIHRvIG1lYW4gImZ1bGwtd2lkdGggc3BhY2UiLCBidXQgSUNV
IGRlY29kZXMgaXQgYXMgVStFNUU1LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0U3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRTdHJlYW0uY3BwCShyZXZpc2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDEzICs4NCw3
IEBAIFRleHRTdHJlYW0mIFRleHRTdHJlYW06Om9wZXJhdG9yPDwoZG91YmwKIAogVGV4dFN0cmVh
bSYgVGV4dFN0cmVhbTo6b3BlcmF0b3I8PChjb25zdCBjaGFyKiBzdHJpbmcpCiB7Ci0gICAgc2l6
ZV90IHN0cmluZ0xlbmd0aCA9IHN0cmxlbihzdHJpbmcpOwotICAgIHNpemVfdCB0ZXh0TGVuZ3Ro
ID0gbV90ZXh0LnNpemUoKTsKLSAgICBpZiAoc3RyaW5nTGVuZ3RoID4gbnVtZXJpY19saW1pdHM8
c2l6ZV90Pjo6bWF4KCkgLSB0ZXh0TGVuZ3RoKQotICAgICAgICBDUkFTSCgpOwotICAgIG1fdGV4
dC5ncm93KHRleHRMZW5ndGggKyBzdHJpbmdMZW5ndGgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc3RyaW5nTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fdGV4dFt0ZXh0TGVuZ3RoICsgaV0g
PSBzdHJpbmdbaV07CisgICAgbV90ZXh0LmFwcGVuZChzdHJpbmcpOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApAQCAtMTAzLDEzICs5NywxNSBAQCBUZXh0U3RyZWFtJiBUZXh0U3RyZWFtOjpvcGVy
YXRvcjw8KGNvbnN0CiAKIFRleHRTdHJlYW0mIFRleHRTdHJlYW06Om9wZXJhdG9yPDwoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXBwZW5kKG1fdGV4dCwgc3RyaW5nKTsKKyAgICBtX3Rl
eHQuYXBwZW5kKHN0cmluZyk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCiBTdHJpbmcgVGV4dFN0
cmVhbTo6cmVsZWFzZSgpCiB7Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQobV90ZXh0KTsKKyAg
ICBTdHJpbmcgcmVzdWx0ID0gbV90ZXh0LnRvU3RyaW5nKCk7CisgICAgbV90ZXh0LmNsZWFyKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uaAkocmV2aXNp
b24gOTM5ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBUZXh0U3RyZWFtX2gKIAog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgog
ICAgIFN0cmluZyByZWxlYXNlKCk7CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFVDaGFyPiBtX3Rl
eHQ7CisgICAgU3RyaW5nQnVpbGRlciBtX3RleHQ7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCShyZXZpc2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQAogI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSA8d3RmL1N0
cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIC8vIFdlIHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29tZSBwbHVnaW5zIGxpa2UgdG8gcmV0dXJu
IC0xIHRvIGluZGljYXRlIGVycm9yCkBAIC0xMzgsMjEgKzEzOSwyMSBAQCB2b2lkIFBsdWdpblN0
cmVhbTo6c3RhcnRTdHJlYW0oKQogICAgIGxvbmcgbG9uZyBleHBlY3RlZENvbnRlbnRMZW5ndGgg
PSBtX3Jlc291cmNlUmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCk7CiAKICAgICBpZiAo
bV9yZXNvdXJjZVJlc3BvbnNlLmlzSFRUUCgpKSB7Ci0gICAgICAgIFZlY3RvcjxVQ2hhcj4gc3Ry
aW5nQnVpbGRlcjsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgICAg
ICBTdHJpbmcgc2VwYXJhdG9yKCI6ICIpOwogCiAgICAgICAgIFN0cmluZyBzdGF0dXNMaW5lID0g
IkhUVFAgIiArIFN0cmluZzo6bnVtYmVyKG1fcmVzb3VyY2VSZXNwb25zZS5odHRwU3RhdHVzQ29k
ZSgpKSArICIgT0tcbiI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHN0YXR1c0xpbmUu
Y2hhcmFjdGVycygpLCBzdGF0dXNMaW5lLmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoc3RhdHVzTGluZSk7CiAKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsK
ICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3Vy
Y2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygp
LCBpdC0+Zmlyc3QubGVuZ3RoKCkpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
c2VwYXJhdG9yLmNoYXJhY3RlcnMoKSwgc2VwYXJhdG9yLmxlbmd0aCgpKTsKLSAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25k
Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7
CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0b3IpOworICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZCk7CiAgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICAgICAgfQogCi0gICAgICAgIG1faGVhZGVycyA9IFN0
cmluZzo6YWRvcHQoc3RyaW5nQnVpbGRlcikudXRmOCgpOworICAgICAgICBtX2hlYWRlcnMgPSBz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpOwogCiAgICAgICAgIC8vIElmIHRoZSBjb250
ZW50IGlzIGVuY29kZWQgKG1vc3QgbGlrZWx5IGNvbXByZXNzZWQpLCB0aGVuIGRvbid0IHNlbmQg
aXRzIGxlbmd0aCB0byB0aGUgcGx1Z2luLAogICAgICAgICAvLyB3aGljaCBpcyBvbmx5IGludGVy
ZXN0ZWQgaW4gdGhlIGRlY29kZWQgbGVuZ3RoLCBub3QgeWV0IGtub3duIGF0IHRoZSBtb21lbnQu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZp
c2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDggKzE2OCw4IEBAIHN0YXRpYyB2b2lkIGFkanVzdENo
YXJhY3RlcnNBbmRMZW5ndGhGb3IKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGh5cGhlblN0cmlu
ZyA9IHN0eWxlLT5oeXBoZW5TdHJpbmcoKTsKICAgICBjaGFyYWN0ZXJzV2l0aEh5cGhlbi5yZXNl
cnZlQ2FwYWNpdHkobGVuZ3RoICsgaHlwaGVuU3RyaW5nLmxlbmd0aCgpKTsKICAgICBjaGFyYWN0
ZXJzV2l0aEh5cGhlbi5hcHBlbmQoY2hhcmFjdGVycywgbGVuZ3RoKTsKLSAgICBjaGFyYWN0ZXJz
V2l0aEh5cGhlbi5hcHBlbmQoaHlwaGVuU3RyaW5nLmNoYXJhY3RlcnMoKSwgaHlwaGVuU3RyaW5n
Lmxlbmd0aCgpKTsKLSAgICBjaGFyYWN0ZXJzID0gY2hhcmFjdGVyc1dpdGhIeXBoZW4uZGF0YSgp
OworICAgIGNoYXJhY3RlcnNXaXRoSHlwaGVuLmFwcGVuZChoeXBoZW5TdHJpbmcpOworICAgIGNo
YXJhY3RlcnMgPSBjaGFyYWN0ZXJzV2l0aEh5cGhlbi5jaGFyYWN0ZXJzKCk7CiAgICAgbGVuZ3Ro
ICs9IGh5cGhlblN0cmluZy5sZW5ndGgoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcg
QEAKICNpbmNsdWRlICJJbmxpbmVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiIC8vIHNv
IHRleHRSZW5kZXJlcigpIGNhbiBiZSBpbmxpbmUKICNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTM0LDcgKzM1LDExIEBAIGNsYXNzIERvY3VtZW50TWFya2VyOwogCiBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBjTm9UcnVuY2F0aW9uID0gVVNIUlRfTUFYOwogY29uc3QgdW5zaWduZWQgc2hvcnQg
Y0Z1bGxUcnVuY2F0aW9uID0gVVNIUlRfTUFYIC0gMTsKLXR5cGVkZWYgVmVjdG9yPFVDaGFyLCAy
NTY+IEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbjsKKworY2xhc3MgQnVmZmVyRm9yQXBwZW5kaW5n
SHlwaGVuIDogcHVibGljIFN0cmluZ0J1aWxkZXIgeworcHVibGljOgorICAgIEJ1ZmZlckZvckFw
cGVuZGluZ0h5cGhlbigpIHsgcmVzZXJ2ZUNhcGFjaXR5KDI1Nik7IH0KK307CiAKIC8vIEhlbHBl
ciBmdW5jdGlvbnMgc2hhcmVkIGJ5IElubGluZVRleHRCb3ggLyBTVkdSb290SW5saW5lQm94CiB2
b2lkIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBDb2xvciYg
ZmlsbENvbG9yLCBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IsIGZsb2F0IHN0cm9rZVRoaWNrbmVz
cywgQ29sb3JTcGFjZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5jcHAJKHJldmlzaW9uIDkzOTgwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RJdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtMzcwLDE3ICszNzEsMTcgQEAgU3Ry
aW5nIFJlbmRlckxpc3RJdGVtOjptYXJrZXJUZXh0V2l0aFN1ZgogCiAgICAgY29uc3QgU3RyaW5n
JiBtYXJrZXJUZXh0ID0gbV9tYXJrZXItPnRleHQoKTsKICAgICBjb25zdCBTdHJpbmcgbWFya2Vy
U3VmZml4ID0gbV9tYXJrZXItPnN1ZmZpeCgpOwotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0VmVj
dG9yOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogCiAgICAgaWYgKCFtX21hcmtlci0+c3R5
bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICByZXN1bHRWZWN0b3IuYXBw
ZW5kKG1hcmtlclN1ZmZpeC5jaGFyYWN0ZXJzKCksIG1hcmtlclN1ZmZpeC5sZW5ndGgoKSk7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQobWFya2VyU3VmZml4KTsKIAotICAgIHJlc3VsdFZlY3Rvci5h
cHBlbmQobWFya2VyVGV4dC5jaGFyYWN0ZXJzKCksIG1hcmtlclRleHQubGVuZ3RoKCkpOworICAg
IHJlc3VsdC5hcHBlbmQobWFya2VyVGV4dCk7CiAKICAgICBpZiAobV9tYXJrZXItPnN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZCht
YXJrZXJTdWZmaXguY2hhcmFjdGVycygpLCBtYXJrZXJTdWZmaXgubGVuZ3RoKCkpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKG1hcmtlclN1ZmZpeCk7CiAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9w
dChyZXN1bHRWZWN0b3IpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogdm9p
ZCBSZW5kZXJMaXN0SXRlbTo6ZXhwbGljaXRWYWx1ZUNoYW5nZWQoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gOTM5ODAp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFy
YWN0ZXJOYW1lcy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMTIzLDEyICsxMjQsMTIg
QEAgc3RhdGljIFN0cmluZyB0b1N5bWJvbGljKGludCBudW1iZXIsIGNvbgogICAgIC0tbnVtYmVy
U2hhZG93OwogCiAgICAgLy8gVGhlIGFzdGVyaXNrcyBsaXN0LXN0eWxlLXR5cGUgaXMgdGhlIHdv
cnN0IGNhc2U7IHdlIHNob3cgfG51bWJlclNoYWRvd3wgYXN0ZXJpc2tzLgotICAgIFZlY3RvcjxV
Q2hhcj4gbGV0dGVyczsKKyAgICBTdHJpbmdCdWlsZGVyIGxldHRlcnM7CiAgICAgbGV0dGVycy5h
cHBlbmQoc3ltYm9sc1tudW1iZXJTaGFkb3cgJSBzeW1ib2xzU2l6ZV0pOwogICAgIHVuc2lnbmVk
IG51bVN5bWJvbHMgPSBudW1iZXJTaGFkb3cgLyBzeW1ib2xzU2l6ZTsKICAgICB3aGlsZSAobnVt
U3ltYm9scy0tKQogICAgICAgICBsZXR0ZXJzLmFwcGVuZChzeW1ib2xzW251bWJlclNoYWRvdyAl
IHN5bWJvbHNTaXplXSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQobGV0dGVycyk7CisgICAg
cmV0dXJuIGxldHRlcnMudG9TdHJpbmcoKTsKIH0KIAogc3RhdGljIFN0cmluZyB0b0FscGhhYmV0
aWMoaW50IG51bWJlciwgY29uc3QgVUNoYXIqIGFscGhhYmV0LCB1bnNpZ25lZCBhbHBoYWJldFNp
emUpCkBAIC0xMjc0LDEzICsxMjc1LDEzIEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQo
UGFpbnRJbmZvJiAKICAgICAgICAgLy8gVGV4dCBpcyBub3QgYXJiaXRyYXJ5LiBXZSBjYW4ganVk
Z2Ugd2hldGhlciBpdCdzIFJUTCBmcm9tIHRoZSBmaXJzdCBjaGFyYWN0ZXIsCiAgICAgICAgIC8v
IGFuZCB3ZSBvbmx5IG5lZWQgdG8gaGFuZGxlIHRoZSBkaXJlY3Rpb24gUmlnaHRUb0xlZnQgZm9y
IG5vdy4KICAgICAgICAgYm9vbCB0ZXh0TmVlZHNSZXZlcnNpbmcgPSBkaXJlY3Rpb24obV90ZXh0
WzBdKSA9PSBSaWdodFRvTGVmdDsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiByZXZlcnNlZFRleHQ7
CisgICAgICAgIFN0cmluZ0J1aWxkZXIgcmV2ZXJzZWRUZXh0OwogICAgICAgICBpZiAodGV4dE5l
ZWRzUmV2ZXJzaW5nKSB7CiAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gbV90ZXh0Lmxlbmd0aCgp
OwotICAgICAgICAgICAgcmV2ZXJzZWRUZXh0Lmdyb3cobGVuZ3RoKTsKLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgcmV2ZXJzZWRU
ZXh0W2xlbmd0aCAtIGkgLSAxXSA9IG1fdGV4dFtpXTsKLSAgICAgICAgICAgIHRleHRSdW4uc2V0
VGV4dChyZXZlcnNlZFRleHQuZGF0YSgpLCBsZW5ndGgpOworICAgICAgICAgICAgcmV2ZXJzZWRU
ZXh0LnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGxl
bmd0aCAtIDE7IGkgPj0gMDsgLS1pKQorICAgICAgICAgICAgICAgIHJldmVyc2VkVGV4dC5hcHBl
bmQobV90ZXh0W2ldKTsKKyAgICAgICAgICAgIHRleHRSdW4uc2V0VGV4dChyZXZlcnNlZFRleHQu
Y2hhcmFjdGVycygpLCBsZW5ndGgpOwogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgVUNoYXIg
c3VmZml4ID0gbGlzdE1hcmtlclN1ZmZpeCh0eXBlLCBtX2xpc3RJdGVtLT52YWx1ZSgpKTsKQEAg
LTE1NTIsMTggKzE1NTMsMjAgQEAgU3RyaW5nIFJlbmRlckxpc3RNYXJrZXI6OnN1ZmZpeCgpIGNv
bnN0CiAgICAgRUxpc3RTdHlsZVR5cGUgdHlwZSA9IHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKTsK
ICAgICBjb25zdCBVQ2hhciBzdWZmaXggPSBsaXN0TWFya2VyU3VmZml4KHR5cGUsIG1fbGlzdEl0
ZW0tPnZhbHVlKCkpOwogCi0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHRWZWN0b3I7Ci0gICAgcmVz
dWx0VmVjdG9yLmFwcGVuZChzdWZmaXgpOworICAgIGlmIChzdWZmaXggPT0gJyAnKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCIgIik7CiAKICAgICAvLyBJZiB0aGUgc3VmZml4IGlzIG5vdCAnICcs
IGFuIGV4dHJhIHNwYWNlIGlzIG5lZWRlZAotICAgIGlmIChzdWZmaXggIT0gJyAnKSB7Ci0gICAg
ICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBy
ZXN1bHRWZWN0b3IuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3Vs
dFZlY3Rvci5wcmVwZW5kKCcgJyk7CisgICAgVUNoYXIgZGF0YVsyXTsKKyAgICBpZiAoc3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CisgICAgICAgIGRhdGFbMF0gPSBzdWZmaXg7
CisgICAgICAgIGRhdGFbMV0gPSAnICc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGF0YVswXSA9
ICcgJzsKKyAgICAgICAgZGF0YVsxXSA9IHN1ZmZpeDsKICAgICB9CiAKLSAgICByZXR1cm4gU3Ry
aW5nOjphZG9wdChyZXN1bHRWZWN0b3IpOworICAgIHJldHVybiBTdHJpbmcoZGF0YSwgMik7CiB9
CiAKIGJvb2wgUmVuZGVyTGlzdE1hcmtlcjo6aXNJbnNpZGUoKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gOTM5
ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5T3JVbnN0
eWxlZEFwcGxlU3R5bGVTCiAKIFN0cmluZyBxdW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXMoY29u
c3QgU3RyaW5nJiBzKQogewotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OwogICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpICE9IHMubGVuZ3RoKCk7ICsraSkgewogICAgICAgICBVQ2hhciBjID0gc1tpXTsK
QEAgLTIyMiw3ICsyMjIsNyBAQCBTdHJpbmcgcXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKGNv
bnN0CiAgICAgICAgIH0KICAgICB9CiAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwotICAgIHJldHVy
biBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwog
fQogCiB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9y
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5j
ZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MRmVuY2VkLmNwcAkocmV2aXNpb24gOTM5ODApCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJNYXRoTUxPcGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKQEAg
LTY0LDEyICs2NSwxMiBAQCB2b2lkIFJlbmRlck1hdGhNTEZlbmNlZDo6dXBkYXRlRnJvbUVsZW1l
CiAgICAgCiAgICAgQXRvbWljU3RyaW5nIHNlcGFyYXRvcnMgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4oZmVuY2VkKS0+Z2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpzZXBhcmF0b3JzQXR0cik7CiAg
ICAgaWYgKCFzZXBhcmF0b3JzLmlzTnVsbCgpKSB7Ci0gICAgICAgIFZlY3RvcjxVQ2hhcj4gY2hh
cmFjdGVyczsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBjaGFyYWN0ZXJzOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNlcGFyYXRvcnMubGVuZ3RoKCk7IGkrKykgewogICAg
ICAgICAgICAgaWYgKCFpc1NwYWNlT3JOZXdsaW5lKHNlcGFyYXRvcnNbaV0pKQogICAgICAgICAg
ICAgICAgIGNoYXJhY3RlcnMuYXBwZW5kKHNlcGFyYXRvcnNbaV0pOwogICAgICAgICB9Ci0gICAg
ICAgIG1fc2VwYXJhdG9ycyA9ICFjaGFyYWN0ZXJzLnNpemUoKSA/IDAgOiBTdHJpbmdJbXBsOjpj
cmVhdGUoY2hhcmFjdGVycy5kYXRhKCkgLCBjaGFyYWN0ZXJzLnNpemUoKSk7CisgICAgICAgIG1f
c2VwYXJhdG9ycyA9ICFjaGFyYWN0ZXJzLmxlbmd0aCgpID8gMCA6IGNoYXJhY3RlcnMudG9TdHJp
bmcoKS5pbXBsKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gVGhlIHNlcGFyYXRvciBkZWZh
dWx0cyB0byBhIHNpbmdsZSBjb21tYS4KICAgICAgICAgbV9zZXBhcmF0b3JzID0gU3RyaW5nSW1w
bDo6Y3JlYXRlKCIsIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJD
b2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxE
QkNvZGluZy5jcHAJKHJldmlzaW9uIDkzOTgwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJMZXZlbERCQ29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiAj
aW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiTGV2ZWxEQlNsaWNlLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAvLyBMZXZlbERCIHN0b3JlcyBrZXkvdmFsdWUg
cGFpcnMuIEtleXMgYW5kIHZhbHVlcyBhcmUgc3RyaW5ncyBvZiBieXRlcywgbm9ybWFsbHkgb2Yg
dHlwZSBWZWN0b3I8Y2hhcj4uCiAvLwpAQCAtMjY0LDE2ICsyNjUsMTcgQEAgU3RyaW5nIGRlY29k
ZVN0cmluZyhjb25zdCBjaGFyKiBwLCBjb25zdAogICAgIEFTU0VSVCghKChlbmQgLSBwKSAlIDIp
KTsKIAogICAgIHNpemVfdCBsZW4gPSAoZW5kIC0gcCkgLyAyOwotICAgIFZlY3RvcjxVQ2hhcj4g
dmVjdG9yKGxlbik7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2Vy
dmVDYXBhY2l0eShsZW4pOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW47ICsraSkg
ewogICAgICAgICB1bnNpZ25lZCBjaGFyIGhpID0gKnArKzsKICAgICAgICAgdW5zaWduZWQgY2hh
ciBsbyA9ICpwKys7CiAKLSAgICAgICAgdmVjdG9yW2ldID0gKGhpIDw8IDgpIHwgbG87CisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KChoaSA8PCA4KSB8IGxvKSk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQodmVjdG9yKTsKKyAgICByZXR1cm4gcmVz
dWx0LnRvU3RyaW5nKCk7CiB9CiAKIFZlY3RvcjxjaGFyPiBlbmNvZGVTdHJpbmdXaXRoTGVuZ3Ro
KGNvbnN0IFN0cmluZyYgcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNw
cAkocmV2aXNpb24gOTM5ODApCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzQsNyArODc0LDcgQEAgU3RyaW5nIFhNTEh0dHBSZXF1
ZXN0OjpnZXRBbGxSZXNwb25zZUhlYQogICAgICAgICByZXR1cm4gIiI7CiAgICAgfQogCi0gICAg
VmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzcG9u
c2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBp
dCE9IGVuZDsgKytpdCkgewpAQCAtODkwLDE1ICs4OTAsMTUgQEAgU3RyaW5nIFhNTEh0dHBSZXF1
ZXN0OjpnZXRBbGxSZXNwb25zZUhlYQogICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3Qg
JiYgIWlzT25BY2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0KSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0
LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC5sZW5ndGgoKSk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCc6Jyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0
aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZCk7CiAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdccicpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnXG4nKTsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChzdHJpbmdCdWlsZGVy
KTsKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQogCiBTdHJpbmcgWE1M
SHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhG
dW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0
aW9ucy5jcHAJKHJldmlzaW9uIDkzOTgwKQorKysgU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVu
Y3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIlhQ
YXRoVXRpbC5oIgogI2luY2x1ZGUgIlhQYXRoVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIFhQYXRoIHsKQEAgLTMxOCwyNiArMzE5LDI2IEBAIFZhbHVl
IEZ1blBvc2l0aW9uOjpldmFsdWF0ZSgpIGNvbnN0CiBWYWx1ZSBGdW5JZDo6ZXZhbHVhdGUoKSBj
b25zdAogewogICAgIFZhbHVlIGEgPSBhcmcoMCktPmV2YWx1YXRlKCk7Ci0gICAgVmVjdG9yPFVD
aGFyPiBpZExpc3Q7IC8vIEEgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBJRHMKKyAgICBT
dHJpbmdCdWlsZGVyIGlkTGlzdDsgLy8gQSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIElE
cwogCiAgICAgaWYgKGEuaXNOb2RlU2V0KCkpIHsKICAgICAgICAgY29uc3QgTm9kZVNldCYgbm9k
ZXMgPSBhLnRvTm9kZVNldCgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGVz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBTdHJpbmcgc3RyID0gc3RyaW5nVmFsdWUobm9k
ZXNbaV0pOwotICAgICAgICAgICAgaWRMaXN0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpLCBzdHIu
bGVuZ3RoKCkpOworICAgICAgICAgICAgaWRMaXN0LmFwcGVuZChzdHIpOwogICAgICAgICAgICAg
aWRMaXN0LmFwcGVuZCgnICcpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3Ry
aW5nIHN0ciA9IGEudG9TdHJpbmcoKTsKLSAgICAgICAgaWRMaXN0LmFwcGVuZChzdHIuY2hhcmFj
dGVycygpLCBzdHIubGVuZ3RoKCkpOworICAgICAgICBpZExpc3QuYXBwZW5kKHN0cik7CiAgICAg
fQogICAgIAogICAgIFRyZWVTY29wZSogY29udGV4dFNjb3BlID0gZXZhbHVhdGlvbkNvbnRleHQo
KS5ub2RlLT50cmVlU2NvcGUoKTsKICAgICBOb2RlU2V0IHJlc3VsdDsKICAgICBIYXNoU2V0PE5v
ZGUqPiByZXN1bHRTZXQ7CiAKLSAgICBzaXplX3Qgc3RhcnRQb3MgPSAwOwotICAgIHNpemVfdCBs
ZW5ndGggPSBpZExpc3Quc2l6ZSgpOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSBpZExpc3QubGVuZ3RoKCk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAg
ICAgICAgd2hpbGUgKHN0YXJ0UG9zIDwgbGVuZ3RoICYmIGlzV2hpdGVzcGFjZShpZExpc3Rbc3Rh
cnRQb3NdKSkKICAgICAgICAgICAgICsrc3RhcnRQb3M7CkBAIC0zNTEsNyArMzUyLDcgQEAgVmFs
dWUgRnVuSWQ6OmV2YWx1YXRlKCkgY29uc3QKIAogICAgICAgICAvLyBJZiB0aGVyZSBhcmUgc2V2
ZXJhbCBub2RlcyB3aXRoIHRoZSBzYW1lIGlkLCBpZCgpIHNob3VsZCByZXR1cm4gdGhlIGZpcnN0
IG9uZS4KICAgICAgICAgLy8gSW4gV2ViS2l0LCBnZXRFbGVtZW50QnlJZCBiZWhhdmVzIHNvLCB0
b28sIGFsdGhvdWdoIGl0cyBiZWhhdmlvciBpbiB0aGlzIGNhc2UgaXMgZm9ybWFsbHkgdW5kZWZp
bmVkLgotICAgICAgICBOb2RlKiBub2RlID0gY29udGV4dFNjb3BlLT5nZXRFbGVtZW50QnlJZChT
dHJpbmcoJmlkTGlzdFtzdGFydFBvc10sIGVuZFBvcyAtIHN0YXJ0UG9zKSk7CisgICAgICAgIE5v
ZGUqIG5vZGUgPSBjb250ZXh0U2NvcGUtPmdldEVsZW1lbnRCeUlkKFN0cmluZyhpZExpc3QuY2hh
cmFjdGVycygpICsgc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKSk7CiAgICAgICAgIGlmIChu
b2RlICYmIHJlc3VsdFNldC5hZGQobm9kZSkuc2Vjb25kKQogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChub2RlKTsKICAgICAgICAgCkBAIC00MzYsMTUgKzQzNywxNiBAQCBWYWx1ZSBGdW5TdHJp
bmc6OmV2YWx1YXRlKCkgY29uc3QKIAogVmFsdWUgRnVuQ29uY2F0OjpldmFsdWF0ZSgpIGNvbnN0
CiB7Ci0gICAgVmVjdG9yPFVDaGFyLCAxMDI0PiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciBy
ZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgxMDI0KTsKIAogICAgIHVuc2lnbmVk
IGNvdW50ID0gYXJnQ291bnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgewogICAgICAgICBTdHJpbmcgc3RyKGFyZyhpKS0+ZXZhbHVhdGUoKS50b1N0cmluZygp
KTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkp
OworICAgICAgICByZXN1bHQuYXBwZW5kKHN0cik7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmlu
ZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3Ry
aW5nKCk7CiB9CiAKIFZhbHVlIEZ1blN0YXJ0c1dpdGg6OmV2YWx1YXRlKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCShyZXZpc2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aFV0aWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAj
aWYgRU5BQkxFKFhQQVRIKQogCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNw
YWNlIFhQYXRoIHsKQEAgLTUxLDE3ICs1MiwxNyBAQCBTdHJpbmcgc3RyaW5nVmFsdWUoTm9kZSog
bm9kZSkKICAgICAgICAgICAgIHJldHVybiBub2RlLT5ub2RlVmFsdWUoKTsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIGlmIChpc1Jvb3REb21Ob2RlKG5vZGUpIHx8IG5vZGUtPm5vZGVU
eXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFVD
aGFyPiByZXN1bHQ7CisgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAg
ICAgICAgICAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgxMDI0KTsKIAogICAgICAgICAgICAg
ICAgIGZvciAoTm9kZSogbiA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNl
TmV4dE5vZGUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBub2RlVmFsdWUgPSBu
LT5ub2RlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobm9k
ZVZhbHVlLmNoYXJhY3RlcnMoKSwgbm9kZVZhbHVlLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQobm9kZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmFk
b3B0KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwog
ICAgICAgICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xU
UHJvY2Vzc29yTGlieHNsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hT
TFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAkocmV2aXNpb24gOTM5ODApCisrKyBTb3VyY2UvV2ViQ29y
ZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsOSAr
MTY4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldFhTTFRMb2FkQ2FsbEJhY2soeAogICAgIGds
b2JhbENhY2hlZFJlc291cmNlTG9hZGVyID0gY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiB9CiAKLXN0
YXRpYyBpbnQgd3JpdGVUb1ZlY3Rvcih2b2lkKiBjb250ZXh0LCBjb25zdCBjaGFyKiBidWZmZXIs
IGludCBsZW4pCitzdGF0aWMgaW50IHdyaXRlVG9TdHJpbmdCdWlsZGVyKHZvaWQqIGNvbnRleHQs
IGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50IGxlbikKIHsKLSAgICBWZWN0b3I8VUNoYXI+JiByZXN1
bHRPdXRwdXQgPSAqc3RhdGljX2Nhc3Q8VmVjdG9yPFVDaGFyPio+KGNvbnRleHQpOworICAgIFN0
cmluZ0J1aWxkZXImIHJlc3VsdE91dHB1dCA9ICpzdGF0aWNfY2FzdDxTdHJpbmdCdWlsZGVyKj4o
Y29udGV4dCk7CiAKICAgICBpZiAoIWxlbikKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTcsOSAr
MTk3LDkgQEAgc3RhdGljIGJvb2wgc2F2ZVJlc3VsdFRvU3RyaW5nKHhtbERvY1B0cgogICAgIGlm
ICghb3V0cHV0QnVmKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBWZWN0b3I8VUNoYXI+
IHJlc3VsdFZlY3RvcjsKLSAgICBvdXRwdXRCdWYtPmNvbnRleHQgPSAmcmVzdWx0VmVjdG9yOwot
ICAgIG91dHB1dEJ1Zi0+d3JpdGVjYWxsYmFjayA9IHdyaXRlVG9WZWN0b3I7CisgICAgU3RyaW5n
QnVpbGRlciByZXN1bHRCdWlsZGVyOworICAgIG91dHB1dEJ1Zi0+Y29udGV4dCA9ICZyZXN1bHRC
dWlsZGVyOworICAgIG91dHB1dEJ1Zi0+d3JpdGVjYWxsYmFjayA9IHdyaXRlVG9TdHJpbmdCdWls
ZGVyOwogCiAgICAgaW50IHJldHZhbCA9IHhzbHRTYXZlUmVzdWx0VG8ob3V0cHV0QnVmLCByZXN1
bHREb2MsIHNoZWV0KTsKICAgICB4bWxPdXRwdXRCdWZmZXJDbG9zZShvdXRwdXRCdWYpOwpAQCAt
MjA3LDEwICsyMDcsMTAgQEAgc3RhdGljIGJvb2wgc2F2ZVJlc3VsdFRvU3RyaW5nKHhtbERvY1B0
cgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBXb3JrYXJvdW5kIGZvciA8aHR0cDov
L2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk1NjY4PjogbGlieHNsdCBhcHBl
bmRzIGFuIGV4dHJhIGxpbmUgZmVlZCB0byB0aGUgcmVzdWx0LgotICAgIGlmIChyZXN1bHRWZWN0
b3Iuc2l6ZSgpID4gMCAmJiByZXN1bHRWZWN0b3JbcmVzdWx0VmVjdG9yLnNpemUoKSAtIDFdID09
ICdcbicpCi0gICAgICAgIHJlc3VsdFZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgaWYgKHJlc3Vs
dEJ1aWxkZXIubGVuZ3RoKCkgPiAwICYmIHJlc3VsdEJ1aWxkZXJbcmVzdWx0QnVpbGRlci5sZW5n
dGgoKSAtIDFdID09ICdcbicpCisgICAgICAgIHJlc3VsdEJ1aWxkZXIucmVzaXplKHJlc3VsdEJ1
aWxkZXIubGVuZ3RoKCkgLSAxKTsKIAotICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZzo6YWRvcHQo
cmVzdWx0VmVjdG9yKTsKKyAgICByZXN1bHRTdHJpbmcgPSByZXN1bHRCdWlsZGVyLnRvU3RyaW5n
KCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5l
TWV0aG9kcy5oCShyZXZpc2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
Q2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1l
dGhvZHNfaAogI2RlZmluZSBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzX2gK
IAotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsMTkgKzM2LDE5IEBAIGlubGlu
ZSBib29sIGlzSGV4RGlnaXQoVUNoYXIgY2MpCiAgICAgcmV0dXJuIChjYyA+PSAnMCcgJiYgY2Mg
PD0gJzknKSB8fCAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykgfHwgKGNjID49ICdBJyAmJiBjYyA8
PSAnRicpOwogfQogCi1pbmxpbmUgdm9pZCB1bmNvbnN1bWVDaGFyYWN0ZXJzKFNlZ21lbnRlZFN0
cmluZyYgc291cmNlLCBjb25zdCBWZWN0b3I8VUNoYXIsIDEwPiYgY29uc3VtZWRDaGFyYWN0ZXJz
KQoraW5saW5lIHZvaWQgdW5jb25zdW1lQ2hhcmFjdGVycyhTZWdtZW50ZWRTdHJpbmcmIHNvdXJj
ZSwgY29uc3QgU3RyaW5nQnVpbGRlciYgY29uc3VtZWRDaGFyYWN0ZXJzKQogewotICAgIGlmIChj
b25zdW1lZENoYXJhY3RlcnMuc2l6ZSgpID09IDEpCisgICAgaWYgKGNvbnN1bWVkQ2hhcmFjdGVy
cy5sZW5ndGgoKSA9PSAxKQogICAgICAgICBzb3VyY2UucHVzaChjb25zdW1lZENoYXJhY3RlcnNb
MF0pOwotICAgIGVsc2UgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5zaXplKCkgPT0gMikgeworICAg
IGVsc2UgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5ndGgoKSA9PSAyKSB7CiAgICAgICAgIHNv
dXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1swXSk7CiAgICAgICAgIHNvdXJjZS5wdXNoKGNv
bnN1bWVkQ2hhcmFjdGVyc1sxXSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHNvdXJjZS5wcmVwZW5k
KFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoY29uc3VtZWRDaGFyYWN0ZXJzLmRhdGEoKSwgY29uc3Vt
ZWRDaGFyYWN0ZXJzLnNpemUoKSkpKTsKKyAgICAgICAgc291cmNlLnByZXBlbmQoU2VnbWVudGVk
U3RyaW5nKFN0cmluZyhjb25zdW1lZENoYXJhY3RlcnMuY2hhcmFjdGVycygpLCBjb25zdW1lZENo
YXJhY3RlcnMubGVuZ3RoKCkpKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBQYXJzZXJGdW5j
dGlvbnM+Ci1ib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiBz
b3VyY2UsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91
Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKK2Jvb2wgY29u
c3VtZUNoYXJhY3RlclJlZmVyZW5jZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU3RyaW5nQnVp
bGRlciYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIg
YWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpCiB7CiAgICAgQVNTRVJUKCFhZGRpdGlvbmFsQWxs
b3dlZENoYXJhY3RlciB8fCBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9PSAnIicgfHwgYWRk
aXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJ1wnJyB8fCBhZGRpdGlvbmFsQWxsb3dlZENoYXJh
Y3RlciA9PSAnPicpOwogICAgIEFTU0VSVCghbm90RW5vdWdoQ2hhcmFjdGVycyk7CkBAIC02NSw3
ICs2NSw3IEBAIGJvb2wgY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZShTZWdtZW50ZWQKICAgICB9
OwogICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlID0gSW5pdGlhbDsKICAgICBVQ2hhcjMyIHJl
c3VsdCA9IDA7Ci0gICAgVmVjdG9yPFVDaGFyLCAxMD4gY29uc3VtZWRDaGFyYWN0ZXJzOworICAg
IFN0cmluZ0J1aWxkZXIgY29uc3VtZWRDaGFyYWN0ZXJzOwogICAgIAogICAgIHdoaWxlICghc291
cmNlLmlzRW1wdHkoKSkgewogICAgICAgICBVQ2hhciBjYyA9ICpzb3VyY2U7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVu
Y2VQYXJzZXIuY3BwCShyZXZpc2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NyArNDYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKLSAgICBp
bmxpbmUgc3RhdGljIGJvb2wgY29udmVydFRvVVRGMTYoVUNoYXIzMiB2YWx1ZSwgVmVjdG9yPFVD
aGFyLCAxNj4mIGRlY29kZWRDaGFyYWN0ZXIpCisgICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnZl
cnRUb1VURjE2KFVDaGFyMzIgdmFsdWUsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRDaGFyYWN0ZXIp
CiAgICAgewogICAgICAgICBpZiAoVV9JU19CTVAodmFsdWUpKSB7CiAgICAgICAgIFVDaGFyIGNo
YXJhY3RlciA9IHN0YXRpY19jYXN0PFVDaGFyPih2YWx1ZSk7CkBAIC02MSw3ICs2MSw3IEBAIHB1
YmxpYzoKIAogICAgIGlubGluZSBzdGF0aWMgYm9vbCBhY2NlcHRNYWxmb3JtZWQoKSB7IHJldHVy
biBmYWxzZTsgfQogCi0gICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnN1bWVOYW1lZEVudGl0eShT
ZWdtZW50ZWRTdHJpbmcmLCBWZWN0b3I8VUNoYXIsIDE2PiYsIGJvb2wmLCBVQ2hhciwgVUNoYXIm
KQorICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb25zdW1lTmFtZWRFbnRpdHkoU2VnbWVudGVkU3Ry
aW5nJiwgU3RyaW5nQnVpbGRlciYsIGJvb2wmLCBVQ2hhciwgVUNoYXImKQogICAgIHsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTcwLDcg
KzcwLDcgQEAgcHVibGljOgogCiB9CiAKLWJvb2wgY29uc3VtZVhNTENoYXJhY3RlclJlZmVyZW5j
ZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRDaGFy
YWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMpCitib29sIGNvbnN1bWVYTUxDaGFyYWN0
ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29k
ZWRDaGFyYWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMpCiB7CiAgICAgcmV0dXJuIGNv
bnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2U8WE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyPihzb3Vy
Y2UsIGRlY29kZWRDaGFyYWN0ZXIsIG5vdEVub3VnaENoYXJhY3RlcnMsIDApOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlci5oCShyZXZpc2lvbiA5Mzk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotYm9vbCBjb25zdW1lWE1MQ2hh
cmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNv
ZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzKTsKK2Jvb2wgY29uc3VtZVhN
TENoYXJhY3RlclJlZmVyZW5jZShTZWdtZW50ZWRTdHJpbmcmLCBTdHJpbmdCdWlsZGVyJiBkZWNv
ZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzKTsKIAogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiA5Mzk4
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVG9rZW5pemVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKQEAgLTI1MSwxMSArMjUyLDEwIEBAIGJvb2wgWE1MVG9rZW5pemVyOjpu
ZXh0VG9rZW4oU2VnbWVudGVkU3QKICAgICBYTUxfQkVHSU5fU1RBVEUoQ2hhcmFjdGVyUmVmZXJl
bmNlU3RhcnRTdGF0ZSkgewogICAgICAgICBpZiAoY2MgPT0gJyMnKSB7CiAgICAgICAgICAgICBi
b29sIG5vdEVub3VnaENoYXJhY3RlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgIFZlY3RvcjxVQ2hh
ciwgMTY+IGRlY29kZWRDaGFyYWN0ZXI7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGRlY29k
ZWRDaGFyYWN0ZXI7CiAgICAgICAgICAgICBpZiAoY29uc3VtZVhNTENoYXJhY3RlclJlZmVyZW5j
ZShzb3VyY2UsIGRlY29kZWRDaGFyYWN0ZXIsIG5vdEVub3VnaENoYXJhY3RlcnMpKSB7Ci0gICAg
ICAgICAgICAgICAgVmVjdG9yPFVDaGFyLCAxNj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBkZWNv
ZGVkQ2hhcmFjdGVyLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZGVj
b2RlZENoYXJhY3Rlci5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgICAgICAgICBidWZmZXJD
aGFyYWN0ZXIoKml0ZXIpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBkZWNvZGVkQ2hhcmFjdGVyLmxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGJ1
ZmZlckNoYXJhY3RlcihkZWNvZGVkQ2hhcmFjdGVyW2ldKTsKICAgICAgICAgICAgICAgICBYTUxf
U1dJVENIX1RPKERhdGFTdGF0ZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vdEVub3VnaENo
YXJhY3RlcnMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRv
a2VuKCk7CkBAIC00MzcsMTIgKzQzNywxMSBAQCBib29sIFhNTFRva2VuaXplcjo6bmV4dFRva2Vu
KFNlZ21lbnRlZFN0CiAgICAgWE1MX0JFR0lOX1NUQVRFKENoYXJhY3RlclJlZmVyZW5jZUluQXR0
cmlidXRlVmFsdWVTdGF0ZSkgewogICAgICAgICBpZiAoY2MgPT0gJyMnKSB7CiAgICAgICAgICAg
ICBib29sIG5vdEVub3VnaENoYXJhY3RlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgIFZlY3RvcjxV
Q2hhciwgMTY+IGRlY29kZWRDaGFyYWN0ZXI7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGRl
Y29kZWRDaGFyYWN0ZXI7CiAgICAgICAgICAgICBzb3VyY2UucHVzaChjYyk7CiAgICAgICAgICAg
ICBpZiAoY29uc3VtZVhNTENoYXJhY3RlclJlZmVyZW5jZShzb3VyY2UsIGRlY29kZWRDaGFyYWN0
ZXIsIG5vdEVub3VnaENoYXJhY3RlcnMpKSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFVDaGFy
LCAxNj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBkZWNvZGVkQ2hhcmFjdGVyLmJlZ2luKCk7Ci0g
ICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZGVjb2RlZENoYXJhY3Rlci5lbmQoKTsgKytp
dGVyKQotICAgICAgICAgICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVl
KCppdGVyKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVjb2Rl
ZENoYXJhY3Rlci5sZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX3Rva2VuLT5h
cHBlbmRUb0F0dHJpYnV0ZVZhbHVlKGRlY29kZWRDaGFyYWN0ZXJbaV0pOwogICAgICAgICAgICAg
ICAgIFhNTF9BRFZBTkNFX1RPKEF0dHJpYnV0ZVZhbHVlUXVvdGVkU3RhdGUpOwogICAgICAgICAg
ICAgfSBlbHNlIGlmIChub3RFbm91Z2hDaGFyYWN0ZXJzKQogICAgICAgICAgICAgICAgIHJldHVy
biBoYXZlQnVmZmVyZWRDaGFyYWN0ZXJUb2tlbigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105766</attachid>
            <date>2011-08-31 03:57:17 -0700</date>
            <delta_ts>2011-09-06 21:09:49 -0700</delta_ts>
            <desc>patch v4 (small change to StringBuilder::characters())</desc>
            <filename>patch-67079e</filename>
            <type>text/plain</type>
            <size>107328</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQxNzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDgtMzEgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXBsYWNlIHVzYWdlcyBvZiBWZWN0b3I8VUNoYXI+IHdpdGggZXhpc3RpbmcgU3Ry
aW5nQnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjcwNzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0byBzdXBwb3J0IDgtYml0IHN0cmluZyBidWZmZXJzLgor
ICAgICAgICBBZGRzIFN0cmluZ0J1aWxkZXI6OmNoYXJhY3RlcnMoKSBiZWNhdXNlIHRoZSBvcmln
aW5hbCBWZWN0b3I8VUNoYXI+OjpkYXRhKCkKKyAgICAgICAgaXMgd2lkZWx5IHVzZWQuCisgICAg
ICAgIFNldHMgdGhlIG1pbmltdW0gc2l6ZSBvZiBidWZmZXIgdG8gMTYgdG8gcHJldmVudCBwb3Nz
aWJsZSBwZXJmb3JtYW5jZQorICAgICAgICByZWdyZXNzaW9uLiBGdXJ0aGVyIHBlcmZvcm1hbmNl
IGludmVzdGlnYXRpb24gc2hvdWxkIGJlIGRvbmUgaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MDg0LgorCisgICAgICAgICogd3RmL0ZvcndhcmQu
aDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdURjo6
U3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplZCk6IFNldHMgbWluaW11bSBidWZmZXIg
c2l6ZSB0byAxNiBieXRlcy4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6Om9wZXJhdG9yW10pOgorICAgICAgICAoV1RGOjpT
dHJpbmdCdWlsZGVyOjpjaGFyYWN0ZXJzKTogQWRkZWQuCisKIDIwMTEtMDgtMzAgIEFhcm9uIENv
bHdlbGwgIDxhY29sd2VsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIE1lZGlhU291cmNl
IEFQSSB0byBIVE1MTWVkaWFFbGVtZW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0ZvcndhcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Zvcndh
cmQuaAkocmV2aXNpb24gOTQxNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Zvcndh
cmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICBjbGFzcyBFbmNvZGVyOwogICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFzcyBTdHJpbmdCdWZm
ZXI7CisgICAgY2xhc3MgU3RyaW5nQnVpbGRlcjsKICAgICBjbGFzcyBTdHJpbmdJbXBsOwogfQog
CkBAIC01OSw2ICs2MCw3IEBAIHVzaW5nIFdURjo6RW5jb2RlcjsKIHVzaW5nIFdURjo6RGVjb2Rl
cjsKIHVzaW5nIFdURjo6U3RyaW5nOwogdXNpbmcgV1RGOjpTdHJpbmdCdWZmZXI7Cit1c2luZyBX
VEY6OlN0cmluZ0J1aWxkZXI7CiB1c2luZyBXVEY6OlN0cmluZ0ltcGw7CiAKICNlbmRpZiAvLyBX
VEZfRm9yd2FyZF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5n
QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuY3BwCShyZXZpc2lvbiA5NDE3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsOCBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmlt
dW1DYXBhY2l0eSA9IDE2OworCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlaWZ5U3RyaW5nKCkKIHsK
ICAgICAvLyBDaGVjayBpZiB0aGUgc3RyaW5nIGFscmVhZHkgZXhpc3RzLgpAQCAtMTI2LDEwICsx
MjgsMTAgQEAgVUNoYXIqIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5pdGlhbGl6ZQogICAgICAg
ICB9CiAKICAgICAgICAgLy8gV2UgbmVlZCB0byByZWFsbG9jIHRoZSBidWZmZXIuCi0gICAgICAg
IGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzKCksIHN0ZDo6bWF4KHJlcXVpcmVk
TGVuZ3RoLCBtX2J1ZmZlci0+bGVuZ3RoKCkgKiAyKSk7CisgICAgICAgIGFsbG9jYXRlQnVmZmVy
KG1fYnVmZmVyLT5jaGFyYWN0ZXJzKCksIHN0ZDo6bWF4KHJlcXVpcmVkTGVuZ3RoLCBzdGQ6Om1h
eChtaW5pbXVtQ2FwYWNpdHksIG1fYnVmZmVyLT5sZW5ndGgoKSAqIDIpKSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgQVNTRVJUKG1fc3RyaW5nLmxlbmd0aCgpID09IG1fbGVuZ3RoKTsKLSAgICAg
ICAgYWxsb2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFjdGVycygpLCBzdGQ6Om1heChyZXF1aXJl
ZExlbmd0aCwgcmVxdWlyZWRMZW5ndGggKiAyKSk7CisgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1f
c3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RkOjptYXgocmVxdWlyZWRMZW5ndGgsIHN0ZDo6bWF4KG1p
bmltdW1DYXBhY2l0eSwgbV9sZW5ndGggKiAyKSkpOwogICAgIH0KIAogICAgIFVDaGFyKiByZXN1
bHQgPSBtX2J1ZmZlckNoYXJhY3RlcnMgKyBtX2xlbmd0aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAkocmV2aXNpb24gOTQxNzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsMTAgKzEwOCwxNyBAQCBwdWJsaWM6CiAgICAgVUNoYXIgb3BlcmF0b3Jb
XSh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7
CisgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzKClbaV07CisgICAgfQorCisgICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2xlbmd0aCkKKyAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIG1fc3RyaW5nW2ldOworICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5n
LmNoYXJhY3RlcnMoKTsKICAgICAgICAgQVNTRVJUKG1fYnVmZmVyKTsKLSAgICAgICAgcmV0dXJu
IG1fYnVmZmVyLT5jaGFyYWN0ZXJzKClbaV07CisgICAgICAgIHJldHVybiBtX2J1ZmZlci0+Y2hh
cmFjdGVycygpOwogICAgIH0KIAogICAgIHZvaWQgY2xlYXIoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gOTQxNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNjQgQEAKKzIwMTEtMDgtMzEgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXBsYWNlIHVzYWdlcyBvZiBWZWN0b3I8VUNoYXI+
IHdpdGggZXhpc3RpbmcgU3RyaW5nQnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcwNzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEFsbCBleGlzdGluZyB1bml0IHRlc3Rz
IGFuZCBsYXlvdXQgdGVzdHMgc2hvdWxkIHJ1bgorICAgICAgICBhcyBiZWZvcmUuCisKKyAgICAg
ICAgKiBjc3MvQ1NTT01VdGlscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRDaGFyYWN0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplQ2hhcmFjdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNlcmlhbGl6ZUNoYXJhY3RlckFzQ29kZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OnNlcmlhbGl6ZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplU3RyaW5n
KToKKyAgICAgICAgKiBjc3MvQ1NTT01VdGlscy5oOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRp
dmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4
dCk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVT
bG93Q2FzZSk6CisgICAgICAgICogY3NzL0NTU1dyYXBTaGFwZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTV3JhcFNoYXBlUmVjdDo6Y3NzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NX
cmFwU2hhcGVDaXJjbGU6OmNzc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTV3JhcFNoYXBl
RWxsaXBzZTo6Y3NzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NXcmFwU2hhcGVQb2x5Z29u
Ojpjc3NUZXh0KToKKyAgICAgICAgKiBlZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0KToKKyAgICAg
ICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFw
cGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJr
dXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRFbmRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11
bGF0b3I6OmNvbmNhdGVuYXRlTWFya3VwKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTmFtZXNwYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmREb2N1bWVudFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kT3BlblRhZyk6CisgICAgICAgIChX
ZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2xvc2VUYWcpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cCk6CisgICAgICAgIChX
ZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kTWFya3VwKToKKyAgICAgICAgKiBl
ZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRo
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdp
dGhTdHlsZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZFN0eWxlTm9kZU9wZW5UYWcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3Vw
QWNjdW11bGF0b3I6OnRha2VSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnVybFRvTWFya3Vw
KToKKyAgICAgICAgKiBodG1sL0RPTVRva2VuTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
T01Ub2tlbkxpc3Q6OnJlbW92ZVRva2VuKToKKyAgICAgICAgKiBodG1sL0hUTUxGb250RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUZvbnRTaXplKToKKyAgICAgICAgKiBodG1s
L0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzdHJpcHBlZFBsYWNlaG9sZGVyKToKKyAgICAgICAgKiBo
dG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cmVsb2FkU2Nhbm5lcjo6ZW1pdFJ1bGUpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0NTU1ByZWxv
YWRTY2FubmVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lSFRNTEVudGl0eSk6CisgICAgICAgICogaHRtbC9w
YXJzZXIvSFRNTEVudGl0eVBhcnNlci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJz
ZXJJZGlvbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIVE1MSW50ZWdlcik6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZUhUTUxOb25OZWdhdGl2ZUludGVnZXIpOgorICAgICAgICAqIGh0
bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2Vu
aXplcjo6cHJvY2Vzc0VudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpu
ZXh0VG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5C
dWZmZXI6OmdpdmVSZW1haW5pbmdUbyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxk
ZXI6OmRlZmF1bHRGb3JJblRhYmxlVGV4dCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6dG9KU09OU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclZhbHVlOjp3cml0ZUpTT04pOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0cmluZzo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVj
dDo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFycmF5Ojp3cml0ZUpT
T04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKiBs
b2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUFjY2Vzc0NvbnRyb2xQcmVmbGlnaHRSZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OnNldFRvb2xUaXApOgorICAgICAgICAqIHBhZ2Uv
UGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplck1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXJNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxp
emVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMpOgorICAgICAgICAq
IHBhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW46OnRvU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OktVUkw6OmRlcHJlY2F0ZWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2Rl
VVJMRXNjYXBlU2VxdWVuY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW5rSGFzaC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Y2xlYW5TbGFzaERvdERvdFNsYXNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VE
b3VibGVTbGFzaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFuU2xhc2hEb3RTbGFzaGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmNsZWFuUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpdGVk
VVJMSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnZpc2l0ZWRVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6dmlzaXRlZExpbmtIYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW5rSGFzaC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFPYmplY3RHdGs6OnNldFVSTCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9I
VFRQUGFyc2Vycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0TUlNRVR5cGVGcm9tTWVk
aWFUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9UZXh0U3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRTdHJlYW06Om9wZXJh
dG9yPDwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFN0cmVhbTo6cmVsZWFzZSk6CisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmg6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5T
dHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSk6
CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YWRqdXN0Q2hhcmFjdGVyc0FuZExlbmd0aEZvckh5cGhlbik6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlckZvckFwcGVuZGlu
Z0h5cGhlbjo6QnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGlzdEl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06Om1h
cmtlclRleHRXaXRoU3VmZml4KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1N5bWJvbGljKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RN
YXJrZXI6OnN1ZmZpeCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxGZW5jZWQ6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2
ZWxEQkNvZGluZzo6ZGVjb2RlU3RyaW5nKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVh
ZGVycyk6CisgICAgICAgICogeG1sL1hQYXRoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpGdW5JZDo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1
bkNvbmNhdDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHhtbC9YUGF0aFV0aWwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nl
c3NvckxpYnhzbHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVUb1N0cmluZ0J1aWxkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2F2ZVJlc3VsdFRvU3RyaW5nKToKKyAgICAgICAgKiB4bWwv
cGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaDoKKyAgICAgICAg
KFdlYkNvcmU6OnVuY29uc3VtZUNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3Vt
ZUNoYXJhY3RlclJlZmVyZW5jZSk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZVhNTENoYXJhY3Rl
clJlZmVyZW5jZSk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQ
YXJzZXIuaDoKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6Om5leHRUb2tlbik6CisKIDIwMTEtMDgtMzAgIEFsZXhh
bmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBFYXJseSByZXR1
cm4gaW4gQ1NTUHJpbWl0aXZlVmFsdWU6OmdldERvdWJsZVZhbHVlSW50ZXJuYWwoKSBvbWl0cyBh
ZGRpdGlvbmFsIGludmFsaWQgZW51bXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NPTVV0
aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTT01VdGlscy5jcHAJ
KHJldmlzaW9uIDk0MTcxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU09NVXRpbHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTEgQEAKICNpbmNsdWRlICJDU1NPTVV0aWxzLmgi
CiAKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lkIGFwcGVuZENo
YXJhY3RlcihVQ2hhcjMyIGMsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKQorc3RhdGljIHZvaWQg
YXBwZW5kQ2hhcmFjdGVyKFVDaGFyMzIgYywgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pCiB7CiAg
ICAgaWYgKFUxNl9MRU5HVEgoYykgPT0gMSkKICAgICAgICAgYXBwZW5kVG8uYXBwZW5kKHN0YXRp
Y19jYXN0PFVDaGFyPihjKSk7CkBAIC00NSwxMyArNDYsMTMgQEAgc3RhdGljIHZvaWQgYXBwZW5k
Q2hhcmFjdGVyKFVDaGFyMzIgYywgVgogICAgIH0KIH0KIAotdm9pZCBzZXJpYWxpemVDaGFyYWN0
ZXIoVUNoYXIzMiBjLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbykKK3ZvaWQgc2VyaWFsaXplQ2hh
cmFjdGVyKFVDaGFyMzIgYywgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pCiB7CiAgICAgYXBwZW5k
VG8uYXBwZW5kKCdcXCcpOwogICAgIGFwcGVuZENoYXJhY3RlcihjLCBhcHBlbmRUbyk7CiB9CiAK
LXZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIzMiBjLCBWZWN0b3I8VUNo
YXI+JiBhcHBlbmRUbykKK3ZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIz
MiBjLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbykKIHsKICAgICBhcHBlbmRUby5hcHBlbmQoJ1xc
Jyk7CiAgICAgYXBwZW5kVW5zaWduZWRBc0hleChjLCBhcHBlbmRUbywgTG93ZXJjYXNlKTsKQEAg
LTYwLDEyICs2MSwxMiBAQCB2b2lkIHNlcmlhbGl6ZUNoYXJhY3RlckFzQ29kZVBvaW50KFVDaGFy
CiAKIHZvaWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFN0
cmluZyYgYXBwZW5kVG8pCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBhZGRlbmQ7CisgICAgU3RyaW5n
QnVpbGRlciBhZGRlbmQ7CiAgICAgc2VyaWFsaXplSWRlbnRpZmllcihpZGVudGlmaWVyLCBhZGRl
bmQpOwotICAgIGFwcGVuZFRvLmFwcGVuZChTdHJpbmc6OmFkb3B0KGFkZGVuZCkpOworICAgIGFw
cGVuZFRvLmFwcGVuZChhZGRlbmQudG9TdHJpbmcoKSk7CiB9CiAKLXZvaWQgc2VyaWFsaXplSWRl
bnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRv
KQordm9pZCBzZXJpYWxpemVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgU3Ry
aW5nQnVpbGRlciYgYXBwZW5kVG8pCiB7CiAgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKICAgICBi
b29sIGlzU2Vjb25kID0gZmFsc2U7CkBAIC05NiwxMiArOTcsMTIgQEAgdm9pZCBzZXJpYWxpemVJ
ZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaQogCiB2b2lkIHNlcmlhbGl6ZVN0cmluZyhjb25zdCBT
dHJpbmcmIHN0cmluZywgU3RyaW5nJiBhcHBlbmRUbykKIHsKLSAgICBWZWN0b3I8VUNoYXI+IGFk
ZGVuZDsKKyAgICBTdHJpbmdCdWlsZGVyIGFkZGVuZDsKICAgICBzZXJpYWxpemVTdHJpbmcoc3Ry
aW5nLCBhZGRlbmQpOwotICAgIGFwcGVuZFRvLmFwcGVuZChTdHJpbmc6OmFkb3B0KGFkZGVuZCkp
OworICAgIGFwcGVuZFRvLmFwcGVuZChhZGRlbmQudG9TdHJpbmcoKSk7CiB9CiAKLXZvaWQgc2Vy
aWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRU
bykKK3ZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBTdHJpbmdCdWls
ZGVyJiBhcHBlbmRUbykKIHsKICAgICBhcHBlbmRUby5hcHBlbmQoJ1wiJyk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NPTVV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU09NVXRpbHMuaAkocmV2aXNpb24gOTQxNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTT01VdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogLy8gQ29tbW9uIHNlcmlhbGl6aW5nIG1ldGhvZHMuIFNlZTogaHR0
cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXMKLXZv
aWQgc2VyaWFsaXplQ2hhcmFjdGVyKFVDaGFyMzIsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKTsK
LXZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIzMiwgVmVjdG9yPFVDaGFy
PiYgYXBwZW5kVG8pOwordm9pZCBzZXJpYWxpemVDaGFyYWN0ZXIoVUNoYXIzMiwgU3RyaW5nQnVp
bGRlciYgYXBwZW5kVG8pOwordm9pZCBzZXJpYWxpemVDaGFyYWN0ZXJBc0NvZGVQb2ludChVQ2hh
cjMyLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbyk7CiB2b2lkIHNlcmlhbGl6ZUlkZW50aWZpZXIo
Y29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBTdHJpbmcmIGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFs
aXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFZlY3RvcjxVQ2hhcj4mIGFw
cGVuZFRvKTsKLXZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBTdHJp
bmcmIGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbyk7Cit2b2lkIHNlcmlhbGl6ZUlkZW50aWZpZXIoY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbyk7Cit2b2lkIHNl
cmlhbGl6ZVN0cmluZyhjb25zdCBTdHJpbmcmLCBTdHJpbmcmIGFwcGVuZFRvKTsKK3ZvaWQgc2Vy
aWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYsIFN0cmluZ0J1aWxkZXImIGFwcGVuZFRvKTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJp
bWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDk0MTcxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ByaW1pdGl2ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICNpbmNs
dWRlICJEYXNoYm9hcmRSZWdpb24uaCIKQEAgLTc1NywxNCArNzU4LDE0IEBAIFN0cmluZyBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCgpIGNvbnMKICAgICAgICAgY2FzZSBDU1NfQVRUUjogewog
ICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGF0dHJQYXJlbiwg
KCJhdHRyKCIpKTsKIAotICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAg
ICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg2ICsgbV92YWx1ZS5zdHJpbmctPmxl
bmd0aCgpKTsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgICAgICAgICAg
cmVzdWx0LnJlc2VydmVDYXBhY2l0eSg2ICsgbV92YWx1ZS5zdHJpbmctPmxlbmd0aCgpKTsKIAot
ICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgYXR0clBhcmVuKTsKLSAgICAgICAgICAgIGFwcGVu
ZChyZXN1bHQsIG1fdmFsdWUuc3RyaW5nKTsKLSAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoJyknKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXR0clBhcmVuKTsKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQobV92YWx1ZS5zdHJpbmcpOworICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnKScpOwogCi0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjphZG9wdChyZXN1bHQp
OworICAgICAgICAgICAgdGV4dCA9IHJlc3VsdC50b1N0cmluZygpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NfQ09VTlRFUl9OQU1FOgpAQCAtNzgyLDIz
ICs3ODMsMjMgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29ucwogICAg
ICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHJlY3RQYXJlbiwgKCJy
ZWN0KCIpKTsKIAogICAgICAgICAgICAgUmVjdCogcmVjdFZhbCA9IGdldFJlY3RWYWx1ZSgpOwot
ICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCByZWN0
UGFyZW4pOworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgICAgICAgICBy
ZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDMyKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVj
dFBhcmVuKTsKIAotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgcmVjdFZhbC0+dG9wKCktPmNz
c1RleHQoKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlY3RWYWwtPnRvcCgpLT5jc3NU
ZXh0KCkpOwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwogCi0gICAgICAgICAgICBh
cHBlbmQocmVzdWx0LCByZWN0VmFsLT5yaWdodCgpLT5jc3NUZXh0KCkpOworICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChyZWN0VmFsLT5yaWdodCgpLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICcpOwogCi0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCByZWN0VmFs
LT5ib3R0b20oKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjdFZh
bC0+Ym90dG9tKCktPmNzc1RleHQoKSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7
CiAKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlY3RWYWwtPmxlZnQoKS0+Y3NzVGV4dCgp
KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjdFZhbC0+bGVmdCgpLT5jc3NUZXh0KCkp
OwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwogCi0gICAgICAgICAgICB0ZXh0ID0g
U3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgICAgICAgICAgdGV4dCA9IHJlc3VsdC50b1N0cmlu
ZygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NfUkdC
Q09MT1I6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTV3JhcFNoYXBlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1dyYXBTaGFwZXMuY3BwCShyZXZpc2lvbiA5
NDE3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NXcmFwU2hhcGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsOCBAQAogCiAjaW5jbHVkZSAiQ1NTV3JhcFNoYXBlcy5oIgogCisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCiB1c2luZyBuYW1lc3BhY2UgV1RG
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MCwzNCArNDIsMzQgQEAgU3RyaW5nIENTU1dy
YXBTaGFwZVJlY3Q6OmNzc1RleHQoKSBjb25zdAogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29u
c3QgU3RyaW5nLCByZWN0UGFyZW4sICgicmVjdCgiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIGNvbW1hLCAoIiwgIikpOwogICAgIAotICAgIFZlY3RvcjxVQ2hhcj4g
cmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMyKTsKLSAgICBhcHBl
bmQocmVzdWx0LCByZWN0UGFyZW4pOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJl
c3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOworICAgIHJlc3VsdC5hcHBlbmQocmVjdFBhcmVuKTsK
IAotICAgIGFwcGVuZChyZXN1bHQsIG1fbGVmdC0+Y3NzVGV4dCgpKTsKLSAgICBhcHBlbmQocmVz
dWx0LCBjb21tYSk7CisgICAgcmVzdWx0LmFwcGVuZChtX2xlZnQtPmNzc1RleHQoKSk7CisgICAg
cmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3RvcC0+Y3NzVGV4
dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7CisgICAgcmVzdWx0LmFwcGVuZChtX3Rv
cC0+Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKIAotICAgIGFwcGVuZChy
ZXN1bHQsIG1fd2lkdGgtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOwor
ICAgIHJlc3VsdC5hcHBlbmQobV93aWR0aC0+Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5k
KGNvbW1hKTsKIAotICAgIGFwcGVuZChyZXN1bHQsIG1faGVpZ2h0LT5jc3NUZXh0KCkpOworICAg
IHJlc3VsdC5hcHBlbmQobV9oZWlnaHQtPmNzc1RleHQoKSk7CiAgICAgCiAgICAgaWYgKG1fcmFk
aXVzWC5nZXQoKSkgewotICAgICAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7Ci0gICAgICAgIGFw
cGVuZChyZXN1bHQsIG1fcmFkaXVzWC0+Y3NzVGV4dCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChjb21tYSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobV9yYWRpdXNYLT5jc3NUZXh0KCkpOwog
CiAgICAgICAgIGlmIChtX3JhZGl1c1kuZ2V0KCkpIHsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1
bHQsIGNvbW1hKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIG1fcmFkaXVzWS0+Y3NzVGV4
dCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChtX3JhZGl1c1ktPmNzc1RleHQoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
CiAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwogICAgICAgICAgICAgCi0gICAgcmV0dXJuIFN0cmlu
Zzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFN0
cmluZyBDU1NXcmFwU2hhcGVDaXJjbGU6OmNzc1RleHQoKSBjb25zdApAQCAtNzUsMjAgKzc3LDIw
IEBAIFN0cmluZyBDU1NXcmFwU2hhcGVDaXJjbGU6OmNzc1RleHQoKSBjb24KICAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgY2lyY2xlUGFyZW4sICgiY2lyY2xlKCIpKTsKICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgY29tbWEsICgiLCAiKSk7CiAgICAg
Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoMzIpOwotICAgIGFwcGVuZChyZXN1bHQsIGNpcmNsZVBhcmVuKTsKKyAgICBTdHJpbmdC
dWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDMyKTsKKyAgICByZXN1
bHQuYXBwZW5kKGNpcmNsZVBhcmVuKTsKIAotICAgIGFwcGVuZChyZXN1bHQsIG1fbGVmdC0+Y3Nz
VGV4dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7CisgICAgcmVzdWx0LmFwcGVuZCht
X2xlZnQtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBl
bmQocmVzdWx0LCBtX3RvcC0+Y3NzVGV4dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7
CisgICAgcmVzdWx0LmFwcGVuZChtX3RvcC0+Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5k
KGNvbW1hKTsKIAotICAgIGFwcGVuZChyZXN1bHQsIG1fcmFkaXVzLT5jc3NUZXh0KCkpOworICAg
IHJlc3VsdC5hcHBlbmQobV9yYWRpdXMtPmNzc1RleHQoKSk7CiAgICAgcmVzdWx0LmFwcGVuZCgn
KScpOwogICAgICAgICAgICAgCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBDU1NXcmFwU2hhcGVFbGxp
cHNlOjpjc3NUZXh0KCkgY29uc3QKQEAgLTk2LDIzICs5OCwyMyBAQCBTdHJpbmcgQ1NTV3JhcFNo
YXBlRWxsaXBzZTo6Y3NzVGV4dCgpIGNvCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBT
dHJpbmcsIGVsbGlwc2VQYXJlbiwgKCJlbGxpcHNlKCIpKTsKICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IFN0cmluZywgY29tbWEsICgiLCAiKSk7CiAgICAgCi0gICAgVmVjdG9yPFVDaGFy
PiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMzIpOwotICAgIGFw
cGVuZChyZXN1bHQsIGVsbGlwc2VQYXJlbik7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Cisg
ICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgzMik7CisgICAgcmVzdWx0LmFwcGVuZChlbGxpcHNl
UGFyZW4pOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgbV9sZWZ0LT5jc3NUZXh0KCkpOwotICAgIGFw
cGVuZChyZXN1bHQsIGNvbW1hKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fbGVmdC0+Y3NzVGV4dCgp
KTsKKyAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKIAotICAgIGFwcGVuZChyZXN1bHQsIG1fdG9w
LT5jc3NUZXh0KCkpOwotICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hKTsKKyAgICByZXN1bHQuYXBw
ZW5kKG1fdG9wLT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwogCi0gICAg
YXBwZW5kKHJlc3VsdCwgbV9yYWRpdXNYLT5jc3NUZXh0KCkpOwotICAgIGFwcGVuZChyZXN1bHQs
IGNvbW1hKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fcmFkaXVzWC0+Y3NzVGV4dCgpKTsKKyAgICBy
ZXN1bHQuYXBwZW5kKGNvbW1hKTsKIAotICAgIGFwcGVuZChyZXN1bHQsIG1fcmFkaXVzWS0+Y3Nz
VGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fcmFkaXVzWS0+Y3NzVGV4dCgpKTsKICAgICBy
ZXN1bHQuYXBwZW5kKCcpJyk7CiAgICAgICAgICAgICAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9w
dChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogU3RyaW5nIENT
U1dyYXBTaGFwZVBvbHlnb246OmNzc1RleHQoKSBjb25zdApAQCAtMTIxLDI2ICsxMjMsMjYgQEAg
U3RyaW5nIENTU1dyYXBTaGFwZVBvbHlnb246OmNzc1RleHQoKSBjbwogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgU3RyaW5nLCBwb2x5Z29uUGFyZW5Ob25aZXJvLCAoInBvbHlnb24obm9u
emVybywgIikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBjb21tYSwg
KCIsICIpKTsKICAgICAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAg
cmVzdWx0LnJlc2VydmVDYXBhY2l0eSgzMik7CiAgICAgaWYgKG1fd2luZFJ1bGUgPT0gUlVMRV9F
VkVOT0REKQotICAgICAgICBhcHBlbmQocmVzdWx0LCBwb2x5Z29uUGFyZW5FdmVuT2RkKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChwb2x5Z29uUGFyZW5FdmVuT2RkKTsKICAgICBlbHNlCi0gICAg
ICAgIGFwcGVuZChyZXN1bHQsIHBvbHlnb25QYXJlbk5vblplcm8pOworICAgICAgICByZXN1bHQu
YXBwZW5kKHBvbHlnb25QYXJlbk5vblplcm8pOwogCiAgICAgQVNTRVJUKCEobV92YWx1ZXMuc2l6
ZSgpICUgMikpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFsdWVzLnNpemUo
KTsgaSArPSAyKSB7CiAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICcpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBtX3ZhbHVlcy5hdChpKS0+Y3NzVGV4dCgpKTsK
LSAgICAgICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBt
X3ZhbHVlcy5hdChpICsgMSktPmNzc1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobV92
YWx1ZXMuYXQoaSktPmNzc1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKG1fdmFsdWVzLmF0KGkgKyAxKS0+Y3NzVGV4dCgpKTsKICAg
ICB9CiAgICAgCiAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwogICAgICAgICAgICAgCi0gICAgcmV0
dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSFRNTEludGVyY2hhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAJKHJldmlzaW9uIDk0MTcxKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNTcsNyArNTgsNyBAQCBTdHJpbmcgY29udmVydEhUTUxUZXh0VG9J
bnRlcmNoYW5nZUZvcm1hCiAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVy
ZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpCiAgICAgICAgIHJldHVybiBpbjsKIAot
ICAgIFZlY3RvcjxVQ2hhcj4gczsKKyAgICBTdHJpbmdCdWlsZGVyIHM7CiAKICAgICB1bnNpZ25l
ZCBpID0gMDsKICAgICB1bnNpZ25lZCBjb25zdW1lZCA9IDA7CkBAIC03NCwyOCArNzUsMjggQEAg
U3RyaW5nIGNvbnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYQogICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGFkZCA9IGNvdW50ICUgMzsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFkZCkg
ewogICAgICAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmQocywgY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHMuYXBwZW5kKCcgJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQocywgY29u
dmVydGVkU3BhY2VTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChj
b252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCA9IDM7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCB8fCBpICsgMSA9PSBpbi5s
ZW5ndGgoKSkgLy8gYXQgc3RhcnQgb3IgZW5kIG9mIHN0cmluZwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFw
cGVuZCgnICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgc3RhcnQgb2Ygc3RyaW5nCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKGNvbnZlcnRlZFNwYWNlU3RyaW5n
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKCcgJyk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgKyAyID09IGluLmxlbmd0aCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IGVuZCBvZiBzdHJpbmcKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmQocywgY29udmVydGVkU3BhY2VTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKGNvbnZlcnRlZFNwYWNlU3Ry
aW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKGNvbnZlcnRlZFNw
YWNlU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmQocywgY29udmVydGVkU3BhY2VTdHJpbmcoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmco
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoJyAnKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA3
LDcgKzEwOCw3IEBAIFN0cmluZyBjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWEKICAg
ICAgICAgaSArPSBjb25zdW1lZDsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChz
KTsKKyAgICByZXR1cm4gcy50b1N0cmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAko
cmV2aXNpb24gOTQxNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTMgKzM3LDE0IEBACiAjaW5jbHVkZSAiS1VS
TC5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlhNTE5T
TmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi12b2lkIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNp
bmdFbnRpdGllcyhWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFVDaGFyKiBjb250ZW50LCBzaXpl
X3QgbGVuZ3RoLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spCit2b2lkIGFwcGVuZENoYXJhY3RlcnNS
ZXBsYWNpbmdFbnRpdGllcyhTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFVDaGFyKiBjb250ZW50
LCBzaXplX3QgbGVuZ3RoLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spCiB7CiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGFtcFJlZmVyZW5jZSwgKCImYW1wOyIpKTsKICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgbHRSZWZlcmVuY2UsICgiJmx0OyIpKTsK
QEAgLTY0LDcgKzY1LDcgQEAgdm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMo
VgogICAgICAgICBmb3IgKHNpemVfdCBtID0gMDsgbSA8IFdURl9BUlJBWV9MRU5HVEgoZW50aXR5
TWFwcyk7ICsrbSkgewogICAgICAgICAgICAgaWYgKGNvbnRlbnRbaV0gPT0gZW50aXR5TWFwc1tt
XS5lbnRpdHkgJiYgZW50aXR5TWFwc1ttXS5tYXNrICYgZW50aXR5TWFzaykgewogICAgICAgICAg
ICAgICAgIG91dC5hcHBlbmQoY29udGVudCArIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5LCBpIC0g
cG9zaXRpb25BZnRlckxhc3RFbnRpdHkpOwotICAgICAgICAgICAgICAgIGFwcGVuZChvdXQsIGVu
dGl0eU1hcHNbbV0ucmVmZXJlbmNlKTsKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKGVudGl0
eU1hcHNbbV0ucmVmZXJlbmNlKTsKICAgICAgICAgICAgICAgICBwb3NpdGlvbkFmdGVyTGFzdEVu
dGl0eSA9IGkgKyAxOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAt
ODYsMTEgKzg3LDExIEBAIE1hcmt1cEFjY3VtdWxhdG9yOjp+TWFya3VwQWNjdW11bGF0b3IoKQog
CiBTdHJpbmcgTWFya3VwQWNjdW11bGF0b3I6OnNlcmlhbGl6ZU5vZGVzKE5vZGUqIG5vZGUsIE5v
ZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5KQogewotICAgIFZlY3Rv
cjxVQ2hhcj4gb3V0OworICAgIFN0cmluZ0J1aWxkZXIgb3V0OwogICAgIHNlcmlhbGl6ZU5vZGVz
V2l0aE5hbWVzcGFjZXMobm9kZSwgbm9kZVRvU2tpcCwgY2hpbGRyZW5Pbmx5LCAwKTsKLSAgICBv
dXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgoKSk7CisgICAgb3V0LnJlc2VydmVDYXBh
Y2l0eShsZW5ndGgoKSk7CiAgICAgY29uY2F0ZW5hdGVNYXJrdXAob3V0KTsKLSAgICByZXR1cm4g
U3RyaW5nOjphZG9wdChvdXQpOworICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKIH0KIAogdm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyhOb2RlKiBu
b2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25seSwgY29uc3Qg
TmFtZXNwYWNlcyogbmFtZXNwYWNlcykKQEAgLTEzOCwxOCArMTM5LDE4IEBAIHZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFN0cmluZyhjb24KIAogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kU3RhcnRUYWcoTm9kZSogbm9kZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKLSAg
ICBWZWN0b3I8VUNoYXI+IG1hcmt1cDsKKyAgICBTdHJpbmdCdWlsZGVyIG1hcmt1cDsKICAgICBh
cHBlbmRTdGFydE1hcmt1cChtYXJrdXAsIG5vZGUsIG5hbWVzcGFjZXMpOwotICAgIGFwcGVuZFN0
cmluZyhTdHJpbmc6OmFkb3B0KG1hcmt1cCkpOworICAgIGFwcGVuZFN0cmluZyhtYXJrdXAudG9T
dHJpbmcoKSk7CiAgICAgaWYgKG1fbm9kZXMpCiAgICAgICAgIG1fbm9kZXMtPmFwcGVuZChub2Rl
KTsKIH0KIAogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKE5vZGUqIG5vZGUp
CiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7CisgICAgU3RyaW5nQnVpbGRlciBtYXJrdXA7
CiAgICAgYXBwZW5kRW5kTWFya3VwKG1hcmt1cCwgbm9kZSk7Ci0gICAgYXBwZW5kU3RyaW5nKFN0
cmluZzo6YWRvcHQobWFya3VwKSk7CisgICAgYXBwZW5kU3RyaW5nKG1hcmt1cC50b1N0cmluZygp
KTsKIH0KIAogc2l6ZV90IE1hcmt1cEFjY3VtdWxhdG9yOjp0b3RhbExlbmd0aChjb25zdCBWZWN0
b3I8U3RyaW5nPiYgc3RyaW5ncykKQEAgLTE2MSwyNSArMTYyLDI1IEBAIHNpemVfdCBNYXJrdXBB
Y2N1bXVsYXRvcjo6dG90YWxMZW5ndGgoY28KIH0KIAogLy8gRklYTUU6IFRoaXMgaXMgYSB2ZXJ5
IGluZWZmaWNpZW50IHdheSBvZiBhY2N1bXVsYXRpbmcgdGhlIG1hcmt1cC4KLS8vIFdlJ3JlIGNv
bnZlcnRpbmcgcmVzdWx0cyBvZiBhcHBlbmRTdGFydE1hcmt1cCBhbmQgYXBwZW5kRW5kTWFya3Vw
IGZyb20gVmVjdG9yPFVDaGFyPiB0byBTdHJpbmcKLS8vIGFuZCB0aGVuIGJhY2sgdG8gVmVjdG9y
PFVDaGFyPiBhbmQgYWdhaW4gdG8gU3RyaW5nIGhlcmUuCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9y
Ojpjb25jYXRlbmF0ZU1hcmt1cChWZWN0b3I8VUNoYXI+JiBvdXQpCisvLyBXZSdyZSBjb252ZXJ0
aW5nIHJlc3VsdHMgb2YgYXBwZW5kU3RhcnRNYXJrdXAgYW5kIGFwcGVuZEVuZE1hcmt1cCBmcm9t
IFN0cmluZ0J1aWxkZXIgdG8gU3RyaW5nCisvLyBhbmQgdGhlbiBiYWNrIHRvIFN0cmluZ0J1aWxk
ZXIgYW5kIGFnYWluIHRvIFN0cmluZyBoZXJlLgordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6Y29u
Y2F0ZW5hdGVNYXJrdXAoU3RyaW5nQnVpbGRlciYgb3V0KQogewogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9zdWNjZWVkaW5nTWFya3VwLnNpemUoKTsgKytpKQotICAgICAgICBhcHBlbmQo
b3V0LCBtX3N1Y2NlZWRpbmdNYXJrdXBbaV0pOworICAgICAgICBvdXQuYXBwZW5kKG1fc3VjY2Vl
ZGluZ01hcmt1cFtpXSk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJp
YnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUs
IGJvb2wgZG9jdW1lbnRJc0hUTUwpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRy
aWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRl
LCBib29sIGRvY3VtZW50SXNIVE1MKQogewogICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdF
bnRpdGllcyhyZXN1bHQsIGF0dHJpYnV0ZS5jaGFyYWN0ZXJzKCksIGF0dHJpYnV0ZS5sZW5ndGgo
KSwKICAgICAgICAgZG9jdW1lbnRJc0hUTUwgPyBFbnRpdHlNYXNrSW5IVE1MQXR0cmlidXRlVmFs
dWUgOiBFbnRpdHlNYXNrSW5BdHRyaWJ1dGVWYWx1ZSk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYsIEVsZW1lbnQqLCBO
YW1lc3BhY2VzKikKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0
ZXMoU3RyaW5nQnVpbGRlciYsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKikKIHsKIH0KIAotdm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVD
aGFyPiYgcmVzdWx0LCBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmIGF0
dHJpYnV0ZSkKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0
ZVZhbHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUpCiB7CiAgICAgQVNTRVJUKGVsZW1lbnQtPmlzVVJMQXR0
cmlidXRlKGNvbnN0X2Nhc3Q8QXR0cmlidXRlKj4oJmF0dHJpYnV0ZSkpKTsKICAgICBjb25zdCBT
dHJpbmcgcmVzb2x2ZWRVUkxTdHJpbmcgPSByZXNvbHZlVVJMSWZOZWVkZWQoZWxlbWVudCwgYXR0
cmlidXRlLnZhbHVlKCkpOwpAQCAtMTk0LDcgKzE5NSw3IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZFF1b3RlZFVSTEEKICAgICAgICAgICAgICAgICBxdW90ZUNoYXIgPSAnXCcnOwog
ICAgICAgICB9CiAgICAgICAgIHJlc3VsdC5hcHBlbmQocXVvdGVDaGFyKTsKLSAgICAgICAgYXBw
ZW5kKHJlc3VsdCwgc3RyaXBwZWRVUkxTdHJpbmcpOworICAgICAgICByZXN1bHQuYXBwZW5kKHN0
cmlwcGVkVVJMU3RyaW5nKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMjA1LDcgKzIwNiw3IEBAIHZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEEKICAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hhcik7CiB9
CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVWYWx1ZShWZWN0b3I8VUNoYXI+
JiBvdXQsIGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSwgRW50aXR5TWFzayBl
bnRpdHlNYXNrKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTm9kZVZhbHVlKFN0cmlu
Z0J1aWxkZXImIG91dCwgY29uc3QgTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdlLCBFbnRp
dHlNYXNrIGVudGl0eU1hc2spCiB7CiAgICAgU3RyaW5nIHN0ciA9IG5vZGUtPm5vZGVWYWx1ZSgp
OwogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3RyLmNoYXJhY3RlcnMoKTsKQEAgLTI1
NSw3ICsyNTYsNyBAQCBib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRBZGROYW1lc3BhCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5hbWVz
cGFjZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgTmFtZXNwYWNlcyYgbmFtZXNwYWNlcykK
K3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5hbWVzcGFjZShTdHJpbmdCdWlsZGVyJiBy
ZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWVzcGFjZVVSSSwgTmFtZXNwYWNlcyYgbmFtZXNwYWNlcykKIHsKICAgICBuYW1lc3BhY2VzLmNo
ZWNrQ29uc2lzdGVuY3koKTsKICAgICBpZiAobmFtZXNwYWNlVVJJLmlzRW1wdHkoKSkKQEAgLTI2
NywxMCArMjY4LDEwIEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5hbWVzcGFjZSgK
ICAgICBpZiAoZm91bmROUyAhPSBuYW1lc3BhY2VVUkkuaW1wbCgpKSB7CiAgICAgICAgIG5hbWVz
cGFjZXMuc2V0KHByZSwgbmFtZXNwYWNlVVJJLmltcGwoKSk7CiAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyAnKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgeG1sbnNBdG9tLnN0cmluZygpKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCh4bWxuc0F0b20uc3RyaW5nKCkpOwogICAgICAgICBpZiAoIXBy
ZWZpeC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJzonKTsKLSAgICAg
ICAgICAgIGFwcGVuZChyZXN1bHQsIHByZWZpeCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHByZWZpeCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXN1bHQuYXBwZW5kKCc9Jyk7CkBAIC0y
OTIsNTkgKzI5Myw1OSBAQCBFbnRpdHlNYXNrIE1hcmt1cEFjY3VtdWxhdG9yOjplbnRpdHlNYXNr
CiAgICAgcmV0dXJuIHRleHQtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkgPyBFbnRpdHlN
YXNrSW5IVE1MUENEQVRBIDogRW50aXR5TWFza0luUENEQVRBOwogfQogCi12b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCogdGV4dCkKK3Zv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0
KiB0ZXh0KQogewogICAgIGFwcGVuZE5vZGVWYWx1ZShvdXQsIHRleHQsIG1fcmFuZ2UsIGVudGl0
eU1hc2tGb3JUZXh0KHRleHQpKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
Q29tbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgY29tbWVudCkKK3ZvaWQg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENvbW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25z
dCBTdHJpbmcmIGNvbW1lbnQpCiB7CiAgICAgLy8gRklYTUU6IENvbW1lbnQgY29udGVudCBpcyBu
b3QgZXNjYXBlZCwgYnV0IFhNTFNlcmlhbGl6ZXIgKGFuZCBwb3NzaWJseSBvdGhlciBjYWxsZXJz
KSBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVzICItLT4iLgotICAgIGFw
cGVuZChvdXQsICI8IS0tIik7Ci0gICAgYXBwZW5kKG91dCwgY29tbWVudCk7Ci0gICAgYXBwZW5k
KG91dCwgIi0tPiIpOworICAgIG91dC5hcHBlbmQoIjwhLS0iKTsKKyAgICBvdXQuYXBwZW5kKGNv
bW1lbnQpOworICAgIG91dC5hcHBlbmQoIi0tPiIpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmREb2N1bWVudFR5cGUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBEb2N1
bWVudFR5cGUqIG4pCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmREb2N1bWVudFR5cGUo
U3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBEb2N1bWVudFR5cGUqIG4pCiB7CiAgICAgaWYg
KG4tPm5hbWUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGFwcGVuZChyZXN1
bHQsICI8IURPQ1RZUEUgIik7Ci0gICAgYXBwZW5kKHJlc3VsdCwgbi0+bmFtZSgpKTsKKyAgICBy
ZXN1bHQuYXBwZW5kKCI8IURPQ1RZUEUgIik7CisgICAgcmVzdWx0LmFwcGVuZChuLT5uYW1lKCkp
OwogICAgIGlmICghbi0+cHVibGljSWQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXBwZW5kKHJl
c3VsdCwgIiBQVUJMSUMgXCIiKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgbi0+cHVibGljSWQo
KSk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsICJcIiIpOworICAgICAgICByZXN1bHQuYXBwZW5k
KCIgUFVCTElDIFwiIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobi0+cHVibGljSWQoKSk7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiIik7CiAgICAgICAgIGlmICghbi0+c3lzdGVtSWQoKS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsICIgXCIiKTsKLSAgICAgICAg
ICAgIGFwcGVuZChyZXN1bHQsIG4tPnN5c3RlbUlkKCkpOwotICAgICAgICAgICAgYXBwZW5kKHJl
c3VsdCwgIlwiIik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCIgXCIiKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQobi0+c3lzdGVtSWQoKSk7CisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCJcIiIpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICghbi0+c3lzdGVtSWQoKS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgIiBTWVNURU0gXCIiKTsKLSAgICAgICAg
YXBwZW5kKHJlc3VsdCwgbi0+c3lzdGVtSWQoKSk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsICJc
IiIpOworICAgICAgICByZXN1bHQuYXBwZW5kKCIgU1lTVEVNIFwiIik7CisgICAgICAgIHJlc3Vs
dC5hcHBlbmQobi0+c3lzdGVtSWQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiIik7CiAg
ICAgfQogICAgIGlmICghbi0+aW50ZXJuYWxTdWJzZXQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
YXBwZW5kKHJlc3VsdCwgIiBbIik7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIG4tPmludGVybmFs
U3Vic2V0KCkpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCAiXSIpOworICAgICAgICByZXN1bHQu
YXBwZW5kKCIgWyIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG4tPmludGVybmFsU3Vic2V0KCkp
OworICAgICAgICByZXN1bHQuYXBwZW5kKCJdIik7CiAgICAgfQotICAgIGFwcGVuZChyZXN1bHQs
ICI+Iik7CisgICAgcmVzdWx0LmFwcGVuZCgiPiIpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25z
dCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBkYXRhKQordm9pZCBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKFN0cmluZ0J1aWxkZXImIG91dCwgY29u
c3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKICAgICAvLyBGSVhNRTog
UEkgZGF0YSBpcyBub3QgZXNjYXBlZCwgYnV0IFhNTFNlcmlhbGl6ZXIgKGFuZCBwb3NzaWJseSBv
dGhlciBjYWxsZXJzKSB0aGlzIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVk
ZXMgIj8+Ii4KLSAgICBhcHBlbmQob3V0LCAiPD8iKTsKLSAgICBhcHBlbmQob3V0LCB0YXJnZXQp
OwotICAgIGFwcGVuZChvdXQsICIgIik7Ci0gICAgYXBwZW5kKG91dCwgZGF0YSk7Ci0gICAgYXBw
ZW5kKG91dCwgIj8+Iik7CisgICAgb3V0LmFwcGVuZCgiPD8iKTsKKyAgICBvdXQuYXBwZW5kKHRh
cmdldCk7CisgICAgb3V0LmFwcGVuZCgiICIpOworICAgIG91dC5hcHBlbmQoZGF0YSk7CisgICAg
b3V0LmFwcGVuZCgiPz4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxl
bWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5h
bWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0cmluZ0J1
aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsK
ICAgICBhcHBlbmRPcGVuVGFnKG91dCwgZWxlbWVudCwgbmFtZXNwYWNlcyk7CiAKQEAgLTM1OSwx
NSArMzYwLDE1IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmUKICAg
ICBhcHBlbmRDbG9zZVRhZyhvdXQsIGVsZW1lbnQpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRPcGVuVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwg
TmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE9w
ZW5UYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBu
YW1lc3BhY2VzKQogewogICAgIG91dC5hcHBlbmQoJzwnKTsKLSAgICBhcHBlbmQob3V0LCBlbGVt
ZW50LT5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOworICAgIG91dC5hcHBlbmQoZWxlbWVudC0+
bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKICAgICBpZiAoIWVsZW1lbnQtPmRvY3VtZW50KCkt
PmlzSFRNTERvY3VtZW50KCkgJiYgbmFtZXNwYWNlcyAmJiBzaG91bGRBZGROYW1lc3BhY2VFbGVt
ZW50KGVsZW1lbnQpKQogICAgICAgICBhcHBlbmROYW1lc3BhY2Uob3V0LCBlbGVtZW50LT5wcmVm
aXgoKSwgZWxlbWVudC0+bmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2VzKTsgICAgCiB9CiAKLXZv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwg
RWxlbWVudCogZWxlbWVudCkKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENsb3NlVGFn
KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBpZiAoc2hvdWxk
U2VsZkNsb3NlKGVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50
KCkpCkBAIC0zNzcsMTYgKzM3OCwxNiBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRD
bG9zZVRhZyhWCiAgICAgb3V0LmFwcGVuZCgnPicpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3Zv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZShTdHJpbmdCdWlsZGVyJiBvdXQs
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlLCBOYW1lc3BhY2Vz
KiBuYW1lc3BhY2VzKQogewogICAgIGJvb2wgZG9jdW1lbnRJc0hUTUwgPSBlbGVtZW50LT5kb2N1
bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpOwogCiAgICAgb3V0LmFwcGVuZCgnICcpOwogCiAgICAg
aWYgKGRvY3VtZW50SXNIVE1MKQotICAgICAgICBhcHBlbmQob3V0LCBhdHRyaWJ1dGUubmFtZSgp
LmxvY2FsTmFtZSgpKTsKKyAgICAgICAgb3V0LmFwcGVuZChhdHRyaWJ1dGUubmFtZSgpLmxvY2Fs
TmFtZSgpKTsKICAgICBlbHNlCi0gICAgICAgIGFwcGVuZChvdXQsIGF0dHJpYnV0ZS5uYW1lKCku
dG9TdHJpbmcoKSk7CisgICAgICAgIG91dC5hcHBlbmQoYXR0cmlidXRlLm5hbWUoKS50b1N0cmlu
ZygpKTsKIAogICAgIG91dC5hcHBlbmQoJz0nKTsKIApAQCAtNDAyLDE1ICs0MDMsMTUgQEAgdm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlKAogICAgICAgICBhcHBlbmROYW1l
c3BhY2Uob3V0LCBhdHRyaWJ1dGUucHJlZml4KCksIGF0dHJpYnV0ZS5uYW1lc3BhY2VVUkkoKSwg
Km5hbWVzcGFjZXMpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDREFUQVNl
Y3Rpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIHNlY3Rpb24pCit2b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDREFUQVNlY3Rpb24oU3RyaW5nQnVpbGRlciYgb3V0LCBj
b25zdCBTdHJpbmcmIHNlY3Rpb24pCiB7CiAgICAgLy8gRklYTUU6IENEQVRBIGNvbnRlbnQgaXMg
bm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVy
cykgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRlcyAiXV0+Ii4KLSAgICBh
cHBlbmQob3V0LCAiPCFbQ0RBVEFbIik7Ci0gICAgYXBwZW5kKG91dCwgc2VjdGlvbik7Ci0gICAg
YXBwZW5kKG91dCwgIl1dPiIpOworICAgIG91dC5hcHBlbmQoIjwhW0NEQVRBWyIpOworICAgIG91
dC5hcHBlbmQoc2VjdGlvbik7CisgICAgb3V0LmFwcGVuZCgiXV0+Iik7CiB9CiAKLXZvaWQgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0TWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwg
Y29uc3QgTm9kZSogbm9kZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3ZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZFN0YXJ0TWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3Qg
Tm9kZSogbm9kZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBpZiAobmFtZXNwYWNl
cykKICAgICAgICAgbmFtZXNwYWNlcy0+Y2hlY2tDb25zaXN0ZW5jeSgpOwpAQCAtNDc2LDE0ICs0
NzcsMTQgQEAgYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6ZWxlbWVudENhbm5vdEhhdgogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudCo+KG5vZGUpLT5pZUZvcmJpZHNJbnNl
cnRIVE1MKCk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZE1hcmt1cChW
ZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUpCit2b2lkIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRFbmRNYXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBOb2Rl
KiBub2RlKQogewogICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8IHNob3VsZFNlbGZD
bG9zZShub2RlKSB8fCAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSAmJiBlbGVtZW50Q2Fubm90SGF2
ZUVuZFRhZyhub2RlKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHJlc3VsdC5hcHBlbmQoJzwn
KTsKICAgICByZXN1bHQuYXBwZW5kKCcvJyk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgc3RhdGljX2Nh
c3Q8Y29uc3QgRWxlbWVudCo+KG5vZGUpLT5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOworICAg
IHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudCo+KG5vZGUpLT5ub2RlTmFt
ZVByZXNlcnZpbmdDYXNlKCkpOwogICAgIHJlc3VsdC5hcHBlbmQoJz4nKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAkocmV2aXNpb24gOTQx
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDM0ICs3NywzNCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lk
IGFwcGVuZEVuZFRhZyhOb2RlKik7CiAgICAgc3RhdGljIHNpemVfdCB0b3RhbExlbmd0aChjb25z
dCBWZWN0b3I8U3RyaW5nPiYpOwogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiB0
b3RhbExlbmd0aChtX3N1Y2NlZWRpbmdNYXJrdXApOyB9Ci0gICAgdm9pZCBjb25jYXRlbmF0ZU1h
cmt1cChWZWN0b3I8VUNoYXI+JiBvdXQpOwotICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlVmFsdWUo
VmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBkb2N1
bWVudElzSFRNTCk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVj
dG9yPFVDaGFyPiYsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmROb2Rl
VmFsdWUoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqLCBFbnRp
dHlNYXNrKTsKKyAgICB2b2lkIGNvbmNhdGVuYXRlTWFya3VwKFN0cmluZ0J1aWxkZXImIG91dCk7
CisgICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNv
bnN0IFN0cmluZyYgYXR0cmlidXRlLCBib29sIGRvY3VtZW50SXNIVE1MKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiwgRWxlbWVudCosIE5h
bWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZE5vZGVWYWx1ZShTdHJpbmdCdWlsZGVyJiBvdXQs
IGNvbnN0IE5vZGUqLCBjb25zdCBSYW5nZSosIEVudGl0eU1hc2spOwogICAgIGJvb2wgc2hvdWxk
QWRkTmFtZXNwYWNlRWxlbWVudChjb25zdCBFbGVtZW50Kik7CiAgICAgYm9vbCBzaG91bGRBZGRO
YW1lc3BhY2VBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyYpOwotICAgIHZv
aWQgYXBwZW5kTmFtZXNwYWNlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBOYW1lc3BhY2Vz
Jik7CisgICAgdm9pZCBhcHBlbmROYW1lc3BhY2UoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25z
dCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkks
IE5hbWVzcGFjZXMmKTsKICAgICBFbnRpdHlNYXNrIGVudGl0eU1hc2tGb3JUZXh0KFRleHQqKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRl
eHQqKTsKLSAgICB2b2lkIGFwcGVuZENvbW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBT
dHJpbmcmIGNvbW1lbnQpOwotICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFZlY3RvcjxVQ2hh
cj4mIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKik7Ci0gICAgdm9pZCBhcHBlbmRQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIHRhcmdldCwg
Y29uc3QgU3RyaW5nJiBkYXRhKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVudChWZWN0
b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRP
cGVuVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKLSAgICB2
b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCopOwotICAgIHZv
aWQgYXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIGNvbnN0IEF0
dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZENEQVRBU2VjdGlvbihWZWN0
b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgc2VjdGlvbik7Ci0gICAgdm9pZCBhcHBlbmRT
dGFydE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqLCBOYW1lc3BhY2Vz
Kik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0
Kik7CisgICAgdm9pZCBhcHBlbmRDb21tZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3Ry
aW5nJiBjb21tZW50KTsKKyAgICB2b2lkIGFwcGVuZERvY3VtZW50VHlwZShTdHJpbmdCdWlsZGVy
JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSopOworICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2lu
Z0luc3RydWN0aW9uKFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNv
bnN0IFN0cmluZyYgZGF0YSk7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5n
QnVpbGRlciYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBwZW5kT3Bl
blRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAgdm9p
ZCBhcHBlbmRDbG9zZVRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqKTsKKyAgICB2b2lk
IGFwcGVuZEF0dHJpYnV0ZShTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqLCBjb25zdCBBdHRy
aWJ1dGUmLCBOYW1lc3BhY2VzKik7CisgICAgdm9pZCBhcHBlbmRDREFUQVNlY3Rpb24oU3RyaW5n
QnVpbGRlciYgb3V0LCBjb25zdCBTdHJpbmcmIHNlY3Rpb24pOworICAgIHZvaWQgYXBwZW5kU3Rh
cnRNYXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBOb2RlKiwgTmFtZXNwYWNlcyop
OwogICAgIGJvb2wgc2hvdWxkU2VsZkNsb3NlKGNvbnN0IE5vZGUqKTsKICAgICBib29sIGVsZW1l
bnRDYW5ub3RIYXZlRW5kVGFnKGNvbnN0IE5vZGUqIG5vZGUpOwotICAgIHZvaWQgYXBwZW5kRW5k
TWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgTm9kZSopOworICAgIHZvaWQgYXBw
ZW5kRW5kTWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSopOwogCiAgICAg
VmVjdG9yPE5vZGUqPiogY29uc3QgbV9ub2RlczsKICAgICBjb25zdCBSYW5nZSogY29uc3QgbV9y
YW5nZTsKIAogcHJpdmF0ZToKICAgICBTdHJpbmcgcmVzb2x2ZVVSTElmTmVlZGVkKGNvbnN0IEVs
ZW1lbnQqLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3Q7Ci0gICAgdm9pZCBhcHBlbmRR
dW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IEVsZW1l
bnQqLCBjb25zdCBBdHRyaWJ1dGUmKTsKKyAgICB2b2lkIGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0
ZVZhbHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRWxlbWVudCosIGNvbnN0IEF0dHJp
YnV0ZSYpOwogICAgIHZvaWQgc2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyhOb2RlKiwgTm9k
ZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSwgY29uc3QgTmFtZXNwYWNlcyopOwogCiAgICAg
VmVjdG9yPFN0cmluZz4gbV9zdWNjZWVkaW5nTWFya3VwOwpAQCAtMTEyLDcgKzExMiw3IEBAIHBy
aXZhdGU6CiB9OwogCiAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGludGVncmF0ZWQg
d2l0aCBNYXJrdXBBY2N1bXVsYXRvci4KLXZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0Vu
dGl0aWVzKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgVUNoYXIqIGNvbnRlbnQsIHNpemVfdCBs
ZW5ndGgsIEVudGl0eU1hc2sgZW50aXR5TWFzayk7Cit2b2lkIGFwcGVuZENoYXJhY3RlcnNSZXBs
YWNpbmdFbnRpdGllcyhTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFVDaGFyKiBjb250ZW50LCBz
aXplX3QgbGVuZ3RoLCBFbnRpdHlNYXNrKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCShyZXZpc2lvbiA5NDE3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgImh0bWxl
ZGl0aW5nLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
QEAgLTEyOCwxMyArMTI5LDEzIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdGFrZVJlc3VsdHMoKTsK
IAogcHJpdmF0ZToKLSAgICB2b2lkIGFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoVmVjdG9yPFVDaGFy
PiYsIENTU1N0eWxlRGVjbGFyYXRpb24qLCBEb2N1bWVudCosIGJvb2wgaXNCbG9jayA9IGZhbHNl
KTsKKyAgICB2b2lkIGFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoU3RyaW5nQnVpbGRlciYsIENTU1N0
eWxlRGVjbGFyYXRpb24qLCBEb2N1bWVudCosIGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKICAgICBj
b25zdCBTdHJpbmcgc3R5bGVOb2RlQ2xvc2VUYWcoYm9vbCBpc0Jsb2NrID0gZmFsc2UpOwotICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCopOworICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCopOwogICAg
IFN0cmluZyByZW5kZXJlZFRleHQoY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKik7CiAgICAgU3Ry
aW5nIHN0cmluZ1ZhbHVlRm9yUmFuZ2UoY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKik7Ci0gICAg
dm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwg
Ym9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwotICAgIHZvaWQg
YXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVz
cGFjZXMqKSB7IGFwcGVuZEVsZW1lbnQob3V0LCBlbGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2Vs
ZWN0Tm9kZSk7IH0KKyAgICB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBF
bGVtZW50KiwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwor
ICAgIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1l
bnQsIE5hbWVzcGFjZXMqKSB7IGFwcGVuZEVsZW1lbnQob3V0LCBlbGVtZW50LCBmYWxzZSwgRG9l
c0Z1bGx5U2VsZWN0Tm9kZSk7IH0KIAogICAgIGVudW0gTm9kZVRyYXZlcnNhbE1vZGUgeyBFbWl0
U3RyaW5nLCBEb05vdEVtaXRTdHJpbmcgfTsKICAgICBOb2RlKiB0cmF2ZXJzZU5vZGVzRm9yU2Vy
aWFsaXphdGlvbihOb2RlKiBzdGFydE5vZGUsIE5vZGUqIHBhc3RFbmQsIE5vZGVUcmF2ZXJzYWxN
b2RlKTsKQEAgLTE2MiwxMiArMTYzLDEyIEBAIGlubGluZSBTdHlsZWRNYXJrdXBBY2N1bXVsYXRv
cjo6U3R5bGVkTWEKIAogdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhOb2Rl
KE5vZGUqIG5vZGUsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcywgUmFuZ2VGdWxseVNlbGVj
dHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkKIHsKLSAgICBWZWN0b3I8VUNoYXI+IG1hcmt1
cDsKKyAgICBTdHJpbmdCdWlsZGVyIG1hcmt1cDsKICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQogICAgICAgICBhcHBlbmRFbGVtZW50KG1hcmt1cCwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUpLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzICYmIGlzQmxvY2soY29uc3RfY2FzdDxOb2Rl
Kj4obm9kZSkpLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwogICAgIGVsc2UKICAgICAgICAgYXBw
ZW5kU3RhcnRNYXJrdXAobWFya3VwLCBub2RlLCAwKTsKLSAgICBtX3JldmVyc2VkUHJlY2VkaW5n
TWFya3VwLmFwcGVuZChTdHJpbmc6OmFkb3B0KG1hcmt1cCkpOworICAgIG1fcmV2ZXJzZWRQcmVj
ZWRpbmdNYXJrdXAuYXBwZW5kKG1hcmt1cC50b1N0cmluZygpKTsKICAgICBhcHBlbmRFbmRUYWco
bm9kZSk7CiAgICAgaWYgKG1fbm9kZXMpCiAgICAgICAgIG1fbm9kZXMtPmFwcGVuZChub2RlKTsK
QEAgLTE3NSwyMCArMTc2LDIwIEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBX
aXRoTm8KIAogdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhTdHlsZU5vZGUo
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBpc0Js
b2NrKQogewotICAgIFZlY3RvcjxVQ2hhcj4gb3BlblRhZzsKKyAgICBTdHJpbmdCdWlsZGVyIG9w
ZW5UYWc7CiAgICAgYXBwZW5kU3R5bGVOb2RlT3BlblRhZyhvcGVuVGFnLCBzdHlsZSwgZG9jdW1l
bnQsIGlzQmxvY2spOwotICAgIG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuYXBwZW5kKFN0cmlu
Zzo6YWRvcHQob3BlblRhZykpOworICAgIG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuYXBwZW5k
KG9wZW5UYWcudG9TdHJpbmcoKSk7CiAgICAgYXBwZW5kU3RyaW5nKHN0eWxlTm9kZUNsb3NlVGFn
KGlzQmxvY2spKTsKIH0KIAotdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3R5
bGVOb2RlT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKK3ZvaWQgU3R5bGVkTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBD
U1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGlzQmxv
Y2spCiB7CiAgICAgLy8gQWxsIHRleHQtZGVjb3JhdGlvbi1yZWxhdGVkIGVsZW1lbnRzIHNob3Vs
ZCBoYXZlIGJlZW4gdHJlYXRlZCBhcyBzcGVjaWFsIGFuY2VzdG9ycwogICAgIC8vIElmIHdlIGV2
ZXIgaGl0IHRoaXMgQVNTRVJULCB3ZSBzaG91bGQgZXhwb3J0IFN0eWxlQ2hhbmdlIGluIEFwcGx5
U3R5bGVDb21tYW5kIGFuZCB1c2UgaXQgaGVyZQogICAgIEFTU0VSVChwcm9wZXJ0eU1pc3NpbmdP
ckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKSAmJiBwcm9wZXJ0
eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0
aW9uc0luRWZmZWN0KSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGRp
dlN0eWxlLCAoIjxkaXYgc3R5bGU9XCIiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBTdHJpbmcsIHN0eWxlU3Bhbk9wZW4sICgiPHNwYW4gc3R5bGU9XCIiKSk7Ci0gICAgYXBwZW5k
KG91dCwgaXNCbG9jayA/IGRpdlN0eWxlIDogc3R5bGVTcGFuT3Blbik7CisgICAgb3V0LmFwcGVu
ZChpc0Jsb2NrID8gZGl2U3R5bGUgOiBzdHlsZVNwYW5PcGVuKTsKICAgICBhcHBlbmRBdHRyaWJ1
dGVWYWx1ZShvdXQsIHN0eWxlLT5jc3NUZXh0KCksIGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgp
KTsKICAgICBvdXQuYXBwZW5kKCdcIicpOwogICAgIG91dC5hcHBlbmQoJz4nKTsKQEAgLTIwMywx
OSArMjA0LDE5IEBAIGNvbnN0IFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6c3QKIAog
U3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0YWtlUmVzdWx0cygpCiB7Ci0gICAgVmVj
dG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodG90
YWxMZW5ndGgobV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cCkgKyBsZW5ndGgoKSk7CisgICAgU3Ry
aW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSh0b3RhbExlbmd0
aChtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwKSArIGxlbmd0aCgpKTsKIAogICAgIGZvciAoc2l6
ZV90IGkgPSBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwLnNpemUoKTsgaSA+IDA7IC0taSkKLSAg
ICAgICAgYXBwZW5kKHJlc3VsdCwgbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cFtpIC0gMV0pOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXBbaSAtIDFdKTsK
IAogICAgIGNvbmNhdGVuYXRlTWFya3VwKHJlc3VsdCk7CiAKICAgICAvLyBXZSByZW1vdmUgJ1ww
JyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IHZpc2libHkgcmVuZGVyZWQgdG8gdGhl
IHVzZXIuCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KS5yZXBsYWNlKDAsICIiKTsK
KyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCkucmVwbGFjZSgwLCAiIik7CiB9CiAKLXZvaWQg
U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBU
ZXh0KiB0ZXh0KQordm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChTdHJp
bmdCdWlsZGVyJiBvdXQsIFRleHQqIHRleHQpCiB7ICAgIAogICAgIGNvbnN0IGJvb2wgcGFyZW50
SXNUZXh0YXJlYSA9IHRleHQtPnBhcmVudEVsZW1lbnQoKSAmJiB0ZXh0LT5wYXJlbnRFbGVtZW50
KCktPnRhZ1FOYW1lKCkgPT0gdGV4dGFyZWFUYWc7CiAgICAgY29uc3QgYm9vbCB3cmFwcGluZ1Nw
YW4gPSBzaG91bGRBcHBseVdyYXBwaW5nU3R5bGUodGV4dCkgJiYgIXBhcmVudElzVGV4dGFyZWE7
CkBAIC0yMjcsOSArMjI4LDkgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
VGV4dAogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgaW5jbHVkZWQgaW4gZm9yY2VJ
bmxpbmU/CiAgICAgICAgIHdyYXBwaW5nU3R5bGUtPnN0eWxlKCktPnNldFByb3BlcnR5KENTU1By
b3BlcnR5RmxvYXQsIENTU1ZhbHVlTm9uZSk7CiAKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBvcGVu
VGFnOworICAgICAgICBTdHJpbmdCdWlsZGVyIG9wZW5UYWc7CiAgICAgICAgIGFwcGVuZFN0eWxl
Tm9kZU9wZW5UYWcob3BlblRhZywgd3JhcHBpbmdTdHlsZS0+c3R5bGUoKSwgdGV4dC0+ZG9jdW1l
bnQoKSk7Ci0gICAgICAgIGFwcGVuZChvdXQsIFN0cmluZzo6YWRvcHQob3BlblRhZykpOworICAg
ICAgICBvdXQuYXBwZW5kKG9wZW5UYWcuY2hhcmFjdGVycygpLCBvcGVuVGFnLmxlbmd0aCgpKTsK
ICAgICB9CiAKICAgICBpZiAoIXNob3VsZEFubm90YXRlKCkgfHwgcGFyZW50SXNUZXh0YXJlYSkK
QEAgLTIzNywxMyArMjM4LDEzIEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFRleHQKICAgICBlbHNlIHsKICAgICAgICAgY29uc3QgYm9vbCB1c2VSZW5kZXJlZFRleHQgPSAh
ZW5jbG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZSh0ZXh0KSwgc2VsZWN0VGFn
KTsKICAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSB1c2VSZW5kZXJlZFRleHQgPyByZW5kZXJlZFRl
eHQodGV4dCwgbV9yYW5nZSkgOiBzdHJpbmdWYWx1ZUZvclJhbmdlKHRleHQsIG1fcmFuZ2UpOwot
ICAgICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcjsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWZm
ZXI7CiAgICAgICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhidWZmZXIsIGNv
bnRlbnQuY2hhcmFjdGVycygpLCBjb250ZW50Lmxlbmd0aCgpLCBFbnRpdHlNYXNrSW5QQ0RBVEEp
OwotICAgICAgICBhcHBlbmQob3V0LCBjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0
KFN0cmluZzo6YWRvcHQoYnVmZmVyKSwgdGV4dCkpOworICAgICAgICBvdXQuYXBwZW5kKGNvbnZl
cnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYXQoYnVmZmVyLnRvU3RyaW5nKCksIHRleHQpKTsK
ICAgICB9CiAKICAgICBpZiAod3JhcHBpbmdTcGFuKQotICAgICAgICBhcHBlbmQob3V0LCBzdHls
ZU5vZGVDbG9zZVRhZygpKTsKKyAgICAgICAgb3V0LmFwcGVuZChzdHlsZU5vZGVDbG9zZVRhZygp
KTsKIH0KICAgICAKIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6cmVuZGVyZWRUZXh0
KGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSkKQEAgLTI4MCw3ICsyODEsNyBA
QCBTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnN0cmluZ1ZhCiAgICAgcmV0dXJuIHN0
cjsKIH0KIAotdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChWZWN0
b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgYWRkRGlzcGxheUlubGluZSwg
UmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkKK3ZvaWQgU3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVt
ZW50KiBlbGVtZW50LCBib29sIGFkZERpc3BsYXlJbmxpbmUsIFJhbmdlRnVsbHlTZWxlY3RzTm9k
ZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCiB7CiAgICAgY29uc3QgYm9vbCBkb2N1bWVudElzSFRN
TCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCk7CiAgICAgYXBwZW5kT3Bl
blRhZyhvdXQsIGVsZW1lbnQsIDApOwpAQCAtMzI1LDcgKzMyNiw3IEBAIHZvaWQgU3R5bGVkTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW0KIAogICAgICAgICBpZiAoIW5ld0lubGluZVN0eWxl
LT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3Ry
aW5nLCBzdHlsZVByZWZpeCwgKCIgc3R5bGU9XCIiKSk7Ci0gICAgICAgICAgICBhcHBlbmQob3V0
LCBzdHlsZVByZWZpeCk7CisgICAgICAgICAgICBvdXQuYXBwZW5kKHN0eWxlUHJlZml4KTsKICAg
ICAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgbmV3SW5saW5lU3R5bGUtPnN0eWxl
KCktPmNzc1RleHQoKSwgZG9jdW1lbnRJc0hUTUwpOwogICAgICAgICAgICAgb3V0LmFwcGVuZCgn
XCInKTsKICAgICAgICAgfQpAQCAtOTE1LDEzICs5MTYsMTMgQEAgU3RyaW5nIGNyZWF0ZUZ1bGxN
YXJrdXAoY29uc3QgUmFuZ2UqIHJhbgogCiBTdHJpbmcgdXJsVG9NYXJrdXAoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewotICAgIFZlY3RvcjxVQ2hhcj4gbWFya3VwOwot
ICAgIGFwcGVuZChtYXJrdXAsICI8YSBocmVmPVwiIik7Ci0gICAgYXBwZW5kKG1hcmt1cCwgdXJs
LnN0cmluZygpKTsKLSAgICBhcHBlbmQobWFya3VwLCAiXCI+Iik7CisgICAgU3RyaW5nQnVpbGRl
ciBtYXJrdXA7CisgICAgbWFya3VwLmFwcGVuZCgiPGEgaHJlZj1cIiIpOworICAgIG1hcmt1cC5h
cHBlbmQodXJsLnN0cmluZygpKTsKKyAgICBtYXJrdXAuYXBwZW5kKCJcIj4iKTsKICAgICBhcHBl
bmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMobWFya3VwLCB0aXRsZS5jaGFyYWN0ZXJzKCks
IHRpdGxlLmxlbmd0aCgpLCBFbnRpdHlNYXNrSW5QQ0RBVEEpOwotICAgIGFwcGVuZChtYXJrdXAs
ICI8L2E+Iik7Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQobWFya3VwKTsKKyAgICBtYXJrdXAu
YXBwZW5kKCI8L2E+Iik7CisgICAgcmV0dXJuIG1hcmt1cC50b1N0cmluZygpOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRva2VuTGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuY3BwCShyZXZpc2lvbiA5NDE3MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNyArNjYsNyBAQCBTdHJpbmcgRE9NVG9rZW5MaXN0OjpyZW1vdmVUb2tlbihjb25zdCBBCiAg
ICAgLy8gQWxnb3JpdGhtIGRlZmluZWQgYXQgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dl
Yi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNy
ZW1vdmUtYS10b2tlbi1mcm9tLWEtc3RyaW5nCiAKICAgICB1bnNpZ25lZCBpbnB1dExlbmd0aCA9
IGlucHV0Lmxlbmd0aCgpOwotICAgIFZlY3RvcjxVQ2hhcj4gb3V0cHV0OyAvLyAzCisgICAgU3Ry
aW5nQnVpbGRlciBvdXRwdXQ7IC8vIDMKICAgICBvdXRwdXQucmVzZXJ2ZUNhcGFjaXR5KGlucHV0
TGVuZ3RoKTsKICAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7IC8vIDQKIApAQCAtNzgsMTggKzc4
LDE4IEBAIFN0cmluZyBET01Ub2tlbkxpc3Q6OnJlbW92ZVRva2VuKGNvbnN0IEEKICAgICAgICAg
fQogCiAgICAgICAgIC8vIFN0ZXAgNwotICAgICAgICBWZWN0b3I8VUNoYXI+IHM7CisgICAgICAg
IFN0cmluZ0J1aWxkZXIgczsKICAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXRMZW5ndGgg
JiYgaXNOb3RIVE1MU3BhY2UoaW5wdXRbcG9zaXRpb25dKSkKICAgICAgICAgICAgIHMuYXBwZW5k
KGlucHV0W3Bvc2l0aW9uKytdKTsKIAogICAgICAgICAvLyBTdGVwIDgKLSAgICAgICAgaWYgKHMg
PT0gdG9rZW4pIHsKKyAgICAgICAgaWYgKHMudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkgPT0g
dG9rZW4pIHsKICAgICAgICAgICAgIC8vIFN0ZXAgOC4xCiAgICAgICAgICAgICB3aGlsZSAocG9z
aXRpb24gPCBpbnB1dExlbmd0aCAmJiBpc0hUTUxTcGFjZShpbnB1dFtwb3NpdGlvbl0pKQogICAg
ICAgICAgICAgICAgICsrcG9zaXRpb247CiAKICAgICAgICAgICAgIC8vIFN0ZXAgOC4yCi0gICAg
ICAgICAgICBzaXplX3QgaiA9IG91dHB1dC5zaXplKCk7CisgICAgICAgICAgICBzaXplX3QgaiA9
IG91dHB1dC5sZW5ndGgoKTsKICAgICAgICAgICAgIHdoaWxlIChqID4gMCAmJiBpc0hUTUxTcGFj
ZShvdXRwdXRbaiAtIDFdKSkKICAgICAgICAgICAgICAgICAtLWo7CiAgICAgICAgICAgICBvdXRw
dXQucmVzaXplKGopOwpAQCAtOTgsMTEgKzk4LDEwIEBAIFN0cmluZyBET01Ub2tlbkxpc3Q6OnJl
bW92ZVRva2VuKGNvbnN0IEEKICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGlucHV0TGVuZ3Ro
ICYmICFvdXRwdXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyAn
KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHMpOyAvLyBTdGVw
IDkKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQocy50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHko
KSk7IC8vIFN0ZXAgOQogICAgIH0KIAotICAgIG91dHB1dC5zaHJpbmtUb0ZpdCgpOwotICAgIHJl
dHVybiBTdHJpbmc6OmFkb3B0KG91dHB1dCk7CisgICAgcmV0dXJuIG91dHB1dC50b1N0cmluZygp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb250RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDE3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC04OSw3ICs5MCw4IEBAIHN0YXRp
YyBib29sIHBhcnNlRm9udFNpemUoY29uc3QgU3RyaW5nJiAKICAgICB9CiAKICAgICAvLyBTdGVw
IDYKLSAgICBWZWN0b3I8VUNoYXIsIDE2PiBkaWdpdHM7CisgICAgU3RyaW5nQnVpbGRlciBkaWdp
dHM7CisgICAgZGlnaXRzLnJlc2VydmVDYXBhY2l0eSgxNik7CiAgICAgd2hpbGUgKHBvc2l0aW9u
IDwgZW5kKSB7CiAgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpwb3NpdGlvbikpCiAgICAgICAg
ICAgICBicmVhazsKQEAgLTEwMSw3ICsxMDMsNyBAQCBzdGF0aWMgYm9vbCBwYXJzZUZvbnRTaXpl
KGNvbnN0IFN0cmluZyYgCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFN0ZXAgOAot
ICAgIGludCB2YWx1ZSA9IGNoYXJhY3RlcnNUb0ludFN0cmljdChkaWdpdHMuZGF0YSgpLCBkaWdp
dHMuc2l6ZSgpKTsKKyAgICBpbnQgdmFsdWUgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoZGlnaXRz
LmNoYXJhY3RlcnMoKSwgZGlnaXRzLmxlbmd0aCgpKTsKIAogICAgIC8vIFN0ZXAgOQogICAgIGlm
IChtb2RlID09IFJlbGF0aXZlUGx1cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDE3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNs
dWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTIsNyArMTEyLDcgQEAgU3RyaW5nIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzdHJpcAogICAgIGlmICghYXR0cmlidXRlVmFsdWUu
Y29udGFpbnMobmV3bGluZUNoYXJhY3RlcikgJiYgIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKGNh
cnJpYWdlUmV0dXJuKSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlOwogCi0gICAgVmVj
dG9yPFVDaGFyPiBzdHJpcHBlZDsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmlwcGVkOwogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCgpOwogICAgIHN0cmlwcGVkLnJl
c2VydmVDYXBhY2l0eShsZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewpAQCAtMTIxLDcgKzEyMSw3IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6c3RyaXAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBzdHJpcHBlZC5h
cHBlbmQoY2hhcmFjdGVyKTsKICAgICB9Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoc3RyaXBw
ZWQpOworICAgIHJldHVybiBzdHJpcHBlZC50b1N0cmluZygpOwogfQogCiBzdGF0aWMgYm9vbCBp
c05vdExpbmVCcmVhayhVQ2hhciBjaCkgeyByZXR1cm4gY2ggIT0gbmV3bGluZUNoYXJhY3RlciAm
JiBjaCAhPSBjYXJyaWFnZVJldHVybjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvQ1NTUHJlbG9hZFNjYW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcAkocmV2aXNpb24gOTQxNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5MiwxNCArMTkyLDE0IEBAIHN0YXRpYyBTdHJpbmcgcGFyc2VDU1NTdHJpbmdPclVS
TChjb25zdCAKIAogdm9pZCBDU1NQcmVsb2FkU2Nhbm5lcjo6ZW1pdFJ1bGUoKQogewotICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZSgiaW1wb3J0IiwgbV9ydWxlLmRhdGEoKSwgbV9ydWxlLnNpemUo
KSkpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFyc2VDU1NTdHJpbmdPclVSTChtX3J1bGVW
YWx1ZS5kYXRhKCksIG1fcnVsZVZhbHVlLnNpemUoKSk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKCJpbXBvcnQiLCBtX3J1bGUuY2hhcmFjdGVycygpLCBtX3J1bGUubGVuZ3RoKCkpKSB7Cisg
ICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlQ1NTU3RyaW5nT3JVUkwobV9ydWxlVmFsdWUuY2hh
cmFjdGVycygpLCBtX3J1bGVWYWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgIGlmICghdmFsdWUuaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChtX2RvY3VtZW50
LT5jb21wbGV0ZVVSTCh2YWx1ZSkpOwogICAgICAgICAgICAgbV9kb2N1bWVudC0+Y2FjaGVkUmVz
b3VyY2VMb2FkZXIoKS0+cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCwgcmVx
dWVzdCwgU3RyaW5nKCksIG1fc2Nhbm5pbmdCb2R5KTsKICAgICAgICAgfQogICAgICAgICBtX3N0
YXRlID0gSW5pdGlhbDsKLSAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCJjaGFyc2V0
IiwgbV9ydWxlLmRhdGEoKSwgbV9ydWxlLnNpemUoKSkpCisgICAgfSBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZSgiY2hhcnNldCIsIG1fcnVsZS5jaGFyYWN0ZXJzKCksIG1fcnVsZS5sZW5ndGgo
KSkpCiAgICAgICAgIG1fc3RhdGUgPSBJbml0aWFsOwogICAgIGVsc2UKICAgICAgICAgbV9zdGF0
ZSA9IERvbmVQYXJzaW5nSW1wb3J0UnVsZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmgJKHJldmlzaW9uIDk0MTcxKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBDU1NQcmVsb2FkU2Nhbm5lcl9oCiAKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjEs
OCArNjEsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZW1pdFJ1bGUoKTsKIAogICAgIFN0YXRlIG1f
c3RhdGU7Ci0gICAgVmVjdG9yPFVDaGFyLCAxNj4gbV9ydWxlOwotICAgIFZlY3RvcjxVQ2hhcj4g
bV9ydWxlVmFsdWU7CisgICAgU3RyaW5nQnVpbGRlciBtX3J1bGU7CisgICAgU3RyaW5nQnVpbGRl
ciBtX3J1bGVWYWx1ZTsKIAogICAgIGJvb2wgbV9zY2FubmluZ0JvZHk7CiAgICAgRG9jdW1lbnQq
IG1fZG9jdW1lbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
RW50aXR5UGFyc2VyLmNwcAkocmV2aXNpb24gOTQxNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogI2luY2x1ZGUgIkNoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaCIK
ICNpbmNsdWRlICJIVE1MRW50aXR5U2VhcmNoLmgiCiAjaW5jbHVkZSAiSFRNTEVudGl0eVRhYmxl
LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIApAQCAtNzAsNyArNzAsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKLSAgICBpbmxpbmUgc3RhdGljIGJv
b2wgY29udmVydFRvVVRGMTYoVUNoYXIzMiB2YWx1ZSwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29k
ZWRFbnRpdHkpCisgICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnZlcnRUb1VURjE2KFVDaGFyMzIg
dmFsdWUsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRFbnRpdHkpCiAgICAgewogICAgICAgICBpZiAo
VV9JU19CTVAodmFsdWUpKSB7CiAgICAgICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBzdGF0aWNf
Y2FzdDxVQ2hhcj4odmFsdWUpOwpAQCAtODUsOSArODUsOSBAQCBwdWJsaWM6CiAKICAgICBpbmxp
bmUgc3RhdGljIGJvb2wgYWNjZXB0TWFsZm9ybWVkKCkgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
aW5saW5lIHN0YXRpYyBib29sIGNvbnN1bWVOYW1lZEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNv
dXJjZSwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENo
YXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyLCBVQ2hhciYgY2MpCisg
ICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnN1bWVOYW1lZEVudGl0eShTZWdtZW50ZWRTdHJpbmcm
IHNvdXJjZSwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hh
cmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIsIFVDaGFyJiBjYykKICAg
ICB7Ci0gICAgICAgIFZlY3RvcjxVQ2hhciwgMTA+IGNvbnN1bWVkQ2hhcmFjdGVyczsKKyAgICAg
ICAgU3RyaW5nQnVpbGRlciBjb25zdW1lZENoYXJhY3RlcnM7CiAgICAgICAgIEhUTUxFbnRpdHlT
ZWFyY2ggZW50aXR5U2VhcmNoOwogICAgICAgICB3aGlsZSAoIXNvdXJjZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIGNjID0gKnNvdXJjZTsKQEAgLTEzOSw3ICsxMzksNyBAQCBwdWJsaWM6CiB9
CiAKIAotYm9vbCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVmVj
dG9yPFVDaGFyLCAxNj4mIGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMs
IFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQorYm9vbCBjb25zdW1lSFRNTEVudGl0
eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZEVudGl0eSwg
Ym9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0
ZXIpCiB7CiAgICAgcmV0dXJuIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2U8SFRNTEVudGl0eVBh
cnNlcj4oc291cmNlLCBkZWNvZGVkRW50aXR5LCBub3RFbm91Z2hDaGFyYWN0ZXJzLCBhZGRpdGlv
bmFsQWxsb3dlZENoYXJhY3Rlcik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MRW50aXR5UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTEVudGl0eVBhcnNlci5oCShyZXZpc2lvbiA5NDE3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgY29uc3VtZUhUTUxFbnRp
dHkoU2VnbWVudGVkU3RyaW5nJiwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRFbnRpdHksIGJv
b2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVy
ID0gJ1wwJyk7Citib29sIGNvbnN1bWVIVE1MRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIFN0cmlu
Z0J1aWxkZXImIGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFy
IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID0gJ1wwJyk7CiAKIC8vIFVzZWQgYnkgdGhlIFhN
TCBwYXJzZXIuICBOb3Qgc3VpdGFibGUgZm9yIHVzZSBpbiBIVE1MIHBhcnNpbmcuICBVc2UgY29u
c3VtZUhUTUxFbnRpdHkgaW5zdGVhZC4KIFVDaGFyIGRlY29kZU5hbWVkRW50aXR5KGNvbnN0IGNo
YXIqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJ
ZGlvbXMuY3BwCShyZXZpc2lvbiA5NDE3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxQYXJzZXJJZGlvbXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDcgQEAg
Ym9vbCBwYXJzZUhUTUxJbnRlZ2VyKGNvbnN0IFN0cmluZyYgaW5wdQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAvLyBTdGVwIDgKLSAgICBWZWN0b3I8VUNoYXIsIDE2PiBkaWdpdHM7Cisg
ICAgU3RyaW5nQnVpbGRlciBkaWdpdHM7CiAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7CiAg
ICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpwb3NpdGlvbikpCiAgICAgICAgICAgICBicmVhazsK
QEAgLTIxNiw3ICsyMTYsNyBAQCBib29sIHBhcnNlSFRNTEludGVnZXIoY29uc3QgU3RyaW5nJiBp
bnB1CiAgICAgfQogCiAgICAgLy8gU3RlcCA5Ci0gICAgdmFsdWUgPSBzaWduICogY2hhcmFjdGVy
c1RvSW50U3RyaWN0KGRpZ2l0cy5kYXRhKCksIGRpZ2l0cy5zaXplKCkpOworICAgIHZhbHVlID0g
c2lnbiAqIGNoYXJhY3RlcnNUb0ludFN0cmljdChkaWdpdHMuY2hhcmFjdGVycygpLCBkaWdpdHMu
bGVuZ3RoKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNTQsNyArMjU0LDcgQEAgYm9v
bCBwYXJzZUhUTUxOb25OZWdhdGl2ZUludGVnZXIoY29uc3QgUwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyBTdGVwIDgKLSAgICBWZWN0b3I8VUNoYXIsIDE2PiBkaWdpdHM7CisgICAg
U3RyaW5nQnVpbGRlciBkaWdpdHM7CiAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7CiAgICAg
ICAgIGlmICghaXNBU0NJSURpZ2l0KCpwb3NpdGlvbikpCiAgICAgICAgICAgICBicmVhazsKQEAg
LTI2Miw3ICsyNjIsNyBAQCBib29sIHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihjb25zdCBT
CiAgICAgfQogCiAgICAgLy8gU3RlcCA5Ci0gICAgdmFsdWUgPSBjaGFyYWN0ZXJzVG9VSW50U3Ry
aWN0KGRpZ2l0cy5kYXRhKCksIGRpZ2l0cy5zaXplKCkpOworICAgIHZhbHVlID0gY2hhcmFjdGVy
c1RvVUludFN0cmljdChkaWdpdHMuY2hhcmFjdGVycygpLCBkaWdpdHMubGVuZ3RoKCkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
VG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gOTQxNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3
IEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cmVzZXQoKQogaW5saW5lIGJvb2wgSFRNTFRva2VuaXpl
cjo6cHJvY2Vzc0VudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKIHsKICAgICBib29sIG5v
dEVub3VnaENoYXJhY3RlcnMgPSBmYWxzZTsKLSAgICBWZWN0b3I8VUNoYXIsIDE2PiBkZWNvZGVk
RW50aXR5OworICAgIFN0cmluZ0J1aWxkZXIgZGVjb2RlZEVudGl0eTsKICAgICBib29sIHN1Y2Nl
c3MgPSBjb25zdW1lSFRNTEVudGl0eShzb3VyY2UsIGRlY29kZWRFbnRpdHksIG5vdEVub3VnaENo
YXJhY3RlcnMpOwogICAgIGlmIChub3RFbm91Z2hDaGFyYWN0ZXJzKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xNTMsOSArMTUzLDggQEAgaW5saW5lIGJvb2wgSFRNTFRva2VuaXplcjo6cHJv
Y2Vzc0VudGl0eQogICAgICAgICBBU1NFUlQoZGVjb2RlZEVudGl0eS5pc0VtcHR5KCkpOwogICAg
ICAgICBidWZmZXJDaGFyYWN0ZXIoJyYnKTsKICAgICB9IGVsc2UgewotICAgICAgICBWZWN0b3I8
VUNoYXI+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZGVjb2RlZEVudGl0eS5iZWdpbigpOwotICAg
ICAgICBmb3IgKDsgaXRlciAhPSBkZWNvZGVkRW50aXR5LmVuZCgpOyArK2l0ZXIpCi0gICAgICAg
ICAgICBidWZmZXJDaGFyYWN0ZXIoKml0ZXIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZGVjb2RlZEVudGl0eS5sZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgYnVmZmVyQ2hh
cmFjdGVyKGRlY29kZWRFbnRpdHlbaV0pOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTk4Nyw3ICs5ODYsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRT
CiAKICAgICBIVE1MX0JFR0lOX1NUQVRFKENoYXJhY3RlclJlZmVyZW5jZUluQXR0cmlidXRlVmFs
dWVTdGF0ZSkgewogICAgICAgICBib29sIG5vdEVub3VnaENoYXJhY3RlcnMgPSBmYWxzZTsKLSAg
ICAgICAgVmVjdG9yPFVDaGFyLCAxNj4gZGVjb2RlZEVudGl0eTsKKyAgICAgICAgU3RyaW5nQnVp
bGRlciBkZWNvZGVkRW50aXR5OwogICAgICAgICBib29sIHN1Y2Nlc3MgPSBjb25zdW1lSFRNTEVu
dGl0eShzb3VyY2UsIGRlY29kZWRFbnRpdHksIG5vdEVub3VnaENoYXJhY3RlcnMsIG1fYWRkaXRp
b25hbEFsbG93ZWRDaGFyYWN0ZXIpOwogICAgICAgICBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykK
ICAgICAgICAgICAgIHJldHVybiBoYXZlQnVmZmVyZWRDaGFyYWN0ZXJUb2tlbigpOwpAQCAtOTk1
LDkgKzk5NCw4IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6bmV4dFRva2VuKFNlZ21lbnRlZFMKICAg
ICAgICAgICAgIEFTU0VSVChkZWNvZGVkRW50aXR5LmlzRW1wdHkoKSk7CiAgICAgICAgICAgICBt
X3Rva2VuLT5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKCcmJyk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBWZWN0b3I8VUNoYXI+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZGVjb2RlZEVu
dGl0eS5iZWdpbigpOwotICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZGVjb2RlZEVudGl0eS5l
bmQoKTsgKytpdGVyKQotICAgICAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQXR0cmlidXRl
VmFsdWUoKml0ZXIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlY29k
ZWRFbnRpdHkubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRU
b0F0dHJpYnV0ZVZhbHVlKGRlY29kZWRFbnRpdHlbaV0pOwogICAgICAgICB9CiAgICAgICAgIC8v
IFdlJ3JlIHN1cHBvc2VkIHRvIHN3aXRjaCBiYWNrIHRvIHRoZSBhdHRyaWJ1dGUgdmFsdWUgc3Rh
dGUgdGhhdAogICAgICAgICAvLyB3ZSB3ZXJlIGluIHdoZW4gd2Ugd2VyZSBzd2l0Y2hlZCBpbnRv
IHRoaXMgc3RhdGUuIFJhdGhlciB0aGFuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAJKHJldmlzaW9uIDk0MTcxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjkxLDcgKzI5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cmluZyhzdGFydCwgbV9j
dXJyZW50IC0gc3RhcnQpOwogICAgIH0KIAotICAgIHZvaWQgZ2l2ZVJlbWFpbmluZ1RvKFZlY3Rv
cjxVQ2hhcj4mIHJlY2lwaWVudCkKKyAgICB2b2lkIGdpdmVSZW1haW5pbmdUbyhTdHJpbmdCdWls
ZGVyJiByZWNpcGllbnQpCiAgICAgewogICAgICAgICByZWNpcGllbnQuYXBwZW5kKG1fY3VycmVu
dCwgbV9lbmQgLSBtX2N1cnJlbnQpOwogICAgICAgICBtX2N1cnJlbnQgPSBtX2VuZDsKQEAgLTI3
MTgsNyArMjcxOCw4IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9yQWZ0ZXJIZWEK
IAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJblRhYmxlVGV4dCgpCiB7Ci0gICAg
U3RyaW5nIGNoYXJhY3RlcnMgPSBTdHJpbmc6OmFkb3B0KG1fcGVuZGluZ1RhYmxlQ2hhcmFjdGVy
cyk7CisgICAgU3RyaW5nIGNoYXJhY3RlcnMgPSBtX3BlbmRpbmdUYWJsZUNoYXJhY3RlcnMudG9T
dHJpbmcoKTsKKyAgICBtX3BlbmRpbmdUYWJsZUNoYXJhY3RlcnMuY2xlYXIoKTsKICAgICBpZiAo
IWlzQWxsV2hpdGVzcGFjZShjaGFyYWN0ZXJzKSkgewogICAgICAgICAvLyBGSVhNRTogcGFyc2Ug
ZXJyb3IKICAgICAgICAgSFRNTENvbnN0cnVjdGlvblNpdGU6OlJlZGlyZWN0VG9Gb3N0ZXJQYXJl
bnRHdWFyZCByZWRpcmVjdGVyKG1fdHJlZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAkocmV2aXNpb24gOTQxNzEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTIgKzMzLDEzIEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnRTdGFjay5oIgogI2luY2x1ZGUgIkhU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaCIKICNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCi0j
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRQb3NpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMjQxLDcgKzI0Miw3IEBAIHByaXZhdGU6CiAgICAgSW5zZXJ0
aW9uTW9kZSBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZTsKIAogICAgIC8vIGh0dHA6Ly93d3cud2hh
dHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlv
bi5odG1sI3BlbmRpbmctdGFibGUtY2hhcmFjdGVyLXRva2VucwotICAgIFZlY3RvcjxVQ2hhcj4g
bV9wZW5kaW5nVGFibGVDaGFyYWN0ZXJzOworICAgIFN0cmluZ0J1aWxkZXIgbV9wZW5kaW5nVGFi
bGVDaGFyYWN0ZXJzOwogCiAgICAgLy8gV2UgYWNjZXNzIHBhcnNlciBiZWNhdXNlIEhUTUw1IHNw
ZWMgcmVxdWlyZXMgdGhhdCB3ZSBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHRv
a2VuaXplcgogICAgIC8vIGZyb20gd2l0aGluIHBhcnNlciBhY3Rpb25zLiBXZSBhbHNvIG5lZWQg
aXQgdG8gdHJhY2sgdGhlIGN1cnJlbnQgcG9zaXRpb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAkocmV2aXNpb24gOTQxNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlIDx3dGYv
RGVjaW1hbE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yNjEsNyArMjYyLDcgQEAgaW5saW5lIGludCBoZXhU
b0ludChVQ2hhciBjKQogICAgIHJldHVybiAwOwogfQogCi1ib29sIGRlY29kZVN0cmluZyhjb25z
dCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkK
K2Jvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwg
U3RyaW5nQnVpbGRlciogb3V0cHV0KQogewogICAgIHdoaWxlIChzdGFydCA8IGVuZCkgewogICAg
ICAgICBVQ2hhciBjID0gKnN0YXJ0Kys7CkBAIC0zMjEsMTEgKzMyMiwxMSBAQCBib29sIGRlY29k
ZVN0cmluZyhjb25zdCBVQ2hhciogc3RhcnQsIGNvCiAgICAgfQogICAgIGlmIChzdGFydCA+IGVu
ZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyOworICAg
IFN0cmluZ0J1aWxkZXIgYnVmZmVyOwogICAgIGJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkoZW5kIC0g
c3RhcnQpOwogICAgIGlmICghZGVjb2RlU3RyaW5nKHN0YXJ0LCBlbmQsICZidWZmZXIpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKm91dHB1dCA9IFN0cmluZyhidWZmZXIuZGF0YSgpLCBi
dWZmZXIuc2l6ZSgpKTsgICAgCisgICAgKm91dHB1dCA9IGJ1ZmZlci50b1N0cmluZygpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC00NDQsNyArNDQ1LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gYnVpbGRWYWx1ZShjbwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQog
Ci1pbmxpbmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFyIGMsIFZlY3RvcjxVQ2hhcj4qIGRzdCkKK2lu
bGluZSBib29sIGVzY2FwZUNoYXIoVUNoYXIgYywgU3RyaW5nQnVpbGRlciogZHN0KQogewogICAg
IHN3aXRjaCAoYykgewogICAgIGNhc2UgJ1xiJzogZHN0LT5hcHBlbmQoIlxcYiIsIDIpOyBicmVh
azsKQEAgLTQ2MCw3ICs0NjEsNyBAQCBpbmxpbmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFyIGMsIFZl
Y3RvcjxVCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIGRvdWJsZVF1b3RlU3Ry
aW5nKGNvbnN0IFN0cmluZyYgc3RyLCBWZWN0b3I8VUNoYXI+KiBkc3QpCitpbmxpbmUgdm9pZCBk
b3VibGVRdW90ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgU3RyaW5nQnVpbGRlciogZHN0KQog
ewogICAgIGRzdC0+YXBwZW5kKCciJyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0
ci5sZW5ndGgoKTsgKytpKSB7CkBAIC01NTYsMTMgKzU1NywxMyBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBJbnNwZWN0b3JWYWx1CiAKIFN0cmluZyBJbnNwZWN0b3JWYWx1ZTo6dG9KU09O
U3RyaW5nKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAgICBTdHJpbmdC
dWlsZGVyIHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDUxMik7CiAgICAgd3Jp
dGVKU09OKCZyZXN1bHQpOwotICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0
LnNpemUoKSk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi12b2lkIEluc3Bl
Y3RvclZhbHVlOjp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAordm9pZCBJ
bnNwZWN0b3JWYWx1ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV90eXBlID09IFR5cGVOdWxsKTsKICAgICBvdXRwdXQtPmFwcGVuZChudWxs
U3RyaW5nLCA0KTsKQEAgLTYxNiw3ICs2MTcsNyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6
OmFzTnVtYmVyKHVuc2lnCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQmFz
aWNWYWx1ZTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKK3ZvaWQgSW5z
cGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QK
IHsKICAgICBBU1NFUlQodHlwZSgpID09IFR5cGVCb29sZWFuIHx8IHR5cGUoKSA9PSBUeXBlTnVt
YmVyKTsKICAgICBpZiAodHlwZSgpID09IFR5cGVCb29sZWFuKSB7CkBAIC02NTIsNyArNjUzLDcg
QEAgYm9vbCBJbnNwZWN0b3JTdHJpbmc6OmFzU3RyaW5nKFN0cmluZyogbwogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4q
IG91dHB1dCkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yU3RyaW5nOjp3cml0ZUpTT04oU3RyaW5nQnVp
bGRlciogb3V0cHV0KSBjb25zdAogewogICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZVN0cmluZyk7
CiAgICAgZG91YmxlUXVvdGVTdHJpbmcobV9zdHJpbmdWYWx1ZSwgb3V0cHV0KTsKQEAgLTcyNCw3
ICs3MjUsNyBAQCB2b2lkIEluc3BlY3Rvck9iamVjdDo6cmVtb3ZlKGNvbnN0IFN0cmluCiAgICAg
fQogfQogCi12b2lkIEluc3BlY3Rvck9iamVjdDo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91
dHB1dCkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yT2JqZWN0Ojp3cml0ZUpTT04oU3RyaW5nQnVpbGRl
ciogb3V0cHV0KSBjb25zdAogewogICAgIG91dHB1dC0+YXBwZW5kKCd7Jyk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX29yZGVyLnNpemUoKTsgKytpKSB7CkBAIC03NjEsNyArNzYyLDcg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQXJyYQogICAgIHJldHVybiB0
aGlzOwogfQogCi12b2lkIEluc3BlY3RvckFycmF5Ojp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiog
b3V0cHV0KSBjb25zdAordm9pZCBJbnNwZWN0b3JBcnJheTo6d3JpdGVKU09OKFN0cmluZ0J1aWxk
ZXIqIG91dHB1dCkgY29uc3QKIHsKICAgICBvdXRwdXQtPmFwcGVuZCgnWycpOwogICAgIGZvciAo
VmVjdG9yPFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Rh
dGEuYmVnaW4oKTsgaXQgIT0gbV9kYXRhLmVuZCgpOyArK2l0KSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCShyZXZpc2lvbiA5NDE3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtODcsNyArODcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHBhcnNlSlNPTihjb25zdCBTdHJpbmcmIGpzb24pOwogCiAgICAgU3RyaW5nIHRvSlNP
TlN0cmluZygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFy
Piogb3V0cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxk
ZXIqIG91dHB1dCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBJbnNwZWN0b3JW
YWx1ZShUeXBlIHR5cGUpIDogbV90eXBlKHR5cGUpIHsgfQpAQCAtMTIxLDcgKzEyMSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIodW5zaWduZWQgbG9uZyogb3V0cHV0KSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIodW5zaWduZWQgaW50KiBvdXRwdXQpIGNv
bnN0OwogCi0gICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGJv
b2wgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZUJvb2xlYW4pLCBtX2Jvb2xWYWx1ZSh2YWx1
ZSkgeyB9CkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGFz
U3RyaW5nKFN0cmluZyogb3V0cHV0KSBjb25zdDsgICAgCiAKLSAgICB2aXJ0dWFsIHZvaWQgd3Jp
dGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdy
aXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKSA6IEluc3BlY3RvclZh
bHVlKFR5cGVTdHJpbmcpLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0KQEAgLTE5OSw3ICsxOTks
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0g
ICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdDsK
IAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KICAgICBp
dGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KQEAgLTIzMyw3ICsyMzMsNyBA
QCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBnZXQoc2l6ZV90IGlu
ZGV4KTsKIAotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1
dCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yQXJyYXkoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCShy
ZXZpc2lvbiA5NDE3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vz
c0NvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTExNSwxOSArMTE2LDE5IEBAIFJlc291cmNl
UmVxdWVzdCBjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmwKICAgICBjb25zdCBIVFRQSGVhZGVyTWFw
JiByZXF1ZXN0SGVhZGVyRmllbGRzID0gcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CiAKICAg
ICBpZiAocmVxdWVzdEhlYWRlckZpZWxkcy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIFZlY3RvcjxV
Q2hhcj4gaGVhZGVyQnVmZmVyOworICAgICAgICBTdHJpbmdCdWlsZGVyIGhlYWRlckJ1ZmZlcjsK
ICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVy
RmllbGRzLmJlZ2luKCk7Ci0gICAgICAgIGFwcGVuZChoZWFkZXJCdWZmZXIsIGl0LT5maXJzdCk7
CisgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmZpcnN0KTsKICAgICAgICAgKytpdDsK
IAogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXF1ZXN0SGVh
ZGVyRmllbGRzLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcsJyk7CiAgICAgICAgICAgICBoZWFkZXJCdWZm
ZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgICAgICBhcHBlbmQoaGVhZGVyQnVmZmVyLCBpdC0+Zmly
c3QpOworICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+Zmlyc3QpOwogICAgICAg
ICB9CiAKLSAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vz
cy1Db250cm9sLVJlcXVlc3QtSGVhZGVycyIsIFN0cmluZzo6YWRvcHQoaGVhZGVyQnVmZmVyKSk7
CisgICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJBY2Nlc3MtQ29u
dHJvbC1SZXF1ZXN0LUhlYWRlcnMiLCBoZWFkZXJCdWZmZXIudG9TdHJpbmcoKSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIHByZWZsaWdodFJlcXVlc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJ
KHJldmlzaW9uIDk0MTcxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtODM2LDE3ICs4Mzcs
MTcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbAogICAgIC8vIFRo
ZW4sIGluc2VydCB0aGUgcmVzb3VyY2UKICAgICAKICAgICAvLyBTZXJpYWxpemUgdGhlIGhlYWRl
cnMKLSAgICBWZWN0b3I8VUNoYXI+IHN0cmluZ0J1aWxkZXI7CisgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOwogICAgIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IHJlc291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBm
b3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3VyY2UtPnJlc3BvbnNl
KCkuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0IT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC5s
ZW5ndGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknOicpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJ1xuJyk7CiAgICAgfQogICAgIAotICAgIFN0cmluZyBo
ZWFkZXJzID0gU3RyaW5nOjphZG9wdChzdHJpbmdCdWlsZGVyKTsKKyAgICBTdHJpbmcgaGVhZGVy
cyA9IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICAKICAgICBTUUxpdGVTdGF0ZW1lbnQg
cmVzb3VyY2VTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2Vz
ICh1cmwsIHN0YXR1c0NvZGUsIHJlc3BvbnNlVVJMLCBoZWFkZXJzLCBkYXRhLCBtaW1lVHlwZSwg
dGV4dEVuY29kaW5nTmFtZSkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/KSIpOwogICAgIGlm
IChyZXNvdXJjZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiA5NDE3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgpAQCAtNDI3LDEz
ICs0MjgsMTMgQEAgdm9pZCBDaHJvbWU6OnNldFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlcwogICAg
ICAgICAgICAgICAgICAgICBGaWxlTGlzdCogZmlsZXMgPSBpbnB1dC0+ZmlsZXMoKTsKICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGlzdFNpemUgPSBmaWxlcy0+bGVuZ3RoKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChsaXN0U2l6ZSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxVQ2hhcj4gbmFtZXM7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdC
dWlsZGVyIG5hbWVzOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsaXN0U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
KG5hbWVzLCBmaWxlcy0+aXRlbShpKS0+ZmlsZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZXMuYXBwZW5kKGZpbGVzLT5pdGVtKGkpLT5maWxlTmFtZSgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSBsaXN0U2l6ZSAtIDEpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZCgnXG4nKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXAgPSBTdHJpbmc6OmFk
b3B0KG5hbWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXAgPSBuYW1lcy50b1N0
cmluZygpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlsZW5hbWUgYWx3YXlzIGRpc3Bs
YXkgYXMgTFRSLgogICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcERpcmVjdGlvbiA9IExU
UjsKICAgICAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
U2VyaWFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5jcHAJKHJldmlzaW9uIDk0MTcxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
U2VyaWFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDkgKzk2LDkgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgflNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcigpOwogCiBwcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0Kik7
Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVt
ZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1
dGVzKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqLCBOYW1l
c3BhY2VzKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoU3RyaW5n
QnVpbGRlciYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwogICAgIHZpcnR1YWwgdm9pZCBh
cHBlbmRFbmRUYWcoTm9kZSopOwogCiBwcml2YXRlOgpAQCAtMTIwLDI3ICsxMjAsMjggQEAgU2Vy
aWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjp+U2VyaWFsaXplcgogewogfQogCi12b2lkIFNlcmlh
bGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRl
eHQqIHRleHQpCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChT
dHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqIHRleHQpCiB7CiAgICAgRWxlbWVudCogcGFyZW50ID0g
dGV4dC0+cGFyZW50RWxlbWVudCgpOwogICAgIGlmIChwYXJlbnQgJiYgIXNob3VsZElnbm9yZUVs
ZW1lbnQocGFyZW50KSkKICAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQob3V0
LCB0ZXh0KTsKIH0KIAotdm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVs
ZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBu
YW1lc3BhY2VzKQordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1l
bnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1l
c3BhY2VzKQogewogICAgIGlmICghc2hvdWxkSWdub3JlRWxlbWVudChlbGVtZW50KSkKICAgICAg
ICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQob3V0LCBlbGVtZW50LCBuYW1lc3Bh
Y2VzKTsKIAogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykp
IHsKLSAgICAgICAgU3RyaW5nIG1ldGEgPSAiPG1ldGEgY2hhcnNldD1cIiIgKyBtX2RvY3VtZW50
LT5jaGFyc2V0KCkgKyAiXCI+IjsKLSAgICAgICAgb3V0LmFwcGVuZChtZXRhLmNoYXJhY3RlcnMo
KSwgbWV0YS5sZW5ndGgoKSk7CisgICAgICAgIG91dC5hcHBlbmQoIjxtZXRhIGNoYXJzZXQ9XCIi
KTsKKyAgICAgICAgb3V0LmFwcGVuZChtX2RvY3VtZW50LT5jaGFyc2V0KCkpOworICAgICAgICBv
dXQuYXBwZW5kKCJcIj4iKTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogRm9yIG9iamVjdCAocGx1
Z2lucykgdGFncyBhbmQgdmlkZW8gdGFnIHdlIGNvdWxkIHJlcGxhY2UgdGhlbSBieSBhbiBpbWFn
ZSBvZiB0aGVpciBjdXJyZW50IGNvbnRlbnRzLgogfQogCi12b2lkIFNlcmlhbGl6ZXJNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVs
ZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIFNlcmlhbGl6ZXJN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiBv
dXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgaWYg
KCFlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCShyZXZpc2lvbiA5NDE3MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
Mzk1LDE4ICszOTYsMTggQEAgU3RyaW5nIFNlY3VyaXR5T3JpZ2luOjp0b1N0cmluZygpIGNvbnN0
CiAgICAgICAgIHJldHVybiAiZmlsZTovLyI7CiAgICAgfQogCi0gICAgVmVjdG9yPFVDaGFyPiBy
ZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9wcm90b2NvbC5sZW5n
dGgoKSArIG1faG9zdC5sZW5ndGgoKSArIDEwKTsKLSAgICBhcHBlbmQocmVzdWx0LCBtX3Byb3Rv
Y29sKTsKLSAgICBhcHBlbmQocmVzdWx0LCAiOi8vIik7Ci0gICAgYXBwZW5kKHJlc3VsdCwgbV9o
b3N0KTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFj
aXR5KG1fcHJvdG9jb2wubGVuZ3RoKCkgKyBtX2hvc3QubGVuZ3RoKCkgKyAxMCk7CisgICAgcmVz
dWx0LmFwcGVuZChtX3Byb3RvY29sKTsKKyAgICByZXN1bHQuYXBwZW5kKCI6Ly8iKTsKKyAgICBy
ZXN1bHQuYXBwZW5kKG1faG9zdCk7CiAKICAgICBpZiAobV9wb3J0KSB7Ci0gICAgICAgIGFwcGVu
ZChyZXN1bHQsICI6Iik7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIFN0cmluZzo6bnVtYmVyKG1f
cG9ydCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKCI6Iik7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoU3RyaW5nOjpudW1iZXIobV9wb3J0KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6
YWRvcHQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
S1VSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJ
KHJldmlzaW9uIDk0MTcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgogCiAjaWYgVVNFKElDVV9VTklDT0RFKQpAQCAtODg5LDQ3ICs4
OTAsNDcgQEAgU3RyaW5nIEtVUkw6OmRlcHJlY2F0ZWRTdHJpbmcoKSBjb25zdAogICAgIGlmICgh
bV9pc1ZhbGlkKQogICAgICAgICByZXR1cm4gbV9zdHJpbmc7CiAKLSAgICBWZWN0b3I8VUNoYXI+
IHJlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKIAotICAgIGFwcGVuZChyZXN1bHQs
IHByb3RvY29sKCkpOworICAgIHJlc3VsdC5hcHBlbmQocHJvdG9jb2woKSk7CiAgICAgcmVzdWx0
LmFwcGVuZCgnOicpOwogCi0gICAgVmVjdG9yPFVDaGFyPiBhdXRob3JpdHk7CisgICAgU3RyaW5n
QnVpbGRlciBhdXRob3JpdHk7CiAKICAgICBpZiAobV9ob3N0RW5kICE9IG1fcGFzc3dvcmRFbmQp
IHsKICAgICAgICAgaWYgKG1fdXNlckVuZCAhPSBtX3VzZXJTdGFydCkgewotICAgICAgICAgICAg
YXBwZW5kKGF1dGhvcml0eSwgdXNlcigpKTsKKyAgICAgICAgICAgIGF1dGhvcml0eS5hcHBlbmQo
dXNlcigpKTsKICAgICAgICAgICAgIGF1dGhvcml0eS5hcHBlbmQoJ0AnKTsKICAgICAgICAgfQot
ICAgICAgICBhcHBlbmQoYXV0aG9yaXR5LCBob3N0KCkpOworICAgICAgICBhdXRob3JpdHkuYXBw
ZW5kKGhvc3QoKSk7CiAgICAgICAgIGlmIChoYXNQb3J0KCkpIHsKICAgICAgICAgICAgIGF1dGhv
cml0eS5hcHBlbmQoJzonKTsKLSAgICAgICAgICAgIGFwcGVuZChhdXRob3JpdHksIFN0cmluZzo6
bnVtYmVyKHBvcnQoKSkpOworICAgICAgICAgICAgYXV0aG9yaXR5LmFwcGVuZChTdHJpbmc6Om51
bWJlcihwb3J0KCkpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghYXV0aG9yaXR5Lmlz
RW1wdHkoKSkgewogICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7CiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJy8nKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChhdXRob3JpdHkpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKGF1dGhvcml0eS5jaGFyYWN0ZXJzKCksIGF1dGhvcml0eS5sZW5ndGgoKSk7
CiAgICAgfSBlbHNlIGlmIChwcm90b2NvbElzKCJmaWxlIikpIHsKICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnLycpOwogICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7CiAgICAgfQogCi0gICAgYXBw
ZW5kKHJlc3VsdCwgcGF0aCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKHBhdGgoKSk7CiAKICAgICBp
ZiAobV9wYXRoRW5kICE9IG1fcXVlcnlFbmQpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnPycp
OwotICAgICAgICBhcHBlbmQocmVzdWx0LCBxdWVyeSgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChxdWVyeSgpKTsKICAgICB9CiAKICAgICBpZiAobV9mcmFnbWVudEVuZCAhPSBtX3F1ZXJ5RW5k
KSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyMnKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwg
ZnJhZ21lbnRJZGVudGlmaWVyKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGZyYWdtZW50SWRl
bnRpZmllcigpKTsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogU3RyaW5nIGRlY29kZVVSTEVzY2Fw
ZVNlcXVlbmNlcyhjb25zdCBTdHJpbmcmIHN0cikKQEAgLTkzOSw3ICs5NDAsNyBAQCBTdHJpbmcg
ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0CiAKIFN0cmluZyBkZWNvZGVVUkxFc2Nh
cGVTZXF1ZW5jZXMoY29uc3QgU3RyaW5nJiBzdHIsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rp
bmcpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1
bHQ7CiAKICAgICBDaGFyQnVmZmVyIGJ1ZmZlcjsKIApAQCAtOTc4LDEzICs5NzksMTMgQEAgU3Ry
aW5nIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdAogCiAgICAgICAgIC8vIEJ1aWxk
IHVwIHRoZSBzdHJpbmcgd2l0aCB3aGF0IHdlIGp1c3Qgc2tpcHBlZCBhbmQgd2hhdCB3ZSBqdXN0
IGRlY29kZWQuCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RyLmNoYXJhY3RlcnMoKSArIGRlY29k
ZWRQb3NpdGlvbiwgZW5jb2RlZFJ1blBvc2l0aW9uIC0gZGVjb2RlZFBvc2l0aW9uKTsKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZChkZWNvZGVkLmNoYXJhY3RlcnMoKSwgZGVjb2RlZC5sZW5ndGgoKSk7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVjb2RlZCk7CiAgICAgICAgIGRlY29kZWRQb3NpdGlv
biA9IGVuY29kZWRSdW5FbmQ7CiAgICAgfQogCiAgICAgcmVzdWx0LmFwcGVuZChzdHIuY2hhcmFj
dGVycygpICsgZGVjb2RlZFBvc2l0aW9uLCBsZW5ndGggLSBkZWNvZGVkUG9zaXRpb24pOwogCi0g
ICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3Ry
aW5nKCk7CiB9CiAKIC8vIENhdXRpb246IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYm91bmRzIGNo
ZWNrLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3Rr
LmNwcAkocmV2aXNpb24gOTQxNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0
YU9iamVjdEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRl
ICJtYXJrdXAuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0xMTAsMTQgKzExMSwxNCBAQCB2b2lkIERhdGFPYmplY3RHdGs6
OnNldFVSTChjb25zdCBLVVJMJiB1CiAgICAgaWYgKGFjdHVhbExhYmVsLmlzRW1wdHkoKSkKICAg
ICAgICAgYWN0dWFsTGFiZWwgPSB1cmw7CiAKLSAgICBWZWN0b3I8VUNoYXI+IG1hcmt1cDsKLSAg
ICBhcHBlbmQobWFya3VwLCAiPGEgaHJlZj1cIiIpOwotICAgIGFwcGVuZChtYXJrdXAsIHVybC5z
dHJpbmcoKSk7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIlwiPiIpOworICAgIFN0cmluZ0J1aWxkZXIg
bWFya3VwOworICAgIG1hcmt1cC5hcHBlbmQoIjxhIGhyZWY9XCIiKTsKKyAgICBtYXJrdXAuYXBw
ZW5kKHVybC5zdHJpbmcoKSk7CisgICAgbWFya3VwLmFwcGVuZCgiXCI+Iik7CiAgICAgR093blB0
cjxnY2hhcj4gZXNjYXBlZChnX21hcmt1cF9lc2NhcGVfdGV4dChhY3R1YWxMYWJlbC51dGY4KCku
ZGF0YSgpLCAtMSkpOwotICAgIGFwcGVuZChtYXJrdXAsIFN0cmluZzo6ZnJvbVVURjgoZXNjYXBl
ZC5nZXQoKSkpOwotICAgIGFwcGVuZChtYXJrdXAsICI8L2E+Iik7Ci0gICAgc2V0TWFya3VwKFN0
cmluZzo6YWRvcHQobWFya3VwKSk7CisgICAgbWFya3VwLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4
KGVzY2FwZWQuZ2V0KCkpKTsKKyAgICBtYXJrdXAuYXBwZW5kKCI8L2E+Iik7CisgICAgc2V0TWFy
a3VwKG1hcmt1cC50b1N0cmluZygpKTsKIH0KIAogdm9pZCBEYXRhT2JqZWN0R3RrOjpjbGVhclRl
eHQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFy
c2Vycy5jcHAJKHJldmlzaW9uIDk0MTcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9IVFRQUGFyc2Vycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvRGF0
ZU1hdGguaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKQEAgLTE5Niw3ICsxOTcsNyBAQCBTdHJp
bmcgZmlsZW5hbWVGcm9tSFRUUENvbnRlbnREaXNwb3NpdGlvCiAKIFN0cmluZyBleHRyYWN0TUlN
RVR5cGVGcm9tTWVkaWFUeXBlKGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKQogewotICAgIFZlY3Rv
cjxVQ2hhciwgNjQ+IG1pbWVUeXBlOworICAgIFN0cmluZ0J1aWxkZXIgbWltZVR5cGU7CiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gbWVkaWFUeXBlLmxlbmd0aCgpOwogICAgIG1pbWVUeXBlLnJlc2Vy
dmVDYXBhY2l0eShsZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewpAQCAtMjI0LDkgKzIyNSw5IEBAIFN0cmluZyBleHRyYWN0TUlNRVR5cGVGcm9tTWVk
aWFUeXBlKGNvbnMKICAgICAgICAgbWltZVR5cGUuYXBwZW5kKGMpOwogICAgIH0KIAotICAgIGlm
IChtaW1lVHlwZS5zaXplKCkgPT0gbGVuZ3RoKQorICAgIGlmIChtaW1lVHlwZS5sZW5ndGgoKSA9
PSBsZW5ndGgpCiAgICAgICAgIHJldHVybiBtZWRpYVR5cGU7Ci0gICAgcmV0dXJuIFN0cmluZyht
aW1lVHlwZS5kYXRhKCksIG1pbWVUeXBlLnNpemUoKSk7CisgICAgcmV0dXJuIG1pbWVUeXBlLnRv
U3RyaW5nKCk7CiB9CiAKIFN0cmluZyBleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUoY29uc3Qg
U3RyaW5nJiBtZWRpYVR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY0lDVS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNJQ1UuY3BwCShyZXZpc2lvbiA5NDE3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
NyBAQAogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5o
PgogCiB1c2luZyBzdGQ6Om1pbjsKQEAgLTMwOCw3ICszMDksNyBAQCBTdHJpbmcgVGV4dENvZGVj
SUNVOjpkZWNvZGUoY29uc3QgY2hhciogCiAgICAgCiAgICAgRXJyb3JDYWxsYmFja1NldHRlciBj
YWxsYmFja1NldHRlcihtX2NvbnZlcnRlcklDVSwgc3RvcE9uRXJyb3IpOwogCi0gICAgVmVjdG9y
PFVDaGFyPiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKICAgICBVQ2hhciBi
dWZmZXJbQ29udmVyc2lvbkJ1ZmZlclNpemVdOwogICAgIFVDaGFyKiBidWZmZXJMaW1pdCA9IGJ1
ZmZlciArIENvbnZlcnNpb25CdWZmZXJTaXplOwpAQCAtMzMwLDcgKzMzMSw3IEBAIFN0cmluZyBU
ZXh0Q29kZWNJQ1U6OmRlY29kZShjb25zdCBjaGFyKiAKICAgICAgICAgc2F3RXJyb3IgPSB0cnVl
OwogICAgIH0KIAotICAgIFN0cmluZyByZXN1bHRTdHJpbmcgPSBTdHJpbmc6OmFkb3B0KHJlc3Vs
dCk7CisgICAgU3RyaW5nIHJlc3VsdFN0cmluZyA9IHJlc3VsdC50b1N0cmluZygpOwogCiAgICAg
Ly8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDE0PgogICAgIC8v
IFNpbXBsaWZpZWQgQ2hpbmVzZSBwYWdlcyB1c2UgdGhlIGNvZGUgQTNBMCB0byBtZWFuICJmdWxs
LXdpZHRoIHNwYWNlIiwgYnV0IElDVSBkZWNvZGVzIGl0IGFzIFUrRTVFNS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNwcAkocmV2aXNpb24gOTQxNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NCwxMyArODQsNyBAQCBUZXh0U3RyZWFtJiBUZXh0U3RyZWFtOjpvcGVyYXRv
cjw8KGRvdWJsCiAKIFRleHRTdHJlYW0mIFRleHRTdHJlYW06Om9wZXJhdG9yPDwoY29uc3QgY2hh
ciogc3RyaW5nKQogewotICAgIHNpemVfdCBzdHJpbmdMZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsK
LSAgICBzaXplX3QgdGV4dExlbmd0aCA9IG1fdGV4dC5zaXplKCk7Ci0gICAgaWYgKHN0cmluZ0xl
bmd0aCA+IG51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0gdGV4dExlbmd0aCkKLSAgICAg
ICAgQ1JBU0goKTsKLSAgICBtX3RleHQuZ3Jvdyh0ZXh0TGVuZ3RoICsgc3RyaW5nTGVuZ3RoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZ0xlbmd0aDsgKytpKQotICAgICAgICBt
X3RleHRbdGV4dExlbmd0aCArIGldID0gc3RyaW5nW2ldOworICAgIG1fdGV4dC5hcHBlbmQoc3Ry
aW5nKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEwMywxMyArOTcsMTUgQEAgVGV4dFN0
cmVhbSYgVGV4dFN0cmVhbTo6b3BlcmF0b3I8PChjb25zdAogCiBUZXh0U3RyZWFtJiBUZXh0U3Ry
ZWFtOjpvcGVyYXRvcjw8KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGFwcGVuZChtX3Rl
eHQsIHN0cmluZyk7CisgICAgbV90ZXh0LmFwcGVuZChzdHJpbmcpOwogICAgIHJldHVybiAqdGhp
czsKIH0KIAogU3RyaW5nIFRleHRTdHJlYW06OnJlbGVhc2UoKQogewotICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KG1fdGV4dCk7CisgICAgU3RyaW5nIHJlc3VsdCA9IG1fdGV4dC50b1N0cmluZygp
OworICAgIG1fdGV4dC5jbGVhcigpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNpZiBPUyhX
SU5ET1dTKSAmJiBDUFUoWDg2XzY0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0U3RyZWFtLmgJKHJldmlzaW9uIDk0MTcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0U3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNk
ZWZpbmUgVGV4dFN0cmVhbV9oCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01
Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgcmVsZWFzZSgpOwogCiBwcml2YXRlOgot
ICAgIFZlY3RvcjxVQ2hhcj4gbV90ZXh0OworICAgIFN0cmluZ0J1aWxkZXIgbV90ZXh0OwogfTsK
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAkocmV2aXNp
b24gOTQxNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRl
ci5oIgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAvLyBXZSB1c2UgLTIgaGVyZSBiZWNhdXNlIHNvbWUg
cGx1Z2lucyBsaWtlIHRvIHJldHVybiAtMSB0byBpbmRpY2F0ZSBlcnJvcgpAQCAtMTM4LDIxICsx
MzksMjEgQEAgdm9pZCBQbHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtKCkKICAgICBsb25nIGxvbmcg
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVu
dExlbmd0aCgpOwogCiAgICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5pc0hUVFAoKSkgewotICAg
ICAgICBWZWN0b3I8VUNoYXI+IHN0cmluZ0J1aWxkZXI7CisgICAgICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKICAgICAgICAgU3RyaW5nIHNlcGFyYXRvcigiOiAiKTsKIAogICAgICAg
ICBTdHJpbmcgc3RhdHVzTGluZSA9ICJIVFRQICIgKyBTdHJpbmc6Om51bWJlcihtX3Jlc291cmNl
UmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkgKyAiIE9LXG4iOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChzdGF0dXNMaW5lLmNoYXJhY3RlcnMoKSwgc3RhdHVzTGluZS5sZW5ndGgoKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHN0YXR1c0xpbmUpOwogCiAgICAgICAgIEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRw
SGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
aXQtPmZpcnN0LmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsKLSAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvci5jaGFyYWN0ZXJzKCksIHNlcGFyYXRvci5s
ZW5ndGgoKSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNo
YXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
c2VwYXJhdG9yKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQp
OwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgICAgIH0KIAot
ICAgICAgICBtX2hlYWRlcnMgPSBTdHJpbmc6OmFkb3B0KHN0cmluZ0J1aWxkZXIpLnV0ZjgoKTsK
KyAgICAgICAgbV9oZWFkZXJzID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKIAog
ICAgICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBlbmNvZGVkIChtb3N0IGxpa2VseSBjb21wcmVz
c2VkKSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5ndGggdG8gdGhlIHBsdWdpbiwKICAgICAgICAg
Ly8gd2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSBkZWNvZGVkIGxlbmd0aCwgbm90IHll
dCBrbm93biBhdCB0aGUgbW9tZW50LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gOTQxNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw4ICsxNjgsOCBA
QCBzdGF0aWMgdm9pZCBhZGp1c3RDaGFyYWN0ZXJzQW5kTGVuZ3RoRm9yCiAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBoeXBoZW5TdHJpbmcgPSBzdHlsZS0+aHlwaGVuU3RyaW5nKCk7CiAgICAgY2hh
cmFjdGVyc1dpdGhIeXBoZW4ucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCArIGh5cGhlblN0cmluZy5s
ZW5ndGgoKSk7CiAgICAgY2hhcmFjdGVyc1dpdGhIeXBoZW4uYXBwZW5kKGNoYXJhY3RlcnMsIGxl
bmd0aCk7Ci0gICAgY2hhcmFjdGVyc1dpdGhIeXBoZW4uYXBwZW5kKGh5cGhlblN0cmluZy5jaGFy
YWN0ZXJzKCksIGh5cGhlblN0cmluZy5sZW5ndGgoKSk7Ci0gICAgY2hhcmFjdGVycyA9IGNoYXJh
Y3RlcnNXaXRoSHlwaGVuLmRhdGEoKTsKKyAgICBjaGFyYWN0ZXJzV2l0aEh5cGhlbi5hcHBlbmQo
aHlwaGVuU3RyaW5nKTsKKyAgICBjaGFyYWN0ZXJzID0gY2hhcmFjdGVyc1dpdGhIeXBoZW4uY2hh
cmFjdGVycygpOwogICAgIGxlbmd0aCArPSBoeXBoZW5TdHJpbmcubGVuZ3RoKCk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24gOTQx
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiSW5saW5lQm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGV4dC5oIiAvLyBzbyB0ZXh0UmVuZGVyZXIoKSBjYW4gYmUgaW5saW5lCiAjaW5j
bHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNCw3ICszNSwxMSBAQCBjbGFzcyBEb2N1bWVudE1h
cmtlcjsKIAogY29uc3QgdW5zaWduZWQgc2hvcnQgY05vVHJ1bmNhdGlvbiA9IFVTSFJUX01BWDsK
IGNvbnN0IHVuc2lnbmVkIHNob3J0IGNGdWxsVHJ1bmNhdGlvbiA9IFVTSFJUX01BWCAtIDE7Ci10
eXBlZGVmIFZlY3RvcjxVQ2hhciwgMjU2PiBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW47CisKK2Ns
YXNzIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiA6IHB1YmxpYyBTdHJpbmdCdWlsZGVyIHsKK3B1
YmxpYzoKKyAgICBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4oKSB7IHJlc2VydmVDYXBhY2l0eSgy
NTYpOyB9Cit9OwogCiAvLyBIZWxwZXIgZnVuY3Rpb25zIHNoYXJlZCBieSBJbmxpbmVUZXh0Qm94
IC8gU1ZHUm9vdElubGluZUJveAogdm9pZCB1cGRhdGVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgQ29sb3ImIGZpbGxDb2xvciwgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9y
LCBmbG9hdCBzdHJva2VUaGlja25lc3MsIENvbG9yU3BhY2UpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiA5NDE3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAg
LTM3MCwxNyArMzcxLDE3IEBAIFN0cmluZyBSZW5kZXJMaXN0SXRlbTo6bWFya2VyVGV4dFdpdGhT
dWYKIAogICAgIGNvbnN0IFN0cmluZyYgbWFya2VyVGV4dCA9IG1fbWFya2VyLT50ZXh0KCk7CiAg
ICAgY29uc3QgU3RyaW5nIG1hcmtlclN1ZmZpeCA9IG1fbWFya2VyLT5zdWZmaXgoKTsKLSAgICBW
ZWN0b3I8VUNoYXI+IHJlc3VsdFZlY3RvcjsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKIAog
ICAgIGlmICghbV9tYXJrZXItPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAg
ICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZChtYXJrZXJTdWZmaXguY2hhcmFjdGVycygpLCBtYXJr
ZXJTdWZmaXgubGVuZ3RoKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1hcmtlclN1ZmZpeCk7
CiAKLSAgICByZXN1bHRWZWN0b3IuYXBwZW5kKG1hcmtlclRleHQuY2hhcmFjdGVycygpLCBtYXJr
ZXJUZXh0Lmxlbmd0aCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKG1hcmtlclRleHQpOwogCiAgICAg
aWYgKG1fbWFya2VyLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAg
IHJlc3VsdFZlY3Rvci5hcHBlbmQobWFya2VyU3VmZml4LmNoYXJhY3RlcnMoKSwgbWFya2VyU3Vm
Zml4Lmxlbmd0aCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtYXJrZXJTdWZmaXgpOwogCi0g
ICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0VmVjdG9yKTsKKyAgICByZXR1cm4gcmVzdWx0
LnRvU3RyaW5nKCk7CiB9CiAKIHZvaWQgUmVuZGVyTGlzdEl0ZW06OmV4cGxpY2l0VmFsdWVDaGFu
Z2VkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtl
ci5jcHAJKHJldmlzaW9uIDk0MTcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKQEAgLTEyMywxMiArMTI0LDEyIEBAIHN0YXRpYyBTdHJpbmcgdG9TeW1ib2xpYyhpbnQgbnVt
YmVyLCBjb24KICAgICAtLW51bWJlclNoYWRvdzsKIAogICAgIC8vIFRoZSBhc3Rlcmlza3MgbGlz
dC1zdHlsZS10eXBlIGlzIHRoZSB3b3JzdCBjYXNlOyB3ZSBzaG93IHxudW1iZXJTaGFkb3d8IGFz
dGVyaXNrcy4KLSAgICBWZWN0b3I8VUNoYXI+IGxldHRlcnM7CisgICAgU3RyaW5nQnVpbGRlciBs
ZXR0ZXJzOwogICAgIGxldHRlcnMuYXBwZW5kKHN5bWJvbHNbbnVtYmVyU2hhZG93ICUgc3ltYm9s
c1NpemVdKTsKICAgICB1bnNpZ25lZCBudW1TeW1ib2xzID0gbnVtYmVyU2hhZG93IC8gc3ltYm9s
c1NpemU7CiAgICAgd2hpbGUgKG51bVN5bWJvbHMtLSkKICAgICAgICAgbGV0dGVycy5hcHBlbmQo
c3ltYm9sc1tudW1iZXJTaGFkb3cgJSBzeW1ib2xzU2l6ZV0pOwotICAgIHJldHVybiBTdHJpbmc6
OmFkb3B0KGxldHRlcnMpOworICAgIHJldHVybiBsZXR0ZXJzLnRvU3RyaW5nKCk7CiB9CiAKIHN0
YXRpYyBTdHJpbmcgdG9BbHBoYWJldGljKGludCBudW1iZXIsIGNvbnN0IFVDaGFyKiBhbHBoYWJl
dCwgdW5zaWduZWQgYWxwaGFiZXRTaXplKQpAQCAtMTI3NCwxMyArMTI3NSwxMyBAQCB2b2lkIFJl
bmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgICAgIC8vIFRleHQgaXMgbm90
IGFyYml0cmFyeS4gV2UgY2FuIGp1ZGdlIHdoZXRoZXIgaXQncyBSVEwgZnJvbSB0aGUgZmlyc3Qg
Y2hhcmFjdGVyLAogICAgICAgICAvLyBhbmQgd2Ugb25seSBuZWVkIHRvIGhhbmRsZSB0aGUgZGly
ZWN0aW9uIFJpZ2h0VG9MZWZ0IGZvciBub3cuCiAgICAgICAgIGJvb2wgdGV4dE5lZWRzUmV2ZXJz
aW5nID0gZGlyZWN0aW9uKG1fdGV4dFswXSkgPT0gUmlnaHRUb0xlZnQ7Ci0gICAgICAgIFZlY3Rv
cjxVQ2hhcj4gcmV2ZXJzZWRUZXh0OworICAgICAgICBTdHJpbmdCdWlsZGVyIHJldmVyc2VkVGV4
dDsKICAgICAgICAgaWYgKHRleHROZWVkc1JldmVyc2luZykgewogICAgICAgICAgICAgaW50IGxl
bmd0aCA9IG1fdGV4dC5sZW5ndGgoKTsKLSAgICAgICAgICAgIHJldmVyc2VkVGV4dC5ncm93KGxl
bmd0aCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAg
ICAgICAgICAgICAgIHJldmVyc2VkVGV4dFtsZW5ndGggLSBpIC0gMV0gPSBtX3RleHRbaV07Ci0g
ICAgICAgICAgICB0ZXh0UnVuLnNldFRleHQocmV2ZXJzZWRUZXh0LmRhdGEoKSwgbGVuZ3RoKTsK
KyAgICAgICAgICAgIHJldmVyc2VkVGV4dC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICAg
ICAgICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IC0taSkKKyAgICAgICAgICAg
ICAgICByZXZlcnNlZFRleHQuYXBwZW5kKG1fdGV4dFtpXSk7CisgICAgICAgICAgICB0ZXh0UnVu
LnNldFRleHQocmV2ZXJzZWRUZXh0LmNoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKICAgICAgICAgfQog
CiAgICAgICAgIGNvbnN0IFVDaGFyIHN1ZmZpeCA9IGxpc3RNYXJrZXJTdWZmaXgodHlwZSwgbV9s
aXN0SXRlbS0+dmFsdWUoKSk7CkBAIC0xNTUyLDE4ICsxNTUzLDIwIEBAIFN0cmluZyBSZW5kZXJM
aXN0TWFya2VyOjpzdWZmaXgoKSBjb25zdAogICAgIEVMaXN0U3R5bGVUeXBlIHR5cGUgPSBzdHls
ZSgpLT5saXN0U3R5bGVUeXBlKCk7CiAgICAgY29uc3QgVUNoYXIgc3VmZml4ID0gbGlzdE1hcmtl
clN1ZmZpeCh0eXBlLCBtX2xpc3RJdGVtLT52YWx1ZSgpKTsKIAotICAgIFZlY3RvcjxVQ2hhcj4g
cmVzdWx0VmVjdG9yOwotICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQoc3VmZml4KTsKKyAgICBpZiAo
c3VmZml4ID09ICcgJykKKyAgICAgICAgcmV0dXJuIFN0cmluZygiICIpOwogCiAgICAgLy8gSWYg
dGhlIHN1ZmZpeCBpcyBub3QgJyAnLCBhbiBleHRyYSBzcGFjZSBpcyBuZWVkZWQKLSAgICBpZiAo
c3VmZml4ICE9ICcgJykgewotICAgICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpKQotICAgICAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZCgnICcpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICByZXN1bHRWZWN0b3IucHJlcGVuZCgnICcpOworICAgIFVDaGFyIGRh
dGFbMl07CisgICAgaWYgKHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgeworICAg
ICAgICBkYXRhWzBdID0gc3VmZml4OworICAgICAgICBkYXRhWzFdID0gJyAnOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGRhdGFbMF0gPSAnICc7CisgICAgICAgIGRhdGFbMV0gPSBzdWZmaXg7CiAg
ICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0VmVjdG9yKTsKKyAgICByZXR1
cm4gU3RyaW5nKGRhdGEsIDIpOwogfQogCiBib29sIFJlbmRlckxpc3RNYXJrZXI6OmlzSW5zaWRl
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAJKHJldmlzaW9uIDk0MTcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAgc3Rh
dGljIGJvb2wgaXNFbXB0eU9yVW5zdHlsZWRBcHBsZVN0eWxlUwogCiBTdHJpbmcgcXVvdGVBbmRF
c2NhcGVOb25QcmludGFibGVzKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBWZWN0b3I8VUNoYXI+
IHJlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICByZXN1bHQuYXBwZW5kKCci
Jyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBzLmxlbmd0aCgpOyArK2kpIHsKICAg
ICAgICAgVUNoYXIgYyA9IHNbaV07CkBAIC0yMjIsNyArMjIyLDcgQEAgU3RyaW5nIHF1b3RlQW5k
RXNjYXBlTm9uUHJpbnRhYmxlcyhjb25zdAogICAgICAgICB9CiAgICAgfQogICAgIHJlc3VsdC5h
cHBlbmQoJyInKTsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogdm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJl
bmRlck9iamVjdChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBSZW5kZXJB
c1RleHRCZWhhdmlvciBiZWhhdmlvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHAJKHJldmlzaW9uIDk0MTcx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5s
aW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5k
ZXJUZXh0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgCkBAIC02NCwxMiArNjUsMTIgQEAgdm9pZCBSZW5kZXJNYXRoTUxG
ZW5jZWQ6OnVwZGF0ZUZyb21FbGVtZQogICAgIAogICAgIEF0b21pY1N0cmluZyBzZXBhcmF0b3Jz
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZlbmNlZCktPmdldEF0dHJpYnV0ZShNYXRoTUxOYW1l
czo6c2VwYXJhdG9yc0F0dHIpOwogICAgIGlmICghc2VwYXJhdG9ycy5pc051bGwoKSkgewotICAg
ICAgICBWZWN0b3I8VUNoYXI+IGNoYXJhY3RlcnM7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgY2hh
cmFjdGVyczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzZXBhcmF0b3Jz
Lmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgICAgIGlmICghaXNTcGFjZU9yTmV3bGluZShzZXBh
cmF0b3JzW2ldKSkKICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzLmFwcGVuZChzZXBhcmF0b3Jz
W2ldKTsKICAgICAgICAgfQotICAgICAgICBtX3NlcGFyYXRvcnMgPSAhY2hhcmFjdGVycy5zaXpl
KCkgPyAwIDogU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnMuZGF0YSgpICwgY2hhcmFjdGVy
cy5zaXplKCkpOworICAgICAgICBtX3NlcGFyYXRvcnMgPSAhY2hhcmFjdGVycy5sZW5ndGgoKSA/
IDAgOiBjaGFyYWN0ZXJzLnRvU3RyaW5nKCkuaW1wbCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IC8vIFRoZSBzZXBhcmF0b3IgZGVmYXVsdHMgdG8gYSBzaW5nbGUgY29tbWEuCiAgICAgICAgIG1f
c2VwYXJhdG9ycyA9IFN0cmluZ0ltcGw6OmNyZWF0ZSgiLCIpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwCShyZXZpc2lvbiA5NDE3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIkxldmVs
REJTbGljZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogLy8gTGV2
ZWxEQiBzdG9yZXMga2V5L3ZhbHVlIHBhaXJzLiBLZXlzIGFuZCB2YWx1ZXMgYXJlIHN0cmluZ3Mg
b2YgYnl0ZXMsIG5vcm1hbGx5IG9mIHR5cGUgVmVjdG9yPGNoYXI+LgogLy8KQEAgLTI2NCwxNiAr
MjY1LDE3IEBAIFN0cmluZyBkZWNvZGVTdHJpbmcoY29uc3QgY2hhciogcCwgY29uc3QKICAgICBB
U1NFUlQoISgoZW5kIC0gcCkgJSAyKSk7CiAKICAgICBzaXplX3QgbGVuID0gKGVuZCAtIHApIC8g
MjsKLSAgICBWZWN0b3I8VUNoYXI+IHZlY3RvcihsZW4pOworICAgIFN0cmluZ0J1aWxkZXIgcmVz
dWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobGVuKTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBoaSA9ICpwKys7
CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgbG8gPSAqcCsrOwogCi0gICAgICAgIHZlY3RvcltpXSA9
IChoaSA8PCA4KSB8IGxvOworICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFy
PigoaGkgPDwgOCkgfCBsbykpOwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHZl
Y3Rvcik7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBWZWN0b3I8Y2hhcj4g
ZW5jb2RlU3RyaW5nV2l0aExlbmd0aChjb25zdCBTdHJpbmcmIHMpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDk0MTcxKQorKysgU291cmNlL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU3LDcgKzg1Nyw3
IEBAIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWEKICAgICAgICAgcmV0
dXJuICIiOwogICAgIH0KIAotICAgIFZlY3RvcjxVQ2hhcj4gc3RyaW5nQnVpbGRlcjsKKyAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBm
b3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNwb25zZS5odHRwSGVh
ZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQhPSBlbmQ7ICsraXQpIHsKQEAgLTg3MywxNSArODczLDE1
IEBAIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWEKICAgICAgICAgaWYg
KCFtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmICFpc09uQWNjZXNzQ29udHJvbFJlc3BvbnNlSGVhZGVy
V2hpdGVsaXN0KGl0LT5maXJzdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVu
Z3RoKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnOicpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnICcpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3Rl
cnMoKSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGl0LT5zZWNvbmQpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXHInKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmlu
Zzo6YWRvcHQoc3RyaW5nQnVpbGRlcik7CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKTsKIH0KIAogU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXNwb25zZUhlYWRlcihjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiA5NDE3MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDcgQEAKICNpbmNsdWRlICJYUGF0aFV0aWwuaCIKICNpbmNsdWRlICJYUGF0aFZhbHVlLmgi
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBYUGF0aCB7CkBAIC0z
MTgsMjYgKzMxOSwyNiBAQCBWYWx1ZSBGdW5Qb3NpdGlvbjo6ZXZhbHVhdGUoKSBjb25zdAogVmFs
dWUgRnVuSWQ6OmV2YWx1YXRlKCkgY29uc3QKIHsKICAgICBWYWx1ZSBhID0gYXJnKDApLT5ldmFs
dWF0ZSgpOwotICAgIFZlY3RvcjxVQ2hhcj4gaWRMaXN0OyAvLyBBIHdoaXRlc3BhY2Utc2VwYXJh
dGVkIGxpc3Qgb2YgSURzCisgICAgU3RyaW5nQnVpbGRlciBpZExpc3Q7IC8vIEEgd2hpdGVzcGFj
ZS1zZXBhcmF0ZWQgbGlzdCBvZiBJRHMKIAogICAgIGlmIChhLmlzTm9kZVNldCgpKSB7CiAgICAg
ICAgIGNvbnN0IE5vZGVTZXQmIG5vZGVzID0gYS50b05vZGVTZXQoKTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgU3RyaW5n
IHN0ciA9IHN0cmluZ1ZhbHVlKG5vZGVzW2ldKTsKLSAgICAgICAgICAgIGlkTGlzdC5hcHBlbmQo
c3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlkTGlzdC5hcHBl
bmQoc3RyKTsKICAgICAgICAgICAgIGlkTGlzdC5hcHBlbmQoJyAnKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIFN0cmluZyBzdHIgPSBhLnRvU3RyaW5nKCk7Ci0gICAgICAgIGlk
TGlzdC5hcHBlbmQoc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgaWRM
aXN0LmFwcGVuZChzdHIpOwogICAgIH0KICAgICAKICAgICBUcmVlU2NvcGUqIGNvbnRleHRTY29w
ZSA9IGV2YWx1YXRpb25Db250ZXh0KCkubm9kZS0+dHJlZVNjb3BlKCk7CiAgICAgTm9kZVNldCBy
ZXN1bHQ7CiAgICAgSGFzaFNldDxOb2RlKj4gcmVzdWx0U2V0OwogCi0gICAgc2l6ZV90IHN0YXJ0
UG9zID0gMDsKLSAgICBzaXplX3QgbGVuZ3RoID0gaWRMaXN0LnNpemUoKTsKKyAgICB1bnNpZ25l
ZCBzdGFydFBvcyA9IDA7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gaWRMaXN0Lmxlbmd0aCgpOwog
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIHdoaWxlIChzdGFydFBvcyA8IGxlbmd0aCAmJiBp
c1doaXRlc3BhY2UoaWRMaXN0W3N0YXJ0UG9zXSkpCiAgICAgICAgICAgICArK3N0YXJ0UG9zOwpA
QCAtMzUxLDcgKzM1Miw3IEBAIFZhbHVlIEZ1bklkOjpldmFsdWF0ZSgpIGNvbnN0CiAKICAgICAg
ICAgLy8gSWYgdGhlcmUgYXJlIHNldmVyYWwgbm9kZXMgd2l0aCB0aGUgc2FtZSBpZCwgaWQoKSBz
aG91bGQgcmV0dXJuIHRoZSBmaXJzdCBvbmUuCiAgICAgICAgIC8vIEluIFdlYktpdCwgZ2V0RWxl
bWVudEJ5SWQgYmVoYXZlcyBzbywgdG9vLCBhbHRob3VnaCBpdHMgYmVoYXZpb3IgaW4gdGhpcyBj
YXNlIGlzIGZvcm1hbGx5IHVuZGVmaW5lZC4KLSAgICAgICAgTm9kZSogbm9kZSA9IGNvbnRleHRT
Y29wZS0+Z2V0RWxlbWVudEJ5SWQoU3RyaW5nKCZpZExpc3Rbc3RhcnRQb3NdLCBlbmRQb3MgLSBz
dGFydFBvcykpOworICAgICAgICBOb2RlKiBub2RlID0gY29udGV4dFNjb3BlLT5nZXRFbGVtZW50
QnlJZChTdHJpbmcoaWRMaXN0LmNoYXJhY3RlcnMoKSArIHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFy
dFBvcykpOwogICAgICAgICBpZiAobm9kZSAmJiByZXN1bHRTZXQuYWRkKG5vZGUpLnNlY29uZCkK
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobm9kZSk7CiAgICAgICAgIApAQCAtNDM2LDE1ICs0
MzcsMTYgQEAgVmFsdWUgRnVuU3RyaW5nOjpldmFsdWF0ZSgpIGNvbnN0CiAKIFZhbHVlIEZ1bkNv
bmNhdDo6ZXZhbHVhdGUoKSBjb25zdAogewotICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gcmVzdWx0
OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHko
MTAyNCk7CiAKICAgICB1bnNpZ25lZCBjb3VudCA9IGFyZ0NvdW50KCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgU3RyaW5nIHN0cihhcmcoaSkt
PmV2YWx1YXRlKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoc3RyLmNoYXJh
Y3RlcnMoKSwgc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIpOwogICAg
IH0KIAotICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBWYWx1ZSBGdW5TdGFydHNXaXRoOjpl
dmFsdWF0ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhVdGlsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhVdGlsLmNwcAkocmV2aXNpb24g
OTQxNzEpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhVdGlsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmIEVOQUJMRShYUEFUSCkKIAogI2luY2x1ZGUgIkNvbnRh
aW5lck5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBYUGF0aCB7CkBAIC01MSwxNyArNTIsMTcgQEAgU3Ry
aW5nIHN0cmluZ1ZhbHVlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICByZXR1cm4gbm9kZS0+bm9k
ZVZhbHVlKCk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAoaXNSb290RG9tTm9k
ZShub2RlKSB8fCBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewotICAg
ICAgICAgICAgICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgICAgICAgICAgICAgIFN0cmlu
Z0J1aWxkZXIgcmVzdWx0OwogICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHko
MTAyNCk7CiAKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBub2RlLT5maXJzdENoaWxk
KCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgbm9kZVZhbHVlID0gbi0+bm9kZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKG5vZGVWYWx1ZS5jaGFyYWN0ZXJzKCksIG5vZGVWYWx1ZS5sZW5n
dGgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG5vZGVWYWx1ZSk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQudG9TdHJpbmcoKTsKICAgICAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAJKHJldmlzaW9uIDk0
MTcxKQorKysgU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTY4LDkgKzE2OCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRYU0xU
TG9hZENhbGxCYWNrKHgKICAgICBnbG9iYWxDYWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJl
c291cmNlTG9hZGVyOwogfQogCi1zdGF0aWMgaW50IHdyaXRlVG9WZWN0b3Iodm9pZCogY29udGV4
dCwgY29uc3QgY2hhciogYnVmZmVyLCBpbnQgbGVuKQorc3RhdGljIGludCB3cml0ZVRvU3RyaW5n
QnVpbGRlcih2b2lkKiBjb250ZXh0LCBjb25zdCBjaGFyKiBidWZmZXIsIGludCBsZW4pCiB7Ci0g
ICAgVmVjdG9yPFVDaGFyPiYgcmVzdWx0T3V0cHV0ID0gKnN0YXRpY19jYXN0PFZlY3RvcjxVQ2hh
cj4qPihjb250ZXh0KTsKKyAgICBTdHJpbmdCdWlsZGVyJiByZXN1bHRPdXRwdXQgPSAqc3RhdGlj
X2Nhc3Q8U3RyaW5nQnVpbGRlcio+KGNvbnRleHQpOwogCiAgICAgaWYgKCFsZW4pCiAgICAgICAg
IHJldHVybiAwOwpAQCAtMTk3LDkgKzE5Nyw5IEBAIHN0YXRpYyBib29sIHNhdmVSZXN1bHRUb1N0
cmluZyh4bWxEb2NQdHIKICAgICBpZiAoIW91dHB1dEJ1ZikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHRWZWN0b3I7Ci0gICAgb3V0cHV0QnVmLT5jb250
ZXh0ID0gJnJlc3VsdFZlY3RvcjsKLSAgICBvdXRwdXRCdWYtPndyaXRlY2FsbGJhY2sgPSB3cml0
ZVRvVmVjdG9yOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0QnVpbGRlcjsKKyAgICBvdXRwdXRC
dWYtPmNvbnRleHQgPSAmcmVzdWx0QnVpbGRlcjsKKyAgICBvdXRwdXRCdWYtPndyaXRlY2FsbGJh
Y2sgPSB3cml0ZVRvU3RyaW5nQnVpbGRlcjsKIAogICAgIGludCByZXR2YWwgPSB4c2x0U2F2ZVJl
c3VsdFRvKG91dHB1dEJ1ZiwgcmVzdWx0RG9jLCBzaGVldCk7CiAgICAgeG1sT3V0cHV0QnVmZmVy
Q2xvc2Uob3V0cHV0QnVmKTsKQEAgLTIwNywxMCArMjA3LDEwIEBAIHN0YXRpYyBib29sIHNhdmVS
ZXN1bHRUb1N0cmluZyh4bWxEb2NQdHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8g
V29ya2Fyb3VuZCBmb3IgPGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lk
PTQ5NTY2OD46IGxpYnhzbHQgYXBwZW5kcyBhbiBleHRyYSBsaW5lIGZlZWQgdG8gdGhlIHJlc3Vs
dC4KLSAgICBpZiAocmVzdWx0VmVjdG9yLnNpemUoKSA+IDAgJiYgcmVzdWx0VmVjdG9yW3Jlc3Vs
dFZlY3Rvci5zaXplKCkgLSAxXSA9PSAnXG4nKQotICAgICAgICByZXN1bHRWZWN0b3IucmVtb3Zl
TGFzdCgpOworICAgIGlmIChyZXN1bHRCdWlsZGVyLmxlbmd0aCgpID4gMCAmJiByZXN1bHRCdWls
ZGVyW3Jlc3VsdEJ1aWxkZXIubGVuZ3RoKCkgLSAxXSA9PSAnXG4nKQorICAgICAgICByZXN1bHRC
dWlsZGVyLnJlc2l6ZShyZXN1bHRCdWlsZGVyLmxlbmd0aCgpIC0gMSk7CiAKLSAgICByZXN1bHRT
dHJpbmcgPSBTdHJpbmc6OmFkb3B0KHJlc3VsdFZlY3Rvcik7CisgICAgcmVzdWx0U3RyaW5nID0g
cmVzdWx0QnVpbGRlci50b1N0cmluZygpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1l
dGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3Rl
clJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gOTQxNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhv
ZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBDaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzX2gKICNkZWZpbmUgQ2hhcmFjdGVyUmVmZXJlbmNl
UGFyc2VySW5saW5lTWV0aG9kc19oCiAKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTM2LDE5ICszNiwxOSBAQCBpbmxpbmUgYm9vbCBpc0hleERpZ2l0KFVDaGFyIGNjKQogICAgIHJl
dHVybiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykgfHwgKGNjID49ICdhJyAmJiBjYyA8PSAnZicp
IHx8IChjYyA+PSAnQScgJiYgY2MgPD0gJ0YnKTsKIH0KIAotaW5saW5lIHZvaWQgdW5jb25zdW1l
Q2hhcmFjdGVycyhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgY29uc3QgVmVjdG9yPFVDaGFyLCAx
MD4mIGNvbnN1bWVkQ2hhcmFjdGVycykKK2lubGluZSB2b2lkIHVuY29uc3VtZUNoYXJhY3RlcnMo
U2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNvbnN1bWVkQ2hh
cmFjdGVycykKIHsKLSAgICBpZiAoY29uc3VtZWRDaGFyYWN0ZXJzLnNpemUoKSA9PSAxKQorICAg
IGlmIChjb25zdW1lZENoYXJhY3RlcnMubGVuZ3RoKCkgPT0gMSkKICAgICAgICAgc291cmNlLnB1
c2goY29uc3VtZWRDaGFyYWN0ZXJzWzBdKTsKLSAgICBlbHNlIGlmIChjb25zdW1lZENoYXJhY3Rl
cnMuc2l6ZSgpID09IDIpIHsKKyAgICBlbHNlIGlmIChjb25zdW1lZENoYXJhY3RlcnMubGVuZ3Ro
KCkgPT0gMikgewogICAgICAgICBzb3VyY2UucHVzaChjb25zdW1lZENoYXJhY3RlcnNbMF0pOwog
ICAgICAgICBzb3VyY2UucHVzaChjb25zdW1lZENoYXJhY3RlcnNbMV0pOwogICAgIH0gZWxzZQot
ICAgICAgICBzb3VyY2UucHJlcGVuZChTZWdtZW50ZWRTdHJpbmcoU3RyaW5nKGNvbnN1bWVkQ2hh
cmFjdGVycy5kYXRhKCksIGNvbnN1bWVkQ2hhcmFjdGVycy5zaXplKCkpKSk7CisgICAgICAgIHNv
dXJjZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoY29uc3VtZWRDaGFyYWN0ZXJzLmNo
YXJhY3RlcnMoKSwgY29uc3VtZWRDaGFyYWN0ZXJzLmxlbmd0aCgpKSkpOwogfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgUGFyc2VyRnVuY3Rpb25zPgotYm9vbCBjb25zdW1lQ2hhcmFjdGVyUmVmZXJl
bmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZENo
YXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93
ZWRDaGFyYWN0ZXIpCitib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3Ry
aW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRDaGFyYWN0ZXIsIGJvb2wmIG5vdEVu
b3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQogewogICAg
IEFTU0VSVCghYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgfHwgYWRkaXRpb25hbEFsbG93ZWRD
aGFyYWN0ZXIgPT0gJyInIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICdcJycgfHwg
YWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJz4nKTsKICAgICBBU1NFUlQoIW5vdEVub3Vn
aENoYXJhY3RlcnMpOwpAQCAtNjUsNyArNjUsNyBAQCBib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZl
cmVuY2UoU2VnbWVudGVkCiAgICAgfTsKICAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSA9IElu
aXRpYWw7CiAgICAgVUNoYXIzMiByZXN1bHQgPSAwOwotICAgIFZlY3RvcjxVQ2hhciwgMTA+IGNv
bnN1bWVkQ2hhcmFjdGVyczsKKyAgICBTdHJpbmdCdWlsZGVyIGNvbnN1bWVkQ2hhcmFjdGVyczsK
ICAgICAKICAgICB3aGlsZSAoIXNvdXJjZS5pc0VtcHR5KCkpIHsKICAgICAgICAgVUNoYXIgY2Mg
PSAqc291cmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQxNzEpCisrKyBT
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
dmFsdWU7CiAgICAgfQogCi0gICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnZlcnRUb1VURjE2KFVD
aGFyMzIgdmFsdWUsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkQ2hhcmFjdGVyKQorICAgIGlu
bGluZSBzdGF0aWMgYm9vbCBjb252ZXJ0VG9VVEYxNihVQ2hhcjMyIHZhbHVlLCBTdHJpbmdCdWls
ZGVyJiBkZWNvZGVkQ2hhcmFjdGVyKQogICAgIHsKICAgICAgICAgaWYgKFVfSVNfQk1QKHZhbHVl
KSkgewogICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcj4odmFsdWUp
OwpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAKICAgICBpbmxpbmUgc3RhdGljIGJvb2wgYWNj
ZXB0TWFsZm9ybWVkKCkgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGlubGluZSBzdGF0aWMgYm9v
bCBjb25zdW1lTmFtZWRFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiwgVmVjdG9yPFVDaGFyLCAxNj4m
LCBib29sJiwgVUNoYXIsIFVDaGFyJikKKyAgICBpbmxpbmUgc3RhdGljIGJvb2wgY29uc3VtZU5h
bWVkRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIFN0cmluZ0J1aWxkZXImLCBib29sJiwgVUNoYXIs
IFVDaGFyJikKICAgICB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKIAogfQogCi1ib29sIGNvbnN1
bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFZlY3RvcjxV
Q2hhciwgMTY+JiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzKQor
Ym9vbCBjb25zdW1lWE1MQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNl
LCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0
ZXJzKQogewogICAgIHJldHVybiBjb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlPFhNTENoYXJhY3Rl
clJlZmVyZW5jZVBhcnNlcj4oc291cmNlLCBkZWNvZGVkQ2hhcmFjdGVyLCBub3RFbm91Z2hDaGFy
YWN0ZXJzLCAwKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFj
dGVyUmVmZXJlbmNlUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaAkocmV2aXNpb24gOTQxNzEpCisrKyBT
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAKLWJvb2wgY29uc3VtZVhNTENoYXJhY3RlclJlZmVyZW5jZShTZWdtZW50ZWRTdHJpbmcmLCBW
ZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFj
dGVycyk7Citib29sIGNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5n
JiwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFj
dGVycyk7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbml6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVG9rZW5p
emVyLmNwcAkocmV2aXNpb24gOTQxNzEpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hN
TFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRl
IDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0yNTEsMTEgKzI1MiwxMCBA
QCBib29sIFhNTFRva2VuaXplcjo6bmV4dFRva2VuKFNlZ21lbnRlZFN0CiAgICAgWE1MX0JFR0lO
X1NUQVRFKENoYXJhY3RlclJlZmVyZW5jZVN0YXJ0U3RhdGUpIHsKICAgICAgICAgaWYgKGNjID09
ICcjJykgewogICAgICAgICAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0g
ICAgICAgICAgICBWZWN0b3I8VUNoYXIsIDE2PiBkZWNvZGVkQ2hhcmFjdGVyOworICAgICAgICAg
ICAgU3RyaW5nQnVpbGRlciBkZWNvZGVkQ2hhcmFjdGVyOwogICAgICAgICAgICAgaWYgKGNvbnN1
bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2Uoc291cmNlLCBkZWNvZGVkQ2hhcmFjdGVyLCBub3RFbm91
Z2hDaGFyYWN0ZXJzKSkgewotICAgICAgICAgICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+Ojpjb25z
dF9pdGVyYXRvciBpdGVyID0gZGVjb2RlZENoYXJhY3Rlci5iZWdpbigpOwotICAgICAgICAgICAg
ICAgIGZvciAoOyBpdGVyICE9IGRlY29kZWRDaGFyYWN0ZXIuZW5kKCk7ICsraXRlcikKLSAgICAg
ICAgICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCppdGVyKTsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVjb2RlZENoYXJhY3Rlci5sZW5ndGgoKTsgKytpKQor
ICAgICAgICAgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXIoZGVjb2RlZENoYXJhY3RlcltpXSk7
CiAgICAgICAgICAgICAgICAgWE1MX1NXSVRDSF9UTyhEYXRhU3RhdGUpOwogICAgICAgICAgICAg
fSBlbHNlIGlmIChub3RFbm91Z2hDaGFyYWN0ZXJzKQogICAgICAgICAgICAgICAgIHJldHVybiBo
YXZlQnVmZmVyZWRDaGFyYWN0ZXJUb2tlbigpOwpAQCAtNDM3LDEyICs0MzcsMTEgQEAgYm9vbCBY
TUxUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRTdAogICAgIFhNTF9CRUdJTl9TVEFURShD
aGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVlU3RhdGUpIHsKICAgICAgICAgaWYgKGNj
ID09ICcjJykgewogICAgICAgICAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7
Ci0gICAgICAgICAgICBWZWN0b3I8VUNoYXIsIDE2PiBkZWNvZGVkQ2hhcmFjdGVyOworICAgICAg
ICAgICAgU3RyaW5nQnVpbGRlciBkZWNvZGVkQ2hhcmFjdGVyOwogICAgICAgICAgICAgc291cmNl
LnB1c2goY2MpOwogICAgICAgICAgICAgaWYgKGNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2Uo
c291cmNlLCBkZWNvZGVkQ2hhcmFjdGVyLCBub3RFbm91Z2hDaGFyYWN0ZXJzKSkgewotICAgICAg
ICAgICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZGVjb2Rl
ZENoYXJhY3Rlci5iZWdpbigpOwotICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGRlY29k
ZWRDaGFyYWN0ZXIuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICAgICAgbV90b2tlbi0+
YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZSgqaXRlcik7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRlY29kZWRDaGFyYWN0ZXIubGVuZ3RoKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZShkZWNvZGVkQ2hhcmFj
dGVyW2ldKTsKICAgICAgICAgICAgICAgICBYTUxfQURWQU5DRV9UTyhBdHRyaWJ1dGVWYWx1ZVF1
b3RlZFN0YXRlKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykK
ICAgICAgICAgICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKTsK
</data>
<flag name="review"
          id="102010"
          type_id="1"
          status="+"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="102986"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106540</attachid>
            <date>2011-09-06 21:09:49 -0700</date>
            <delta_ts>2013-08-09 10:21:03 -0700</delta_ts>
            <desc>patch resolved conflicts</desc>
            <filename>patch-67079f</filename>
            <type>text/plain</type>
            <size>109288</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ2MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDktMDYgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXBsYWNlIHVzYWdlcyBvZiBWZWN0b3I8VUNoYXI+IHdpdGggZXhpc3RpbmcgU3Ry
aW5nQnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjcwNzkKKworICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJyYWNsb3VnaC4KKworICAg
ICAgICBUaGlzIGlzIHBhcnQgb2Ygd29yayB0byBzdXBwb3J0IDgtYml0IHN0cmluZyBidWZmZXJz
LgorICAgICAgICBBZGRzIFN0cmluZ0J1aWxkZXI6OmNoYXJhY3RlcnMoKSBiZWNhdXNlIHRoZSBv
cmlnaW5hbCBWZWN0b3I8VUNoYXI+OjpkYXRhKCkKKyAgICAgICAgaXMgd2lkZWx5IHVzZWQuCisg
ICAgICAgIFNldHMgdGhlIG1pbmltdW0gc2l6ZSBvZiBidWZmZXIgdG8gMTYgdG8gcHJldmVudCBw
b3NzaWJsZSBwZXJmb3JtYW5jZQorICAgICAgICByZWdyZXNzaW9uLiBGdXJ0aGVyIHBlcmZvcm1h
bmNlIGludmVzdGlnYXRpb24gc2hvdWxkIGJlIGRvbmUgaW4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MDg0LgorCisgICAgICAgICogd3RmL0Zvcndh
cmQuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdU
Rjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplZCk6IFNldHMgbWluaW11bSBidWZm
ZXIgc2l6ZSB0byAxNiBieXRlcy4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg6
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6Om9wZXJhdG9yW10pOgorICAgICAgICAoV1RG
OjpTdHJpbmdCdWlsZGVyOjpjaGFyYWN0ZXJzKTogQWRkZWQuCisKIDIwMTEtMDktMDYgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgSklUIGRvZXMgbm90IG9w
dGltaXplIGJvb2xlYW5zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1i
ZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL051bWJlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDk0NjMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNiArMzYsOSBAQAogCiB1c2luZyBuYW1lc3BhY2UgV1RGOjpkb3VibGVfY29udmVyc2lvbjsK
IAorLy8gVG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBXVEY6OlN0cmluZ0J1aWxkZXIuCit0eXBlZGVm
IFdURjo6ZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1aWxkZXIgRG91YmxlQ29udmVyc2lvblN0
cmluZ0J1aWxkZXI7CisKIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKQEAgLTM0
OCw3ICszNTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAK
ICAgICAvLyBSb3VuZCBpZiB0aGUgYXJndW1lbnQgaXMgbm90IHVuZGVmaW5lZCwgYWx3YXlzIGZv
cm1hdCBhcyBleHBvbmVudGlhbC4KICAgICBjaGFyIGJ1ZmZlcltXVEY6Ok51bWJlclRvU3RyaW5n
QnVmZmVyTGVuZ3RoXTsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoYnVmZmVyLCBXVEY6Ok51
bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAgICBEb3VibGVDb252ZXJzaW9uU3RyaW5nQnVp
bGRlciBidWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7CiAg
ICAgY29uc3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZlcnRlciA9IERvdWJsZVRvU3Ry
aW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CiAgICAgYnVpbGRlci5SZXNldCgp
OwogICAgIGlzVW5kZWZpbmVkCkBAIC0zODcsNyArMzkwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBudW1iZXJQcm90bwogICAgIEFTU0VSVChpc2Zpbml0ZSh4KSk7CiAKICAgICBj
aGFyIGJ1ZmZlcltXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoXTsKLSAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXIoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsK
KyAgICBEb3VibGVDb252ZXJzaW9uU3RyaW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgV1RGOjpO
dW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7CiAgICAgY29uc3QgRG91YmxlVG9TdHJpbmdDb252
ZXJ0ZXImIGNvbnZlcnRlciA9IERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29u
dmVydGVyKCk7CiAgICAgYnVpbGRlci5SZXNldCgpOwogICAgIGNvbnZlcnRlci5Ub0ZpeGVkKHgs
IGRlY2ltYWxQbGFjZXMsICZidWlsZGVyKTsKQEAgLTQyNSw3ICs0MjgsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZzo6bnVtYmVyKHgpKSk7CiAKICAgICBjaGFyIGJ1
ZmZlcltXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoXTsKLSAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXIoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAgICBE
b3VibGVDb252ZXJzaW9uU3RyaW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJU
b1N0cmluZ0J1ZmZlckxlbmd0aCk7CiAgICAgY29uc3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIm
IGNvbnZlcnRlciA9IERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVy
KCk7CiAgICAgYnVpbGRlci5SZXNldCgpOwogICAgIGNvbnZlcnRlci5Ub1ByZWNpc2lvbih4LCBz
aWduaWZpY2FudEZpZ3VyZXMsICZidWlsZGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvRm9yd2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
Rm9yd2FyZC5oCShyZXZpc2lvbiA5NDYzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
Rm9yd2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgIGNsYXNzIEVuY29kZXI7CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIGNsYXNzIFN0cmlu
Z0J1ZmZlcjsKKyAgICBjbGFzcyBTdHJpbmdCdWlsZGVyOwogICAgIGNsYXNzIFN0cmluZ0ltcGw7
CiB9CiAKQEAgLTU5LDYgKzYwLDcgQEAgdXNpbmcgV1RGOjpFbmNvZGVyOwogdXNpbmcgV1RGOjpE
ZWNvZGVyOwogdXNpbmcgV1RGOjpTdHJpbmc7CiB1c2luZyBXVEY6OlN0cmluZ0J1ZmZlcjsKK3Vz
aW5nIFdURjo6U3RyaW5nQnVpbGRlcjsKIHVzaW5nIFdURjo6U3RyaW5nSW1wbDsKIAogI2VuZGlm
IC8vIFdURl9Gb3J3YXJkX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5jcHAJKHJldmlzaW9uIDk0NjMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitzdGF0aWMgY29uc3QgdW5zaWduZWQg
bWluaW11bUNhcGFjaXR5ID0gMTY7CisKIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVpZnlTdHJpbmco
KQogewogICAgIC8vIENoZWNrIGlmIHRoZSBzdHJpbmcgYWxyZWFkeSBleGlzdHMuCkBAIC0xMjYs
MTAgKzEyOCwxMCBAQCBVQ2hhciogU3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplCiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBXZSBuZWVkIHRvIHJlYWxsb2MgdGhlIGJ1ZmZlci4KLSAg
ICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnMoKSwgc3RkOjptYXgocmVx
dWlyZWRMZW5ndGgsIG1fYnVmZmVyLT5sZW5ndGgoKSAqIDIpKTsKKyAgICAgICAgYWxsb2NhdGVC
dWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnMoKSwgc3RkOjptYXgocmVxdWlyZWRMZW5ndGgsIHN0
ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgbV9idWZmZXItPmxlbmd0aCgpICogMikpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgpOwot
ICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzKCksIHN0ZDo6bWF4KHJl
cXVpcmVkTGVuZ3RoLCByZXF1aXJlZExlbmd0aCAqIDIpKTsKKyAgICAgICAgYWxsb2NhdGVCdWZm
ZXIobV9zdHJpbmcuY2hhcmFjdGVycygpLCBzdGQ6Om1heChyZXF1aXJlZExlbmd0aCwgc3RkOjpt
YXgobWluaW11bUNhcGFjaXR5LCBtX2xlbmd0aCAqIDIpKSk7CiAgICAgfQogCiAgICAgVUNoYXIq
IHJlc3VsdCA9IG1fYnVmZmVyQ2hhcmFjdGVycyArIG1fbGVuZ3RoOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCShyZXZpc2lvbiA5NDYz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOCwxMCArMTA4LDE3IEBAIHB1YmxpYzoKICAgICBVQ2hhciBvcGVy
YXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaSA8IG1fbGVu
Z3RoKTsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnMoKVtpXTsKKyAgICB9CisKKyAgICBjb25z
dCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fbGVuZ3Ro
KQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmICghbV9zdHJpbmcuaXNOdWxsKCkp
Ci0gICAgICAgICAgICByZXR1cm4gbV9zdHJpbmdbaV07CisgICAgICAgICAgICByZXR1cm4gbV9z
dHJpbmcuY2hhcmFjdGVycygpOwogICAgICAgICBBU1NFUlQobV9idWZmZXIpOwotICAgICAgICBy
ZXR1cm4gKCptX2J1ZmZlcilbaV07CisgICAgICAgIHJldHVybiBtX2J1ZmZlci0+Y2hhcmFjdGVy
cygpOwogICAgIH0KIAogICAgIHZvaWQgY2xlYXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
OTQ2MzApCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNjQgQEAKKzIwMTEtMDktMDYgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXBsYWNlIHVzYWdlcyBvZiBWZWN0b3I8VUNoYXI+IHdpdGgg
ZXhpc3RpbmcgU3RyaW5nQnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjcwNzkKKworICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJyYWNs
b3VnaC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEFsbCBleGlzdGluZyB1bml0IHRlc3RzIGFu
ZCBsYXlvdXQgdGVzdHMgc2hvdWxkIHJ1bgorICAgICAgICBhcyBiZWZvcmUuCisKKyAgICAgICAg
KiBjc3MvQ1NTT01VdGlscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRDaGFyYWN0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNlcmlhbGl6ZUNoYXJhY3RlckFzQ29kZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNl
cmlhbGl6ZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplU3RyaW5nKToK
KyAgICAgICAgKiBjc3MvQ1NTT01VdGlscy5oOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVW
YWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCk6
CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93
Q2FzZSk6CisgICAgICAgICogY3NzL0NTU1dyYXBTaGFwZXMuY3BwOgorICAgICAgICAoV2ViQ29y
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
aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhT
dHlsZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFN0eWxlTm9kZU9wZW5UYWcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNj
dW11bGF0b3I6OnRha2VSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnVybFRvTWFya3VwKToK
KyAgICAgICAgKiBodG1sL0RPTVRva2VuTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01U
b2tlbkxpc3Q6OnJlbW92ZVRva2VuKToKKyAgICAgICAgKiBodG1sL0hUTUxGb250RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUZvbnRTaXplKToKKyAgICAgICAgKiBodG1sL0hU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50OjpzdHJpcHBlZFBsYWNlaG9sZGVyKToKKyAgICAgICAgKiBodG1s
L3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmVs
b2FkU2Nhbm5lcjo6ZW1pdFJ1bGUpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0NTU1ByZWxvYWRT
Y2FubmVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb25zdW1lSFRNTEVudGl0eSk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTEVudGl0eVBhcnNlci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJ
ZGlvbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIVE1MSW50ZWdlcik6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZUhUTUxOb25OZWdhdGl2ZUludGVnZXIpOgorICAgICAgICAqIGh0bWwv
cGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXpl
cjo6cHJvY2Vzc0VudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpuZXh0
VG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZm
ZXI6OmdpdmVSZW1haW5pbmdUbyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6
OmRlZmF1bHRGb3JJblRhYmxlVGV4dCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVC
dWlsZGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6dG9KU09OU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclZhbHVlOjp3cml0ZUpTT04pOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0cmluZzo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6
d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFycmF5Ojp3cml0ZUpTT04p
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKiBsb2Fk
ZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUFjY2Vzc0NvbnRyb2xQcmVmbGlnaHRSZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OnNldFRvb2xUaXApOgorICAgICAgICAqIHBhZ2UvUGFn
ZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplck1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXJNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVy
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMpOgorICAgICAgICAqIHBh
Z2UvU2VjdXJpdHlPcmlnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46
OnRvU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OktVUkw6OmRlcHJlY2F0ZWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlVVJM
RXNjYXBlU2VxdWVuY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW5rSGFzaC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzcXVlZXplT3V0TnVsbENoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2xlYW5TbGFzaERvdERvdFNsYXNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VEb3Vi
bGVTbGFzaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFuU2xhc2hEb3RTbGFzaGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNsZWFuUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpdGVkVVJM
SW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnZpc2l0ZWRVUkwpOgorICAgICAgICAoV2ViQ29y
ZTo6dmlzaXRlZExpbmtIYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW5rSGFzaC5oOgorICAg
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
YXJhY3RlclJlZmVyZW5jZSk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZl
cmVuY2VQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZVhNTENoYXJhY3RlclJl
ZmVyZW5jZSk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJz
ZXIuaDoKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxUb2tlbml6ZXI6Om5leHRUb2tlbik6CisKIDIwMTEtMDktMDYgIE1hcmsgSGFo
bmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnppcCBpbml0aWFs
aXphdGlvbiBsaXN0cyBhbmQgY29uc3RydWN0b3JzIGluIEpTQ2VsbCBoaWVyYXJjaHkgKDUvNykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NPTVV0aWxzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTT01VdGlscy5jcHAJKHJldmlzaW9uIDk0NjMwKQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU09NVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCAr
MzIsMTEgQEAKICNpbmNsdWRlICJDU1NPTVV0aWxzLmgiCiAKICNpbmNsdWRlIDx3dGYvSGV4TnVt
YmVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lkIGFwcGVuZENoYXJhY3RlcihVQ2hhcjMyIGMsIFZlY3Rv
cjxVQ2hhcj4mIGFwcGVuZFRvKQorc3RhdGljIHZvaWQgYXBwZW5kQ2hhcmFjdGVyKFVDaGFyMzIg
YywgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pCiB7CiAgICAgaWYgKFUxNl9MRU5HVEgoYykgPT0g
MSkKICAgICAgICAgYXBwZW5kVG8uYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjKSk7CkBAIC00
NSwxMyArNDYsMTMgQEAgc3RhdGljIHZvaWQgYXBwZW5kQ2hhcmFjdGVyKFVDaGFyMzIgYywgVgog
ICAgIH0KIH0KIAotdm9pZCBzZXJpYWxpemVDaGFyYWN0ZXIoVUNoYXIzMiBjLCBWZWN0b3I8VUNo
YXI+JiBhcHBlbmRUbykKK3ZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyKFVDaGFyMzIgYywgU3RyaW5n
QnVpbGRlciYgYXBwZW5kVG8pCiB7CiAgICAgYXBwZW5kVG8uYXBwZW5kKCdcXCcpOwogICAgIGFw
cGVuZENoYXJhY3RlcihjLCBhcHBlbmRUbyk7CiB9CiAKLXZvaWQgc2VyaWFsaXplQ2hhcmFjdGVy
QXNDb2RlUG9pbnQoVUNoYXIzMiBjLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbykKK3ZvaWQgc2Vy
aWFsaXplQ2hhcmFjdGVyQXNDb2RlUG9pbnQoVUNoYXIzMiBjLCBTdHJpbmdCdWlsZGVyJiBhcHBl
bmRUbykKIHsKICAgICBhcHBlbmRUby5hcHBlbmQoJ1xcJyk7CiAgICAgYXBwZW5kVW5zaWduZWRB
c0hleChjLCBhcHBlbmRUbywgTG93ZXJjYXNlKTsKQEAgLTYwLDEyICs2MSwxMiBAQCB2b2lkIHNl
cmlhbGl6ZUNoYXJhY3RlckFzQ29kZVBvaW50KFVDaGFyCiAKIHZvaWQgc2VyaWFsaXplSWRlbnRp
Zmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFN0cmluZyYgYXBwZW5kVG8pCiB7Ci0gICAg
VmVjdG9yPFVDaGFyPiBhZGRlbmQ7CisgICAgU3RyaW5nQnVpbGRlciBhZGRlbmQ7CiAgICAgc2Vy
aWFsaXplSWRlbnRpZmllcihpZGVudGlmaWVyLCBhZGRlbmQpOwotICAgIGFwcGVuZFRvLmFwcGVu
ZChTdHJpbmc6OmFkb3B0KGFkZGVuZCkpOworICAgIGFwcGVuZFRvLmFwcGVuZChhZGRlbmQudG9T
dHJpbmcoKSk7CiB9CiAKLXZvaWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlk
ZW50aWZpZXIsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKQordm9pZCBzZXJpYWxpemVJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pCiB7
CiAgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKICAgICBib29sIGlzU2Vjb25kID0gZmFsc2U7CkBA
IC05NiwxMiArOTcsMTIgQEAgdm9pZCBzZXJpYWxpemVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYg
aQogCiB2b2lkIHNlcmlhbGl6ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgU3RyaW5nJiBh
cHBlbmRUbykKIHsKLSAgICBWZWN0b3I8VUNoYXI+IGFkZGVuZDsKKyAgICBTdHJpbmdCdWlsZGVy
IGFkZGVuZDsKICAgICBzZXJpYWxpemVTdHJpbmcoc3RyaW5nLCBhZGRlbmQpOwotICAgIGFwcGVu
ZFRvLmFwcGVuZChTdHJpbmc6OmFkb3B0KGFkZGVuZCkpOworICAgIGFwcGVuZFRvLmFwcGVuZChh
ZGRlbmQudG9TdHJpbmcoKSk7CiB9CiAKLXZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRUbykKK3ZvaWQgc2VyaWFsaXplU3RyaW5n
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBTdHJpbmdCdWlsZGVyJiBhcHBlbmRUbykKIHsKICAgICBh
cHBlbmRUby5hcHBlbmQoJ1wiJyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NPTVV0
aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU09NVXRpbHMuaAkocmV2
aXNpb24gOTQ2MzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTT01VdGlscy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQ29t
bW9uIHNlcmlhbGl6aW5nIG1ldGhvZHMuIFNlZTogaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nz
b20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXMKLXZvaWQgc2VyaWFsaXplQ2hhcmFjdGVyKFVD
aGFyMzIsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFsaXplQ2hhcmFjdGVy
QXNDb2RlUG9pbnQoVUNoYXIzMiwgVmVjdG9yPFVDaGFyPiYgYXBwZW5kVG8pOwordm9pZCBzZXJp
YWxpemVDaGFyYWN0ZXIoVUNoYXIzMiwgU3RyaW5nQnVpbGRlciYgYXBwZW5kVG8pOwordm9pZCBz
ZXJpYWxpemVDaGFyYWN0ZXJBc0NvZGVQb2ludChVQ2hhcjMyLCBTdHJpbmdCdWlsZGVyJiBhcHBl
bmRUbyk7CiB2b2lkIHNlcmlhbGl6ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCBTdHJpbmcmIGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXIsIFZlY3RvcjxVQ2hhcj4mIGFwcGVuZFRvKTsKLXZvaWQgc2VyaWFsaXpl
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBTdHJpbmcmIGFwcGVuZFRvKTsKLXZvaWQgc2Vy
aWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBWZWN0b3I8VUNoYXI+JiBhcHBlbmRU
byk7Cit2b2lkIHNlcmlhbGl6ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBT
dHJpbmdCdWlsZGVyJiBhcHBlbmRUbyk7Cit2b2lkIHNlcmlhbGl6ZVN0cmluZyhjb25zdCBTdHJp
bmcmLCBTdHJpbmcmIGFwcGVuZFRvKTsKK3ZvaWQgc2VyaWFsaXplU3RyaW5nKGNvbnN0IFN0cmlu
ZyYsIFN0cmluZ0J1aWxkZXImIGFwcGVuZFRvKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9u
IDk0NjMwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPHd0Zi9EZWNpbWFsTnVtYmVy
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lm
IEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICNpbmNsdWRlICJEYXNoYm9hcmRSZWdpb24uaCIK
QEAgLTc3OSwxNCArNzgwLDE0IEBAIFN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCgp
IGNvbnMKICAgICAgICAgY2FzZSBDU1NfQVRUUjogewogICAgICAgICAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBTdHJpbmcsIGF0dHJQYXJlbiwgKCJhdHRyKCIpKTsKIAotICAgICAgICAg
ICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSg2ICsgbV92YWx1ZS5zdHJpbmctPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIFN0
cmluZ0J1aWxkZXIgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSg2
ICsgbV92YWx1ZS5zdHJpbmctPmxlbmd0aCgpKTsKIAotICAgICAgICAgICAgYXBwZW5kKHJlc3Vs
dCwgYXR0clBhcmVuKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIG1fdmFsdWUuc3RyaW5n
KTsKLSAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoJyknKTsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoYXR0clBhcmVuKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV92
YWx1ZS5zdHJpbmcpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwogCi0gICAgICAg
ICAgICB0ZXh0ID0gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgICAgICAgICAgdGV4dCA9IHJl
c3VsdC50b1N0cmluZygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBDU1NfQ09VTlRFUl9OQU1FOgpAQCAtODA0LDIzICs4MDUsMjMgQEAgU3RyaW5nIENTU1By
aW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29ucwogICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChjb25zdCBTdHJpbmcsIHJlY3RQYXJlbiwgKCJyZWN0KCIpKTsKIAogICAgICAgICAgICAg
UmVjdCogcmVjdFZhbCA9IGdldFJlY3RWYWx1ZSgpOwotICAgICAgICAgICAgVmVjdG9yPFVDaGFy
PiByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7
Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCByZWN0UGFyZW4pOworICAgICAgICAgICAgU3Ry
aW5nQnVpbGRlciByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDMy
KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjdFBhcmVuKTsKIAotICAgICAgICAgICAg
YXBwZW5kKHJlc3VsdCwgcmVjdFZhbC0+dG9wKCktPmNzc1RleHQoKSk7CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHJlY3RWYWwtPnRvcCgpLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICcpOwogCi0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCByZWN0VmFsLT5y
aWdodCgpLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZWN0VmFsLT5y
aWdodCgpLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwogCi0g
ICAgICAgICAgICBhcHBlbmQocmVzdWx0LCByZWN0VmFsLT5ib3R0b20oKS0+Y3NzVGV4dCgpKTsK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjdFZhbC0+Ym90dG9tKCktPmNzc1RleHQoKSk7
CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CiAKLSAgICAgICAgICAgIGFwcGVuZChy
ZXN1bHQsIHJlY3RWYWwtPmxlZnQoKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQocmVjdFZhbC0+bGVmdCgpLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnKScpOwogCi0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjphZG9wdChyZXN1bHQpOwor
ICAgICAgICAgICAgdGV4dCA9IHJlc3VsdC50b1N0cmluZygpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NfUVVBRDogewpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU1dyYXBTaGFwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NXcmFwU2hhcGVzLmNwcAkocmV2aXNpb24gOTQ2MzApCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTV3JhcFNoYXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKIAog
I2luY2x1ZGUgIkNTU1dyYXBTaGFwZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KKwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDAsMzQgKzQyLDM0IEBAIFN0cmluZyBDU1NXcmFwU2hhcGVSZWN0Ojpjc3NUZXh0KCkgY29u
c3QKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcmVjdFBhcmVuLCAoInJl
Y3QoIikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBjb21tYSwgKCIs
ICIpKTsKICAgICAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eSgzMik7Ci0gICAgYXBwZW5kKHJlc3VsdCwgcmVjdFBhcmVuKTsKKyAg
ICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDMyKTsK
KyAgICByZXN1bHQuYXBwZW5kKHJlY3RQYXJlbik7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX2xl
ZnQtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAgIHJlc3VsdC5h
cHBlbmQobV9sZWZ0LT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwogCi0g
ICAgYXBwZW5kKHJlc3VsdCwgbV90b3AtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwg
Y29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV90b3AtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0
LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3dpZHRoLT5jc3NUZXh0KCkp
OwotICAgIGFwcGVuZChyZXN1bHQsIGNvbW1hKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fd2lkdGgt
PmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVz
dWx0LCBtX2hlaWdodC0+Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKG1faGVpZ2h0LT5j
c3NUZXh0KCkpOwogICAgIAogICAgIGlmIChtX3JhZGl1c1guZ2V0KCkpIHsKLSAgICAgICAgYXBw
ZW5kKHJlc3VsdCwgY29tbWEpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBtX3JhZGl1c1gtPmNz
c1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOworICAgICAgICByZXN1bHQu
YXBwZW5kKG1fcmFkaXVzWC0+Y3NzVGV4dCgpKTsKIAogICAgICAgICBpZiAobV9yYWRpdXNZLmdl
dCgpKSB7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7Ci0gICAgICAgICAgICBh
cHBlbmQocmVzdWx0LCBtX3JhZGl1c1ktPmNzc1RleHQoKSk7CisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKGNvbW1hKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9yYWRpdXNZLT5jc3NU
ZXh0KCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsK
ICAgICAgICAgICAgIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBTdHJpbmcgQ1NTV3JhcFNoYXBlQ2lyY2xlOjpj
c3NUZXh0KCkgY29uc3QKQEAgLTc1LDIwICs3NywyMCBAQCBTdHJpbmcgQ1NTV3JhcFNoYXBlQ2ly
Y2xlOjpjc3NUZXh0KCkgY29uCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcs
IGNpcmNsZVBhcmVuLCAoImNpcmNsZSgiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBTdHJpbmcsIGNvbW1hLCAoIiwgIikpOwogICAgIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0
OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMyKTsKLSAgICBhcHBlbmQocmVz
dWx0LCBjaXJjbGVQYXJlbik7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0
LnJlc2VydmVDYXBhY2l0eSgzMik7CisgICAgcmVzdWx0LmFwcGVuZChjaXJjbGVQYXJlbik7CiAK
LSAgICBhcHBlbmQocmVzdWx0LCBtX2xlZnQtPmNzc1RleHQoKSk7Ci0gICAgYXBwZW5kKHJlc3Vs
dCwgY29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV9sZWZ0LT5jc3NUZXh0KCkpOworICAgIHJl
c3VsdC5hcHBlbmQoY29tbWEpOwogCi0gICAgYXBwZW5kKHJlc3VsdCwgbV90b3AtPmNzc1RleHQo
KSk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgY29tbWEpOworICAgIHJlc3VsdC5hcHBlbmQobV90b3At
PmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAgICBhcHBlbmQocmVz
dWx0LCBtX3JhZGl1cy0+Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fcmFkaXVzLT5j
c3NUZXh0KCkpOwogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKICAgICAgICAgICAgIAotICAgIHJl
dHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygp
OwogfQogCiBTdHJpbmcgQ1NTV3JhcFNoYXBlRWxsaXBzZTo6Y3NzVGV4dCgpIGNvbnN0CkBAIC05
NiwyMyArOTgsMjMgQEAgU3RyaW5nIENTU1dyYXBTaGFwZUVsbGlwc2U6OmNzc1RleHQoKSBjbwog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBlbGxpcHNlUGFyZW4sICgiZWxs
aXBzZSgiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGNvbW1hLCAo
IiwgIikpOwogICAgIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KDMyKTsKLSAgICBhcHBlbmQocmVzdWx0LCBlbGxpcHNlUGFyZW4p
OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHko
MzIpOworICAgIHJlc3VsdC5hcHBlbmQoZWxsaXBzZVBhcmVuKTsKIAotICAgIGFwcGVuZChyZXN1
bHQsIG1fbGVmdC0+Y3NzVGV4dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7CisgICAg
cmVzdWx0LmFwcGVuZChtX2xlZnQtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21t
YSk7CiAKLSAgICBhcHBlbmQocmVzdWx0LCBtX3RvcC0+Y3NzVGV4dCgpKTsKLSAgICBhcHBlbmQo
cmVzdWx0LCBjb21tYSk7CisgICAgcmVzdWx0LmFwcGVuZChtX3RvcC0+Y3NzVGV4dCgpKTsKKyAg
ICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKIAotICAgIGFwcGVuZChyZXN1bHQsIG1fcmFkaXVzWC0+
Y3NzVGV4dCgpKTsKLSAgICBhcHBlbmQocmVzdWx0LCBjb21tYSk7CisgICAgcmVzdWx0LmFwcGVu
ZChtX3JhZGl1c1gtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAKLSAg
ICBhcHBlbmQocmVzdWx0LCBtX3JhZGl1c1ktPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVu
ZChtX3JhZGl1c1ktPmNzc1RleHQoKSk7CiAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwogICAgICAg
ICAgICAgCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0LnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBDU1NXcmFwU2hhcGVQb2x5Z29uOjpjc3NUZXh0
KCkgY29uc3QKQEAgLTEyMSwyNiArMTIzLDI2IEBAIFN0cmluZyBDU1NXcmFwU2hhcGVQb2x5Z29u
Ojpjc3NUZXh0KCkgY28KICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcG9s
eWdvblBhcmVuTm9uWmVybywgKCJwb2x5Z29uKG5vbnplcm8sICIpKTsKICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IFN0cmluZywgY29tbWEsICgiLCAiKSk7CiAgICAgCi0gICAgVmVjdG9y
PFVDaGFyPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMzIpOwor
ICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIp
OwogICAgIGlmIChtX3dpbmRSdWxlID09IFJVTEVfRVZFTk9ERCkKLSAgICAgICAgYXBwZW5kKHJl
c3VsdCwgcG9seWdvblBhcmVuRXZlbk9kZCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocG9seWdv
blBhcmVuRXZlbk9kZCk7CiAgICAgZWxzZQotICAgICAgICBhcHBlbmQocmVzdWx0LCBwb2x5Z29u
UGFyZW5Ob25aZXJvKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChwb2x5Z29uUGFyZW5Ob25aZXJv
KTsKIAogICAgIEFTU0VSVCghKG1fdmFsdWVzLnNpemUoKSAlIDIpKTsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7IGkgKz0gMikgewogICAgICAgICBpZiAo
aSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKLSAgICAgICAgYXBwZW5kKHJlc3Vs
dCwgbV92YWx1ZXMuYXQoaSktPmNzc1RleHQoKSk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIGNv
bW1hKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgbV92YWx1ZXMuYXQoaSArIDEpLT5jc3NUZXh0
KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fdmFsdWVzLmF0KGkpLT5jc3NUZXh0KCkpOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtX3Zh
bHVlcy5hdChpICsgMSktPmNzc1RleHQoKSk7CiAgICAgfQogICAgIAogICAgIHJlc3VsdC5hcHBl
bmQoJyknKTsKICAgICAgICAgICAgIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2UuY3BwCShy
ZXZpc2lvbiA5NDYzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSFRNTEludGVyY2hhbmdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlRleHQuaCIK
ICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU3LDcgKzU4
LDcgQEAgU3RyaW5nIGNvbnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYQogICAgIGlmIChu
b2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPnByZXNlcnZlTmV3
bGluZSgpKQogICAgICAgICByZXR1cm4gaW47CiAKLSAgICBWZWN0b3I8VUNoYXI+IHM7CisgICAg
U3RyaW5nQnVpbGRlciBzOwogCiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgdW5zaWduZWQgY29u
c3VtZWQgPSAwOwpAQCAtNzQsMjggKzc1LDI4IEBAIFN0cmluZyBjb252ZXJ0SFRNTFRleHRUb0lu
dGVyY2hhbmdlRm9ybWEKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhZGQgPSBjb3VudCAlIDM7
CiAgICAgICAgICAgICAgICAgc3dpdGNoIChhZGQpIHsKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3Ry
aW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VT
dHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZCgnICcpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kKHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoY29udmVydGVkU3BhY2VTdHJpbmcoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBhZGQgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpID09IDAgfHwgaSArIDEgPT0gaW4ubGVuZ3RoKCkpIC8vIGF0IHN0YXJ0IG9yIGVu
ZCBvZiBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQocywgY29udmVy
dGVkU3BhY2VTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQo
Y29udmVydGVkU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoJyAnKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGF0IHN0YXJ0IG9mIHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzLmFwcGVuZCgnICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChpICsgMiA9PSBpbi5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBhdCBlbmQgb2Ygc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHMs
IGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZChzLCBjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzLmFwcGVuZChjb252ZXJ0ZWRTcGFjZVN0cmluZygpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
KHMsIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHMuYXBwZW5kKGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHMuYXBwZW5kKCcgJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEwNyw3ICsxMDgsNyBAQCBTdHJpbmcgY29udmVy
dEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hCiAgICAgICAgIGkgKz0gY29uc3VtZWQ7CiAgICAg
fQogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocyk7CisgICAgcmV0dXJuIHMudG9TdHJpbmco
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAJKHJldmlzaW9uIDk0NjMwKQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDEzICszNywxNCBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAotdm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoVmVjdG9yPFVDaGFyPiYg
b3V0LCBjb25zdCBVQ2hhciogY29udGVudCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5TWFzayBlbnRp
dHlNYXNrKQordm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoU3RyaW5nQnVp
bGRlciYgb3V0LCBjb25zdCBVQ2hhciogY29udGVudCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5TWFz
ayBlbnRpdHlNYXNrKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBh
bXBSZWZlcmVuY2UsICgiJmFtcDsiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBT
dHJpbmcsIGx0UmVmZXJlbmNlLCAoIiZsdDsiKSk7CkBAIC02NCw3ICs2NSw3IEBAIHZvaWQgYXBw
ZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKFYKICAgICAgICAgZm9yIChzaXplX3QgbSA9
IDA7IG0gPCBXVEZfQVJSQVlfTEVOR1RIKGVudGl0eU1hcHMpOyArK20pIHsKICAgICAgICAgICAg
IGlmIChjb250ZW50W2ldID09IGVudGl0eU1hcHNbbV0uZW50aXR5ICYmIGVudGl0eU1hcHNbbV0u
bWFzayAmIGVudGl0eU1hc2spIHsKICAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKGNvbnRlbnQg
KyBwb3NpdGlvbkFmdGVyTGFzdEVudGl0eSwgaSAtIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5KTsK
LSAgICAgICAgICAgICAgICBhcHBlbmQob3V0LCBlbnRpdHlNYXBzW21dLnJlZmVyZW5jZSk7Cisg
ICAgICAgICAgICAgICAgb3V0LmFwcGVuZChlbnRpdHlNYXBzW21dLnJlZmVyZW5jZSk7CiAgICAg
ICAgICAgICAgICAgcG9zaXRpb25BZnRlckxhc3RFbnRpdHkgPSBpICsgMTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTg2LDExICs4NywxMSBAQCBNYXJrdXBBY2N1
bXVsYXRvcjo6fk1hcmt1cEFjY3VtdWxhdG9yKCkKIAogU3RyaW5nIE1hcmt1cEFjY3VtdWxhdG9y
OjpzZXJpYWxpemVOb2RlcyhOb2RlKiBub2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5P
bmx5IGNoaWxkcmVuT25seSkKIHsKLSAgICBWZWN0b3I8VUNoYXI+IG91dDsKKyAgICBTdHJpbmdC
dWlsZGVyIG91dDsKICAgICBzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKG5vZGUsIG5vZGVU
b1NraXAsIGNoaWxkcmVuT25seSwgMCk7Ci0gICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bGVuZ3RoKCkpOworICAgIG91dC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKCkpOwogICAgIGNvbmNh
dGVuYXRlTWFya3VwKG91dCk7Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQob3V0KTsKKyAgICBy
ZXR1cm4gb3V0LnRvU3RyaW5nKCk7CiB9CiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OnNlcmlh
bGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSogbm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNo
aWxkcmVuT25seSBjaGlsZHJlbk9ubHksIGNvbnN0IE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCkBA
IC0xMzgsMTggKzEzOSwxOCBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHJpbmco
Y29uCiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKE5vZGUqIG5vZGUs
IE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7Cisg
ICAgU3RyaW5nQnVpbGRlciBtYXJrdXA7CiAgICAgYXBwZW5kU3RhcnRNYXJrdXAobWFya3VwLCBu
b2RlLCBuYW1lc3BhY2VzKTsKLSAgICBhcHBlbmRTdHJpbmcoU3RyaW5nOjphZG9wdChtYXJrdXAp
KTsKKyAgICBhcHBlbmRTdHJpbmcobWFya3VwLnRvU3RyaW5nKCkpOwogICAgIGlmIChtX25vZGVz
KQogICAgICAgICBtX25vZGVzLT5hcHBlbmQobm9kZSk7CiB9CiAKIHZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZEVuZFRhZyhOb2RlKiBub2RlKQogewotICAgIFZlY3RvcjxVQ2hhcj4gbWFy
a3VwOworICAgIFN0cmluZ0J1aWxkZXIgbWFya3VwOwogICAgIGFwcGVuZEVuZE1hcmt1cChtYXJr
dXAsIG5vZGUpOwotICAgIGFwcGVuZFN0cmluZyhTdHJpbmc6OmFkb3B0KG1hcmt1cCkpOworICAg
IGFwcGVuZFN0cmluZyhtYXJrdXAudG9TdHJpbmcoKSk7CiB9CiAKIHNpemVfdCBNYXJrdXBBY2N1
bXVsYXRvcjo6dG90YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0cmluZ3MpCkBAIC0x
NjEsMjUgKzE2MiwyNSBAQCBzaXplX3QgTWFya3VwQWNjdW11bGF0b3I6OnRvdGFsTGVuZ3RoKGNv
CiB9CiAKIC8vIEZJWE1FOiBUaGlzIGlzIGEgdmVyeSBpbmVmZmljaWVudCB3YXkgb2YgYWNjdW11
bGF0aW5nIHRoZSBtYXJrdXAuCi0vLyBXZSdyZSBjb252ZXJ0aW5nIHJlc3VsdHMgb2YgYXBwZW5k
U3RhcnRNYXJrdXAgYW5kIGFwcGVuZEVuZE1hcmt1cCBmcm9tIFZlY3RvcjxVQ2hhcj4gdG8gU3Ry
aW5nCi0vLyBhbmQgdGhlbiBiYWNrIHRvIFZlY3RvcjxVQ2hhcj4gYW5kIGFnYWluIHRvIFN0cmlu
ZyBoZXJlLgotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6Y29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9y
PFVDaGFyPiYgb3V0KQorLy8gV2UncmUgY29udmVydGluZyByZXN1bHRzIG9mIGFwcGVuZFN0YXJ0
TWFya3VwIGFuZCBhcHBlbmRFbmRNYXJrdXAgZnJvbSBTdHJpbmdCdWlsZGVyIHRvIFN0cmluZwor
Ly8gYW5kIHRoZW4gYmFjayB0byBTdHJpbmdCdWlsZGVyIGFuZCBhZ2FpbiB0byBTdHJpbmcgaGVy
ZS4KK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmNvbmNhdGVuYXRlTWFya3VwKFN0cmluZ0J1aWxk
ZXImIG91dCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3VjY2VlZGluZ01hcmt1
cC5zaXplKCk7ICsraSkKLSAgICAgICAgYXBwZW5kKG91dCwgbV9zdWNjZWVkaW5nTWFya3VwW2ld
KTsKKyAgICAgICAgb3V0LmFwcGVuZChtX3N1Y2NlZWRpbmdNYXJrdXBbaV0pOwogfQogCi12b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiBy
ZXN1bHQsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlLCBib29sIGRvY3VtZW50SXNIVE1MKQordm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYg
cmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBkb2N1bWVudElzSFRNTCkKIHsK
ICAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMocmVzdWx0LCBhdHRyaWJ1dGUu
Y2hhcmFjdGVycygpLCBhdHRyaWJ1dGUubGVuZ3RoKCksCiAgICAgICAgIGRvY3VtZW50SXNIVE1M
ID8gRW50aXR5TWFza0luSFRNTEF0dHJpYnV0ZVZhbHVlIDogRW50aXR5TWFza0luQXR0cmlidXRl
VmFsdWUpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1
dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopCit2b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBFbGVtZW50
KiwgTmFtZXNwYWNlcyopCiB7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1
b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUpCit2b2lkIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1
bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQog
ewogICAgIEFTU0VSVChlbGVtZW50LT5pc1VSTEF0dHJpYnV0ZShjb25zdF9jYXN0PEF0dHJpYnV0
ZSo+KCZhdHRyaWJ1dGUpKSk7CiAgICAgY29uc3QgU3RyaW5nIHJlc29sdmVkVVJMU3RyaW5nID0g
cmVzb2x2ZVVSTElmTmVlZGVkKGVsZW1lbnQsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKQEAgLTE5NCw3
ICsxOTUsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBCiAgICAg
ICAgICAgICAgICAgcXVvdGVDaGFyID0gJ1wnJzsKICAgICAgICAgfQogICAgICAgICByZXN1bHQu
YXBwZW5kKHF1b3RlQ2hhcik7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIHN0cmlwcGVkVVJMU3Ry
aW5nKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdHJpcHBlZFVSTFN0cmluZyk7CiAgICAgICAg
IHJlc3VsdC5hcHBlbmQocXVvdGVDaGFyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIw
NSw3ICsyMDYsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBCiAg
ICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmROb2RlVmFsdWUoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBOb2RlKiBub2RlLCBj
b25zdCBSYW5nZSogcmFuZ2UsIEVudGl0eU1hc2sgZW50aXR5TWFzaykKK3ZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZE5vZGVWYWx1ZShTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IE5vZGUq
IG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQogewogICAg
IFN0cmluZyBzdHIgPSBub2RlLT5ub2RlVmFsdWUoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFj
dGVycyA9IHN0ci5jaGFyYWN0ZXJzKCk7CkBAIC0yNTUsNyArMjU2LDcgQEAgYm9vbCBNYXJrdXBB
Y2N1bXVsYXRvcjo6c2hvdWxkQWRkTmFtZXNwYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROYW1lc3BhY2UoVmVjdG9yPFVDaGFyPiYgcmVzdWx0
LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIE5hbWVzcGFjZXMmIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmROYW1lc3BhY2UoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcm
IHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmIG5h
bWVzcGFjZXMpCiB7CiAgICAgbmFtZXNwYWNlcy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgaWYg
KG5hbWVzcGFjZVVSSS5pc0VtcHR5KCkpCkBAIC0yNjcsMTAgKzI2OCwxMCBAQCB2b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmROYW1lc3BhY2UoCiAgICAgaWYgKGZvdW5kTlMgIT0gbmFtZXNw
YWNlVVJJLmltcGwoKSkgewogICAgICAgICBuYW1lc3BhY2VzLnNldChwcmUsIG5hbWVzcGFjZVVS
SS5pbXBsKCkpOwogICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGFwcGVuZChy
ZXN1bHQsIHhtbG5zQXRvbS5zdHJpbmcoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoeG1sbnNB
dG9tLnN0cmluZygpKTsKICAgICAgICAgaWYgKCFwcmVmaXguaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCc6Jyk7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBwcmVm
aXgpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwcmVmaXgpOwogICAgICAgICB9CiAKICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnPScpOwpAQCAtMjkyLDU5ICsyOTMsNTkgQEAgRW50aXR5TWFz
ayBNYXJrdXBBY2N1bXVsYXRvcjo6ZW50aXR5TWFzawogICAgIHJldHVybiB0ZXh0LT5kb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpID8gRW50aXR5TWFza0luSFRNTFBDREFUQSA6IEVudGl0eU1h
c2tJblBDREFUQTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChWZWN0
b3I8VUNoYXI+JiBvdXQsIFRleHQqIHRleHQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCogdGV4dCkKIHsKICAgICBhcHBlbmROb2Rl
VmFsdWUob3V0LCB0ZXh0LCBtX3JhbmdlLCBlbnRpdHlNYXNrRm9yVGV4dCh0ZXh0KSk7CiB9CiAK
LXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENvbW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0
LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRD
b21tZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiBjb21tZW50KQogewogICAg
IC8vIEZJWE1FOiBDb21tZW50IGNvbnRlbnQgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxp
emVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlv
biBpZiBpdCBpbmNsdWRlcyAiLS0+Ii4KLSAgICBhcHBlbmQob3V0LCAiPCEtLSIpOwotICAgIGFw
cGVuZChvdXQsIGNvbW1lbnQpOwotICAgIGFwcGVuZChvdXQsICItLT4iKTsKKyAgICBvdXQuYXBw
ZW5kKCI8IS0tIik7CisgICAgb3V0LmFwcGVuZChjb21tZW50KTsKKyAgICBvdXQuYXBwZW5kKCIt
LT4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKFZl
Y3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKiBuKQordm9pZCBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29u
c3QgRG9jdW1lbnRUeXBlKiBuKQogewogICAgIGlmIChuLT5uYW1lKCkuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhcHBlbmQocmVzdWx0LCAiPCFET0NUWVBFICIpOwotICAgIGFw
cGVuZChyZXN1bHQsIG4tPm5hbWUoKSk7CisgICAgcmVzdWx0LmFwcGVuZCgiPCFET0NUWVBFICIp
OworICAgIHJlc3VsdC5hcHBlbmQobi0+bmFtZSgpKTsKICAgICBpZiAoIW4tPnB1YmxpY0lkKCku
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsICIgUFVCTElDIFwiIik7Ci0gICAg
ICAgIGFwcGVuZChyZXN1bHQsIG4tPnB1YmxpY0lkKCkpOwotICAgICAgICBhcHBlbmQocmVzdWx0
LCAiXCIiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiIFBVQkxJQyBcIiIpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKG4tPnB1YmxpY0lkKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiIp
OwogICAgICAgICBpZiAoIW4tPnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBh
cHBlbmQocmVzdWx0LCAiIFwiIik7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBuLT5zeXN0
ZW1JZCgpKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsICJcIiIpOworICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgiIFwiIik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG4tPnN5c3Rl
bUlkKCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCIiKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSBpZiAoIW4tPnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGFwcGVuZChy
ZXN1bHQsICIgU1lTVEVNIFwiIik7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIG4tPnN5c3RlbUlk
KCkpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCAiXCIiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiIFNZU1RFTSBcIiIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG4tPnN5c3RlbUlkKCkpOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiIpOwogICAgIH0KICAgICBpZiAoIW4tPmludGVybmFs
U3Vic2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsICIgWyIpOwotICAg
ICAgICBhcHBlbmQocmVzdWx0LCBuLT5pbnRlcm5hbFN1YnNldCgpKTsKLSAgICAgICAgYXBwZW5k
KHJlc3VsdCwgIl0iKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiIFsiKTsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChuLT5pbnRlcm5hbFN1YnNldCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgi
XSIpOwogICAgIH0KLSAgICBhcHBlbmQocmVzdWx0LCAiPiIpOworICAgIHJlc3VsdC5hcHBlbmQo
Ij4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0
cmluZyYgZGF0YSkKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFByb2Nlc3NpbmdJbnN0
cnVjdGlvbihTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBT
dHJpbmcmIGRhdGEpCiB7CiAgICAgLy8gRklYTUU6IFBJIGRhdGEgaXMgbm90IGVzY2FwZWQsIGJ1
dCBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgdGhpcyBzaG91bGQg
cmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVzICI/PiIuCi0gICAgYXBwZW5kKG91dCwg
Ijw/Iik7Ci0gICAgYXBwZW5kKG91dCwgdGFyZ2V0KTsKLSAgICBhcHBlbmQob3V0LCAiICIpOwot
ICAgIGFwcGVuZChvdXQsIGRhdGEpOwotICAgIGFwcGVuZChvdXQsICI/PiIpOworICAgIG91dC5h
cHBlbmQoIjw/Iik7CisgICAgb3V0LmFwcGVuZCh0YXJnZXQpOworICAgIG91dC5hcHBlbmQoIiAi
KTsKKyAgICBvdXQuYXBwZW5kKGRhdGEpOworICAgIG91dC5hcHBlbmQoIj8+Iik7CiB9CiAKLXZv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBF
bGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1l
bnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgYXBwZW5kT3BlblRhZyhvdXQsIGVs
ZW1lbnQsIG5hbWVzcGFjZXMpOwogCkBAIC0zNTksMTUgKzM2MCwxNSBAQCB2b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZlCiAgICAgYXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVt
ZW50KTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kT3BlblRhZyhWZWN0b3I8
VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2
b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRPcGVuVGFnKFN0cmluZ0J1aWxkZXImIG91dCwg
RWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBvdXQuYXBw
ZW5kKCc8Jyk7Ci0gICAgYXBwZW5kKG91dCwgZWxlbWVudC0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2Fz
ZSgpKTsKKyAgICBvdXQuYXBwZW5kKGVsZW1lbnQtPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7
CiAgICAgaWYgKCFlbGVtZW50LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYmIG5hbWVz
cGFjZXMgJiYgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChlbGVtZW50KSkKICAgICAgICAgYXBw
ZW5kTmFtZXNwYWNlKG91dCwgZWxlbWVudC0+cHJlZml4KCksIGVsZW1lbnQtPm5hbWVzcGFjZVVS
SSgpLCAqbmFtZXNwYWNlcyk7ICAgIAogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRDbG9zZVRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1l
bnQqIGVsZW1lbnQpCiB7CiAgICAgaWYgKHNob3VsZFNlbGZDbG9zZShlbGVtZW50KSkgewogICAg
ICAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQpAQCAtMzc3LDE2ICszNzgsMTYgQEAg
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2xvc2VUYWcoVgogICAgIG91dC5hcHBlbmQo
Jz4nKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlKFZlY3Rv
cjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1
dGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBB
dHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBib29s
IGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsK
IAogICAgIG91dC5hcHBlbmQoJyAnKTsKIAogICAgIGlmIChkb2N1bWVudElzSFRNTCkKLSAgICAg
ICAgYXBwZW5kKG91dCwgYXR0cmlidXRlLm5hbWUoKS5sb2NhbE5hbWUoKSk7CisgICAgICAgIG91
dC5hcHBlbmQoYXR0cmlidXRlLm5hbWUoKS5sb2NhbE5hbWUoKSk7CiAgICAgZWxzZQotICAgICAg
ICBhcHBlbmQob3V0LCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkpOworICAgICAgICBvdXQu
YXBwZW5kKGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSk7CiAKICAgICBvdXQuYXBwZW5kKCc9
Jyk7CiAKQEAgLTQwMiwxNSArNDAzLDE1IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZEF0dHJpYnV0ZSgKICAgICAgICAgYXBwZW5kTmFtZXNwYWNlKG91dCwgYXR0cmlidXRlLnByZWZp
eCgpLCBhdHRyaWJ1dGUubmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2VzKTsKIH0KIAotdm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwg
Y29uc3QgU3RyaW5nJiBzZWN0aW9uKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RB
VEFTZWN0aW9uKFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKQogewog
ICAgIC8vIEZJWE1FOiBDREFUQSBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFs
aXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRp
b24gaWYgaXQgaW5jbHVkZXMgIl1dPiIuCi0gICAgYXBwZW5kKG91dCwgIjwhW0NEQVRBWyIpOwot
ICAgIGFwcGVuZChvdXQsIHNlY3Rpb24pOwotICAgIGFwcGVuZChvdXQsICJdXT4iKTsKKyAgICBv
dXQuYXBwZW5kKCI8IVtDREFUQVsiKTsKKyAgICBvdXQuYXBwZW5kKHNlY3Rpb24pOworICAgIG91
dC5hcHBlbmQoIl1dPiIpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFy
dE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUsIE5hbWVzcGFj
ZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1
cChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5h
bWVzcGFjZXMpCiB7CiAgICAgaWYgKG5hbWVzcGFjZXMpCiAgICAgICAgIG5hbWVzcGFjZXMtPmNo
ZWNrQ29uc2lzdGVuY3koKTsKQEAgLTQ3NiwxNCArNDc3LDE0IEBAIGJvb2wgTWFya3VwQWNjdW11
bGF0b3I6OmVsZW1lbnRDYW5ub3RIYXYKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRN
TEVsZW1lbnQqPihub2RlKS0+aWVGb3JiaWRzSW5zZXJ0SFRNTCgpOwogfQogCi12b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25z
dCBOb2RlKiBub2RlKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kTWFya3VwKFN0
cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUt
PmlzRWxlbWVudE5vZGUoKSB8fCBzaG91bGRTZWxmQ2xvc2Uobm9kZSkgfHwgKCFub2RlLT5oYXND
aGlsZE5vZGVzKCkgJiYgZWxlbWVudENhbm5vdEhhdmVFbmRUYWcobm9kZSkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICByZXN1bHQuYXBwZW5kKCc8Jyk7CiAgICAgcmVzdWx0LmFwcGVuZCgnLycp
OwotICAgIGFwcGVuZChyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKS0+
bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKKyAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0
PGNvbnN0IEVsZW1lbnQqPihub2RlKS0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKICAgICBy
ZXN1bHQuYXBwZW5kKCc+Jyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFy
a3VwQWNjdW11bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01h
cmt1cEFjY3VtdWxhdG9yLmgJKHJldmlzaW9uIDk0NjMwKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NywzNCArNzcsMzQg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAg
IHN0YXRpYyBzaXplX3QgdG90YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBz
aXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdG90YWxMZW5ndGgobV9zdWNjZWVkaW5nTWFy
a3VwKTsgfQotICAgIHZvaWQgY29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KTsK
LSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29u
c3QgU3RyaW5nJiBhdHRyaWJ1dGUsIGJvb2wgZG9jdW1lbnRJc0hUTUwpOwotICAgIHZpcnR1YWwg
dm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFt
ZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kTm9kZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIG91dCwg
Y29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5TWFzayk7CisgICAgdm9pZCBjb25jYXRl
bmF0ZU1hcmt1cChTdHJpbmdCdWlsZGVyJiBvdXQpOworICAgIHZvaWQgYXBwZW5kQXR0cmlidXRl
VmFsdWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9v
bCBkb2N1bWVudElzSFRNTCk7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0
ZXMoU3RyaW5nQnVpbGRlciYsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAgdm9pZCBhcHBl
bmROb2RlVmFsdWUoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2Uq
LCBFbnRpdHlNYXNrKTsKICAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoY29uc3Qg
RWxlbWVudCopOwogICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0
dHJpYnV0ZSYsIE5hbWVzcGFjZXMmKTsKLSAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShWZWN0b3I8
VUNoYXI+JiByZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWVzcGFjZVVSSSwgTmFtZXNwYWNlcyYpOworICAgIHZvaWQgYXBwZW5kTmFtZXNw
YWNlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBOYW1lc3BhY2VzJik7CiAgICAgRW50aXR5
TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFw
cGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0Kik7Ci0gICAgdm9pZCBhcHBlbmRDb21t
ZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBjb21tZW50KTsKLSAgICB2b2lk
IGFwcGVuZERvY3VtZW50VHlwZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IERvY3VtZW50
VHlwZSopOwotICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKFZlY3RvcjxVQ2hh
cj4mIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSk7Ci0gICAg
dmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50Kiwg
TmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQs
IEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRDbG9zZVRhZyhWZWN0b3I8
VUNoYXI+JiBvdXQsIEVsZW1lbnQqKTsKLSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShWZWN0b3I8
VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7Ci0g
ICAgdm9pZCBhcHBlbmRDREFUQVNlY3Rpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJp
bmcmIHNlY3Rpb24pOwotICAgIHZvaWQgYXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYg
cmVzdWx0LCBjb25zdCBOb2RlKiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCopOworICAgIHZvaWQgYXBwZW5kQ29tbWVu
dChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgY29tbWVudCk7CisgICAgdm9pZCBh
cHBlbmREb2N1bWVudFR5cGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBEb2N1bWVudFR5
cGUqKTsKKyAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihTdHJpbmdCdWlsZGVy
JiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpOworICAgIHZp
cnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCosIE5h
bWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZE9wZW5UYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBF
bGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBwZW5kQ2xvc2VUYWcoU3RyaW5nQnVp
bGRlciYgb3V0LCBFbGVtZW50Kik7CisgICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoU3RyaW5nQnVp
bGRlciYgb3V0LCBFbGVtZW50KiwgY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyopOworICAg
IHZvaWQgYXBwZW5kQ0RBVEFTZWN0aW9uKFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5n
JiBzZWN0aW9uKTsKKyAgICB2b2lkIGFwcGVuZFN0YXJ0TWFya3VwKFN0cmluZ0J1aWxkZXImIHJl
c3VsdCwgY29uc3QgTm9kZSosIE5hbWVzcGFjZXMqKTsKICAgICBib29sIHNob3VsZFNlbGZDbG9z
ZShjb25zdCBOb2RlKik7CiAgICAgYm9vbCBlbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhjb25zdCBO
b2RlKiBub2RlKTsKLSAgICB2b2lkIGFwcGVuZEVuZE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1
bHQsIGNvbnN0IE5vZGUqKTsKKyAgICB2b2lkIGFwcGVuZEVuZE1hcmt1cChTdHJpbmdCdWlsZGVy
JiByZXN1bHQsIGNvbnN0IE5vZGUqKTsKIAogICAgIFZlY3RvcjxOb2RlKj4qIGNvbnN0IG1fbm9k
ZXM7CiAgICAgY29uc3QgUmFuZ2UqIGNvbnN0IG1fcmFuZ2U7CiAKIHByaXZhdGU6CiAgICAgU3Ry
aW5nIHJlc29sdmVVUkxJZk5lZWRlZChjb25zdCBFbGVtZW50KiwgY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVj
dG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBFbGVtZW50KiwgY29uc3QgQXR0cmlidXRlJik7Cisg
ICAgdm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1
bHQsIGNvbnN0IEVsZW1lbnQqLCBjb25zdCBBdHRyaWJ1dGUmKTsKICAgICB2b2lkIHNlcmlhbGl6
ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSosIE5vZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9u
bHksIGNvbnN0IE5hbWVzcGFjZXMqKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG1fc3VjY2VlZGlu
Z01hcmt1cDsKQEAgLTExMiw3ICsxMTIsNyBAQCBwcml2YXRlOgogfTsKIAogLy8gRklYTUU6IFRo
aXMgbWV0aG9kIHNob3VsZCBiZSBpbnRlZ3JhdGVkIHdpdGggTWFya3VwQWNjdW11bGF0b3IuCi12
b2lkIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhWZWN0b3I8VUNoYXI+JiBvdXQs
IGNvbnN0IFVDaGFyKiBjb250ZW50LCBzaXplX3QgbGVuZ3RoLCBFbnRpdHlNYXNrIGVudGl0eU1h
c2spOwordm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoU3RyaW5nQnVpbGRl
ciYgb3V0LCBjb25zdCBVQ2hhciogY29udGVudCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5TWFzayk7
CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gOTQ2MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgInZpc2li
bGVfdW5pdHMuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5h
bWVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0xMjksMTMgKzEzMCwxMyBAQCBwdWJs
aWM6CiAgICAgU3RyaW5nIHRha2VSZXN1bHRzKCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBhcHBl
bmRTdHlsZU5vZGVPcGVuVGFnKFZlY3RvcjxVQ2hhcj4mLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwg
RG9jdW1lbnQqLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CisgICAgdm9pZCBhcHBlbmRTdHlsZU5v
ZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgRG9jdW1lbnQq
LCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CiAgICAgY29uc3QgU3RyaW5nIHN0eWxlTm9kZUNsb3Nl
VGFnKGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChW
ZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChT
dHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqKTsKICAgICBTdHJpbmcgcmVuZGVyZWRUZXh0KGNvbnN0
IE5vZGUqLCBjb25zdCBSYW5nZSopOwogICAgIFN0cmluZyBzdHJpbmdWYWx1ZUZvclJhbmdlKGNv
bnN0IE5vZGUqLCBjb25zdCBSYW5nZSopOwotICAgIHZvaWQgYXBwZW5kRWxlbWVudChWZWN0b3I8
VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgYWRkRGlzcGxheUlubGluZSwgUmFu
Z2VGdWxseVNlbGVjdHNOb2RlKTsKLSAgICB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFy
PiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKikgeyBhcHBlbmRFbGVtZW50KG91
dCwgZWxlbWVudCwgZmFsc2UsIERvZXNGdWxseVNlbGVjdE5vZGUpOyB9CisgICAgdm9pZCBhcHBl
bmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCosIGJvb2wgYWRkRGlzcGxheUlu
bGluZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsKKyAgICB2b2lkIGFwcGVuZEVsZW1lbnQoU3Ry
aW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKikgeyBhcHBlbmRF
bGVtZW50KG91dCwgZWxlbWVudCwgZmFsc2UsIERvZXNGdWxseVNlbGVjdE5vZGUpOyB9CiAKICAg
ICBlbnVtIE5vZGVUcmF2ZXJzYWxNb2RlIHsgRW1pdFN0cmluZywgRG9Ob3RFbWl0U3RyaW5nIH07
CiAgICAgTm9kZSogdHJhdmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24oTm9kZSogc3RhcnROb2Rl
LCBOb2RlKiBwYXN0RW5kLCBOb2RlVHJhdmVyc2FsTW9kZSk7CkBAIC0xNjMsMTIgKzE2NCwxMiBA
QCBpbmxpbmUgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OlN0eWxlZE1hCiAKIHZvaWQgU3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm9kZShOb2RlKiBub2RlLCBib29sIGNvbnZlcnRC
bG9ja3NUb0lubGluZXMsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05v
ZGUpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7CisgICAgU3RyaW5nQnVpbGRlciBtYXJr
dXA7CiAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgYXBwZW5kRWxlbWVu
dChtYXJrdXAsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSwgY29udmVydEJsb2Nrc1RvSW5s
aW5lcyAmJiBpc0Jsb2NrKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpKSwgcmFuZ2VGdWxseVNlbGVj
dHNOb2RlKTsKICAgICBlbHNlCiAgICAgICAgIGFwcGVuZFN0YXJ0TWFya3VwKG1hcmt1cCwgbm9k
ZSwgMCk7Ci0gICAgbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cC5hcHBlbmQoU3RyaW5nOjphZG9w
dChtYXJrdXApKTsKKyAgICBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwLmFwcGVuZChtYXJrdXAu
dG9TdHJpbmcoKSk7CiAgICAgYXBwZW5kRW5kVGFnKG5vZGUpOwogICAgIGlmIChtX25vZGVzKQog
ICAgICAgICBtX25vZGVzLT5hcHBlbmQobm9kZSk7CkBAIC0xNzYsMjAgKzE3NywyMCBAQCB2b2lk
IFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aE5vCiAKIHZvaWQgU3R5bGVkTWFya3Vw
QWNjdW11bGF0b3I6OndyYXBXaXRoU3R5bGVOb2RlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
LCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKIHsKLSAgICBWZWN0b3I8VUNoYXI+
IG9wZW5UYWc7CisgICAgU3RyaW5nQnVpbGRlciBvcGVuVGFnOwogICAgIGFwcGVuZFN0eWxlTm9k
ZU9wZW5UYWcob3BlblRhZywgc3R5bGUsIGRvY3VtZW50LCBpc0Jsb2NrKTsKLSAgICBtX3JldmVy
c2VkUHJlY2VkaW5nTWFya3VwLmFwcGVuZChTdHJpbmc6OmFkb3B0KG9wZW5UYWcpKTsKKyAgICBt
X3JldmVyc2VkUHJlY2VkaW5nTWFya3VwLmFwcGVuZChvcGVuVGFnLnRvU3RyaW5nKCkpOwogICAg
IGFwcGVuZFN0cmluZyhzdHlsZU5vZGVDbG9zZVRhZyhpc0Jsb2NrKSk7CiB9CiAKLXZvaWQgU3R5
bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoVmVjdG9yPFVDaGFy
PiYgb3V0LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBi
b29sIGlzQmxvY2spCit2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHlsZU5v
ZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImIG91dCwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUs
IERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBpc0Jsb2NrKQogewogICAgIC8vIEFsbCB0ZXh0LWRl
Y29yYXRpb24tcmVsYXRlZCBlbGVtZW50cyBzaG91bGQgaGF2ZSBiZWVuIHRyZWF0ZWQgYXMgc3Bl
Y2lhbCBhbmNlc3RvcnMKICAgICAvLyBJZiB3ZSBldmVyIGhpdCB0aGlzIEFTU0VSVCwgd2Ugc2hv
dWxkIGV4cG9ydCBTdHlsZUNoYW5nZSBpbiBBcHBseVN0eWxlQ29tbWFuZCBhbmQgdXNlIGl0IGhl
cmUKICAgICBBU1NFUlQocHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShzdHlsZSwgQ1NTUHJv
cGVydHlUZXh0RGVjb3JhdGlvbikgJiYgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShzdHls
ZSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkpOwogICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBkaXZTdHlsZSwgKCI8ZGl2IHN0eWxlPVwiIikp
OwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBzdHlsZVNwYW5PcGVuLCAo
IjxzcGFuIHN0eWxlPVwiIikpOwotICAgIGFwcGVuZChvdXQsIGlzQmxvY2sgPyBkaXZTdHlsZSA6
IHN0eWxlU3Bhbk9wZW4pOworICAgIG91dC5hcHBlbmQoaXNCbG9jayA/IGRpdlN0eWxlIDogc3R5
bGVTcGFuT3Blbik7CiAgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBzdHlsZS0+Y3NzVGV4
dCgpLCBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7CiAgICAgb3V0LmFwcGVuZCgnXCInKTsK
ICAgICBvdXQuYXBwZW5kKCc+Jyk7CkBAIC0yMDQsMTkgKzIwNSwxOSBAQCBjb25zdCBTdHJpbmcg
U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnN0CiAKIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVs
YXRvcjo6dGFrZVJlc3VsdHMoKQogewotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJl
c3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRvdGFsTGVuZ3RoKG1fcmV2ZXJzZWRQcmVjZWRp
bmdNYXJrdXApICsgbGVuZ3RoKCkpOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJl
c3VsdC5yZXNlcnZlQ2FwYWNpdHkodG90YWxMZW5ndGgobV9yZXZlcnNlZFByZWNlZGluZ01hcmt1
cCkgKyBsZW5ndGgoKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gbV9yZXZlcnNlZFByZWNlZGlu
Z01hcmt1cC5zaXplKCk7IGkgPiAwOyAtLWkpCi0gICAgICAgIGFwcGVuZChyZXN1bHQsIG1fcmV2
ZXJzZWRQcmVjZWRpbmdNYXJrdXBbaSAtIDFdKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtX3Jl
dmVyc2VkUHJlY2VkaW5nTWFya3VwW2kgLSAxXSk7CiAKICAgICBjb25jYXRlbmF0ZU1hcmt1cChy
ZXN1bHQpOwogCiAgICAgLy8gV2UgcmVtb3ZlICdcMCcgY2hhcmFjdGVycyBiZWNhdXNlIHRoZXkg
YXJlIG5vdCB2aXNpYmx5IHJlbmRlcmVkIHRvIHRoZSB1c2VyLgotICAgIHJldHVybiBTdHJpbmc6
OmFkb3B0KHJlc3VsdCkucmVwbGFjZSgwLCAiIik7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmlu
ZygpLnJlcGxhY2UoMCwgIiIpOwogfQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCogdGV4dCkKK3ZvaWQgU3R5bGVkTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0KiB0ZXh0
KQogeyAgICAKICAgICBjb25zdCBib29sIHBhcmVudElzVGV4dGFyZWEgPSB0ZXh0LT5wYXJlbnRF
bGVtZW50KCkgJiYgdGV4dC0+cGFyZW50RWxlbWVudCgpLT50YWdRTmFtZSgpID09IHRleHRhcmVh
VGFnOwogICAgIGNvbnN0IGJvb2wgd3JhcHBpbmdTcGFuID0gc2hvdWxkQXBwbHlXcmFwcGluZ1N0
eWxlKHRleHQpICYmICFwYXJlbnRJc1RleHRhcmVhOwpAQCAtMjI4LDkgKzIyOSw5IEBAIHZvaWQg
U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQKICAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCB0aGlzIGJlIGluY2x1ZGVkIGluIGZvcmNlSW5saW5lPwogICAgICAgICB3cmFwcGluZ1N0
eWxlLT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsb2F0LCBDU1NWYWx1ZU5vbmUp
OwogCi0gICAgICAgIFZlY3RvcjxVQ2hhcj4gb3BlblRhZzsKKyAgICAgICAgU3RyaW5nQnVpbGRl
ciBvcGVuVGFnOwogICAgICAgICBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKG9wZW5UYWcsIHdyYXBw
aW5nU3R5bGUtPnN0eWxlKCksIHRleHQtPmRvY3VtZW50KCkpOwotICAgICAgICBhcHBlbmQob3V0
LCBTdHJpbmc6OmFkb3B0KG9wZW5UYWcpKTsKKyAgICAgICAgb3V0LmFwcGVuZChvcGVuVGFnLmNo
YXJhY3RlcnMoKSwgb3BlblRhZy5sZW5ndGgoKSk7CiAgICAgfQogCiAgICAgaWYgKCFzaG91bGRB
bm5vdGF0ZSgpIHx8IHBhcmVudElzVGV4dGFyZWEpCkBAIC0yMzgsMTMgKzIzOSwxMyBAQCB2b2lk
IFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0CiAgICAgZWxzZSB7CiAgICAgICAg
IGNvbnN0IGJvb2wgdXNlUmVuZGVyZWRUZXh0ID0gIWVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0
UG9zaXRpb25Jbk5vZGUodGV4dCksIHNlbGVjdFRhZyk7CiAgICAgICAgIFN0cmluZyBjb250ZW50
ID0gdXNlUmVuZGVyZWRUZXh0ID8gcmVuZGVyZWRUZXh0KHRleHQsIG1fcmFuZ2UpIDogc3RyaW5n
VmFsdWVGb3JSYW5nZSh0ZXh0LCBtX3JhbmdlKTsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBidWZm
ZXI7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVyOwogICAgICAgICBhcHBlbmRDaGFyYWN0
ZXJzUmVwbGFjaW5nRW50aXRpZXMoYnVmZmVyLCBjb250ZW50LmNoYXJhY3RlcnMoKSwgY29udGVu
dC5sZW5ndGgoKSwgRW50aXR5TWFza0luUENEQVRBKTsKLSAgICAgICAgYXBwZW5kKG91dCwgY29u
dmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hdChTdHJpbmc6OmFkb3B0KGJ1ZmZlciksIHRl
eHQpKTsKKyAgICAgICAgb3V0LmFwcGVuZChjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9y
bWF0KGJ1ZmZlci50b1N0cmluZygpLCB0ZXh0KSk7CiAgICAgfQogCiAgICAgaWYgKHdyYXBwaW5n
U3BhbikKLSAgICAgICAgYXBwZW5kKG91dCwgc3R5bGVOb2RlQ2xvc2VUYWcoKSk7CisgICAgICAg
IG91dC5hcHBlbmQoc3R5bGVOb2RlQ2xvc2VUYWcoKSk7CiB9CiAgICAgCiBTdHJpbmcgU3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OnJlbmRlcmVkVGV4dChjb25zdCBOb2RlKiBub2RlLCBjb25zdCBS
YW5nZSogcmFuZ2UpCkBAIC0yODEsNyArMjgyLDcgQEAgU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3Vt
dWxhdG9yOjpzdHJpbmdWYQogICAgIHJldHVybiBzdHI7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBl
bGVtZW50LCBib29sIGFkZERpc3BsYXlJbmxpbmUsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5n
ZUZ1bGx5U2VsZWN0c05vZGUpCit2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRF
bGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBhZGREaXNw
bGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQog
ewogICAgIGNvbnN0IGJvb2wgZG9jdW1lbnRJc0hUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5p
c0hUTUxEb2N1bWVudCgpOwogICAgIGFwcGVuZE9wZW5UYWcob3V0LCBlbGVtZW50LCAwKTsKQEAg
LTMyNiw3ICszMjcsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVt
CiAKICAgICAgICAgaWYgKCFuZXdJbmxpbmVTdHlsZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5bGVQcmVmaXgsICgiIHN0eWxl
PVwiIikpOwotICAgICAgICAgICAgYXBwZW5kKG91dCwgc3R5bGVQcmVmaXgpOworICAgICAgICAg
ICAgb3V0LmFwcGVuZChzdHlsZVByZWZpeCk7CiAgICAgICAgICAgICBhcHBlbmRBdHRyaWJ1dGVW
YWx1ZShvdXQsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5jc3NUZXh0KCksIGRvY3VtZW50SXNI
VE1MKTsKICAgICAgICAgICAgIG91dC5hcHBlbmQoJ1wiJyk7CiAgICAgICAgIH0KQEAgLTkxMywx
MyArOTE0LDEzIEBAIFN0cmluZyBjcmVhdGVGdWxsTWFya3VwKGNvbnN0IFJhbmdlKiByYW4KIAog
U3RyaW5nIHVybFRvTWFya3VwKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkK
IHsKLSAgICBWZWN0b3I8VUNoYXI+IG1hcmt1cDsKLSAgICBhcHBlbmQobWFya3VwLCAiPGEgaHJl
Zj1cIiIpOwotICAgIGFwcGVuZChtYXJrdXAsIHVybC5zdHJpbmcoKSk7Ci0gICAgYXBwZW5kKG1h
cmt1cCwgIlwiPiIpOworICAgIFN0cmluZ0J1aWxkZXIgbWFya3VwOworICAgIG1hcmt1cC5hcHBl
bmQoIjxhIGhyZWY9XCIiKTsKKyAgICBtYXJrdXAuYXBwZW5kKHVybC5zdHJpbmcoKSk7CisgICAg
bWFya3VwLmFwcGVuZCgiXCI+Iik7CiAgICAgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0
aWVzKG1hcmt1cCwgdGl0bGUuY2hhcmFjdGVycygpLCB0aXRsZS5sZW5ndGgoKSwgRW50aXR5TWFz
a0luUENEQVRBKTsKLSAgICBhcHBlbmQobWFya3VwLCAiPC9hPiIpOwotICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KG1hcmt1cCk7CisgICAgbWFya3VwLmFwcGVuZCgiPC9hPiIpOworICAgIHJldHVy
biBtYXJrdXAudG9TdHJpbmcoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9E
T01Ub2tlbkxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9r
ZW5MaXN0LmNwcAkocmV2aXNpb24gOTQ2MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRv
a2VuTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgU3RyaW5nIERPTVRv
a2VuTGlzdDo6cmVtb3ZlVG9rZW4oY29uc3QgQQogICAgIC8vIEFsZ29yaXRobSBkZWZpbmVkIGF0
IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlw
YWdlL2NvbW1vbi1taWNyb3N5bnRheGVzLmh0bWwjcmVtb3ZlLWEtdG9rZW4tZnJvbS1hLXN0cmlu
ZwogCiAgICAgdW5zaWduZWQgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKLSAgICBWZWN0
b3I8VUNoYXI+IG91dHB1dDsgLy8gMworICAgIFN0cmluZ0J1aWxkZXIgb3V0cHV0OyAvLyAzCiAg
ICAgb3V0cHV0LnJlc2VydmVDYXBhY2l0eShpbnB1dExlbmd0aCk7CiAgICAgdW5zaWduZWQgcG9z
aXRpb24gPSAwOyAvLyA0CiAKQEAgLTc4LDE4ICs3OCwxOCBAQCBTdHJpbmcgRE9NVG9rZW5MaXN0
OjpyZW1vdmVUb2tlbihjb25zdCBBCiAgICAgICAgIH0KIAogICAgICAgICAvLyBTdGVwIDcKLSAg
ICAgICAgVmVjdG9yPFVDaGFyPiBzOworICAgICAgICBTdHJpbmdCdWlsZGVyIHM7CiAgICAgICAg
IHdoaWxlIChwb3NpdGlvbiA8IGlucHV0TGVuZ3RoICYmIGlzTm90SFRNTFNwYWNlKGlucHV0W3Bv
c2l0aW9uXSkpCiAgICAgICAgICAgICBzLmFwcGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CiAKICAg
ICAgICAgLy8gU3RlcCA4Ci0gICAgICAgIGlmIChzID09IHRva2VuKSB7CisgICAgICAgIGlmIChz
LnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpID09IHRva2VuKSB7CiAgICAgICAgICAgICAvLyBT
dGVwIDguMQogICAgICAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXRMZW5ndGggJiYgaXNI
VE1MU3BhY2UoaW5wdXRbcG9zaXRpb25dKSkKICAgICAgICAgICAgICAgICArK3Bvc2l0aW9uOwog
CiAgICAgICAgICAgICAvLyBTdGVwIDguMgotICAgICAgICAgICAgc2l6ZV90IGogPSBvdXRwdXQu
c2l6ZSgpOworICAgICAgICAgICAgc2l6ZV90IGogPSBvdXRwdXQubGVuZ3RoKCk7CiAgICAgICAg
ICAgICB3aGlsZSAoaiA+IDAgJiYgaXNIVE1MU3BhY2Uob3V0cHV0W2ogLSAxXSkpCiAgICAgICAg
ICAgICAgICAgLS1qOwogICAgICAgICAgICAgb3V0cHV0LnJlc2l6ZShqKTsKQEAgLTk4LDExICs5
OCwxMCBAQCBTdHJpbmcgRE9NVG9rZW5MaXN0OjpyZW1vdmVUb2tlbihjb25zdCBBCiAgICAgICAg
ICAgICBpZiAocG9zaXRpb24gPCBpbnB1dExlbmd0aCAmJiAhb3V0cHV0LmlzRW1wdHkoKSkKICAg
ICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCcgJyk7CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgb3V0cHV0LmFwcGVuZChzKTsgLy8gU3RlcCA5CisgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKHMudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpOyAvLyBTdGVwIDkKICAgICB9CiAKLSAg
ICBvdXRwdXQuc2hyaW5rVG9GaXQoKTsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChvdXRwdXQp
OworICAgIHJldHVybiBvdXRwdXQudG9TdHJpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmNwcAkocmV2aXNp
b24gOTQ2MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRz
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdURjsKIApAQCAtODksNyArOTAsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZUZvbnRTaXplKGNvbnN0
IFN0cmluZyYgCiAgICAgfQogCiAgICAgLy8gU3RlcCA2Ci0gICAgVmVjdG9yPFVDaGFyLCAxNj4g
ZGlnaXRzOworICAgIFN0cmluZ0J1aWxkZXIgZGlnaXRzOworICAgIGRpZ2l0cy5yZXNlcnZlQ2Fw
YWNpdHkoMTYpOwogICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewogICAgICAgICBpZiAoIWlz
QVNDSUlEaWdpdCgqcG9zaXRpb24pKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDEsNyArMTAz
LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VGb250U2l6ZShjb25zdCBTdHJpbmcmIAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBTdGVwIDgKLSAgICBpbnQgdmFsdWUgPSBjaGFyYWN0ZXJz
VG9JbnRTdHJpY3QoZGlnaXRzLmRhdGEoKSwgZGlnaXRzLnNpemUoKSk7CisgICAgaW50IHZhbHVl
ID0gY2hhcmFjdGVyc1RvSW50U3RyaWN0KGRpZ2l0cy5jaGFyYWN0ZXJzKCksIGRpZ2l0cy5sZW5n
dGgoKSk7CiAKICAgICAvLyBTdGVwIDkKICAgICBpZiAobW9kZSA9PSBSZWxhdGl2ZVBsdXMpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmNwcAkocmV2aXNpb24gOTQ2MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNiBAQAog
I2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5j
bHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTE0
LDcgKzExMyw3IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c3RyaXAKICAg
ICBpZiAoIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKG5ld2xpbmVDaGFyYWN0ZXIpICYmICFhdHRy
aWJ1dGVWYWx1ZS5jb250YWlucyhjYXJyaWFnZVJldHVybikpCiAgICAgICAgIHJldHVybiBhdHRy
aWJ1dGVWYWx1ZTsKIAotICAgIFZlY3RvcjxVQ2hhcj4gc3RyaXBwZWQ7CisgICAgU3RyaW5nQnVp
bGRlciBzdHJpcHBlZDsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVWYWx1ZS5sZW5n
dGgoKTsKICAgICBzdHJpcHBlZC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKQEAgLTEyMyw3ICsxMjIsNyBAQCBTdHJp
bmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN0cmlwCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgc3RyaXBwZWQuYXBwZW5kKGNoYXJhY3Rlcik7CiAgICAgfQotICAgIHJldHVy
biBTdHJpbmc6OmFkb3B0KHN0cmlwcGVkKTsKKyAgICByZXR1cm4gc3RyaXBwZWQudG9TdHJpbmco
KTsKIH0KIAogc3RhdGljIGJvb2wgaXNOb3RMaW5lQnJlYWsoVUNoYXIgY2gpIHsgcmV0dXJuIGNo
ICE9IG5ld2xpbmVDaGFyYWN0ZXIgJiYgY2ggIT0gY2FycmlhZ2VSZXR1cm47IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAJKHJl
dmlzaW9uIDk0NjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNj
YW5uZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsMTQgKzE5MiwxNCBAQCBzdGF0aWMgU3Ry
aW5nIHBhcnNlQ1NTU3RyaW5nT3JVUkwoY29uc3QgCiAKIHZvaWQgQ1NTUHJlbG9hZFNjYW5uZXI6
OmVtaXRSdWxlKCkKIHsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoImltcG9ydCIsIG1fcnVs
ZS5kYXRhKCksIG1fcnVsZS5zaXplKCkpKSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNl
Q1NTU3RyaW5nT3JVUkwobV9ydWxlVmFsdWUuZGF0YSgpLCBtX3J1bGVWYWx1ZS5zaXplKCkpOwor
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSgiaW1wb3J0IiwgbV9ydWxlLmNoYXJhY3RlcnMoKSwg
bV9ydWxlLmxlbmd0aCgpKSkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPSBwYXJzZUNTU1N0cmlu
Z09yVVJMKG1fcnVsZVZhbHVlLmNoYXJhY3RlcnMoKSwgbV9ydWxlVmFsdWUubGVuZ3RoKCkpOwog
ICAgICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgUmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QobV9kb2N1bWVudC0+Y29tcGxldGVVUkwodmFsdWUpKTsKICAgICAgICAgICAg
IG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnByZWxvYWQoQ2FjaGVkUmVzb3Vy
Y2U6OkNTU1N0eWxlU2hlZXQsIHJlcXVlc3QsIFN0cmluZygpLCBtX3NjYW5uaW5nQm9keSk7CiAg
ICAgICAgIH0KICAgICAgICAgbV9zdGF0ZSA9IEluaXRpYWw7Ci0gICAgfSBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZSgiY2hhcnNldCIsIG1fcnVsZS5kYXRhKCksIG1fcnVsZS5zaXplKCkpKQor
ICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoImNoYXJzZXQiLCBtX3J1bGUuY2hhcmFj
dGVycygpLCBtX3J1bGUubGVuZ3RoKCkpKQogICAgICAgICBtX3N0YXRlID0gSW5pdGlhbDsKICAg
ICBlbHNlCiAgICAgICAgIG1fc3RhdGUgPSBEb25lUGFyc2luZ0ltcG9ydFJ1bGVzOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oCShyZXZp
c2lvbiA5NDYzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2Fu
bmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNkZWZpbmUgQ1NTUHJlbG9h
ZFNjYW5uZXJfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTYxLDggKzYxLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGVtaXRS
dWxlKCk7CiAKICAgICBTdGF0ZSBtX3N0YXRlOwotICAgIFZlY3RvcjxVQ2hhciwgMTY+IG1fcnVs
ZTsKLSAgICBWZWN0b3I8VUNoYXI+IG1fcnVsZVZhbHVlOworICAgIFN0cmluZ0J1aWxkZXIgbV9y
dWxlOworICAgIFN0cmluZ0J1aWxkZXIgbV9ydWxlVmFsdWU7CiAKICAgICBib29sIG1fc2Nhbm5p
bmdCb2R5OwogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAJKHJldmlzaW9uIDk0NjMwKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJDaGFyYWN0ZXJSZWZlcmVuY2VQ
YXJzZXJJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSFRNTEVudGl0eVNlYXJjaC5oIgogI2lu
Y2x1ZGUgIkhUTUxFbnRpdHlUYWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAK
QEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQog
Ci0gICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnZlcnRUb1VURjE2KFVDaGFyMzIgdmFsdWUsIFZl
Y3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkRW50aXR5KQorICAgIGlubGluZSBzdGF0aWMgYm9vbCBj
b252ZXJ0VG9VVEYxNihVQ2hhcjMyIHZhbHVlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkRW50aXR5
KQogICAgIHsKICAgICAgICAgaWYgKFVfSVNfQk1QKHZhbHVlKSkgewogICAgICAgICAgICAgVUNo
YXIgY2hhcmFjdGVyID0gc3RhdGljX2Nhc3Q8VUNoYXI+KHZhbHVlKTsKQEAgLTg1LDkgKzg1LDkg
QEAgcHVibGljOgogCiAgICAgaW5saW5lIHN0YXRpYyBib29sIGFjY2VwdE1hbGZvcm1lZCgpIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb25zdW1lTmFtZWRFbnRp
dHkoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkRW50
aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENo
YXJhY3RlciwgVUNoYXImIGNjKQorICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb25zdW1lTmFtZWRF
bnRpdHkoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRFbnRp
dHksIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hh
cmFjdGVyLCBVQ2hhciYgY2MpCiAgICAgewotICAgICAgICBWZWN0b3I8VUNoYXIsIDEwPiBjb25z
dW1lZENoYXJhY3RlcnM7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgY29uc3VtZWRDaGFyYWN0ZXJz
OwogICAgICAgICBIVE1MRW50aXR5U2VhcmNoIGVudGl0eVNlYXJjaDsKICAgICAgICAgd2hpbGUg
KCFzb3VyY2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjYyA9ICpzb3VyY2U7CkBAIC0xMzks
NyArMTM5LDcgQEAgcHVibGljOgogfQogCiAKLWJvb2wgY29uc3VtZUhUTUxFbnRpdHkoU2VnbWVu
dGVkU3RyaW5nJiBzb3VyY2UsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkRW50aXR5LCBib29s
JiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikK
K2Jvb2wgY29uc3VtZUhUTUxFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1
aWxkZXImIGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFk
ZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQogewogICAgIHJldHVybiBjb25zdW1lQ2hhcmFjdGVy
UmVmZXJlbmNlPEhUTUxFbnRpdHlQYXJzZXI+KHNvdXJjZSwgZGVjb2RlZEVudGl0eSwgbm90RW5v
dWdoQ2hhcmFjdGVycywgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuaAkocmV2aXNpb24g
OTQ2MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1ib29sIGNvbnN1bWVIVE1MRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIFZlY3RvcjxVQ2hhciwg
MTY+JiBkZWNvZGVkRW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRp
dGlvbmFsQWxsb3dlZENoYXJhY3RlciA9ICdcMCcpOworYm9vbCBjb25zdW1lSFRNTEVudGl0eShT
ZWdtZW50ZWRTdHJpbmcmLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkRW50aXR5LCBib29sJiBub3RF
bm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9ICdcMCcp
OwogCiAvLyBVc2VkIGJ5IHRoZSBYTUwgcGFyc2VyLiAgTm90IHN1aXRhYmxlIGZvciB1c2UgaW4g
SFRNTCBwYXJzaW5nLiAgVXNlIGNvbnN1bWVIVE1MRW50aXR5IGluc3RlYWQuCiBVQ2hhciBkZWNv
ZGVOYW1lZEVudGl0eShjb25zdCBjaGFyKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAkocmV2aXNpb24gOTQ2MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjA3LDcgKzIwNyw3IEBAIGJvb2wgcGFyc2VIVE1MSW50ZWdlcihjb25zdCBTdHJpbmcm
IGlucHUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gU3RlcCA4Ci0gICAgVmVjdG9y
PFVDaGFyLCAxNj4gZGlnaXRzOworICAgIFN0cmluZ0J1aWxkZXIgZGlnaXRzOwogICAgIHdoaWxl
IChwb3NpdGlvbiA8IGVuZCkgewogICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqcG9zaXRpb24p
KQogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTUsNyArMjE1LDcgQEAgYm9vbCBwYXJzZUhUTUxJ
bnRlZ2VyKGNvbnN0IFN0cmluZyYgaW5wdQogICAgIH0KIAogICAgIC8vIFN0ZXAgOQotICAgIHZh
bHVlID0gc2lnbiAqIGNoYXJhY3RlcnNUb0ludFN0cmljdChkaWdpdHMuZGF0YSgpLCBkaWdpdHMu
c2l6ZSgpKTsKKyAgICB2YWx1ZSA9IHNpZ24gKiBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoZGlnaXRz
LmNoYXJhY3RlcnMoKSwgZGlnaXRzLmxlbmd0aCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMjUzLDcgKzI1Myw3IEBAIGJvb2wgcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0
IFMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gU3RlcCA4Ci0gICAgVmVjdG9yPFVD
aGFyLCAxNj4gZGlnaXRzOworICAgIFN0cmluZ0J1aWxkZXIgZGlnaXRzOwogICAgIHdoaWxlIChw
b3NpdGlvbiA8IGVuZCkgewogICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqcG9zaXRpb24pKQog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0yNjEsNyArMjYxLDcgQEAgYm9vbCBwYXJzZUhUTUxOb25O
ZWdhdGl2ZUludGVnZXIoY29uc3QgUwogICAgIH0KIAogICAgIC8vIFN0ZXAgOQotICAgIHZhbHVl
ID0gY2hhcmFjdGVyc1RvVUludFN0cmljdChkaWdpdHMuZGF0YSgpLCBkaWdpdHMuc2l6ZSgpKTsK
KyAgICB2YWx1ZSA9IGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QoZGlnaXRzLmNoYXJhY3RlcnMoKSwg
ZGlnaXRzLmxlbmd0aCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDk0NjMwKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnJlc2V0KCkKIGlu
bGluZSBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiBz
b3VyY2UpCiB7CiAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAgVmVj
dG9yPFVDaGFyLCAxNj4gZGVjb2RlZEVudGl0eTsKKyAgICBTdHJpbmdCdWlsZGVyIGRlY29kZWRF
bnRpdHk7CiAgICAgYm9vbCBzdWNjZXNzID0gY29uc3VtZUhUTUxFbnRpdHkoc291cmNlLCBkZWNv
ZGVkRW50aXR5LCBub3RFbm91Z2hDaGFyYWN0ZXJzKTsKICAgICBpZiAobm90RW5vdWdoQ2hhcmFj
dGVycykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTUzLDkgKzE1Myw4IEBAIGlubGluZSBi
b29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NFbnRpdHkKICAgICAgICAgQVNTRVJUKGRlY29kZWRF
bnRpdHkuaXNFbXB0eSgpKTsKICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCcmJyk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgVmVjdG9yPFVDaGFyPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlY29k
ZWRFbnRpdHkuYmVnaW4oKTsKLSAgICAgICAgZm9yICg7IGl0ZXIgIT0gZGVjb2RlZEVudGl0eS5l
bmQoKTsgKytpdGVyKQotICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCppdGVyKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlY29kZWRFbnRpdHkubGVuZ3RoKCk7ICsraSkK
KyAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcihkZWNvZGVkRW50aXR5W2ldKTsKICAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC05ODcsNyArOTg2LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVy
OjpuZXh0VG9rZW4oU2VnbWVudGVkUwogCiAgICAgSFRNTF9CRUdJTl9TVEFURShDaGFyYWN0ZXJS
ZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVlU3RhdGUpIHsKICAgICAgICAgYm9vbCBub3RFbm91Z2hD
aGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+IGRlY29kZWRFbnRp
dHk7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgZGVjb2RlZEVudGl0eTsKICAgICAgICAgYm9vbCBz
dWNjZXNzID0gY29uc3VtZUhUTUxFbnRpdHkoc291cmNlLCBkZWNvZGVkRW50aXR5LCBub3RFbm91
Z2hDaGFyYWN0ZXJzLCBtX2FkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKTsKICAgICAgICAgaWYg
KG5vdEVub3VnaENoYXJhY3RlcnMpCiAgICAgICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hh
cmFjdGVyVG9rZW4oKTsKQEAgLTk5NSw5ICs5OTQsOCBAQCBib29sIEhUTUxUb2tlbml6ZXI6Om5l
eHRUb2tlbihTZWdtZW50ZWRTCiAgICAgICAgICAgICBBU1NFUlQoZGVjb2RlZEVudGl0eS5pc0Vt
cHR5KCkpOwogICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZSgnJicp
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVmVjdG9yPFVDaGFyPjo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IGRlY29kZWRFbnRpdHkuYmVnaW4oKTsKLSAgICAgICAgICAgIGZvciAoOyBp
dGVyICE9IGRlY29kZWRFbnRpdHkuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBtX3Rv
a2VuLT5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKCppdGVyKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkZWNvZGVkRW50aXR5Lmxlbmd0aCgpOyArK2kpCisgICAgICAgICAg
ICAgICAgbV90b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZShkZWNvZGVkRW50aXR5W2ldKTsK
ICAgICAgICAgfQogICAgICAgICAvLyBXZSdyZSBzdXBwb3NlZCB0byBzd2l0Y2ggYmFjayB0byB0
aGUgYXR0cmlidXRlIHZhbHVlIHN0YXRlIHRoYXQKICAgICAgICAgLy8gd2Ugd2VyZSBpbiB3aGVu
IHdlIHdlcmUgc3dpdGNoZWQgaW50byB0aGlzIHN0YXRlLiBSYXRoZXIgdGhhbgpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lv
biA5NDYzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw3ICsyOTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBTdHJpbmcoc3RhcnQsIG1fY3VycmVudCAtIHN0YXJ0KTsKICAgICB9CiAKLSAgICB2b2lk
IGdpdmVSZW1haW5pbmdUbyhWZWN0b3I8VUNoYXI+JiByZWNpcGllbnQpCisgICAgdm9pZCBnaXZl
UmVtYWluaW5nVG8oU3RyaW5nQnVpbGRlciYgcmVjaXBpZW50KQogICAgIHsKICAgICAgICAgcmVj
aXBpZW50LmFwcGVuZChtX2N1cnJlbnQsIG1fZW5kIC0gbV9jdXJyZW50KTsKICAgICAgICAgbV9j
dXJyZW50ID0gbV9lbmQ7CkBAIC0yNzE4LDcgKzI3MTgsOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6ZGVmYXVsdEZvckFmdGVySGVhCiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9y
SW5UYWJsZVRleHQoKQogewotICAgIFN0cmluZyBjaGFyYWN0ZXJzID0gU3RyaW5nOjphZG9wdCht
X3BlbmRpbmdUYWJsZUNoYXJhY3RlcnMpOworICAgIFN0cmluZyBjaGFyYWN0ZXJzID0gbV9wZW5k
aW5nVGFibGVDaGFyYWN0ZXJzLnRvU3RyaW5nKCk7CisgICAgbV9wZW5kaW5nVGFibGVDaGFyYWN0
ZXJzLmNsZWFyKCk7CiAgICAgaWYgKCFpc0FsbFdoaXRlc3BhY2UoY2hhcmFjdGVycykpIHsKICAg
ICAgICAgLy8gRklYTUU6IHBhcnNlIGVycm9yCiAgICAgICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjpSZWRpcmVjdFRvRm9zdGVyUGFyZW50R3VhcmQgcmVkaXJlY3RlcihtX3RyZWUpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgJKHJldmlzaW9u
IDk0NjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxMyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50
U3RhY2suaCIKICNpbmNsdWRlICJIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgiCiAjaW5jbHVk
ZSAiSFRNTFRva2VuaXplci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI0MSw3ICsyNDIsNyBA
QCBwcml2YXRlOgogICAgIEluc2VydGlvbk1vZGUgbV9vcmlnaW5hbEluc2VydGlvbk1vZGU7CiAK
ICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3Jr
L211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCNwZW5kaW5nLXRhYmxlLWNoYXJhY3Rlci10b2tl
bnMKLSAgICBWZWN0b3I8VUNoYXI+IG1fcGVuZGluZ1RhYmxlQ2hhcmFjdGVyczsKKyAgICBTdHJp
bmdCdWlsZGVyIG1fcGVuZGluZ1RhYmxlQ2hhcmFjdGVyczsKIAogICAgIC8vIFdlIGFjY2VzcyBw
YXJzZXIgYmVjYXVzZSBIVE1MNSBzcGVjIHJlcXVpcmVzIHRoYXQgd2UgYmUgYWJsZSB0byBjaGFu
Z2UgdGhlIHN0YXRlIG9mIHRoZSB0b2tlbml6ZXIKICAgICAvLyBmcm9tIHdpdGhpbiBwYXJzZXIg
YWN0aW9ucy4gV2UgYWxzbyBuZWVkIGl0IHRvIHRyYWNrIHRoZSBjdXJyZW50IHBvc2l0aW9uLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAJKHJl
dmlzaW9uIDk0NjMwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9E
ZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL2R0b2EuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjYyLDcgKzI2
Myw3IEBAIGlubGluZSBpbnQgaGV4VG9JbnQoVUNoYXIgYykKICAgICByZXR1cm4gMDsKIH0KIAot
Ym9vbCBkZWNvZGVTdHJpbmcoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBW
ZWN0b3I8VUNoYXI+KiBvdXRwdXQpCitib29sIGRlY29kZVN0cmluZyhjb25zdCBVQ2hhciogc3Rh
cnQsIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZ0J1aWxkZXIqIG91dHB1dCkKIHsKICAgICB3aGls
ZSAoc3RhcnQgPCBlbmQpIHsKICAgICAgICAgVUNoYXIgYyA9ICpzdGFydCsrOwpAQCAtMzIyLDEx
ICszMjMsMTEgQEAgYm9vbCBkZWNvZGVTdHJpbmcoY29uc3QgVUNoYXIqIHN0YXJ0LCBjbwogICAg
IH0KICAgICBpZiAoc3RhcnQgPiBlbmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBWZWN0
b3I8VUNoYXI+IGJ1ZmZlcjsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1ZmZlcjsKICAgICBidWZmZXIu
cmVzZXJ2ZUNhcGFjaXR5KGVuZCAtIHN0YXJ0KTsKICAgICBpZiAoIWRlY29kZVN0cmluZyhzdGFy
dCwgZW5kLCAmYnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICpvdXRwdXQgPSBT
dHJpbmcoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7ICAgIAorICAgICpvdXRwdXQgPSBi
dWZmZXIudG9TdHJpbmcoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDQ1LDcgKzQ0Niw3
IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGJ1aWxkVmFsdWUoY28KICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotaW5saW5lIGJvb2wgZXNjYXBlQ2hhcihVQ2hhciBjLCBW
ZWN0b3I8VUNoYXI+KiBkc3QpCitpbmxpbmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFyIGMsIFN0cmlu
Z0J1aWxkZXIqIGRzdCkKIHsKICAgICBzd2l0Y2ggKGMpIHsKICAgICBjYXNlICdcYic6IGRzdC0+
YXBwZW5kKCJcXGIiLCAyKTsgYnJlYWs7CkBAIC00NjEsNyArNDYyLDcgQEAgaW5saW5lIGJvb2wg
ZXNjYXBlQ2hhcihVQ2hhciBjLCBWZWN0b3I8VQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxp
bmUgdm9pZCBkb3VibGVRdW90ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgVmVjdG9yPFVDaGFy
PiogZHN0KQoraW5saW5lIHZvaWQgZG91YmxlUXVvdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIs
IFN0cmluZ0J1aWxkZXIqIGRzdCkKIHsKICAgICBkc3QtPmFwcGVuZCgnIicpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7ICsraSkgewpAQCAtNTU3LDEzICs1NTgs
MTMgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdQogCiBTdHJpbmcg
SW5zcGVjdG9yVmFsdWU6OnRvSlNPTlN0cmluZygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFVDaGFy
PiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgcmVzdWx0LnJlc2VydmVD
YXBhY2l0eSg1MTIpOwogICAgIHdyaXRlSlNPTigmcmVzdWx0KTsKLSAgICByZXR1cm4gU3RyaW5n
KHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOworICAgIHJldHVybiByZXN1bHQudG9TdHJp
bmcoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JWYWx1ZTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4q
IG91dHB1dCkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWls
ZGVyKiBvdXRwdXQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlTnVsbCk7CiAg
ICAgb3V0cHV0LT5hcHBlbmQobnVsbFN0cmluZywgNCk7CkBAIC02MTcsNyArNjE4LDcgQEAgYm9v
bCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcih1bnNpZwogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBv
dXRwdXQpIGNvbnN0Cit2b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihTdHJpbmdC
dWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlQm9vbGVh
biB8fCB0eXBlKCkgPT0gVHlwZU51bWJlcik7CiAgICAgaWYgKHR5cGUoKSA9PSBUeXBlQm9vbGVh
bikgewpAQCAtNjUzLDcgKzY1NCw3IEBAIGJvb2wgSW5zcGVjdG9yU3RyaW5nOjphc1N0cmluZyhT
dHJpbmcqIG8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JTdHJpbmc6Ondy
aXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0Cit2b2lkIEluc3BlY3RvclN0cmlu
Zzo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKICAgICBBU1NFUlQo
dHlwZSgpID09IFR5cGVTdHJpbmcpOwogICAgIGRvdWJsZVF1b3RlU3RyaW5nKG1fc3RyaW5nVmFs
dWUsIG91dHB1dCk7CkBAIC03MjUsNyArNzI2LDcgQEAgdm9pZCBJbnNwZWN0b3JPYmplY3Q6OnJl
bW92ZShjb25zdCBTdHJpbgogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JPYmplY3Q6OndyaXRl
SlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0Cit2b2lkIEluc3BlY3Rvck9iamVjdDo6
d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKICAgICBvdXRwdXQtPmFw
cGVuZCgneycpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9vcmRlci5zaXplKCk7ICsr
aSkgewpAQCAtNzYyLDcgKzc2Myw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3Bl
Y3RvckFycmEKICAgICByZXR1cm4gdGhpczsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcnJheTo6d3Jp
dGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yQXJyYXk6
OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB7CiAgICAgb3V0cHV0LT5h
cHBlbmQoJ1snKTsKICAgICBmb3IgKFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9yVmFsdWU+ID46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmJlZ2luKCk7IGl0ICE9IG1fZGF0YS5lbmQoKTsgKytp
dCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAko
cmV2aXNpb24gOTQ2MzApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29u
KTsKIAogICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAg
ICAgZXhwbGljaXQgSW5zcGVjdG9yVmFsdWUoVHlwZSB0eXBlKSA6IG1fdHlwZSh0eXBlKSB7IH0K
QEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKHVu
c2lnbmVkIGxvbmcqIG91dHB1dCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKHVu
c2lnbmVkIGludCogb3V0cHV0KSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04o
VmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09O
KFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQg
SW5zcGVjdG9yQmFzaWNWYWx1ZShib29sIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVCb29s
ZWFuKSwgbV9ib29sVmFsdWUodmFsdWUpIHsgfQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgYm9vbCBhc1N0cmluZyhTdHJpbmcqIG91dHB1dCkgY29uc3Q7ICAgIAog
Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25z
dDsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBJbnNwZWN0b3JTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlU3RyaW5nKSwgbV9zdHJpbmdWYWx1ZSh2YWx1
ZSkgeyB9CkBAIC0xOTksNyArMTk5LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZW1vdmUoY29u
c3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVD
aGFyPiogb3V0cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1
aWxkZXIqIG91dHB1dCkgY29uc3Q7CiAKICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1f
ZGF0YS5iZWdpbigpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9kYXRhLmVuZCgp
OyB9CkBAIC0yMzMsNyArMjMzLDcgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gZ2V0KHNpemVfdCBpbmRleCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09O
KFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNP
TihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEluc3BlY3Rv
ckFycmF5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3ND
b250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmln
aW5BY2Nlc3NDb250cm9sLmNwcAkocmV2aXNpb24gOTQ2MzApCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTUs
MTkgKzExNiwxOSBAQCBSZXNvdXJjZVJlcXVlc3QgY3JlYXRlQWNjZXNzQ29udHJvbFByZWZsCiAg
ICAgY29uc3QgSFRUUEhlYWRlck1hcCYgcmVxdWVzdEhlYWRlckZpZWxkcyA9IHJlcXVlc3QuaHR0
cEhlYWRlckZpZWxkcygpOwogCiAgICAgaWYgKHJlcXVlc3RIZWFkZXJGaWVsZHMuc2l6ZSgpID4g
MCkgewotICAgICAgICBWZWN0b3I8VUNoYXI+IGhlYWRlckJ1ZmZlcjsKKyAgICAgICAgU3RyaW5n
QnVpbGRlciBoZWFkZXJCdWZmZXI7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gcmVxdWVzdEhlYWRlckZpZWxkcy5iZWdpbigpOwotICAgICAgICBhcHBlbmQoaGVh
ZGVyQnVmZmVyLCBpdC0+Zmlyc3QpOworICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5m
aXJzdCk7CiAgICAgICAgICsraXQ7CiAKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gcmVxdWVzdEhlYWRlckZpZWxkcy5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZCgnLCcpOwog
ICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZCgnICcpOwotICAgICAgICAgICAgYXBwZW5k
KGhlYWRlckJ1ZmZlciwgaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBl
bmQoaXQtPmZpcnN0KTsKICAgICAgICAgfQogCi0gICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0
SFRUUEhlYWRlckZpZWxkKCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnMiLCBTdHJpbmc6
OmFkb3B0KGhlYWRlckJ1ZmZlcikpOworICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBI
ZWFkZXJGaWVsZCgiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzIiwgaGVhZGVyQnVmZmVy
LnRvU3RyaW5nKCkpOwogICAgIH0KIAogICAgIHJldHVybiBwcmVmbGlnaHRSZXF1ZXN0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiA5NDYzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKQEAgLTgzNiwxNyArODM3LDE3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OnN0b3JlKEFwcGwKICAgICAvLyBUaGVuLCBpbnNlcnQgdGhlIHJlc291cmNlCiAgICAgCiAgICAg
Ly8gU2VyaWFsaXplIHRoZSBoZWFkZXJzCi0gICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVy
OworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAKICAgICBIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwSGVhZGVy
RmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IHJlc291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCE9
IGVuZDsgKytpdCkgewotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hh
cmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChpdC0+Zmlyc3QpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJzon
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJzKCks
IGl0LT5zZWNvbmQubGVuZ3RoKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+
c2Vjb25kKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoKFVDaGFyKSdcbicpOwogICAg
IH0KICAgICAKLSAgICBTdHJpbmcgaGVhZGVycyA9IFN0cmluZzo6YWRvcHQoc3RyaW5nQnVpbGRl
cik7CisgICAgU3RyaW5nIGhlYWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAg
CiAgICAgU1FMaXRlU3RhdGVtZW50IHJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNF
UlQgSU5UTyBDYWNoZVJlc291cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVh
ZGVycywgZGF0YSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywg
PywgPywgPywgPykiKTsKICAgICBpZiAocmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TFJlc3VsdE9rKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2aXNpb24gOTQ2MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYg
KzQ3LDcgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogI2luY2x1ZGUgIlN0b3JhZ2VO
YW1lc3BhY2UuaCIKQEAgLTQyNywxMyArNDI4LDEzIEBAIHZvaWQgQ2hyb21lOjpzZXRUb29sVGlw
KGNvbnN0IEhpdFRlc3RSZXMKICAgICAgICAgICAgICAgICAgICAgRmlsZUxpc3QqIGZpbGVzID0g
aW5wdXQtPmZpbGVzKCk7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxpc3RTaXplID0g
ZmlsZXMtPmxlbmd0aCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAobGlzdFNpemUgPiAxKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VUNoYXI+IG5hbWVzOworICAgICAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBuYW1lczsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZChuYW1lcywgZmlsZXMtPml0ZW0oaSktPmZpbGVOYW1lKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChmaWxlcy0+aXRlbShp
KS0+ZmlsZU5hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gbGlz
dFNpemUgLSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQo
J1xuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0b29sVGlwID0gU3RyaW5nOjphZG9wdChuYW1lcyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0b29sVGlwID0gbmFtZXMudG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGZpbGVuYW1lIGFsd2F5cyBkaXNwbGF5IGFzIExUUi4KICAgICAgICAgICAgICAgICAgICAgICAg
IHRvb2xUaXBEaXJlY3Rpb24gPSBMVFI7CiAgICAgICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiA5NDYzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Niw5ICs5Niw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TZXJpYWxpemVyTWFya3VwQWNjdW11
bGF0b3IoKTsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFZlY3Rv
cjxVQ2hhcj4mIG91dCwgVGV4dCopOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFZl
Y3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKLSAgICB2aXJ0dWFsIHZv
aWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBO
YW1lc3BhY2VzKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYg
b3V0LCBUZXh0Kik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRl
ciYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRD
dXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMq
KTsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKIAogcHJpdmF0ZToKQEAg
LTEyMCwyNyArMTIwLDI4IEBAIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6flNlcmlhbGl6
ZXIKIHsKIH0KIAotdm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQo
VmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0KiB0ZXh0KQordm9pZCBTZXJpYWxpemVyTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0KiB0ZXh0KQogewog
ICAgIEVsZW1lbnQqIHBhcmVudCA9IHRleHQtPnBhcmVudEVsZW1lbnQoKTsKICAgICBpZiAocGFy
ZW50ICYmICFzaG91bGRJZ25vcmVFbGVtZW50KHBhcmVudCkpCiAgICAgICAgIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRUZXh0KG91dCwgdGV4dCk7CiB9CiAKLXZvaWQgU2VyaWFsaXplck1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCog
ZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxl
bWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBpZiAoIXNob3VsZElnbm9yZUVs
ZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50
KG91dCwgZWxlbWVudCwgbmFtZXNwYWNlcyk7CiAKICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmhlYWRUYWcpKSB7Ci0gICAgICAgIFN0cmluZyBtZXRhID0gIjxtZXRhIGNo
YXJzZXQ9XCIiICsgbV9kb2N1bWVudC0+Y2hhcnNldCgpICsgIlwiPiI7Ci0gICAgICAgIG91dC5h
cHBlbmQobWV0YS5jaGFyYWN0ZXJzKCksIG1ldGEubGVuZ3RoKCkpOworICAgICAgICBvdXQuYXBw
ZW5kKCI8bWV0YSBjaGFyc2V0PVwiIik7CisgICAgICAgIG91dC5hcHBlbmQobV9kb2N1bWVudC0+
Y2hhcnNldCgpKTsKKyAgICAgICAgb3V0LmFwcGVuZCgiXCI+Iik7CiAgICAgfQogCiAgICAgLy8g
RklYTUU6IEZvciBvYmplY3QgKHBsdWdpbnMpIHRhZ3MgYW5kIHZpZGVvIHRhZyB3ZSBjb3VsZCBy
ZXBsYWNlIHRoZW0gYnkgYW4gaW1hZ2Ugb2YgdGhlaXIgY3VycmVudCBjb250ZW50cy4KIH0KIAot
dm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMo
VmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3Bh
Y2VzKQordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJp
YnV0ZXMoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBu
YW1lc3BhY2VzKQogewogICAgIGlmICghZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQog
ICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNw
cAkocmV2aXNpb24gOTQ2MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlNjaGVtZVJl
Z2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5NSwxOCArMzk2LDE4IEBAIFN0cmluZyBTZWN1cml0eU9y
aWdpbjo6dG9TdHJpbmcoKSBjb25zdAogICAgICAgICByZXR1cm4gImZpbGU6Ly8iOwogICAgIH0K
IAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG1fcHJvdG9jb2wubGVuZ3RoKCkgKyBtX2hvc3QubGVuZ3RoKCkgKyAxMCk7Ci0gICAg
YXBwZW5kKHJlc3VsdCwgbV9wcm90b2NvbCk7Ci0gICAgYXBwZW5kKHJlc3VsdCwgIjovLyIpOwot
ICAgIGFwcGVuZChyZXN1bHQsIG1faG9zdCk7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Cisg
ICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShtX3Byb3RvY29sLmxlbmd0aCgpICsgbV9ob3N0Lmxl
bmd0aCgpICsgMTApOworICAgIHJlc3VsdC5hcHBlbmQobV9wcm90b2NvbCk7CisgICAgcmVzdWx0
LmFwcGVuZCgiOi8vIik7CisgICAgcmVzdWx0LmFwcGVuZChtX2hvc3QpOwogCiAgICAgaWYgKG1f
cG9ydCkgewotICAgICAgICBhcHBlbmQocmVzdWx0LCAiOiIpOwotICAgICAgICBhcHBlbmQocmVz
dWx0LCBTdHJpbmc6Om51bWJlcihtX3BvcnQpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiOiIp
OworICAgICAgICByZXN1bHQuYXBwZW5kKFN0cmluZzo6bnVtYmVyKG1fcG9ydCkpOwogICAgIH0K
IAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50
b1N0cmluZygpOwogfQogCiBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0tVUkwuY3BwCShyZXZpc2lvbiA5NDYzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0tVUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogI2lmIFVTRShJQ1Vf
VU5JQ09ERSkKQEAgLTg4OSw0NyArODkwLDQ3IEBAIFN0cmluZyBLVVJMOjpkZXByZWNhdGVkU3Ry
aW5nKCkgY29uc3QKICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuIG1fc3RyaW5n
OwogCi0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7
CiAKLSAgICBhcHBlbmQocmVzdWx0LCBwcm90b2NvbCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKHBy
b3RvY29sKCkpOwogICAgIHJlc3VsdC5hcHBlbmQoJzonKTsKIAotICAgIFZlY3RvcjxVQ2hhcj4g
YXV0aG9yaXR5OworICAgIFN0cmluZ0J1aWxkZXIgYXV0aG9yaXR5OwogCiAgICAgaWYgKG1faG9z
dEVuZCAhPSBtX3Bhc3N3b3JkRW5kKSB7CiAgICAgICAgIGlmIChtX3VzZXJFbmQgIT0gbV91c2Vy
U3RhcnQpIHsKLSAgICAgICAgICAgIGFwcGVuZChhdXRob3JpdHksIHVzZXIoKSk7CisgICAgICAg
ICAgICBhdXRob3JpdHkuYXBwZW5kKHVzZXIoKSk7CiAgICAgICAgICAgICBhdXRob3JpdHkuYXBw
ZW5kKCdAJyk7CiAgICAgICAgIH0KLSAgICAgICAgYXBwZW5kKGF1dGhvcml0eSwgaG9zdCgpKTsK
KyAgICAgICAgYXV0aG9yaXR5LmFwcGVuZChob3N0KCkpOwogICAgICAgICBpZiAoaGFzUG9ydCgp
KSB7CiAgICAgICAgICAgICBhdXRob3JpdHkuYXBwZW5kKCc6Jyk7Ci0gICAgICAgICAgICBhcHBl
bmQoYXV0aG9yaXR5LCBTdHJpbmc6Om51bWJlcihwb3J0KCkpKTsKKyAgICAgICAgICAgIGF1dGhv
cml0eS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocG9ydCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICBpZiAoIWF1dGhvcml0eS5pc0VtcHR5KCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
LycpOwogICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQo
YXV0aG9yaXR5KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChhdXRob3JpdHkuY2hhcmFjdGVycygp
LCBhdXRob3JpdHkubGVuZ3RoKCkpOwogICAgIH0gZWxzZSBpZiAocHJvdG9jb2xJcygiZmlsZSIp
KSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
LycpOwogICAgIH0KIAotICAgIGFwcGVuZChyZXN1bHQsIHBhdGgoKSk7CisgICAgcmVzdWx0LmFw
cGVuZChwYXRoKCkpOwogCiAgICAgaWYgKG1fcGF0aEVuZCAhPSBtX3F1ZXJ5RW5kKSB7CiAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJz8nKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgcXVlcnkoKSk7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQocXVlcnkoKSk7CiAgICAgfQogCiAgICAgaWYgKG1fZnJh
Z21lbnRFbmQgIT0gbV9xdWVyeUVuZCkgewogICAgICAgICByZXN1bHQuYXBwZW5kKCcjJyk7Ci0g
ICAgICAgIGFwcGVuZChyZXN1bHQsIGZyYWdtZW50SWRlbnRpZmllcigpKTsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChmcmFnbWVudElkZW50aWZpZXIoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0
cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAK
IFN0cmluZyBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3RyaW5nJiBzdHIpCkBAIC05
MzksNyArOTQwLDcgQEAgU3RyaW5nIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdAog
CiBTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmluZyYgc3RyLCBjb25z
dCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0Owor
ICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogCiAgICAgQ2hhckJ1ZmZlciBidWZmZXI7CiAKQEAg
LTk3OCwxMyArOTc5LDEzIEBAIFN0cmluZyBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29uc3Qg
U3QKIAogICAgICAgICAvLyBCdWlsZCB1cCB0aGUgc3RyaW5nIHdpdGggd2hhdCB3ZSBqdXN0IHNr
aXBwZWQgYW5kIHdoYXQgd2UganVzdCBkZWNvZGVkLgogICAgICAgICByZXN1bHQuYXBwZW5kKHN0
ci5jaGFyYWN0ZXJzKCkgKyBkZWNvZGVkUG9zaXRpb24sIGVuY29kZWRSdW5Qb3NpdGlvbiAtIGRl
Y29kZWRQb3NpdGlvbik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZGVjb2RlZC5jaGFyYWN0ZXJz
KCksIGRlY29kZWQubGVuZ3RoKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGRlY29kZWQpOwog
ICAgICAgICBkZWNvZGVkUG9zaXRpb24gPSBlbmNvZGVkUnVuRW5kOwogICAgIH0KIAogICAgIHJl
c3VsdC5hcHBlbmQoc3RyLmNoYXJhY3RlcnMoKSArIGRlY29kZWRQb3NpdGlvbiwgbGVuZ3RoIC0g
ZGVjb2RlZFBvc2l0aW9uKTsKIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiAvLyBDYXV0aW9uOiBUaGlzIGZ1bmN0
aW9uIGRvZXMgbm90IGJvdW5kcyBjaGVjay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9EYXRhT2JqZWN0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAJKHJldmlzaW9uIDk0NjMwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw2ICsyMiw3IEBACiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgog
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTEwLDE0ICsxMTEsMTQg
QEAgdm9pZCBEYXRhT2JqZWN0R3RrOjpzZXRVUkwoY29uc3QgS1VSTCYgdQogICAgIGlmIChhY3R1
YWxMYWJlbC5pc0VtcHR5KCkpCiAgICAgICAgIGFjdHVhbExhYmVsID0gdXJsOwogCi0gICAgVmVj
dG9yPFVDaGFyPiBtYXJrdXA7Ci0gICAgYXBwZW5kKG1hcmt1cCwgIjxhIGhyZWY9XCIiKTsKLSAg
ICBhcHBlbmQobWFya3VwLCB1cmwuc3RyaW5nKCkpOwotICAgIGFwcGVuZChtYXJrdXAsICJcIj4i
KTsKKyAgICBTdHJpbmdCdWlsZGVyIG1hcmt1cDsKKyAgICBtYXJrdXAuYXBwZW5kKCI8YSBocmVm
PVwiIik7CisgICAgbWFya3VwLmFwcGVuZCh1cmwuc3RyaW5nKCkpOworICAgIG1hcmt1cC5hcHBl
bmQoIlwiPiIpOwogICAgIEdPd25QdHI8Z2NoYXI+IGVzY2FwZWQoZ19tYXJrdXBfZXNjYXBlX3Rl
eHQoYWN0dWFsTGFiZWwudXRmOCgpLmRhdGEoKSwgLTEpKTsKLSAgICBhcHBlbmQobWFya3VwLCBT
dHJpbmc6OmZyb21VVEY4KGVzY2FwZWQuZ2V0KCkpKTsKLSAgICBhcHBlbmQobWFya3VwLCAiPC9h
PiIpOwotICAgIHNldE1hcmt1cChTdHJpbmc6OmFkb3B0KG1hcmt1cCkpOworICAgIG1hcmt1cC5h
cHBlbmQoU3RyaW5nOjpmcm9tVVRGOChlc2NhcGVkLmdldCgpKSk7CisgICAgbWFya3VwLmFwcGVu
ZCgiPC9hPiIpOworICAgIHNldE1hcmt1cChtYXJrdXAudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQg
RGF0YU9iamVjdEd0azo6Y2xlYXJUZXh0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCShyZXZpc2lvbiA5NDYzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBA
IC0xOTYsNyArMTk3LDcgQEAgU3RyaW5nIGZpbGVuYW1lRnJvbUhUVFBDb250ZW50RGlzcG9zaXRp
bwogCiBTdHJpbmcgZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShjb25zdCBTdHJpbmcmIG1l
ZGlhVHlwZSkKIHsKLSAgICBWZWN0b3I8VUNoYXIsIDY0PiBtaW1lVHlwZTsKKyAgICBTdHJpbmdC
dWlsZGVyIG1pbWVUeXBlOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1lZGlhVHlwZS5sZW5ndGgo
KTsKICAgICBtaW1lVHlwZS5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKQEAgLTIyNCw5ICsyMjUsOSBAQCBTdHJpbmcg
ZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShjb25zCiAgICAgICAgIG1pbWVUeXBlLmFwcGVu
ZChjKTsKICAgICB9CiAKLSAgICBpZiAobWltZVR5cGUuc2l6ZSgpID09IGxlbmd0aCkKKyAgICBp
ZiAobWltZVR5cGUubGVuZ3RoKCkgPT0gbGVuZ3RoKQogICAgICAgICByZXR1cm4gbWVkaWFUeXBl
OwotICAgIHJldHVybiBTdHJpbmcobWltZVR5cGUuZGF0YSgpLCBtaW1lVHlwZS5zaXplKCkpOwor
ICAgIHJldHVybiBtaW1lVHlwZS50b1N0cmluZygpOwogfQogCiBTdHJpbmcgZXh0cmFjdENoYXJz
ZXRGcm9tTWVkaWFUeXBlKGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAkocmV2aXNpb24gOTQ2MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3Vu
aWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogdXNpbmcgc3RkOjptaW47CkBAIC0zMDgsNyArMzA5
LDcgQEAgU3RyaW5nIFRleHRDb2RlY0lDVTo6ZGVjb2RlKGNvbnN0IGNoYXIqIAogICAgIAogICAg
IEVycm9yQ2FsbGJhY2tTZXR0ZXIgY2FsbGJhY2tTZXR0ZXIobV9jb252ZXJ0ZXJJQ1UsIHN0b3BP
bkVycm9yKTsKIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIg
cmVzdWx0OwogCiAgICAgVUNoYXIgYnVmZmVyW0NvbnZlcnNpb25CdWZmZXJTaXplXTsKICAgICBV
Q2hhciogYnVmZmVyTGltaXQgPSBidWZmZXIgKyBDb252ZXJzaW9uQnVmZmVyU2l6ZTsKQEAgLTMz
MCw3ICszMzEsNyBAQCBTdHJpbmcgVGV4dENvZGVjSUNVOjpkZWNvZGUoY29uc3QgY2hhciogCiAg
ICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKICAgICB9CiAKLSAgICBTdHJpbmcgcmVzdWx0U3RyaW5n
ID0gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAgIFN0cmluZyByZXN1bHRTdHJpbmcgPSByZXN1
bHQudG9TdHJpbmcoKTsKIAogICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzAxND4KICAgICAvLyBTaW1wbGlmaWVkIENoaW5lc2UgcGFnZXMgdXNlIHRoZSBj
b2RlIEEzQTAgdG8gbWVhbiAiZnVsbC13aWR0aCBzcGFjZSIsIGJ1dCBJQ1UgZGVjb2RlcyBpdCBh
cyBVK0U1RTUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVh
bS5jcHAJKHJldmlzaW9uIDk0NjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMTMgKzg0LDcgQEAgVGV4dFN0cmVh
bSYgVGV4dFN0cmVhbTo6b3BlcmF0b3I8PChkb3VibAogCiBUZXh0U3RyZWFtJiBUZXh0U3RyZWFt
OjpvcGVyYXRvcjw8KGNvbnN0IGNoYXIqIHN0cmluZykKIHsKLSAgICBzaXplX3Qgc3RyaW5nTGVu
Z3RoID0gc3RybGVuKHN0cmluZyk7Ci0gICAgc2l6ZV90IHRleHRMZW5ndGggPSBtX3RleHQuc2l6
ZSgpOwotICAgIGlmIChzdHJpbmdMZW5ndGggPiBudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSAtIHRleHRMZW5ndGgpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgbV90ZXh0Lmdyb3codGV4dExl
bmd0aCArIHN0cmluZ0xlbmd0aCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmdM
ZW5ndGg7ICsraSkKLSAgICAgICAgbV90ZXh0W3RleHRMZW5ndGggKyBpXSA9IHN0cmluZ1tpXTsK
KyAgICBtX3RleHQuYXBwZW5kKHN0cmluZyk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0x
MDMsMTMgKzk3LDE1IEBAIFRleHRTdHJlYW0mIFRleHRTdHJlYW06Om9wZXJhdG9yPDwoY29uc3QK
IAogVGV4dFN0cmVhbSYgVGV4dFN0cmVhbTo6b3BlcmF0b3I8PChjb25zdCBTdHJpbmcmIHN0cmlu
ZykKIHsKLSAgICBhcHBlbmQobV90ZXh0LCBzdHJpbmcpOworICAgIG1fdGV4dC5hcHBlbmQoc3Ry
aW5nKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKIFN0cmluZyBUZXh0U3RyZWFtOjpyZWxlYXNl
KCkKIHsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChtX3RleHQpOworICAgIFN0cmluZyByZXN1
bHQgPSBtX3RleHQudG9TdHJpbmcoKTsKKyAgICBtX3RleHQuY2xlYXIoKTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5oCShyZXZpc2lvbiA5NDYzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIFRleHRTdHJlYW1faAogCiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHJl
bGVhc2UoKTsKIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8VUNoYXI+IG1fdGV4dDsKKyAgICBTdHJp
bmdCdWlsZGVyIG1fdGV4dDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luU3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblN0cmVhbS5jcHAJKHJldmlzaW9uIDk0NjMwKQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5TdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5j
bHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogLy8gV2UgdXNl
IC0yIGhlcmUgYmVjYXVzZSBzb21lIHBsdWdpbnMgbGlrZSB0byByZXR1cm4gLTEgdG8gaW5kaWNh
dGUgZXJyb3IKQEAgLTEzOCwyMSArMTM5LDIxIEBAIHZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydFN0
cmVhbSgpCiAgICAgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1fcmVzb3VyY2VS
ZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKIAogICAgIGlmIChtX3Jlc291cmNlUmVz
cG9uc2UuaXNIVFRQKCkpIHsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVyOwor
ICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIFN0cmluZyBzZXBh
cmF0b3IoIjogIik7CiAKICAgICAgICAgU3RyaW5nIHN0YXR1c0xpbmUgPSAiSFRUUCAiICsgU3Ry
aW5nOjpudW1iZXIobV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpICsgIiBPS1xu
IjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc3RhdHVzTGluZS5jaGFyYWN0ZXJzKCks
IHN0YXR1c0xpbmUubGVuZ3RoKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzdGF0
dXNMaW5lKTsKIAogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgICAgICBmb3Ig
KEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0
dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC5s
ZW5ndGgoKSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0b3IuY2hh
cmFjdGVycygpLCBzZXBhcmF0b3IubGVuZ3RoKCkpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJzKCksIGl0LT5zZWNvbmQubGVuZ3RoKCkpOwor
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvcik7CisgICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCdcbicpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9oZWFkZXJzID0gU3RyaW5nOjphZG9wdChz
dHJpbmdCdWlsZGVyKS51dGY4KCk7CisgICAgICAgIG1faGVhZGVycyA9IHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKS51dGY4KCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgaXMgZW5jb2Rl
ZCAobW9zdCBsaWtlbHkgY29tcHJlc3NlZCksIHRoZW4gZG9uJ3Qgc2VuZCBpdHMgbGVuZ3RoIHRv
IHRoZSBwbHVnaW4sCiAgICAgICAgIC8vIHdoaWNoIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUg
ZGVjb2RlZCBsZW5ndGgsIG5vdCB5ZXQga25vd24gYXQgdGhlIG1vbWVudC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDk0NjMwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjgsOCArMTY4LDggQEAgc3RhdGljIHZvaWQgYWRqdXN0Q2hhcmFjdGVyc0FuZExl
bmd0aEZvcgogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaHlwaGVuU3RyaW5nID0gc3R5bGUtPmh5
cGhlblN0cmluZygpOwogICAgIGNoYXJhY3RlcnNXaXRoSHlwaGVuLnJlc2VydmVDYXBhY2l0eShs
ZW5ndGggKyBoeXBoZW5TdHJpbmcubGVuZ3RoKCkpOwogICAgIGNoYXJhY3RlcnNXaXRoSHlwaGVu
LmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOwotICAgIGNoYXJhY3RlcnNXaXRoSHlwaGVuLmFw
cGVuZChoeXBoZW5TdHJpbmcuY2hhcmFjdGVycygpLCBoeXBoZW5TdHJpbmcubGVuZ3RoKCkpOwot
ICAgIGNoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzV2l0aEh5cGhlbi5kYXRhKCk7CisgICAgY2hhcmFj
dGVyc1dpdGhIeXBoZW4uYXBwZW5kKGh5cGhlblN0cmluZyk7CisgICAgY2hhcmFjdGVycyA9IGNo
YXJhY3RlcnNXaXRoSHlwaGVuLmNoYXJhY3RlcnMoKTsKICAgICBsZW5ndGggKz0gaHlwaGVuU3Ry
aW5nLmxlbmd0aCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmgJKHJldmlzaW9uIDk0NjMwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
IklubGluZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIgLy8gc28gdGV4dFJlbmRlcmVy
KCkgY2FuIGJlIGlubGluZQogI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzQsNyArMzUs
MTEgQEAgY2xhc3MgRG9jdW1lbnRNYXJrZXI7CiAKIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNOb1Ry
dW5jYXRpb24gPSBVU0hSVF9NQVg7CiBjb25zdCB1bnNpZ25lZCBzaG9ydCBjRnVsbFRydW5jYXRp
b24gPSBVU0hSVF9NQVggLSAxOwotdHlwZWRlZiBWZWN0b3I8VUNoYXIsIDI1Nj4gQnVmZmVyRm9y
QXBwZW5kaW5nSHlwaGVuOworCitjbGFzcyBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4gOiBwdWJs
aWMgU3RyaW5nQnVpbGRlciB7CitwdWJsaWM6CisgICAgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVu
KCkgeyByZXNlcnZlQ2FwYWNpdHkoMjU2KTsgfQorfTsKIAogLy8gSGVscGVyIGZ1bmN0aW9ucyBz
aGFyZWQgYnkgSW5saW5lVGV4dEJveCAvIFNWR1Jvb3RJbmxpbmVCb3gKIHZvaWQgdXBkYXRlR3Jh
cGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIGNv
bnN0IENvbG9yJiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBDb2xvclNwYWNl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAko
cmV2aXNpb24gOTQ2MzApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0
ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
TGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0zNzAsMTcgKzM3MSwxNyBAQCBTdHJpbmcgUmVuZGVyTGlz
dEl0ZW06Om1hcmtlclRleHRXaXRoU3VmCiAKICAgICBjb25zdCBTdHJpbmcmIG1hcmtlclRleHQg
PSBtX21hcmtlci0+dGV4dCgpOwogICAgIGNvbnN0IFN0cmluZyBtYXJrZXJTdWZmaXggPSBtX21h
cmtlci0+c3VmZml4KCk7Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHRWZWN0b3I7CisgICAgU3Ry
aW5nQnVpbGRlciByZXN1bHQ7CiAKICAgICBpZiAoIW1fbWFya2VyLT5zdHlsZSgpLT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQobWFya2VyU3Vm
Zml4LmNoYXJhY3RlcnMoKSwgbWFya2VyU3VmZml4Lmxlbmd0aCgpKTsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChtYXJrZXJTdWZmaXgpOwogCi0gICAgcmVzdWx0VmVjdG9yLmFwcGVuZChtYXJrZXJU
ZXh0LmNoYXJhY3RlcnMoKSwgbWFya2VyVGV4dC5sZW5ndGgoKSk7CisgICAgcmVzdWx0LmFwcGVu
ZChtYXJrZXJUZXh0KTsKIAogICAgIGlmIChtX21hcmtlci0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKQotICAgICAgICByZXN1bHRWZWN0b3IuYXBwZW5kKG1hcmtlclN1ZmZpeC5j
aGFyYWN0ZXJzKCksIG1hcmtlclN1ZmZpeC5sZW5ndGgoKSk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQobWFya2VyU3VmZml4KTsKIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdFZlY3Rv
cik7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiB2b2lkIFJlbmRlckxpc3RJ
dGVtOjpleHBsaWNpdFZhbHVlQ2hhbmdlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiA5NDYzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0xMjMsMTIgKzEyNCwxMiBAQCBzdGF0aWMgU3Ry
aW5nIHRvU3ltYm9saWMoaW50IG51bWJlciwgY29uCiAgICAgLS1udW1iZXJTaGFkb3c7CiAKICAg
ICAvLyBUaGUgYXN0ZXJpc2tzIGxpc3Qtc3R5bGUtdHlwZSBpcyB0aGUgd29yc3QgY2FzZTsgd2Ug
c2hvdyB8bnVtYmVyU2hhZG93fCBhc3Rlcmlza3MuCi0gICAgVmVjdG9yPFVDaGFyPiBsZXR0ZXJz
OworICAgIFN0cmluZ0J1aWxkZXIgbGV0dGVyczsKICAgICBsZXR0ZXJzLmFwcGVuZChzeW1ib2xz
W251bWJlclNoYWRvdyAlIHN5bWJvbHNTaXplXSk7CiAgICAgdW5zaWduZWQgbnVtU3ltYm9scyA9
IG51bWJlclNoYWRvdyAvIHN5bWJvbHNTaXplOwogICAgIHdoaWxlIChudW1TeW1ib2xzLS0pCiAg
ICAgICAgIGxldHRlcnMuYXBwZW5kKHN5bWJvbHNbbnVtYmVyU2hhZG93ICUgc3ltYm9sc1NpemVd
KTsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChsZXR0ZXJzKTsKKyAgICByZXR1cm4gbGV0dGVy
cy50b1N0cmluZygpOwogfQogCiBzdGF0aWMgU3RyaW5nIHRvQWxwaGFiZXRpYyhpbnQgbnVtYmVy
LCBjb25zdCBVQ2hhciogYWxwaGFiZXQsIHVuc2lnbmVkIGFscGhhYmV0U2l6ZSkKQEAgLTEyNzQs
MTMgKzEyNzUsMTMgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAog
ICAgICAgICAvLyBUZXh0IGlzIG5vdCBhcmJpdHJhcnkuIFdlIGNhbiBqdWRnZSB3aGV0aGVyIGl0
J3MgUlRMIGZyb20gdGhlIGZpcnN0IGNoYXJhY3RlciwKICAgICAgICAgLy8gYW5kIHdlIG9ubHkg
bmVlZCB0byBoYW5kbGUgdGhlIGRpcmVjdGlvbiBSaWdodFRvTGVmdCBmb3Igbm93LgogICAgICAg
ICBib29sIHRleHROZWVkc1JldmVyc2luZyA9IGRpcmVjdGlvbihtX3RleHRbMF0pID09IFJpZ2h0
VG9MZWZ0OwotICAgICAgICBWZWN0b3I8VUNoYXI+IHJldmVyc2VkVGV4dDsKKyAgICAgICAgU3Ry
aW5nQnVpbGRlciByZXZlcnNlZFRleHQ7CiAgICAgICAgIGlmICh0ZXh0TmVlZHNSZXZlcnNpbmcp
IHsKICAgICAgICAgICAgIGludCBsZW5ndGggPSBtX3RleHQubGVuZ3RoKCk7Ci0gICAgICAgICAg
ICByZXZlcnNlZFRleHQuZ3JvdyhsZW5ndGgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICByZXZlcnNlZFRleHRbbGVuZ3RoIC0g
aSAtIDFdID0gbV90ZXh0W2ldOwotICAgICAgICAgICAgdGV4dFJ1bi5zZXRUZXh0KHJldmVyc2Vk
VGV4dC5kYXRhKCksIGxlbmd0aCk7CisgICAgICAgICAgICByZXZlcnNlZFRleHQucmVzZXJ2ZUNh
cGFjaXR5KGxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+
PSAwOyAtLWkpCisgICAgICAgICAgICAgICAgcmV2ZXJzZWRUZXh0LmFwcGVuZChtX3RleHRbaV0p
OworICAgICAgICAgICAgdGV4dFJ1bi5zZXRUZXh0KHJldmVyc2VkVGV4dC5jaGFyYWN0ZXJzKCks
IGxlbmd0aCk7CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBVQ2hhciBzdWZmaXggPSBsaXN0
TWFya2VyU3VmZml4KHR5cGUsIG1fbGlzdEl0ZW0tPnZhbHVlKCkpOwpAQCAtMTU1MiwxOCArMTU1
MywyMCBAQCBTdHJpbmcgUmVuZGVyTGlzdE1hcmtlcjo6c3VmZml4KCkgY29uc3QKICAgICBFTGlz
dFN0eWxlVHlwZSB0eXBlID0gc3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgpOwogICAgIGNvbnN0IFVD
aGFyIHN1ZmZpeCA9IGxpc3RNYXJrZXJTdWZmaXgodHlwZSwgbV9saXN0SXRlbS0+dmFsdWUoKSk7
CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdFZlY3RvcjsKLSAgICByZXN1bHRWZWN0b3IuYXBw
ZW5kKHN1ZmZpeCk7CisgICAgaWYgKHN1ZmZpeCA9PSAnICcpCisgICAgICAgIHJldHVybiBTdHJp
bmcoIiAiKTsKIAogICAgIC8vIElmIHRoZSBzdWZmaXggaXMgbm90ICcgJywgYW4gZXh0cmEgc3Bh
Y2UgaXMgbmVlZGVkCi0gICAgaWYgKHN1ZmZpeCAhPSAnICcpIHsKLSAgICAgICAgaWYgKHN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgICAgIHJlc3VsdFZlY3Rvci5h
cHBlbmQoJyAnKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0VmVjdG9yLnByZXBl
bmQoJyAnKTsKKyAgICBVQ2hhciBkYXRhWzJdOworICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpIHsKKyAgICAgICAgZGF0YVswXSA9IHN1ZmZpeDsKKyAgICAgICAgZGF0
YVsxXSA9ICcgJzsKKyAgICB9IGVsc2UgeworICAgICAgICBkYXRhWzBdID0gJyAnOworICAgICAg
ICBkYXRhWzFdID0gc3VmZml4OwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJl
c3VsdFZlY3Rvcik7CisgICAgcmV0dXJuIFN0cmluZyhkYXRhLCAyKTsKIH0KIAogYm9vbCBSZW5k
ZXJMaXN0TWFya2VyOjppc0luc2lkZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA5NDYzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTk3LDcgKzE5Nyw3IEBAIHN0YXRpYyBib29sIGlzRW1wdHlPclVuc3R5bGVkQXBwbGVTdHls
ZVMKIAogU3RyaW5nIHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyhjb25zdCBTdHJpbmcmIHMp
CiB7Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7
CiAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0g
cy5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIFVDaGFyIGMgPSBzW2ldOwpAQCAtMjIyLDcgKzIy
Miw3IEBAIFN0cmluZyBxdW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXMoY29uc3QKICAgICAgICAg
fQogICAgIH0KICAgICByZXN1bHQuYXBwZW5kKCciJyk7Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRv
cHQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIHZvaWQgUmVu
ZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJl
bmRlck9iamVjdCYgbywgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5j
ZWQuY3BwCShyZXZpc2lvbiA5NDYzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlck1hdGhNTE9wZXJh
dG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIApAQCAtNjQsMTIgKzY1LDEy
IEBAIHZvaWQgUmVuZGVyTWF0aE1MRmVuY2VkOjp1cGRhdGVGcm9tRWxlbWUKICAgICAKICAgICBB
dG9taWNTdHJpbmcgc2VwYXJhdG9ycyA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihmZW5jZWQpLT5n
ZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OnNlcGFyYXRvcnNBdHRyKTsKICAgICBpZiAoIXNlcGFy
YXRvcnMuaXNOdWxsKCkpIHsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBjaGFyYWN0ZXJzOworICAg
ICAgICBTdHJpbmdCdWlsZGVyIGNoYXJhY3RlcnM7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgc2VwYXJhdG9ycy5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAo
IWlzU3BhY2VPck5ld2xpbmUoc2VwYXJhdG9yc1tpXSkpCiAgICAgICAgICAgICAgICAgY2hhcmFj
dGVycy5hcHBlbmQoc2VwYXJhdG9yc1tpXSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9zZXBhcmF0
b3JzID0gIWNoYXJhY3RlcnMuc2l6ZSgpID8gMCA6IFN0cmluZ0ltcGw6OmNyZWF0ZShjaGFyYWN0
ZXJzLmRhdGEoKSAsIGNoYXJhY3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgbV9zZXBhcmF0b3JzID0g
IWNoYXJhY3RlcnMubGVuZ3RoKCkgPyAwIDogY2hhcmFjdGVycy50b1N0cmluZygpLmltcGwoKTsK
ICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgc2VwYXJhdG9yIGRlZmF1bHRzIHRvIGEgc2lu
Z2xlIGNvbW1hLgogICAgICAgICBtX3NlcGFyYXRvcnMgPSBTdHJpbmdJbXBsOjpjcmVhdGUoIiwi
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmNwcAko
cmV2aXNpb24gOTQ2MzApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2Rp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJJREJL
ZXkuaCIKICNpbmNsdWRlICJMZXZlbERCU2xpY2UuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKIC8vIExldmVsREIgc3RvcmVzIGtleS92YWx1ZSBwYWlycy4gS2V5cyBh
bmQgdmFsdWVzIGFyZSBzdHJpbmdzIG9mIGJ5dGVzLCBub3JtYWxseSBvZiB0eXBlIFZlY3Rvcjxj
aGFyPi4KIC8vCkBAIC0yNjQsMTYgKzI2NSwxNyBAQCBTdHJpbmcgZGVjb2RlU3RyaW5nKGNvbnN0
IGNoYXIqIHAsIGNvbnN0CiAgICAgQVNTRVJUKCEoKGVuZCAtIHApICUgMikpOwogCiAgICAgc2l6
ZV90IGxlbiA9IChlbmQgLSBwKSAvIDI7Ci0gICAgVmVjdG9yPFVDaGFyPiB2ZWN0b3IobGVuKTsK
KyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KGxl
bik7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgIHVu
c2lnbmVkIGNoYXIgaGkgPSAqcCsrOwogICAgICAgICB1bnNpZ25lZCBjaGFyIGxvID0gKnArKzsK
IAotICAgICAgICB2ZWN0b3JbaV0gPSAoaGkgPDwgOCkgfCBsbzsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oKGhpIDw8IDgpIHwgbG8pKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gU3RyaW5nOjphZG9wdCh2ZWN0b3IpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmco
KTsKIH0KIAogVmVjdG9yPGNoYXI+IGVuY29kZVN0cmluZ1dpdGhMZW5ndGgoY29uc3QgU3RyaW5n
JiBzKQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiA5
NDYzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1Nyw3ICs4NTcsNyBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJl
c3BvbnNlSGVhCiAgICAgICAgIHJldHVybiAiIjsKICAgICB9CiAKLSAgICBWZWN0b3I8VUNoYXI+
IHN0cmluZ0J1aWxkZXI7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogCiAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNwb25zZS5odHRwSGVhZGVy
RmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0IT0gZW5kOyArK2l0
KSB7CkBAIC04NzMsMTUgKzg3MywxNSBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJl
c3BvbnNlSGVhCiAgICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vz
c0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJh
Y3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoaXQtPmZpcnN0KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJzonKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJzKCksIGl0LT5zZWNvbmQubGVuZ3RoKCkpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoJ1xyJyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAg
IH0KIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHN0cmluZ0J1aWxkZXIpOworICAgIHJldHVy
biBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6
Z2V0UmVzcG9uc2VIZWFkZXIoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
JiBlYykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAkocmV2
aXNpb24gOTQ2MzApCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiWFBhdGhVdGlsLmgiCiAj
aW5jbHVkZSAiWFBhdGhWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgWFBhdGggewpAQCAtMzE4LDI2ICszMTksMjYgQEAgVmFsdWUgRnVuUG9zaXRpb246
OmV2YWx1YXRlKCkgY29uc3QKIFZhbHVlIEZ1bklkOjpldmFsdWF0ZSgpIGNvbnN0CiB7CiAgICAg
VmFsdWUgYSA9IGFyZygwKS0+ZXZhbHVhdGUoKTsKLSAgICBWZWN0b3I8VUNoYXI+IGlkTGlzdDsg
Ly8gQSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIElEcworICAgIFN0cmluZ0J1aWxkZXIg
aWRMaXN0OyAvLyBBIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgSURzCiAKICAgICBpZiAo
YS5pc05vZGVTZXQoKSkgewogICAgICAgICBjb25zdCBOb2RlU2V0JiBub2RlcyA9IGEudG9Ob2Rl
U2V0KCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgICAgIFN0cmluZyBzdHIgPSBzdHJpbmdWYWx1ZShub2Rlc1tpXSk7Ci0gICAg
ICAgICAgICBpZExpc3QuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgoKSk7Cisg
ICAgICAgICAgICBpZExpc3QuYXBwZW5kKHN0cik7CiAgICAgICAgICAgICBpZExpc3QuYXBwZW5k
KCcgJyk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBTdHJpbmcgc3RyID0gYS50
b1N0cmluZygpOwotICAgICAgICBpZExpc3QuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5s
ZW5ndGgoKSk7CisgICAgICAgIGlkTGlzdC5hcHBlbmQoc3RyKTsKICAgICB9CiAgICAgCiAgICAg
VHJlZVNjb3BlKiBjb250ZXh0U2NvcGUgPSBldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUtPnRyZWVT
Y29wZSgpOwogICAgIE5vZGVTZXQgcmVzdWx0OwogICAgIEhhc2hTZXQ8Tm9kZSo+IHJlc3VsdFNl
dDsKIAotICAgIHNpemVfdCBzdGFydFBvcyA9IDA7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IGlkTGlz
dC5zaXplKCk7CisgICAgdW5zaWduZWQgc3RhcnRQb3MgPSAwOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGlkTGlzdC5sZW5ndGgoKTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICB3aGlsZSAo
c3RhcnRQb3MgPCBsZW5ndGggJiYgaXNXaGl0ZXNwYWNlKGlkTGlzdFtzdGFydFBvc10pKQogICAg
ICAgICAgICAgKytzdGFydFBvczsKQEAgLTM1MSw3ICszNTIsNyBAQCBWYWx1ZSBGdW5JZDo6ZXZh
bHVhdGUoKSBjb25zdAogCiAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBzZXZlcmFsIG5vZGVzIHdp
dGggdGhlIHNhbWUgaWQsIGlkKCkgc2hvdWxkIHJldHVybiB0aGUgZmlyc3Qgb25lLgogICAgICAg
ICAvLyBJbiBXZWJLaXQsIGdldEVsZW1lbnRCeUlkIGJlaGF2ZXMgc28sIHRvbywgYWx0aG91Z2gg
aXRzIGJlaGF2aW9yIGluIHRoaXMgY2FzZSBpcyBmb3JtYWxseSB1bmRlZmluZWQuCi0gICAgICAg
IE5vZGUqIG5vZGUgPSBjb250ZXh0U2NvcGUtPmdldEVsZW1lbnRCeUlkKFN0cmluZygmaWRMaXN0
W3N0YXJ0UG9zXSwgZW5kUG9zIC0gc3RhcnRQb3MpKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGNv
bnRleHRTY29wZS0+Z2V0RWxlbWVudEJ5SWQoU3RyaW5nKGlkTGlzdC5jaGFyYWN0ZXJzKCkgKyBz
dGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpKTsKICAgICAgICAgaWYgKG5vZGUgJiYgcmVzdWx0
U2V0LmFkZChub2RlKS5zZWNvbmQpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG5vZGUpOwog
ICAgICAgICAKQEAgLTQzNiwxNSArNDM3LDE2IEBAIFZhbHVlIEZ1blN0cmluZzo6ZXZhbHVhdGUo
KSBjb25zdAogCiBWYWx1ZSBGdW5Db25jYXQ6OmV2YWx1YXRlKCkgY29uc3QKIHsKLSAgICBWZWN0
b3I8VUNoYXIsIDEwMjQ+IHJlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICBy
ZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDEwMjQpOwogCiAgICAgdW5zaWduZWQgY291bnQgPSBhcmdD
b3VudCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAg
ICAgIFN0cmluZyBzdHIoYXJnKGkpLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgoKSk7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoc3RyKTsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRh
KCksIHJlc3VsdC5zaXplKCkpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAog
VmFsdWUgRnVuU3RhcnRzV2l0aDo6ZXZhbHVhdGUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoVXRpbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoVXRpbC5jcHAJKHJldmlzaW9uIDk0NjMwKQorKysgU291cmNlL1dlYkNvcmUveG1sL1hQYXRo
VXRpbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZiBFTkFCTEUoWFBB
VEgpCiAKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgWFBhdGggewpA
QCAtNTEsMTcgKzUyLDE3IEBAIFN0cmluZyBzdHJpbmdWYWx1ZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgcmV0dXJuIG5vZGUtPm5vZGVWYWx1ZSgpOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgaWYgKGlzUm9vdERvbU5vZGUobm9kZSkgfHwgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2Rl
OjpFTEVNRU5UX05PREUpIHsKLSAgICAgICAgICAgICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsK
KyAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICAgICAgICAgICAgICBy
ZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDEwMjQpOwogCiAgICAgICAgICAgICAgICAgZm9yIChOb2Rl
KiBuID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShub2Rl
KSkgewogICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5vZGVWYWx1ZSA9IG4tPm5vZGVWYWx1ZSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChub2RlVmFsdWUuY2hhcmFj
dGVycygpLCBub2RlVmFsdWUubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChub2RlVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgICAgICAgICAgICB9
CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4
c2x0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvckxp
YnhzbHQuY3BwCShyZXZpc2lvbiA5NDYzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJv
Y2Vzc29yTGlieHNsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw5ICsxNjgsOSBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgc2V0WFNMVExvYWRDYWxsQmFjayh4CiAgICAgZ2xvYmFsQ2FjaGVkUmVz
b3VyY2VMb2FkZXIgPSBjYWNoZWRSZXNvdXJjZUxvYWRlcjsKIH0KIAotc3RhdGljIGludCB3cml0
ZVRvVmVjdG9yKHZvaWQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50IGxlbikKK3N0
YXRpYyBpbnQgd3JpdGVUb1N0cmluZ0J1aWxkZXIodm9pZCogY29udGV4dCwgY29uc3QgY2hhciog
YnVmZmVyLCBpbnQgbGVuKQogewotICAgIFZlY3RvcjxVQ2hhcj4mIHJlc3VsdE91dHB1dCA9ICpz
dGF0aWNfY2FzdDxWZWN0b3I8VUNoYXI+Kj4oY29udGV4dCk7CisgICAgU3RyaW5nQnVpbGRlciYg
cmVzdWx0T3V0cHV0ID0gKnN0YXRpY19jYXN0PFN0cmluZ0J1aWxkZXIqPihjb250ZXh0KTsKIAog
ICAgIGlmICghbGVuKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE5Nyw5ICsxOTcsOSBAQCBzdGF0
aWMgYm9vbCBzYXZlUmVzdWx0VG9TdHJpbmcoeG1sRG9jUHRyCiAgICAgaWYgKCFvdXRwdXRCdWYp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0VmVjdG9y
OwotICAgIG91dHB1dEJ1Zi0+Y29udGV4dCA9ICZyZXN1bHRWZWN0b3I7Ci0gICAgb3V0cHV0QnVm
LT53cml0ZWNhbGxiYWNrID0gd3JpdGVUb1ZlY3RvcjsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3Vs
dEJ1aWxkZXI7CisgICAgb3V0cHV0QnVmLT5jb250ZXh0ID0gJnJlc3VsdEJ1aWxkZXI7CisgICAg
b3V0cHV0QnVmLT53cml0ZWNhbGxiYWNrID0gd3JpdGVUb1N0cmluZ0J1aWxkZXI7CiAKICAgICBp
bnQgcmV0dmFsID0geHNsdFNhdmVSZXN1bHRUbyhvdXRwdXRCdWYsIHJlc3VsdERvYywgc2hlZXQp
OwogICAgIHhtbE91dHB1dEJ1ZmZlckNsb3NlKG91dHB1dEJ1Zik7CkBAIC0yMDcsMTAgKzIwNywx
MCBAQCBzdGF0aWMgYm9vbCBzYXZlUmVzdWx0VG9TdHJpbmcoeG1sRG9jUHRyCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIC8vIFdvcmthcm91bmQgZm9yIDxodHRwOi8vYnVnemlsbGEuZ25v
bWUub3JnL3Nob3dfYnVnLmNnaT9pZD00OTU2Njg+OiBsaWJ4c2x0IGFwcGVuZHMgYW4gZXh0cmEg
bGluZSBmZWVkIHRvIHRoZSByZXN1bHQuCi0gICAgaWYgKHJlc3VsdFZlY3Rvci5zaXplKCkgPiAw
ICYmIHJlc3VsdFZlY3RvcltyZXN1bHRWZWN0b3Iuc2l6ZSgpIC0gMV0gPT0gJ1xuJykKLSAgICAg
ICAgcmVzdWx0VmVjdG9yLnJlbW92ZUxhc3QoKTsKKyAgICBpZiAocmVzdWx0QnVpbGRlci5sZW5n
dGgoKSA+IDAgJiYgcmVzdWx0QnVpbGRlcltyZXN1bHRCdWlsZGVyLmxlbmd0aCgpIC0gMV0gPT0g
J1xuJykKKyAgICAgICAgcmVzdWx0QnVpbGRlci5yZXNpemUocmVzdWx0QnVpbGRlci5sZW5ndGgo
KSAtIDEpOwogCi0gICAgcmVzdWx0U3RyaW5nID0gU3RyaW5nOjphZG9wdChyZXN1bHRWZWN0b3Ip
OworICAgIHJlc3VsdFN0cmluZyA9IHJlc3VsdEJ1aWxkZXIudG9TdHJpbmcoKTsKIAogICAgIHJl
dHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9DaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUveG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmgJKHJl
dmlzaW9uIDk0NjMwKQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZl
cmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKICNpZm5kZWYgQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kc19oCiAjZGVm
aW5lIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHNfaAogCi0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiwxOSArMzYsMTkgQEAgaW5saW5lIGJvb2wgaXNIZXhE
aWdpdChVQ2hhciBjYykKICAgICByZXR1cm4gKGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHx8IChj
YyA+PSAnYScgJiYgY2MgPD0gJ2YnKSB8fCAoY2MgPj0gJ0EnICYmIGNjIDw9ICdGJyk7CiB9CiAK
LWlubGluZSB2b2lkIHVuY29uc3VtZUNoYXJhY3RlcnMoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2Us
IGNvbnN0IFZlY3RvcjxVQ2hhciwgMTA+JiBjb25zdW1lZENoYXJhY3RlcnMpCitpbmxpbmUgdm9p
ZCB1bmNvbnN1bWVDaGFyYWN0ZXJzKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJp
bmdCdWlsZGVyJiBjb25zdW1lZENoYXJhY3RlcnMpCiB7Ci0gICAgaWYgKGNvbnN1bWVkQ2hhcmFj
dGVycy5zaXplKCkgPT0gMSkKKyAgICBpZiAoY29uc3VtZWRDaGFyYWN0ZXJzLmxlbmd0aCgpID09
IDEpCiAgICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1swXSk7Ci0gICAgZWxz
ZSBpZiAoY29uc3VtZWRDaGFyYWN0ZXJzLnNpemUoKSA9PSAyKSB7CisgICAgZWxzZSBpZiAoY29u
c3VtZWRDaGFyYWN0ZXJzLmxlbmd0aCgpID09IDIpIHsKICAgICAgICAgc291cmNlLnB1c2goY29u
c3VtZWRDaGFyYWN0ZXJzWzBdKTsKICAgICAgICAgc291cmNlLnB1c2goY29uc3VtZWRDaGFyYWN0
ZXJzWzFdKTsKICAgICB9IGVsc2UKLSAgICAgICAgc291cmNlLnByZXBlbmQoU2VnbWVudGVkU3Ry
aW5nKFN0cmluZyhjb25zdW1lZENoYXJhY3RlcnMuZGF0YSgpLCBjb25zdW1lZENoYXJhY3RlcnMu
c2l6ZSgpKSkpOworICAgICAgICBzb3VyY2UucHJlcGVuZChTZWdtZW50ZWRTdHJpbmcoU3RyaW5n
KGNvbnN1bWVkQ2hhcmFjdGVycy5jaGFyYWN0ZXJzKCksIGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5n
dGgoKSkpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFBhcnNlckZ1bmN0aW9ucz4KLWJvb2wg
Y29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVmVjdG9y
PFVDaGFyLCAxNj4mIGRlY29kZWRDaGFyYWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMs
IFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQorYm9vbCBjb25zdW1lQ2hhcmFjdGVy
UmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVk
Q2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxs
b3dlZENoYXJhY3RlcikKIHsKICAgICBBU1NFUlQoIWFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVy
IHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICciJyB8fCBhZGRpdGlvbmFsQWxsb3dl
ZENoYXJhY3RlciA9PSAnXCcnIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICc+Jyk7
CiAgICAgQVNTRVJUKCFub3RFbm91Z2hDaGFyYWN0ZXJzKTsKQEAgLTY1LDcgKzY1LDcgQEAgYm9v
bCBjb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZAogICAgIH07CiAgICAgRW50aXR5
U3RhdGUgZW50aXR5U3RhdGUgPSBJbml0aWFsOwogICAgIFVDaGFyMzIgcmVzdWx0ID0gMDsKLSAg
ICBWZWN0b3I8VUNoYXIsIDEwPiBjb25zdW1lZENoYXJhY3RlcnM7CisgICAgU3RyaW5nQnVpbGRl
ciBjb25zdW1lZENoYXJhY3RlcnM7CiAgICAgCiAgICAgd2hpbGUgKCFzb3VyY2UuaXNFbXB0eSgp
KSB7CiAgICAgICAgIFVDaGFyIGNjID0gKnNvdXJjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDk0NjMwKQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0
ZXJSZWZlcmVuY2VQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KIAotICAgIGlubGluZSBzdGF0aWMg
Ym9vbCBjb252ZXJ0VG9VVEYxNihVQ2hhcjMyIHZhbHVlLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVj
b2RlZENoYXJhY3RlcikKKyAgICBpbmxpbmUgc3RhdGljIGJvb2wgY29udmVydFRvVVRGMTYoVUNo
YXIzMiB2YWx1ZSwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZENoYXJhY3RlcikKICAgICB7CiAgICAg
ICAgIGlmIChVX0lTX0JNUCh2YWx1ZSkpIHsKICAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gc3Rh
dGljX2Nhc3Q8VUNoYXI+KHZhbHVlKTsKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogCiAgICAg
aW5saW5lIHN0YXRpYyBib29sIGFjY2VwdE1hbGZvcm1lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAK
LSAgICBpbmxpbmUgc3RhdGljIGJvb2wgY29uc3VtZU5hbWVkRW50aXR5KFNlZ21lbnRlZFN0cmlu
ZyYsIFZlY3RvcjxVQ2hhciwgMTY+JiwgYm9vbCYsIFVDaGFyLCBVQ2hhciYpCisgICAgaW5saW5l
IHN0YXRpYyBib29sIGNvbnN1bWVOYW1lZEVudGl0eShTZWdtZW50ZWRTdHJpbmcmLCBTdHJpbmdC
dWlsZGVyJiwgYm9vbCYsIFVDaGFyLCBVQ2hhciYpCiAgICAgewogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzAsNyArNzAsNyBAQCBwdWJs
aWM6CiAKIH0KIAotYm9vbCBjb25zdW1lWE1MQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0
cmluZyYgc291cmNlLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYg
bm90RW5vdWdoQ2hhcmFjdGVycykKK2Jvb2wgY29uc3VtZVhNTENoYXJhY3RlclJlZmVyZW5jZShT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZENoYXJhY3Rlciwg
Ym9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycykKIHsKICAgICByZXR1cm4gY29uc3VtZUNoYXJhY3Rl
clJlZmVyZW5jZTxYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXI+KHNvdXJjZSwgZGVjb2RlZENo
YXJhY3Rlciwgbm90RW5vdWdoQ2hhcmFjdGVycywgMCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmgJ
KHJldmlzaW9uIDk0NjMwKQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0
ZXJSZWZlcmVuY2VQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1ib29sIGNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVu
Y2UoU2VnbWVudGVkU3RyaW5nJiwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRDaGFyYWN0ZXIs
IGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMpOworYm9vbCBjb25zdW1lWE1MQ2hhcmFjdGVyUmVm
ZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRDaGFyYWN0ZXIs
IGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDk0NjMwKQorKysgU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdURjsK
IApAQCAtMjUxLDExICsyNTIsMTAgQEAgYm9vbCBYTUxUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdt
ZW50ZWRTdAogICAgIFhNTF9CRUdJTl9TVEFURShDaGFyYWN0ZXJSZWZlcmVuY2VTdGFydFN0YXRl
KSB7CiAgICAgICAgIGlmIChjYyA9PSAnIycpIHsKICAgICAgICAgICAgIGJvb2wgbm90RW5vdWdo
Q2hhcmFjdGVycyA9IGZhbHNlOwotICAgICAgICAgICAgVmVjdG9yPFVDaGFyLCAxNj4gZGVjb2Rl
ZENoYXJhY3RlcjsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgZGVjb2RlZENoYXJhY3RlcjsK
ICAgICAgICAgICAgIGlmIChjb25zdW1lWE1MQ2hhcmFjdGVyUmVmZXJlbmNlKHNvdXJjZSwgZGVj
b2RlZENoYXJhY3Rlciwgbm90RW5vdWdoQ2hhcmFjdGVycykpIHsKLSAgICAgICAgICAgICAgICBW
ZWN0b3I8VUNoYXIsIDE2Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlY29kZWRDaGFyYWN0ZXIu
YmVnaW4oKTsKLSAgICAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBkZWNvZGVkQ2hhcmFjdGVy
LmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcigqaXRl
cik7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlY29kZWRDaGFy
YWN0ZXIubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVy
KGRlY29kZWRDaGFyYWN0ZXJbaV0pOwogICAgICAgICAgICAgICAgIFhNTF9TV0lUQ0hfVE8oRGF0
YVN0YXRlKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykKICAg
ICAgICAgICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKTsKQEAgLTQz
NywxMiArNDM3LDExIEBAIGJvb2wgWE1MVG9rZW5pemVyOjpuZXh0VG9rZW4oU2VnbWVudGVkU3QK
ICAgICBYTUxfQkVHSU5fU1RBVEUoQ2hhcmFjdGVyUmVmZXJlbmNlSW5BdHRyaWJ1dGVWYWx1ZVN0
YXRlKSB7CiAgICAgICAgIGlmIChjYyA9PSAnIycpIHsKICAgICAgICAgICAgIGJvb2wgbm90RW5v
dWdoQ2hhcmFjdGVycyA9IGZhbHNlOwotICAgICAgICAgICAgVmVjdG9yPFVDaGFyLCAxNj4gZGVj
b2RlZENoYXJhY3RlcjsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgZGVjb2RlZENoYXJhY3Rl
cjsKICAgICAgICAgICAgIHNvdXJjZS5wdXNoKGNjKTsKICAgICAgICAgICAgIGlmIChjb25zdW1l
WE1MQ2hhcmFjdGVyUmVmZXJlbmNlKHNvdXJjZSwgZGVjb2RlZENoYXJhY3Rlciwgbm90RW5vdWdo
Q2hhcmFjdGVycykpIHsKLSAgICAgICAgICAgICAgICBWZWN0b3I8VUNoYXIsIDE2Pjo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IGRlY29kZWRDaGFyYWN0ZXIuYmVnaW4oKTsKLSAgICAgICAgICAgICAg
ICBmb3IgKDsgaXRlciAhPSBkZWNvZGVkQ2hhcmFjdGVyLmVuZCgpOyArK2l0ZXIpCi0gICAgICAg
ICAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQXR0cmlidXRlVmFsdWUoKml0ZXIpOworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWNvZGVkQ2hhcmFjdGVyLmxl
bmd0aCgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQXR0cmli
dXRlVmFsdWUoZGVjb2RlZENoYXJhY3RlcltpXSk7CiAgICAgICAgICAgICAgICAgWE1MX0FEVkFO
Q0VfVE8oQXR0cmlidXRlVmFsdWVRdW90ZWRTdGF0ZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYg
KG5vdEVub3VnaENoYXJhY3RlcnMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJl
ZENoYXJhY3RlclRva2VuKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>